【发布时间】:2015-11-20 12:36:03
【问题描述】:
我正在通过通话文件创建通话。星号 cli 显示像 hangup 和 remote end ringing 这样的呼叫的不同状态。 我只想获取该号码是否响铃的状态。有什么办法可以做到这一点?我正在从呼叫文件生成呼叫,它应该被错过,所以没有我可以编写的拨号方案代码,因为我编写的拨号方案只会在用户选择不是的呼叫时执行就我而言。
【问题讨论】:
标签: asterisk voip phone-call ivr pbx
我正在通过通话文件创建通话。星号 cli 显示像 hangup 和 remote end ringing 这样的呼叫的不同状态。 我只想获取该号码是否响铃的状态。有什么办法可以做到这一点?我正在从呼叫文件生成呼叫,它应该被错过,所以没有我可以编写的拨号方案代码,因为我编写的拨号方案只会在用户选择不是的呼叫时执行就我而言。
【问题讨论】:
标签: asterisk voip phone-call ivr pbx
您可以使用星号 AMI 接口事件查看结果
您也可以通过本地/频道呼叫,这样它将通过拨号计划并检查 DIALSTATUS 变量
但我强烈不建议您在没有足够经验的情况下进行拨号核心。使用已经创建的类似 vicidial.org。
【讨论】:
像这样创建调用文件:
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 : 隐私模式,被呼叫者选择将呼叫者发送到酷刑菜单
【讨论】:
我建议您使用 ${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 - 拥塞
【讨论】:
3(Ring超时)这是不正确的,如果我测试具有相同条件但等待时间为 20 秒的呼叫文件,${REASON} 给了我1。如果您能提供帮助,那就太好了?