我正在尝试完成通过AMI自己完成所有调用逻辑的软件,仅使用Asterisk作为VOIP,SIP/GSM的接口。几乎所有东西都很好用,但是...:
这是我的方案:- 来电被转发到公告,然后永远转发到卫生部- 我的应用程序决定使用 AMI 操作拨打哪些分机 (7777) 操作:发起- 一旦有人接听分机,他/她的频道(例如SIP/306-xxxxx)就会使用 AMI 操作:桥接与等待呼叫的频道桥接
到目前为止,一切正常,连接双方都可以听到对方的声音,按需录制有效。一切都很好。
现在,我正在尝试在其中一个桥接通道上使用 AMI 进行辅助传输到另一个分机(Atxfer)。而且它不起作用。我在一个频道上收到了几个关于 DTMF 的 ami 事件(播放时音频被静音)。每个 DTMF 数字都用于 AMI 上的快速网桥:取消链接和网桥:链接事件。
我尝试更改 dtmfmode,从星号 1.8 升级到 11(现在为星号),它总是相同的。
虽然在这些通道上遇到 Atxfer 盲传输的问题有效(使用 AMI 操作:重定向)。
完整日志没有显示类似的东西:
[2013-11-11 20:24:57] 调试[9457]: 功能.c:3740 feature_interpret: 功能解释: chan=SIP/306-00000017, peer=SIP/GTS-00000016, 代码=*2, sense=1, 功能=0, 动态=应用记录#应用记录
我建议你阅读一些适合初学者的星号书,比如ORelly的"Asterisk the Future of Phonephony"。
在您的情况下,正确的解决方案是对第一个通道使用星号拨号命令,而不是创建第二个呼叫。
目前尚不清楚如何使用 AMI 进行转移。如果你想通过ami(这是非常糟糕的方式)来做,你必须做一些类似的事情
-
在传输请求(数字)上取消桥接通道。之后最好把它放在AsyncAGI中。
-
使用读取命令收集要传输的数字
-
转移到新目的地
-
如果再次失败桥接
注意:您生成的应用程序将非常有问题且无法扩展。AMI 界面不是为做这样的事情而设计的,当你在同一盒子上运行很多操作和通道时,工作非常糟糕。因此,您必须在高并发负载下测试您的应用程序,以确保它正常工作(或更有可能不起作用)。