Asterisk 通过星号呼叫文件创建呼叫时,检查号码是否已拨打

Asterisk 通过星号呼叫文件创建呼叫时,检查号码是否已拨打,asterisk,voip,phone-call,ivr,pbx,Asterisk,Voip,Phone Call,Ivr,Pbx,我正在通过调用文件创建调用。星号cli显示呼叫的不同状态,如挂断和远端铃声我只想知道该号码是否已拨打。有什么方法可以这样做吗?我正在从呼叫文件生成呼叫,应该会错过它,因此我无法编写拨号计划代码,因为我编写的拨号计划仅在用户选择呼叫时执行,而我的情况并非如此。您可以使用星号AMI接口事件查看结果 您也可以通过本地/频道进行呼叫,这样它将通过dialplan进行呼叫,并检查DIALSTATUS变量 但我强烈建议你不要在没有足够经验的情况下拨打核心电话。使用已经创建的vicidial.org之类的调用

我正在通过调用文件创建调用。星号cli显示呼叫的不同状态,如
挂断
远端铃声
我只想知道该号码是否已拨打。有什么方法可以这样做吗?我正在从呼叫文件生成呼叫,应该会错过它,因此我无法编写拨号计划代码,因为我编写的拨号计划仅在用户选择呼叫时执行,而我的情况并非如此。

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

您也可以通过本地/频道进行呼叫,这样它将通过dialplan进行呼叫,并检查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");

?>
在出站测试第3行中,您将获得除应答之外的拨号状态。如果回答,out上下文将开始执行。可能的拨号状态为:

1) :被叫号码正忙。拨到被叫人的电话号码

2) NOANSWER:电话铃响得太久,拨号超时

3) 拥塞:拥塞。此状态通常表示无法识别所拨打的号码

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

5) DONTCALL:隐私模式下,被呼叫方拒绝了呼叫


6) 拷问:隐私模式,被呼叫方选择将呼叫方发送到拷问菜单

我建议您使用${REASON}。 我在dialplan中使用${REASON}来了解.call文件是否失败或已应答,如果呼叫已应答,它将转到主流。如果呼叫失败,它将转到“失败的扩展名”

exten=>failed,1,Noop(######=>${REASON})
extn=>failed,n,Set(u CALLFAILED=${STRFTIME(${EPOCH},,%Y-%m-%d%H:%m:%S)})

${REASON}变量在进入特殊的失败扩展时由星号设置。它似乎给出了找出调用文件调用失败原因的唯一方法。它至少需要以下值:

0-失败(不忙或拥挤) 1-挂断 3环超时 5-忙 8-交通挤塞


我直接用呼叫文件尝试了您的解决方案,但它无法正常工作cli显示本地频道的拥塞线路繁忙我是否需要配置任何东西来使用此本地频道。您是否正确设置了出站中继?谢谢您的回答确实帮助了我。但我有一些问题。我正在呼叫文件中使用等待时间为5秒的呼叫文件,如果我测试此问题在关机的手机上,输出为
3
(响铃超时),这是不正确的,如果我在相同条件下测试呼叫文件,但等待时间为20秒,
${REASON}
会给我
1
。如果您能提供帮助,那将是一个非常好的选择?我会说不要使用waittime将其设置为默认值0,因为每个电信提供商都有自己的呼叫连接时间,如果您使用较少的等待时间,则呼叫未完全连接或使用较高的等待时间。大多数电信公司都有60秒的铃声超时时间
[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