我有Asterisk 11.4.0,远程云服务器和Node.js服务器作为中间件。当任何帐户尝试拨打电话时,我需要来自远程服务器的信息使用哪条外线(甚至根本不拨打这个电话!)。这些数据无法直接在Asterisk中计算。只有在云的响应之后才能进行呼叫。我的操作队列如下所示:
使用中间服务器上的AMI从Asterisk捕获呼叫启动;
将信息发送到云进行分析;
使用AMI通过响应外线进行呼叫(或根本不进行);
问题是,我不知道如何制作它。我想,当一个人试图拨打电话时,我可以在dialplan选项中使用WaitExten并使用中间服务器捕获Newchannel事件,将所有信息发送到云端。当它响应时,我可以使用现有的等待线发起呼叫。
您能告诉我,如何将通道附加到Originate操作,当我将其作为“通道”参数传递时,Asterisk不会将此行连接到被调用的exten。
答案 0 :(得分:1)
您需要使用FastAGI或AGI(fastagi更快但更复杂)来控制频道的呼叫流程。
http://www.voip-info.org/wiki/view/Asterisk+FastAGI
在AGI中,您可以使用“拨号”命令获取呼叫信息,决定将其放置在何处。呼叫将自动桥接。
http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial
此外,您可以使用Bridge ami动作来桥接2个频道,但这不是如何创建的。正确的方式 - 通过拨号。
http://www.voip-info.org/wiki/view/Asterisk+cmd+Bridge
您还可以在拨号方案CURL功能中使用外部API上的http请求帮助。这将与fastagi具有相同的成本,但由于您喜欢node.js
,因此可以更简单如果使用Originate ami命令,则可以通过
向该命令添加任何变量 "Set" => "variablename=somethign"
PS实际上几乎任何东西都可以在星号内部计算,确定你是否已经知道了。 Asterisk有完整的语言(意思是你可以在dialplan中描述任何算法),具有请求db info等功能。
免责声明:我建议阅读星号书,如“Asterisk the future of telephony” BEFORE 使用星号pbx创建任何应用程序设计。如果您忽略此警告,您的应用程序可能会不稳定,并且在将其投入生产后需要完全重写。