Node.js 星号:使用AMI将一个通道连接到另一个通道

Node.js 星号:使用AMI将一个通道连接到另一个通道,node.js,asterisk,asteriskami,Node.js,Asterisk,Asteriskami,我有Asterisk 11.4.0,一个远程云服务器和一个Node.js服务器作为中间件。当任何帐户尝试拨打电话时,我需要从远程服务器获取信息,以使用哪条外部线路(甚至根本不拨打电话!)。这些数据不能用星号直接计算。只有在云响应后,才能继续呼叫。我的操作队列如下所示: 通过中间服务器上的AMI捕获Asterisk发起的呼叫 向云发送信息进行分析 使用AMI使用传入响应的外部线路继续调用(或根本不继续) 问题是,我不知道怎么做。我认为,当一个人试图打电话时,我可以在拨号计划选项中使用WaitExt

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

通过中间服务器上的AMI捕获Asterisk发起的呼叫

向云发送信息进行分析

使用AMI使用传入响应的外部线路继续调用(或根本不继续)

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


您能告诉我,当我将其作为“通道”参数传递时,如何将通道连接到发起操作,星号不将此线路与被调用的扩展连接。

您需要使用FastAGI或AGI(FastAGI更快但更复杂)来控制通道的呼叫流

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

您还可以使用桥接ami操作桥接2个通道,但这不是它的创建方式。正确的方式-通过拨号

您还可以在dialplancurl函数中使用,通过外部API上的http请求帮助。这将与fastagi具有相同的成本,但对于您的用户来说可能更简单,因为您喜欢node.js

如果使用originami命令,则可以通过以下方式向该命令添加任何变量:

 "Set" =>  "variablename=somethign"
实际上,几乎任何东西都可以在星号内计算,当然,如果你对此有足够的了解的话。星号有完整的语言(意味着您可以描述拨号计划中的任何算法),具有请求数据库信息等功能


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

非常感谢!传递变量的想法很好,这本书比我读过的所有关于星号的东西都要好。