【问题标题】:check if number is rang or not while creating call by asterisk call file通过星号呼叫文件创建呼叫时检查号码是否响铃
【发布时间】:2015-11-20 12:36:03
【问题描述】:

我正在通过通话文件创建通话。星号 cli 显示像 hangupremote end ringing 这样的呼叫的不同状态。 我只想获取该号码是否响铃的状态。有什么办法可以做到这一点?我正在从呼叫文件生成呼叫,它应该被错过,所以没有我可以编写的拨号方案代码,因为我编写的拨号方案只会在用户选择不是的呼叫时执行就我而言。

【问题讨论】:

    标签: asterisk voip phone-call ivr pbx


    【解决方案1】:

    您可以使用星号 AMI 接口事件查看结果

    您也可以通过本地/频道呼叫,这样它将通过拨号计划并检查 DIALSTATUS 变量

    但我强烈不建议您在没有足够经验的情况下进行拨号核心。使用已经创建的类似 vicidial.org。

    【讨论】:

      【解决方案2】:

      像这样创建调用文件:

      PHP 脚本

      <?php
      
      $callfile = "";
      $callfile .= "Channel: Local/123@outbound_test\n";
      $callfile .= "Context: out\n";
      $callfile .= "Extension: 100\n";
      $callfile .= "Set: dialout_number=9876543210\n";
      
      $callfilename = "callfile_".uniqid();
      
      file_put_contents(__DIR__."/".$callfilename, $callfile);
      chmod(__DIR__."/".$callfilename, 0777);
      exec("mv ".__DIR__."/$callfilename /var/spool/asterisk/outgoing");
      
      ?>
      

      /etc/asterisk/extensions_custom.conf ::

      [outbound_test]
      exten => 123,1,Noop(Dialout number ${dialout_number})
      exten => 123,2,Dial(SIP/outbound-trunk/${dialout_number})
      exten => 123,3,Noop(Dial status  for ${dialout_number} is ${DIALSTATUS})
      
      [out]
      exten => 100,1,Noop(Answered)
      exten => 100,n,Hangup
      

      outbound-test 第 3 行,您将获得除应答之外的拨号状态。如果应答,out 上下文将开始执行。可能的拨号状态是:

      1) BUSY:被叫号码占线。拨号到达被叫方

      2) NOANSWER : 号码响铃时间过长,拨号超时

      3) 拥塞:拥塞。此状态通常表示所拨号码未被识别

      4) CHANUNAVAIL:频道不可用。在 SIP 上,对等体可能未注册。

      5) DONTCALL : 隐私模式,被叫拒接电话

      6) TORTURE : 隐私模式,被呼叫者选择将呼叫者发送到酷刑菜单

      【讨论】:

      • 我已经直接用调用文件尝试了你的解决方案,但是它的工作 cli 显示本地频道的拥塞电路繁忙我需要配置任何东西来使用这个本地频道。
      • 您是否正确设置了出站中继?
      【解决方案3】:

      我建议您使用 ${REASON}。 我在拨号计划中使用 ${REASON} 来了解 .call 文件是否失败或应答,如果呼叫被应答,则进入主流程,如果失败则进入“失败的扩展”

      exten => failed,1,Noop(##No Answer##=> ${REASON}) exten => failed,n,Set(__CALLFAILED=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})

      ${REASON} 变量由 Asterisk 在进入特殊的失败扩展名时设置。它似乎提供了找出调用文件调用失败原因的唯一方法。它至少需要这些值:

      0 - 失败(不忙或不拥塞) 1 - 挂断 3 - 响铃超时 5 - 忙 8 - 拥塞

      【讨论】:

      • 感谢您的回答确实对我有帮助。但我有一些问题。我在通话文件中使用等待时间为 5 秒的通话文件,如果我在关闭手机上测试这个输出是 3(Ring超时)这是不正确的,如果我测试具有相同条件但等待时间为 20 秒的呼叫文件,${REASON} 给了我1。如果您能提供帮助,那就太好了?
      • 我会说不要使用等待时间将其设置为默认值 0,因为每个电信提供商都有自己的呼叫连接时间,如果您使用较少的等待时间,则呼叫不会完全连接或使用较高的等待时间。大多数电信公司都有 60 秒的响铃超时时间
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多