我正在编写与 Asterisk 服务器集成的简单弹出应用程序。我们的测试环境基于我们配置了一些 SIP 中继的 FreePBX。测试在两个分机 3000 和 3001 之间进行。
3000、3001等分机由SIP客户端(microsip)控制,用于测试目的,以后可能会变成其他一些sip客户端或软电话。
我需要的是,一旦有人拨打分机 3000,接线员就可以使用常规的 SIP 客户端接听电话,而我的应用程序会显示一些有关呼叫的信息。我能够使用 AMI 实现这一目标。现在我想在我的应用程序中添加一个按钮,让我可以将呼叫置于保持状态。我知道,AMI 没有公开这样的功能,所以我正在尝试使用 Async AGI。(顺便说一句,我正在使用 asternet 与星号通信)
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"
我确实尝试在拨号计划(extensions.conf)中添加类似的东西:
[default]
exten => 3000,1,NoOp(Async AGI)
same => n,AGI(agi:async)
这将删除“通道 XXXXX 不受 AGI 控制”错误,但仍然留下“无法将 AGI 命令添加到通道 SIP/3000-00000003 队列”错误。最糟糕的是,一旦我有了这个拨号计划,我的 sip 客户端就停止接听电话,尽管 AMI 仍然能够捕捉到它。
我想知道实现我想要的正确方法是什么?我对星号完全陌生,也许我缺少基本概念,所以我真的很感激很好的例子。谢谢你。