asterisk - phpagi简单开发第四版
更新时间:2024-01-21 18:02:01 阅读量: 教育文库 文档下载
- asterisk中文推荐度:
- 相关推荐
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指令可以判断出该来电的通道是否存在。如果存在就继续下面的查询分机
如果不存在就清除当前来电,开始下一个来电。。
好了。。下面一版我就要讲讲对于分机的呼叫超时转移的实现啦。。敬请期待。。呵呵
正在阅读:
2014三维设计 高考一轮复习 英语 (山东专版) 课时跟踪检测(九) Wildlife protection05-20
第四章 矩阵的特征值和特征向量10-20
2009——2010学年下期期中五年级语文试卷及参考答案04-10
2019年人教部编版一年级语文上册全册教案(含教学计划)04-28
2017年中国动力电池市场供需预测及投资前景评估(目录) - 图文04-30
振奋精神 加大投入 全面整治乡镇环境卫生08-27
地基处理与基础设计啊05-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- asterisk
- 简单
- phpagi
- 开发
- 六年级上册音乐教案
- 中学语文教学法第1阶段测试题
- 在电影及游戏产品中的基于物理的着色模型 - 图文
- 车队支部品牌创建方案
- 2016年党员干部德廉和党风党纪知识学习测试题(包括党员领导干部附加测试题)
- 主管护师习题1(23)
- 思想政治教育生命线地位评述
- 2012年增值税试题及答案
- PLC四节传送带的模拟课程设计
- VC++程序设计课程实践基础题
- 河北省武邑中学2018届高三下学期周考化学试题 Word版含答案
- 荆州创建全国文明城联点共建安排表
- 小学生分年级诵读美文80篇 doc
- 各工种岗位安全操作规程
- 浙江省非因工死亡补偿有关规定文件
- 公共财政学
- 信贷知识竞赛复习资料
- 2017 - 2018学年高中物理课时跟踪检测十弹力教科版必修1
- 钣金考试题
- 土建工程管理中的施工进度控制措施分析