0

我有 Asterisk 11.4.0、一个远程云服务器和一个 Node.js 服务器作为中间件。当任何帐户尝试拨打电话时,我需要来自远程服务器的信息,该信息要使用哪条外线(甚至根本不拨打此电话!)。这些数据不能直接在 Asterisk 中计算。只有在云响应之后,才能继续调用。我的动作队列如下所示:

使用中间服务器上的 AMI 捕获来自 Asterisk 的呼叫发起;

将信息发送到云端进行分析;

使用 AMI 通过响应外部线路进行呼叫(或根本不继续);

问题是,我不知道怎么做。我认为,当一个人尝试拨打电话时,我可以在拨号方案选项中使用 WaitExten 并使用中间服务器捕获 Newchannel 事件,将所有信息发送到云端。当它响应时,我可以使用现有的等待线路发起呼叫。

你能告诉我,如何将通道附加到 Originate 操作,当我将它作为“通道”参数传递时,Asterisk 不会将此线连接到被调用的扩展。

4

1 回答 1

2

您需要使用 FastAGI 或 AGI(fastagi 更快但稍微复杂一些)来控制您的频道的呼叫流。

http://www.voip-info.org/wiki/view/Asterisk+FastAGI

在 AGI 中,您可以获取呼叫信息,决定将其放置在何处,然后使用 Dial 命令进行呼叫。呼叫将自动桥接。

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 具有完整的语言(意味着您可以在拨号方案中描述任何算法),具有请求数据库信息等的功能。

免责声明: 在使用星号 pbx 创建任何应用程序设计之前,我建议阅读“星号电话的未来”之类的星号书。如果您忽略此警告,您的应用程序可能会不稳定,并且在您投入生产后需要完全重写。

于 2013-10-18T21:20:08.157 回答