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指令可以判断出该来电的通道是否存在。如果存在就继续下面的查询分机
如果不存在就清除当前来电,开始下一个来电。。
好了。。下面一版我就要讲讲对于分机的呼叫超时转移的实现啦。。敬请期待。。呵呵
正在阅读:
华为LTE操作 大杂烩 - 图文10-03
中秋古诗词(整理)小学低年级07-23
中国人民解放军各集团军编制战斗序列大全05-02
“十三五”规划重点-骨科用中药项目建议书(立项报告)08-25
铁路货物运价规则105-10
教师集训师德培训讲座材料(多篇)03-08
挖蕃薯作作文400字07-16
2013年青岛市义务教育学校市级三好学生、优秀学生干部和先进班集05-16
上海学习中文时应选择什么样的中文学校05-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- asterisk
- 简单
- phpagi
- 开发
- 2017-2022年中国金属轧机用轧辊市场深度调研研究报告(目录) -
- 四年级下语文教学实录-18永生的眼睛-人教新课标
- 3年级下学期家长会教案
- 九年级历史第一阶段检测试题
- 起重机毕业设计计算部分
- 物理化学各章复习题 附答案
- 2016民法笔记
- 移动通信复习题
- 民族团结之花处处绽放
- 新能源汽车演讲稿
- 系统维护手册模板
- 专业技术人员信息化能力建设公共课培训在线练习及答案
- 公益活动策划方案
- 双梁桥式起重机设计
- 2016同步讲义 - 五年级春季(共15讲) - 第08讲 - 沙漏与
- 2015年广东公务员面试:利用申论技巧答好面试题
- 大学生科研项目申请表 - 图文
- 《学前儿童卫生学》练习题及答案13、3
- 东日扳手交换头
- 2016年台湾省安全工程师安全生产:预防机械伤人、触电事故的措施