[asterisk-users] Re: FastAGI hangs up channel if server is not available

JR Richardson jmr.richardson at gmail.com
Thu May 17 15:11:26 MST 2007


> Running 1.2.14
>
> When I call a FastAGI script such as this script for an incoming call:
>
> [calldirect]
> exten=>s,1,Answer()
> exten=>s,2,AGI(agi://192.168.1.175/calldirect?check&${CALLERID(num)})
> exten=>s,3,Goto(check_time,s,1)
>
> and the FastAGI server is not running (Asterisk gets "connection
> refused" TCP error), Asterisk just terminates the call like so:
>
> May 17 12:58:00 WARNING[10154]: res_agi.c:210 launch_netscript: Connect
> to 'agi://192.168.1.175/calldirect?check&NNNNNNNNNN' failed: Connection
> refused
>   == Spawn extension (remove_caller, s, 2) exited non-zero on
> 'SIP/datatrak-0978b670'
>
> The text of the relevant wiki article
> (http://www.voip-info.org/wiki-Asterisk+FastAGI) infers that execution
> should roll through to the next executable line in the context where it
> was called in the case of an error in executing the FastAGI:
>
> "Asterisk 1.2
> Under Asterisk 1.2, if a request to a FastAGI service failed for any
> reason, there was no way to determine this from the dialplan. The
> recommended action is to set a channel variable before calling the
> FastAGI, setting that variable to a known value within the FastAGI, and
> then checking that variable once the AGI has returned..."

I had a similar issue, we resolved it by calling a local agi script on
the local pbx that in turn calls the fast agi on the remote host.  The
local agi was written in perl, which, if the remote agi does not
respond, then the call is given back to the dialplan to the next
priority.

So for your example, do something like this:

 [calldirect]
 exten=>s,1,Answer()
 exten=>s,2,AGI(test.agi&${CALLERID(num)})
 exten=>s,3,Goto(check_time,s,1)


Perl AGI File 'test.agi' in the local asterisk agi directory:

---------------------------------------start of
file-----------------------------------------------------
#!/usr/bin/perl

#############################################################
#####################    Modules to Use       ###############
#############################################################

use Asterisk::AGI;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
# Set variables according to supplied arquments
$number = $ARGV[0];
$AGI->exec("agi","agi://192.168.1.175/calldirect?check&number=$number");

----------------------------------------end of
file-------------------------------------------


Also you need the asterisk perl agi modules at http://asterisk.gnuinter.net/

Good luck.

JR
-- 
JR Richardson
Engineering for the Masses


More information about the asterisk-users mailing list