php agi 软电话拨外线,主动挂机时无法获取通话时间?

发布于 2022-08-15 21:46:05 字数 1652 浏览 13 评论 3

大家好!我使用以下代码,可以拨打外线,但会出现一个问题,如题。
使用软电话进行拨打外线,对方挂机时可以获取时间,当软电话主动挂机时,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. ?>

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

痴情 2022-08-29 16:33:22

asterisk?

楼主强人

筱武穆 2022-08-18 15:49:21

了解了,帮顶

蓝色星空 2022-08-16 20:57:51

终于找到答案了,将AGI改成DeadAGI就行了,谢谢大家的关注!
解释:DeadAGI ( )的用法也很像 AGI( ),但是它允许你的 AGI 脚本在死信道(比如,一个挂起的信道)中正常的运转。也就是说通用的 AGI( )不能在死信道中正常运转。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文