使用phpagi程序可以非常容易的实现IVR菜单,外部数据库访问,呼叫控 制。等功能。
首先准备环境,测试帐号 两个sip帐号和一个iax2帐号
sip.conf
[1001] username=1001 type=friend accountcode=1001 secret=1001 qualify=no port=5060 nat=yes host=dynamic dtmfmode=rfc2833 context=abc canreinvite=no disallow=all allow=g729 callerid=1001 <1001> [1002] username=1002 type=friend accountcode=1002 secret=1002 qualify=no port=5060 nat=yes host=dynamic dtmfmode=rfc2833 context=abc canreinvite=no disallow=all allow=g729 callerid=1002 <1002>iax2.conf [1004] username=1004 accountcode=1004 type=friend secret=1004 qualify=no port=4569 notransfer=yes host=dynamic context=abc disallow=all allow=g729
设置拨号方案:extensions.conf
[abc] exten => _X.,1,AGI(myphpagi.php)
下载准备phpagi 函数文件:
cd /var/lib/asterisk/agi-bin/
wget http://nchc.dl.sourceforge.net/sourceforge/phpagi/phpagi-2.14.tgz
tar zxvf phpagi-2.14.tgz
第一个程序:
touch myphpagi.php
chmod +x myphpagi.php
vi myphpagi.php 添加
#!/usr/bin/php -q <?php include (“phpagi.php“);// 包含文件 include (“phpagi-asmanager.php“); $agi = new AGI;//引用PHPAGI类函数 $agi->answer();//接听呼叫 $agi->verbose(‘HELLO WORLD!!!!!!‘);//显示信息只CIL控制台 $agi-> stream_file(‘welcome‘, ‘#‘);//播放语 音 $agi-> say_digits(‘1001‘,‘1234567890*#’);//播放数字1001,可按任意数字终端播放 $agi->hangup();//挂断呼叫 ?>
调试:登录asterisk CIL控制台
asterisk -vvvr
打开agi debug
->agi debug
用登录分机,拨打任意号码,因该可以听到语音和拨报数字1001,控制台显示如下信息。说明phpagi执行成功
– Executing AGI(“IAX2/1004-2″, “myphpagi.php”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/myphpagi.php
myphpagi.php|20|abc|123: HELLO WORLD!!!!!!
– Playing ‘digits/1′ (language ‘en’)
– Playing ‘digits/0′ (language ‘en’)
– Playing ‘digits/0′ (language ‘en’)
– Playing ‘digits/1′ (language ‘en’)
– AGI Script myphpagi.php completed, returning 0
== Auto fallthrough, channel ‘IAX2/1004-2′ status is ‘UNKNOWN’
– Hungup ‘IAX2/1004-2′
一个简单的IVR菜单
#!/usr/bin/php -q
<?php
include (“phpagi.php”);
$agi = new AGI;//引用PHPAGI函数
$agi-> answer();//接听当前呼叫
$prompt_enter_dest = “welcome”;//提示音
$res_dtmf = $agi->get_data($prompt_enter_dest, 10000, 1);//获取dtmf信号,最多1个数字,超时1000ms
$res_num = $res_dtmf ["result"];//得到按键信息
$agi-> say_digits($res_num);//播放得到数字
if($res_num == “1″)
{
$agi->verbose(‘your enter 1′);
}
elseif($res_num == “2″)
{
$agi->verbose(‘your enter 2′);
}
else
{
$agi-> stream_file(‘vm-gooby’, ‘#’);
}
$agi-> hangup();
?>
拨号。。agi播报语音,输入数字,如果为1,控制台显示’your enter 1′
如果为2,控制台显示’your enter 2′ ,如果是其他,agi 会播报vm-gooby语音,然后挂断,
实现拨号和计费(程序可简单实现出局,挂断后获得真实通话时间)
#!/usr/bin/php -q
<?php
include (“phpagi.php”);
include (“phpagi-asmanager.php”);
$agi = new AGI;//引用PHPAGI函数
$agi-> answer();
$tech = “IAX2/”;//设置中继类型(已一个IAX2中继为例)
$out_trunk = “IAX_Trunk_1″;(此为asteirsk中已添加的出局中继)
$out = $tech . $out_trunk;
$dnid = $agi->request['agi_extension'];//获取被叫号码
$agi-> exec(“DIAL $out/$dnid”);//执行拨号
$answeredtime = $agi->get_variable(“ANSWEREDTIME”);//获取通话时长已秒为单位
$agi-> hangup();
如果您的出局中继无误,应该可以出局
呼叫控制函数和管理函数 ,可直接查看phpagi.php
备注,如果你是在windows 下编辑的AGI,请使用 UltraEdit 文件 --> 转换--> DOS 转 UNIX
否则AGI会因为换行符的问题出错
发表评论