Chinaunix

标题: php agi 软电话拨外线,主动挂机时无法获取通话时间? [打印本页]

作者: luckysammo    时间: 2009-10-15 00:44
标题: php agi 软电话拨外线,主动挂机时无法获取通话时间?
大家好!我使用以下代码,可以拨打外线,但会出现一个问题,如题。
使用软电话进行拨打外线,对方挂机时可以获取时间,当软电话主动挂机时,PHP程序主动退出了,没有执行后面的语句。
不知道大家有碰到这种情况没?谢谢各位的帮忙!
  1. #!/usr/bin/php -q
  2. <?
  3. // 包含了phpagi的类文件
  4. include_once(ROOT_PATH.'public.php');

  5. $agi->answer();
  6. $result = $agi->exec('chanIsAvail Zap/1&Zap/2&Zap/3&Zap/4'); // 使用 chanIsAvail 指令检查可用通道,后面的参数是通道列表
  7. $result = $agi->get_variable('AVAILCHAN'); // 获取可用的通道的名字,例如:Zap/1-1
  8. $agi->verbose('result:'.$result[data]);
  9. $channel = $result[data];
  10. $result = $agi->get_variable('AVAILORIGCHAN'); // 获取可用的通道的标准名字,例如:Zap/1
  11. $agi->verbose('result:'.$result[data]);
  12. $result = $agi->get_variable('AVAILSTATUS'); // 获取可用的通道的状态标识
  13. $agi->verbose('result:'.$result[data]);

  14. if (empty($channel)){ // 如果没有可用的通道,例如:FXO卡上都没有接电话外线
  15.     $agi->exec('Playtones congestion'); // 播放拥塞提示音
  16.     $agi->exec('Congestion 10'); // 提示拥塞,等待 10 秒后挂机
  17.     $agi->hangup(); // 主动挂机
  18.     exit;
  19. }

  20. $dnid = $agi->request['agi_extension']; // 获取要外拨的号码
  21. $agi->exec_dial($channel, $dnid, 30); // 拨号开始,超时时间 30 秒
  22. $dialstatus   = $agi->get_variable("DIALSTATUS"); // 获取拨号的状态
  23. $agi->verbose('dialstatus:'.$dialstatus[data]);
  24. $answeredtime = $agi->get_variable("ANSWEREDTIME"); // 获取通话时间长度
  25. $agi->verbose('answeredtime:'.$answeredtime[data]);
  26. $agi->hangup(); // 主动挂机
  27. ?>
复制代码

作者: luckysammo    时间: 2009-10-16 09:58
终于找到答案了,将AGI改成DeadAGI就行了,谢谢大家的关注!
解释:DeadAGI ( )的用法也很像 AGI( ),但是它允许你的 AGI 脚本在死信道(比如,一个挂起的信道)中正常的运转。也就是说通用的 AGI( )不能在死信道中正常运转。
作者: surpass_li    时间: 2010-05-28 09:16
了解了,帮顶
作者: linuxlixk    时间: 2010-06-03 16:03
asterisk?

楼主强人




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2