On Fri, 27 Jan 2017, Michele Pinassi wrote:
i'm using Asterisk as a media box for a VoIP network based on OpenSIPS.
When an user phone is busy, call was forwarded to an asterisk ext:
; ===========================================
; Voicemail on NOT AVAILABLE
; ===========================================
exten => _VMR_.,1,Noop("from-voip: ${CALLERID(num)} ${EXTEN}")
exten => _VMR_.,n,Set(DID=${EXTEN:4})
exten => _VMR_.,n,Answer()
exten => _VMR_.,n,Wait(1)
exten => _VMR_.,n,GotoIf(${VM_INFO(${DID},exists)}?avail:unavail)
exten => _VMR_.,n(avail),Voicemail(${DID},u)
exten => _VMR_.,n,Hangup()
exten => _VMR_.,n(unavail),Playback(vm-theperson)
exten => _VMR_.,n,SayDigits(${DID});
exten => _VMR_.,n,Playback(vm-isunavail)
exten => _VMR_.,n,Read(digit,vm-tocallback,1,,1,5)
exten => _VMR_.,n,Gotoif($["${digit}" = "2"]?:skip,1,5)
exten => _VMR_.,n,Noop("Add callback for ${DID} from ${CALLERID(num)}")
exten => _VMR_.,n,AGI(callback,${DID},${CALLERID(num)})
exten => _VMR_.,n,Playback(goodbye)
exten => _VMR_.(skip),n,Hangup()
when a vocal message asks to press "2" to add a callback when called
users return free, using an AGI script that create a .call file:
#!/usr/bin/php -q
<?php
ob_implicit_flush(true);
set_time_limit(0);
$called = $argv[1];
$caller = $argv[2];
$cf =
fopen("/var/spool/asterisk/outgoing/cb".$called."-".$caller.".call","w+");
fputs($cf,"Channel: LOCAL/CB_$called\n");
fputs($cf,"Context: default\n");
fputs($cf,"Extension: $caller\n");
fputs($cf,"CallerID: CallBack $caller <$caller>\n");
fputs($cf,"MaxRetries: 100\n");
fputs($cf,"RetryTime: 30\n");
fputs($cf,"Archive: Yes\n");
fputs($cf,"SetVar: CALLER=$caller\n");
fputs($cf,"SetVar: CALLED=$called\n");
fclose($cf);
?>
0) This is not an AGI script. It does not read the AGI environment from
STDIN and does not make any AGI requests. You could execute it using the
system() application and it should execute the same -- maybe a couple of
nanoseconds faster because Asterisk does not need to create the AGI
environment or fiddle with file descriptors.
1) You should not create the call file in the spool directory. Doing so
introduces a 'race condition' where Asterisk could start to read the file
before your script is finished writing it. You should create the call file
in another directory on the same file system and 'mv' it to the spool
directory. /tmp/ or /var/tmp/ are usually suitable. ('mv' is 'atomic' --
it happens all at once.)
2) Visit http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out to
learn more about the call file format.
Think of call files in terms of legs. The first leg uses the 'channel'
argument to originate the call. If that call is answered, 'leg 2'
execution continues either in the dialplan at 'context:extension:priority'
or the 'application:data' is executed.
Visit http://www.voip-info.org/wiki/view/Asterisk+local+channels to learn
more about local channels. I think the syntax section will be most
helpful.
I need that Asterisk call CALLED user and, when answered, start calling
CALLER.
Yes, but the concept of 'answered' is vague if you are using analog
channels.
Visit http://www.voip-info.org and search for 'asterisk call back' for
examples of how others have approached this problem.
--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards [email protected] Voice: +1-760-468-3867 PST
https://www.linkedin.com/in/steve-edwards-4244281
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
Check out the new Asterisk community forum at: https://community.asterisk.org/
New to Asterisk? Start here:
https://wiki.asterisk.org/wiki/display/AST/Getting+Started
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users