0


我正在编写与 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 仍然能够捕捉到它。

我想知道实现我想要的正确方法是什么?我对星号完全陌生,也许我缺少基本概念,所以我真的很感激很好的例子。谢谢你。

4

1 回答 1

0

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

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

另请注意,除非您通过其他操作停止了暂停,否则您无法暂停已经在 asyncagi 中的呼叫(已经暂停!!!)

于 2015-03-11T06:28:20.053 回答