asterisk_phpagi简单开发第四版
更新时间:2024-05-16 10:15:01 阅读量: 综合文库 文档下载
Asterisk phpagi开发入门
不知不觉过了一个多月了哈,由于呼叫中心的项目进度比较缓慢,俺也就不急了,所以边做边玩,这一版俺讲讲AGI处理等待中的来电,当然这一个多月俺也把那个test.php文件也做了一个比较大的改动。具体请看下文。本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。。
首先拨号规则基本没有动,前面几版都有说明,我就不再重复了 先看看这个test.php脚本吧 #!/usr/bin/php–q
//说明上面这个是php脚步的写法,/usr/bin/php是你的php安装目录(这段话是我写的说明,请勿放在test.php里)
set_time_limit(60);
ob_implicit_flush(false);
include(\引用phpagi接口
$num = $argv[1]; //这个就是带过来的通道变量${EXTEN}的值,获取来电者按了哪一个键或者拨了哪个分机
$flag = $argv[2];//表示是分组还是直接拨分机号 $caller = $argv[3]; //来电号码
$number = $num;//默认认为来电者直接拨分机号 $group = 0;//默认分组是0,表示直接拨分机号的 //表示是按了一个键,表示分组 if($flag){
$group = $num; //分组号 $number =0;
}
$url=\.\r;
$string = file_get_contents($url);//这个字符串是MV中间件返回的 $res = explode('|',$string);
/*说明,我改动了这一部分
$res[0]:规则状位(0:挂机或返回上一级、1:等待、2:可以接通)
$res[1]:振铃状态(0:普通方式、1:同时振铃)
$res[2]:可以dial的分机(如果$res[0]为2并且$res[1]为0,这里就是一个分机号;如果$res[0]为2并且$res[1]为1,这里就是多个分机号(SIP/8260&SIP/8263....),表示同时振铃 ) */
/*调用远程接口去访问数据库,然后在接口里进行了复杂(嘻嘻)的运算,因为要考虑每个分机可能设置了呼叫转移啊,并且必须要满足一定的条件才可以触发呼叫转移,还有轮询查询每一个分机是否开启了呼叫保持,反正就是好几个递归,源码比较复杂,搞的我快精神崩溃了,呵呵,最终还是写出来了。源码比较多,这边我就不放出来了,如果有需要的童鞋可以访问我的baidu空间,此用户被关机,给我留言 */ $agi=new AGI; $agi->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 = \.
\.$channel.\.
\.$result.\.
说明:
\;
\.
$tmcc->createAction($request);
$channel 就是来电号码的通道。我上面说了。需要保存这个通道 $result 就是最终被分配的分机 from-mytest-transfer
这个就是重定向需要依赖的一个拨号规则,你可以使用原来系统中的, 也可以自己写一个
$tmcc就是处理socket向asterisk发生ami指令的类 把$request这样一个ami命令字符串发送给asterisk 然后奇迹就发生了。。
然后接通成功了。再程序里把memcached中或者数据库对应的来电信息清除掉
不知道童鞋们有没有想过一个问题。。我是把来电信息存入memecahed或者数据库 那么如果来电主动挂掉了。那么如何判断来电已经不存在了呢(挂掉了) 很简单。。在开始为来电分配分机前。咱们先查一下这个来电是否已经挂掉了
$request = \.
\.$channel.\. \;
$caller_chanel_use= $tmcc->createAction($request);
这样通过发送一个ami指令可以判断出该来电的通道是否存在。如果存在就继续下面的查询分机
如果不存在就清除当前来电,开始下一个来电。。
好了。。下面一版我就要讲讲对于分机的呼叫超时转移的实现啦。。敬请期待。。呵呵
正在阅读:
2015-2020年中国卤化丁基橡胶市场深度分析与前景展望研究报告 - 图文01-05
会计专业个人简历12-11
2012年农业综合开发农业部专项11-04
康弘木门保养须知05-17
供销社综合改革工作汇报02-22
人力资源管理专业考试大纲.doc04-25
商业模式的设计与创新07-22
幼儿园世界读书日父母感言01-29
金湖县黎卞线冬季施工方案04-01
- 人教新课标必修4 Unit2 Working the land名师导航
- 毕业生“校漂族”大行其道 - 0
- 江苏各市中考作文题出炉 - 0
- 暑期精品班 - 三角形 - 图文
- 情人节送什么礼物好??超强礼物已抵达
- 工程项目管理制度1
- 第四次业务学习 2016
- 会计要素与会计科目
- 欠发达地区小企业会计准则运用问题研究
- 一级锅炉水G4题库
- BBD双进双出筒式磨煤机安装使用说明书 SM-1
- 初一数学有理数教案
- 渝北区房地产评估市场调研报告
- iWebMall 数据字典
- 2018年小学入学教育工作计划
- 计量专业实务与案例分析 - 模拟题三 - 2013年版
- 启示录讲义
- 路基灰土改良(方案)
- 人行反洗钱岗位准入培训测试题集
- 2015电大《学前儿童发展心理学》期末试题及答案
- asterisk
- 简单
- phpagi
- 开发
- 2017-2022年中国金属轧机用轧辊市场深度调研研究报告(目录) -
- 四年级下语文教学实录-18永生的眼睛-人教新课标
- 3年级下学期家长会教案
- 九年级历史第一阶段检测试题
- 起重机毕业设计计算部分
- 物理化学各章复习题 附答案
- 2016民法笔记
- 移动通信复习题
- 民族团结之花处处绽放
- 新能源汽车演讲稿
- 系统维护手册模板
- 专业技术人员信息化能力建设公共课培训在线练习及答案
- 公益活动策划方案
- 双梁桥式起重机设计
- 2016同步讲义 - 五年级春季(共15讲) - 第08讲 - 沙漏与
- 2015年广东公务员面试:利用申论技巧答好面试题
- 大学生科研项目申请表 - 图文
- 《学前儿童卫生学》练习题及答案13、3
- 东日扳手交换头
- 2016年台湾省安全工程师安全生产:预防机械伤人、触电事故的措施