Asterisk 星号执行异步AGI

Asterisk 星号执行异步AGI,asterisk,amazon-ami,agi,asternet,Asterisk,Amazon Ami,Agi,Asternet,我正在编写与Asterisk服务器集成的简单弹出应用程序。我们的测试环境基于FreePBX,我们在其中配置了一些SIP中继。测试在两个扩展3000和3001之间进行 3000、3001和其他扩展由SIP客户端microsip控制,用于测试目的,以后它们可能成为其他一些SIP客户端或软电话 我需要的是,一旦有人呼叫分机3000,操作员就能够使用常规SIP客户端应答呼叫,而我的应用程序将显示有关呼叫的一些信息。我能够通过AMI实现这一点。现在,我希望在我的应用程序中有一个按钮,允许我将呼叫挂起。我知

我正在编写与Asterisk服务器集成的简单弹出应用程序。我们的测试环境基于FreePBX,我们在其中配置了一些SIP中继。测试在两个扩展3000和3001之间进行

3000、3001和其他扩展由SIP客户端microsip控制,用于测试目的,以后它们可能成为其他一些SIP客户端或软电话

我需要的是,一旦有人呼叫分机3000,操作员就能够使用常规SIP客户端应答呼叫,而我的应用程序将显示有关呼叫的一些信息。我能够通过AMI实现这一点。现在,我希望在我的应用程序中有一个按钮,允许我将呼叫挂起。我知道,AMI没有公开这样的特性,所以我尝试使用异步AGI。顺便说一句,我正在使用asternet与asterisk通信

AgiAction agi = new AgiAction(channel, "MusicOnHold");
ManagerResponse resp = manager.SendAction(agi);
一旦我这样做了,我就会得到答复

Failed to add AGI command to channel SIP/3000-00000003 queue
我想知道那是什么意思

另外,我一直在尝试通过CLI启动MusicOnHold命令,我得到了一个响应

Channel XXXXX is not controlled by AGI"
我确实尝试在dialplan extensions.conf中添加类似的内容:

[default]
exten => 3000,1,NoOp(Async AGI)
same => n,AGI(agi:async)
这将删除通道XXXXX不受AGI错误控制,但仍会导致无法将AGI命令添加到通道SIP/3000-0000000 3队列错误。最糟糕的是,一旦我有了这个拨号计划,我的sip客户端就停止接收呼叫,尽管AMI仍然能够捕捉到这一点


我想知道实现我想要的东西的正确方法是什么?我对asterisk完全陌生,也许我缺少基本的概念,所以我非常希望有一个好的例子。谢谢。

异步agi是通过AMI请求控制通道的方式,而不是agi

我不确定您发送的asternet代码是什么,请查阅asternet文档


另外请注意,您无法挂起已在AsyncAgiReady onhold中的呼叫!!!,除非您通过其他操作停止等待

谢谢您的回复,否则asternet代码将根据asterisk文档执行AGI命令,并添加一个AGI命令以通过异步AGI执行。所以基本上我是正确的,当我通过AMI控制一个调用时,我可能会在该调用上执行一些异步AGI命令,例如,将调用挂起,或者在dialplan中发出时,咨询transfer?异步AGI调用确实将调用挂起。不可能再把它搁置了。如果没有挂起,请在AsynAGI之前检查musiconhold类或设置它,检查它是否有文件并且工作正常。我明白了,所以事实上,要进行异步调用,我首先需要更改dialplan,以便调用进入异步模式,我相信异步对我没有帮助。我想知道,当为Avaya、Cisco、Lync等编程时,总会有一个具体的API来完全控制调用第三方调用控制/TSAPI/TAPI/Finesse,Asterisk没有类似的功能吗?Asterisk有TAPI实现。然而,星号给予更多的控制比思科,avaya,Lync等。当然你需要读一些书。或者雇佣某人为您模仿asterisk的api。如果使用正确,星号AGI与cisco tcl脚本几乎相同。