Asterisk PHP AGI 学习笔记

使用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会因为换行符的问题出错

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值