Asterisk phpagi开发入门
不知不觉过了一个多月了哈,由于呼叫中心的项目进度比较缓慢,俺也就不急了,所以边做边玩,这一版俺讲讲 AGI 处理等待中的来电,当然这一个多月俺也把那个test.php 文件也做了一个比较大的改动。具体请看下文。本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。。
首先拨号规则基本没有动,前面几版都有说明,我就不再重复了
先看看这个 test.php 脚本吧
#!/usr/bin/php– q
//说明上面这个是 php 脚步的写法, /usr/bin/php是你的 php 安装目录 (这段话是我写的说明,请勿放在 test.php 里iapp免费源码分享网站
answer(;
//$agi->verbose($number;
//表示可以接通(上面红注解部分
if($res[0]==2{
$agi->exec_setlanguage('cn';
$agi->stream_file('welcome','#';
//表示是同时振铃(对于多个分机的情况
if($res[1]==1{
$agi->exec_dials($res[2];
}
//普通振铃(一个分机
else{
$agi->say_phonetic($res[2],'1234567890*#';
$agi->stream_file('operator','#';
$agi->exec_dial('SIP',$res[2];
}
}
//表示进入等待
else if($res[0]==1{
$agi->exec_goto('from-mytest|w|1';//进入 IVR ,提示等待
}
//进入另一个 IVR
else{
$agi->exec_goto('from-mytest|r|1';//进入 IVR ,提示挂机或者返回上一级
}?>
好,呼叫响铃咱们就不说了,我们说说进入等待吧
我现在的实现还是比较简单的,在 MV 中间件的接口中我把需要进入等待的来电先扔进 memcached 中,让为防止 memcached 挂了,最好还是也先放入数据库中
这里面还要考虑进入等待来电的一个排序,还有同时将来电的号码、被叫的分组、以及来电号码的通道,这些可以在 mv 中间件的接口处理好
这样我们在 MV 中间件端又新加了一个 AGI ,我先简单介绍一下这个 AGI 的功能吧。这个 AGI 专门处理等待中的来电,每隔几秒就去查一下 memcaced 或者数据库中有无等待的来电,如果有,再去查当前有无分机,当然也会去判断某个分机是否开启了呼叫保持,并且呼叫保持数是否足够等等,反正也要用到前面所说的递归来来查出最终的第一个满足条件的分机。。 (根据分机空闲或者分机来电保持数足够,然后根据分机的优先级,来确定出最终的一个分机,然后将待的来电重定向到这个分机。当然这些规则都是可以配置的。。。。
整个代码我就不放出来了(同样如果需要的童鞋可以访问我的 baid 空间 , 此用户被关机 ,给我留言。就说一下如何重定向吧。。 AMI 的指令如下
$request = "Action: Redirect\r\n".
"Channel: ".$channel . "\r\n".
"Exten: ".$result."\r\n".
"Context: from-mytest-transfer\r\n".
"Priority: 1\r\n\r\n";
$tmcc->createAction($request;
说明:
$channel 就是来电号码的通道。我上面说了。需要保存这个通道
$result 就是最终被分配的分机
from-mytest-transfer
这个就是重定向需要依赖的一个拨号规则,你可以使用原来系统中的,
也可以自己写一个
$tmcc就是处理 socket 向 asterisk 发生 ami 指令的类
把 $request这样一个 ami 命令字符串发送给 asterisk
然后奇迹就发生了。。
然后接通成功了。再程序里把 memcached 中或者数据库对应的来电信息清除掉
不知道童鞋们有没有想过一个问题。。我是把来电信息存入 memecahed 或者数据库
那么如果来电主动挂掉了。那么如何判断来电已经不存在了呢(挂掉了
很简单。。在开始为来电分配分机前。咱们先查一下这个来电是否已经挂掉
$request = "Action: GetVar\r\n".
"Channel: ".$channel . "\r\n".
"Variable: extension\r\n\r\n";
$caller_chanel_use= $tmcc->createAction($request;
这样通过发送一个 ami 指令可以判断出该来电的通道是否存在。如果存在就继续下面的查询分机
如果不存在就清除当前来电,开始下一个来电。。
好了。。下面一版我就要讲讲对于分机的呼叫超时转移的实现啦。。敬请期待。。呵呵

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。