Get return value of the Dial application in Asterisk - asterisk

I call to a voice browser with the Dial application on SIP channel in Asterisk. The VXI returns a number. How can I get that number as a return value of the Dial application? ${DIALSTATUS} doesn't get the return value. It has last result of Dial application like ANSWER,NOANSWER,... .
exten => _.,n,Set(VXMLFILE=/var/spool/asterisk/tmp/${EXTEN}.vxml)
exten => _.,n,SipAddHeader(voicexml: ${VXMLFILE})
exten => _.,n,Dial(sip/[some parameters])

Voicexml processing is not part of asterisk, it done by your UA.
So you have consult our UA for result.
Can suggest it allow save log on remote syslog server, so you can parse result from log.

Asterisk cannot directly parse the vxml or xml files.
Create an Asterisk AGI script and parse the vxml file and assign the value to the variable "VXMLFILE".
Go through this URL to understand how Asterisk AGI works.
voip-info.org

Related

After recording with mixmonitor, run the AGI script and POST the wav to another server via CURL

I want to start an AGI script after transferring a phone call with Asterisk and recording it with mixmonitor, and POST the wav to another server via CURL, but the extensions.conf I created does not work.
exten => 0123456,1,MixMonitor(${UNIQUEID}.wav49)
exten => 0123456,n,Dial(SIP/xxxxxxxx#0123456,60)
exten => h,1,AGI(curl_post.php)
I can start curl_post.php with AGI, but the wav file is not ready yet, and I cannot do CURLPOST. How can I wait for the wav file to be created so I can CURLPOST to another server? Thank you for your help.
MixMonitor has internal option for that
MixMonitor(filename.extension,[options,[command]])
...
command - Will be executed when the recording is over.
Any strings matching ^{X} will be unescaped to X.
All variables will be evaluated at the time MixMonitor is called.
https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_MixMonitor
For example, in FreePBX it is like this:
exten => 0123456,1,MixMonitor(${UNIQUEID}.wav49,,/bin/emailrecording.sh ^{CALLFILENAME})
https://community.freepbx.org/t/solved-how-to-email-call-recordings-post-call-recording-script/26747/18

Asterisk ringback tone recording

I made an outbound-call service application using Asterisk AMI interface.
Following is how my application works.
I generate an Originate request to internal channel using TCP/IP socket.
my dialplan accepts the request and run dial command. extension.conf file is
[from-internal]
exten => _X.,1,NoOP()
same => n,MixMonitor(${DialMonitorFile}.wav)
same => n,Dial(PJSIP/${EXTEN}#TRUNK_100-1234-5678,30)
What I want to do is record whole call process (from ringback tone sound until user hangup).
But, when dial started, only 44 byte size file is generated (maybe wav file header?) before user accepts the call. And, file increased after user accepts call.
Can someone help me how can I record ringback tone sound as well ?
Regards,
Brian
You should do Answer before MixMonitor if you want that
Please note, CDRs will be affected

Execute dialplan context from command line

I'm trying to execute an extension from the command line (via asterisk -rx "command") on a context that makes a AGI based query to determine which extension needs to be dialed (these extensions are updated on the DB).
It's something like this:
[autodialer]
exten => 2,1,Answer()
exten => 2,n,AGI(database_query.php); Makes a database query and generates vars
exten => 2,n,Set(CALLERID(name)=${db_customer_name}); Sets callerid from DB data
exten => 2,n,Dial(SIP/${db_customer_extension}); Also, extensions are stored on DB
exten => 2,n,Playback(custom/important_message)
exten => 2,n,SayDigits(${important_numbers}); The message, stored on DB too.
exten => h,1,Hangup()
Here, I need that context executed from command line, without having to dial it from any extension (it is supposed to be executed with a crontab every X time).
I tried with originate command, but I think I misunderstood the command syntax and didn't work.
I think that it should be something like: asterisk -rx "channel originate 2#autodialer" and then Asterisk executes that context and we're all happy with our important numbers.
I know that's not the right syntax, just trying to explain how I imagine it could work.
Thanks for your help.
There are no way do originate only one leg. You have supply second argument(other channel dest)
if you not need other channel, create context like this
[wait]
exten =>s,1,Wait(10000)
and use
asterisk -rx "channel originate 2#autodialer s#wait"
Read this article:
http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out
NOTE: it is not recommended do diallout apps for people with less then 5 years dedicated asterisk experience. If you want one, use vicidial.org or other dialler.

Asterisk call transfer on DAHDI channells

All channels on Asterisk configured as DAHDI channels.After customer make payment I want to transfer the customer to the representative who interact customer before.
I try to make it by Dial() command. This is the dialplan
exten => s,1,Set(TRFNUM=${CALLERID(num)})
exten => s,2,Set(TRFNAME=${CALLERID(name)})
exten => s,3,AGI(agi://192.168.7.20/customivr)
exten => s,4,Dial(DAHDI/1/${TRFNUM}&DAHDI/2/${TRFNUM}&DAHDI/3/${TRFNUM}&DAHDI/4/${TRFNUM}&DAHDI/5/${TRFNUM}&DAHDI/6/${TRFNUM}&DAHDI/7/${TRFNUM}&DAHDI/8/${TRFNUM},30)
exten => s,5,Hangup
For example: Call comes to DAHDI/1 after the payment DAHDI/1 dial all channels one them Answer the others Hangup. DAHDI/1 bridge call by with DAHDI/2. However, although Customer and representative close phones, Channels do not Hangup. They stay Busy.
Where do i make mistake. I should hangup call channels or find another way to transfer.
It seems to be configured correctly,
I think your AGI script hangup the call when he finishes his work,
It can happen if you have $agi>hangup in the end,
or if you make any outputs in the scripts (echo, print_r, etc...),
even empty spaces output can cause this behavior,
another thing you can try is make the Dial command from the agi itself using:
agi->exec("Dial","options");

record calls in asterisk withing dial() application

I am trying to call 5 sip phones simultaneously and also i want to record call when it is connected to any of the sip phone.
my dialplan is :
exten => s,1,Dial(SIP/user1&SIP/user2&SIP/user3&SIP/user4&SIP/user5,55,options)
I m able to receive call but I tried many options and I am not able to record call .
I need to record call like callerid-reciverid-date.wav
You can use MixMonitor to record calls
exten=> s,1,Set(Date=${STRFTIME(,EST4EDT,%Y-%m-%d_%H%M%S)})
exten=> s,n,MixMonitor(${CALLERID(NUM)}-${EXTEN}_${Date}.WAV,W(1));
exten=> s,n,Dial(SIP/user1&SIP/user2&SIP/user3&SIP/user4&SIP/user5,55,options)
your recorded files usually are in /var/spool/asterisk/monitor

Resources