我正在编写与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我想知道这是什么意思?
此外,我还尝试通过命令行界面启动"MusicOnHold“命令,并得到了响应
Channel XXXXX is not controlled by AGI"我确实尝试过在拨号方案(extensions.conf)中添加类似的内容:
[default]
exten => 3000,1,NoOp(Async AGI)
same => n,AGI(agi:async)这将删除"Channel XXXXX is not controlled by AGI“错误,但仍然保留"Failed to add AGI command to channel SIP/3000-00000003 queue”错误。最糟糕的是,一旦我有了这个拨号方案,我的sip客户端就停止接收呼叫,尽管AMI仍然能够捕捉到这一点。
我想知道实现我想要的东西的正确方法是什么?我对asterisk完全陌生,也许我缺少基本的概念,所以我真的很欣赏好的例子。谢谢。
发布于 2015-03-11 14:28:20
异步AGI是通过AMI请求控制通道的方式,而不是agi。
我不确定你发送的asternet代码是什么,请参考asternet文档
还请注意,您无法将已在asyncagi中的呼叫置于保留状态(已处于等待状态!),除非您通过其他操作停止了等待
https://stackoverflow.com/questions/28961874
复制相似问题