Freeswitch:start_dtmf 未检测到 DTMF
我读过 freeswitch 中的 start_dtmf 应用程序,它用于检测带内 dtmf。 我已经测试过了,但它没有检测到任何 DTMF。
<extension name="dtmf_test">
<condition field="destination_number" expression="^6000$">
<action application="answer"/>
<action application="start_dtmf"/>
<action application="bridge" data="user/6888"/>
请帮我。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
老问题,但值得再次尝试回答。
假设
我假设 user/6888 是 dtmf 数字的发起者。
问题
对于任何基于呼叫的应用程序,要记住的一件重要事情是它处理呼叫线路/通道、被叫方、呼叫方或 a-leg、b-leg。当执行特定于线路的基于拨号计划的应用程序(即仅在一条线路上启用)时,这一点非常重要,例如“start_dtmf”,请参阅 文档 特别是其中指出的行:
在您的示例中,start_dtmf 应用程序正在侦听呼叫 6000 的用户,而不是桥接分机 user/6888。 freeswitch 示例之所以有效,是因为它拨入 IVR,并且来电者按下 dtmf 数字。
解决方案
要在另一条腿上设置start_dtmf应用程序,您需要查看exec_after_bridge应用程序。
Old question, but worth another shot at the answer.
Assumption
I'm making one assumption that the user/6888 is the originator of the dtmf digits.
Problem
An important thing to remember with any calling based application is that it deals in call legs/channels, callee, caller or a-leg, b-leg. This is very important when executing dialplan based applications that are leg specific (ie. only enabled on one leg), like 'start_dtmf', see the documentation particularly the line that states :
In your example, the start_dtmf application is listening on the user who called 6000, not the bridged extension user/6888. The freeswitch example works because it's dialing into an IVR, and the incoming caller is pressing the dtmf digits.
Solution
To set the start_dtmf application on the other leg, you want to look at the exec_after_bridge application.
我发现
mod_spandsp
的带内 DTMF 检测更多比内置 FreeSwitch 检测更可靠。我还发现它不能在 Windows 上运行,只能在 Linux 上运行。I find
mod_spandsp
's in-band DTMF detection more reliable than the in-built FreeSwitch detection. Also I found it did not work on Windows, only on Linux.你怎么知道它不起作用?
1) 确保电话路径使用带内 DTMF
此测试呼叫涉及哪些类型的 SIP 用户代理或电话?软电话通常可以选择更改 DTMF 设置。
2) 确保将控制台日志设置为“DEBUG”(调试)以查看 DTMF 是否被识别。
通常您可以通过在 FreeSWITCH 控制台按 F8 键将其设置为 DEBUG。
再见!
how do you know that it's not working?
1) Be sure that the phone path is using in-band DTMFs
What kind of SIP user agents or phones are involved in this test call? Softphones usually have the option to change DTMF settings.
2) Be sure to have your console log set to DEBUG to see if DTMFs get recognized.
Usually you can set it in DEBUG by pressing the F8 key at the FreeSWITCH console.
Ciao!
问题
与@bencode意见相同,您的xml在a通道中启动dtmf,但不在b通道中
解决方案
但是在我的配置中,仅
set exec_after_bridge_app=start_dtmf
不起作用我尝试了另一种在 b 通道中启用 dtmf 的方法
,它将在呼叫建立时在 a 通道和 b 通道中执行 start_dtmf
Problem
the same as @bencode opinion, your xml starts dtmf in a-channel but not in b-channel
Solution
however in my config, just
set exec_after_bridge_app=start_dtmf
doesn't workI tried another way to enable dtmf in b-channel
which will execute start_dtmf in a-channel and b-channel when call establish