【问题标题】:Asterisk execute Async AGIAsterisk 执行异步 AGI
【发布时间】:2015-03-10 10:55:54
【问题描述】:


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

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

【问题讨论】:

    标签: asterisk amazon-ami agi asternet


    【解决方案1】:

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

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

    另外请注意,除非您通过其他操作停止了保持,否则您无法将已经处于 asyncagi 中的保持呼叫(已经保持!!!)

    【讨论】:

    • 感谢回复,asternet代码执行AGI命令(根据星号文档“Add an AGI command to execute by Async AGI”)。所以基本上我是对的,当我通过 AMI 控制呼叫时,我可能会在该呼叫上执行一些 Async AGI 命令,例如将呼叫置于保持状态或咨询转接?
    • AsyncAGI 呼叫确实会在您在拨号方案中发出呼叫时将呼叫置于保持状态。没有办法再次搁置它。如果您没有保留,请检查您的 musiconhold 类(或在 AsynAGI 之前设置),检查它是否有文件并且工作正常。
    • 我明白了,所以事实上,要进行 AsyncAGI 呼叫,我首先需要更改拨号方案,以便呼叫进入 AsyncAGI 模式,我相信 AsyncAGI 对我没有帮助。我想知道,在为 Avaya、Cisco、Lync 等编程时,总是有一个具体的 API 可以完全控制呼叫(第 3 方呼叫控制/TSAPI/TAPI/Finesse),Asterisk 没有类似的东西吗?
    • 星号有TAPI实现。然而,星号比 cisco、avaya、Lync 等提供了更多的控制权。当然你需要读一些书。或者聘请某人为您效仿您知道星号的 api。如果使用正确,Asterisk AGI 与 cisco tcl 脚本几乎相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多