php agi 软电话拨外线,主动挂机时无法获取通话时间?
大家好!我使用以下代码,可以拨打外线,但会出现一个问题,如题。
使用软电话进行拨打外线,对方挂机时可以获取时间,当软电话主动挂机时,PHP程序主动退出了,没有执行后面的语句。
不知道大家有碰到这种情况没?谢谢各位的帮忙!
- #!/usr/bin/php -q
- <?
- // 包含了phpagi的类文件
- include_once(ROOT_PATH.'public.php');
- $agi->answer();
- $result = $agi->exec('chanIsAvail Zap/1&Zap/2&Zap/3&Zap/4'); // 使用 chanIsAvail 指令检查可用通道,后面的参数是通道列表
- $result = $agi->get_variable('AVAILCHAN'); // 获取可用的通道的名字,例如:Zap/1-1
- $agi->verbose('result:'.$result[data]);
- $channel = $result[data];
- $result = $agi->get_variable('AVAILORIGCHAN'); // 获取可用的通道的标准名字,例如:Zap/1
- $agi->verbose('result:'.$result[data]);
- $result = $agi->get_variable('AVAILSTATUS'); // 获取可用的通道的状态标识
- $agi->verbose('result:'.$result[data]);
- if (empty($channel)){ // 如果没有可用的通道,例如:FXO卡上都没有接电话外线
- $agi->exec('Playtones congestion'); // 播放拥塞提示音
- $agi->exec('Congestion 10'); // 提示拥塞,等待 10 秒后挂机
- $agi->hangup(); // 主动挂机
- exit;
- }
- $dnid = $agi->request['agi_extension']; // 获取要外拨的号码
- $agi->exec_dial($channel, $dnid, 30); // 拨号开始,超时时间 30 秒
- $dialstatus = $agi->get_variable("DIALSTATUS"); // 获取拨号的状态
- $agi->verbose('dialstatus:'.$dialstatus[data]);
- $answeredtime = $agi->get_variable("ANSWEREDTIME"); // 获取通话时间长度
- $agi->verbose('answeredtime:'.$answeredtime[data]);
- $agi->hangup(); // 主动挂机
- ?>
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
asterisk?
楼主强人
了解了,帮顶
终于找到答案了,将AGI改成DeadAGI就行了,谢谢大家的关注!
解释:DeadAGI ( )的用法也很像 AGI( ),但是它允许你的 AGI 脚本在死信道(比如,一个挂起的信道)中正常的运转。也就是说通用的 AGI( )不能在死信道中正常运转。