[Freeswitch-users] CHANNEL_EXECUTE_COMPLETE - variable_current_application and Application

Markus Bönke mbodbg at gmx.net
Wed Aug 30 08:05:18 UTC 2017


Hello,

I want to clarify the signaling of CHANNEL_EXECUTE_COMPLETE events via the ESL socket. Especially on transfers / blind transfers I’m a bit confused how CHANNEL_EXECUTE_COMPLETE  are sent and how the variables are set. 

The call scenario is the following:

* A call control is sent to a ESL application via socket application.
* The call is bridged to a SIP user.
* The SIP user initiates a blind transfer to another phone number

When the bind transfer is initiated, I get a CHANNEL_EXECUTE_COMPLETE event where the channel variables are set as follows:

variable_current_application_data: sounds/moh.wav
variable_current_application: playback
variable_current_application_response: PLAYBACK%20ERROR

Application: bridge
Application-Data: ...
Application-Response: PLAYBACK%20ERROR
Application-UUID: 1420bfcd-63cd-4445-afa8-6e6c17c07d69

The Application-UUID  "1420bfcd-63cd-4445-afa8-6e6c17c07d69 "belongs to the „bridge" command of the call send through ESL. But the Application-Response is set to PLAYBACK%20ERROR“, however the application response belongs to a playback command which was implicitly triggered when the call is put on hold. It seems on a blind transfer the call is first put on hold for a second and then bridged again. As the MOH is interrupted, the Application-Response is set to PLAYBACK%20ERROR.

I see the same variables also in the  CHANNEL_EXECUTE_COMPLETE belonging to the „socket“ which I get in the end of the call.

variable_current_application_data: sounds/tevox-standard-moh-2.wav
variable_current_application: playback
variable_current_application_response: PLAYBACK%20ERROR
Application: socket
Application-Data: 192.168.154.209%3A8029%20async%20full
Application-Response: PLAYBACK%20ERROR
Application-UUID: 3a923054-89a5-11e7-a87d-e97d1c60b3f1

To be able to implement the processing of CHANNEL_EXECUTE_COMPLETE properly for all call scenarios, I need to understand the signaling in depth. Here in conclusion what I can see in the ESL trace: 

* I can get several CHANNEL_EXECUTE_COMPLETE events for an application that is executed, not just only one.
* An application can trigger/execute other applications (Like playback in scope of executing a bridge command and blind transfer).
* I also receive a CHANNEL_EXECUTE_COMPLETE event for those „implicit" executed applications.
* In addition, I get a CHANNEL_EXECUTE_COMPLETE with the Application-UUID of the initial application. The channel variable "Application-Response" contains the last response that was generated in scope of the application that was executed belonging to the Application-UUID. If an other application was executed in scope of this application, the variables current_application, current_application_data and current_application_response are set. In this case the variable  Application-Response = variable_current_application_response.

I’ve tested this with older and the latest freeswitch version, the behavior seems to be by design.

Questions:

Why do I get a CHANNEL_EXECUTE_COMPLETE in scope of the bridge application at all (Or is this a bug)?
Why is the Application-Response set to  PLAYBACK%20ERROR (the current / last executed application)?
Why is there no variable_current_application_uuid?


Any comments are welcome

Markus





More information about the FreeSWITCH-users mailing list