Alejandro Recarey
2012-Jun-25 10:17 UTC
[asterisk-users] FastAGI script and DIAL execution
Hi all, I am trying to control the whole call using a FastAGI script. To that effect I launch a FastAGI script (written with asterisk-java). Basically, I want to DIAL from within the FastAGI script. When the call ends I want to control the hangup (if executed at the remote end), and depending on the cause, dial again, play a message, or hang up. This is a pretty standard telephony scenario. I did it before by executing the AGI, setting variables, calling the DIAL command from the dialplan, and then executing a second AGI script for the cleanup logic. However, now that I am using FastAGI it seems like a better idea to keep the AGI script alive during the duration of the call. This gives me a lot of control and fexibility on reporting. However, as far as I can tell, once the called party hangs up, the CDR is generated and posted, _even though my script is still in execution_! As you can see from the sample below, the called party hangs up, and dialplan execution starts immediately at the h extension, even though my script is still running. In fact, I have quite a bit of cleanup to do, adding variables to the CDR's, and none of them are saved! I believe this is because the CDR is already finised. It's like if once you call the DIAL aplication, the dialplan forks off and your script is running in a different place. I do not understand it. I assumed when I called DIAL from within a script, that the script execution would suspend, but be resumed once the DIAL command returned, but this is not what is happening. Is there any way to get that behaviour? Regards, Alex "Entering customer extension" -- Executing [629999999 at customer:2] Verbose("SIP/139255423-0000004c", "5,"Dialed - 629999999"") in new stack > "Dialed - 629999999" -- Executing [629999999 at customer:3] Set("SIP/139255423-0000004c", "origincontext=customer") in new stack -- Executing [629999999 at customer:4] Goto("SIP/139255423-0000004c", "transform,629999999,1") in new stack -- Goto (transform,629999999,1) -- Executing [629999999 at transform:1] Goto("SIP/139255423-0000004c", "customer,0034629999999,transform") in new stack -- Goto (customer,0034629999999,5) -- Executing [0034629999999 at customer:5] Verbose("SIP/139255423-0000004c", "5,"New dialnum - 0034629999999"") in new stack > "New dialnum - 0034629999999" -- Executing [0034629999999 at customer:6] Set("SIP/139255423-0000004c", "CDR(server)=7") in new stack -- Executing [0034629999999 at customer:7] Set("SIP/139255423-0000004c", "CDR(srcip)=") in new stack -- Executing [0034629999999 at customer:8] AGI("SIP/139255423-0000004c", "agi://localhost/auth") in new stack AGI Tx >> agi_network: yes AGI Tx >> agi_network_script: auth <SIP/139255423-0000004c>AGI Tx >> agi_request: agi://localhost/auth <SIP/139255423-0000004c>AGI Tx >> agi_channel: SIP/139255423-0000004c <SIP/139255423-0000004c>AGI Tx >> agi_language: es <SIP/139255423-0000004c>AGI Tx >> agi_type: SIP <SIP/139255423-0000004c>AGI Tx >> agi_uniqueid: 1340616655.76 <SIP/139255423-0000004c>AGI Tx >> agi_version: 10.5.0 <SIP/139255423-0000004c>AGI Tx >> agi_callerid: 139255 <SIP/139255423-0000004c>AGI Tx >> agi_calleridname: unknown <SIP/139255423-0000004c>AGI Tx >> agi_callingpres: 0 <SIP/139255423-0000004c>AGI Tx >> agi_callingani2: 0 <SIP/139255423-0000004c>AGI Tx >> agi_callington: 0 <SIP/139255423-0000004c>AGI Tx >> agi_callingtns: 0 <SIP/139255423-0000004c>AGI Tx >> agi_dnid: 629999999 <SIP/139255423-0000004c>AGI Tx >> agi_rdnis: unknown <SIP/139255423-0000004c>AGI Tx >> agi_context: customer <SIP/139255423-0000004c>AGI Tx >> agi_extension: 0034629999999 <SIP/139255423-0000004c>AGI Tx >> agi_priority: 8 <SIP/139255423-0000004c>AGI Tx >> agi_enhanced: 0.0 <SIP/139255423-0000004c>AGI Tx >> agi_accountcode: 704741 <SIP/139255423-0000004c>AGI Tx >> agi_threadid: 1104279872 <SIP/139255423-0000004c>AGI Tx >> <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "CDR(src)" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (139255423) <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(accountcode)" "704741" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(dest_id)" "507" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(routeplan)" "11261" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(carrier)" "69" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 <SIP/139255423-0000004c>AGI Rx << EXEC "Dial" "SIP/100034629999999 at x.x.x.x" -- AGI Script Executing Application: (Dial) Options: (SIP/100034629999999 at x.x.x.x) == Using SIP RTP CoS mark 5 -- Called SIP/100034629999999 at 193.17.66.71 -- SIP/193.17.66.71-0000004d is making progress passing it to SIP/139255423-0000004c -- SIP/193.17.66.71-0000004d is ringing -- SIP/193.17.66.71-0000004d is making progress passing it to SIP/139255423-0000004c -- SIP/193.17.66.71-0000004d answered SIP/139255423-0000004c -- Executing [h at customer:1] Set("SIP/139255423-0000004c", "CDR(q931)=16") in new stack -- Executing [h at customer:2] Set("SIP/139255423-0000004c", "CDR(userfield)={"agi":"","a-leg-id":"2118d872-305e-4bb4-8c47-30e1514cb934","b-leg-id":"36b232e73ac326bd0407b1594627c589 at y.y.y.y:5060"}") in new stack <SIP/139255423-0000004c>AGI Tx >> 200 result=-1 <SIP/139255423-0000004c>AGI Tx >> HANGUP <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "HANGUPCAUSE" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (16) <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "Q16" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (0) <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "AJ_AGISTATUS" "SUCCESS" <SIP/139255423-0000004c>AGI Tx >> 200 result=1 -- <SIP/139255423-0000004c>AGI Script agi://localhost/auth completed, returning 4 <SIP/139255423-0000004c>AGI Tx >> HANGUP == Spawn extension (customer, 0034629999999, 8) exited non-zero on 'SIP/139255423-0000004c' -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20120625/a6f9d9ea/attachment.htm>
Alejandro, Try the 'g' option to Dial(): http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial - *g*: When the called party hangs up, continue to execute commands in the current context at the next priority On 25 June 2012 20:17, Alejandro Recarey <alexrecarey at gmail.com> wrote:> Hi all, > > I am trying to control the whole call using a FastAGI script. To that > effect I launch a FastAGI script (written with asterisk-java). > > Basically, I want to DIAL from within the FastAGI script. When the call > ends I want to control the hangup (if executed at the remote end), and > depending on the cause, dial again, play a message, or hang up. This is a > pretty standard telephony scenario. I did it before by executing the AGI, > setting variables, calling the DIAL command from the dialplan, and then > executing a second AGI script for the cleanup logic. However, now that I am > using FastAGI it seems like a better idea to keep the AGI script alive > during the duration of the call. This gives me a lot of control and > fexibility on reporting. > > However, as far as I can tell, once the called party hangs up, the CDR is > generated and posted, _even though my script is still in execution_! As you > can see from the sample below, the called party hangs up, and dialplan > execution starts immediately at the h extension, even though my script is > still running. In fact, I have quite a bit of cleanup to do, adding > variables to the CDR's, and none of them are saved! I believe this is > because the CDR is already finised. > > It's like if once you call the DIAL aplication, the dialplan forks off and > your script is running in a different place. I do not understand it. I > assumed when I called DIAL from within a script, that the script execution > would suspend, but be resumed once the DIAL command returned, but this is > not what is happening. > > Is there any way to get that behaviour? > > Regards, > > Alex > > > > "Entering customer extension" > -- Executing [629999999 at customer:2] Verbose("SIP/139255423-0000004c", > "5,"Dialed - 629999999"") in new stack > > "Dialed - 629999999" > -- Executing [629999999 at customer:3] Set("SIP/139255423-0000004c", > "origincontext=customer") in new stack > -- Executing [629999999 at customer:4] Goto("SIP/139255423-0000004c", > "transform,629999999,1") in new stack > -- Goto (transform,629999999,1) > -- Executing [629999999 at transform:1] Goto("SIP/139255423-0000004c", > "customer,0034629999999,transform") in new stack > -- Goto (customer,0034629999999,5) > -- Executing [0034629999999 at customer:5] > Verbose("SIP/139255423-0000004c", "5,"New dialnum - 0034629999999"") in new > stack > > "New dialnum - 0034629999999" > -- Executing [0034629999999 at customer:6] Set("SIP/139255423-0000004c", > "CDR(server)=7") in new stack > -- Executing [0034629999999 at customer:7] Set("SIP/139255423-0000004c", > "CDR(srcip)=") in new stack > -- Executing [0034629999999 at customer:8] AGI("SIP/139255423-0000004c", > "agi://localhost/auth") in new stack > AGI Tx >> agi_network: yes > AGI Tx >> agi_network_script: auth > <SIP/139255423-0000004c>AGI Tx >> agi_request: agi://localhost/auth > <SIP/139255423-0000004c>AGI Tx >> agi_channel: SIP/139255423-0000004c > <SIP/139255423-0000004c>AGI Tx >> agi_language: es > <SIP/139255423-0000004c>AGI Tx >> agi_type: SIP > <SIP/139255423-0000004c>AGI Tx >> agi_uniqueid: 1340616655.76 > <SIP/139255423-0000004c>AGI Tx >> agi_version: 10.5.0 > <SIP/139255423-0000004c>AGI Tx >> agi_callerid: 139255 > <SIP/139255423-0000004c>AGI Tx >> agi_calleridname: unknown > <SIP/139255423-0000004c>AGI Tx >> agi_callingpres: 0 > <SIP/139255423-0000004c>AGI Tx >> agi_callingani2: 0 > <SIP/139255423-0000004c>AGI Tx >> agi_callington: 0 > <SIP/139255423-0000004c>AGI Tx >> agi_callingtns: 0 > <SIP/139255423-0000004c>AGI Tx >> agi_dnid: 629999999 > <SIP/139255423-0000004c>AGI Tx >> agi_rdnis: unknown > <SIP/139255423-0000004c>AGI Tx >> agi_context: customer > <SIP/139255423-0000004c>AGI Tx >> agi_extension: 0034629999999 > <SIP/139255423-0000004c>AGI Tx >> agi_priority: 8 > <SIP/139255423-0000004c>AGI Tx >> agi_enhanced: 0.0 > <SIP/139255423-0000004c>AGI Tx >> agi_accountcode: 704741 > <SIP/139255423-0000004c>AGI Tx >> agi_threadid: 1104279872 > <SIP/139255423-0000004c>AGI Tx >> > <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "CDR(src)" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (139255423) > <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(accountcode)" "704741" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 > <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(dest_id)" "507" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 > <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(routeplan)" "11261" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 > <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "CDR(carrier)" "69" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 > <SIP/139255423-0000004c>AGI Rx << EXEC "Dial" "SIP/100034629999999 at x.x.x.x > " > -- AGI Script Executing Application: (Dial) Options: > (SIP/100034629999999 at x.x.x.x) > == Using SIP RTP CoS mark 5 > -- Called SIP/100034629999999 at 193.17.66.71 > -- SIP/193.17.66.71-0000004d is making progress passing it to > SIP/139255423-0000004c > -- SIP/193.17.66.71-0000004d is ringing > -- SIP/193.17.66.71-0000004d is making progress passing it to > SIP/139255423-0000004c > -- SIP/193.17.66.71-0000004d answered SIP/139255423-0000004c > -- Executing [h at customer:1] Set("SIP/139255423-0000004c", > "CDR(q931)=16") in new stack > -- Executing [h at customer:2] Set("SIP/139255423-0000004c", > "CDR(userfield)={"agi":"","a-leg-id":"2118d872-305e-4bb4-8c47-30e1514cb934","b-leg-id":"36b232e73ac326bd0407b1594627c589 at y.y.y.y:5060"}") > in new stack > <SIP/139255423-0000004c>AGI Tx >> 200 result=-1 > <SIP/139255423-0000004c>AGI Tx >> HANGUP > <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "HANGUPCAUSE" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (16) > <SIP/139255423-0000004c>AGI Rx << GET VARIABLE "Q16" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 (0) > <SIP/139255423-0000004c>AGI Rx << SET VARIABLE "AJ_AGISTATUS" "SUCCESS" > <SIP/139255423-0000004c>AGI Tx >> 200 result=1 > -- <SIP/139255423-0000004c>AGI Script agi://localhost/auth completed, > returning 4 > <SIP/139255423-0000004c>AGI Tx >> HANGUP > == Spawn extension (customer, 0034629999999, 8) exited non-zero on > 'SIP/139255423-0000004c' > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > New to Asterisk? Join us for a live introductory webinar every Thurs: > http://www.asterisk.org/hello > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users >-- David Cunningham, Voisonics http://voisonics.com/ US toll-free: +1 888 842 2720 UK: +44 (0) 20 3298 1642 Australia: +61 (0) 2 8063 9019 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20120626/a9dc416a/attachment.htm>