Freeswitch:start_dtmf 未检测到 DTMF

发布于 2024-09-06 00:27:59 字数 349 浏览 6 评论 0 原文

我读过 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"/>

请帮我。

I have read about start_dtmf application in freeswitch which is used to detect in-band dtmf.
I have tested this ,but it didn't detect any DTMF.

<extension name="dtmf_test">
<condition field="destination_number" expression="^6000$">
<action application="answer"/>
<action application="start_dtmf"/>
<action application="bridge" data="user/6888"/>

Please help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不再让梦枯萎 2024-09-13 00:27:59

老问题,但值得再次尝试回答。

假设

我假设 user/6888 是 dtmf 数字的发起者。

问题

对于任何基于呼叫的应用程序,要记住的一件重要事情是它处理呼叫线路/通道、被叫方、呼叫方或 a-leg、b-leg。当执行特定于线路的基于拨号计划的应用程序(即仅在一条线路上启用)时,这一点非常重要,例如“start_dtmf”,请参阅 文档 特别是其中指出的行:

上面列出的 start_dtmf 行在通道上启动 start_dtmf 应用程序以允许 DTMF 检测。

在您的示例中,start_dtmf 应用程序正在侦听呼叫 6000 的用户,而不是桥接分机 user/6888。 freeswitch 示例之所以有效,是因为它拨入 IVR,并且来电者按下 dtmf 数字。

解决方案

要在另一条腿上设置start_dtmf应用程序,您需要查看exec_after_bridge应用程序

<action application="set" data="exec_after_bridge_app=start_dtmf"/>

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 :

The start_dtmf line listed above starts the start_dtmf application on this channel to allow for DTMF detection.

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.

<action application="set" data="exec_after_bridge_app=start_dtmf"/>
于我来说 2024-09-13 00:27:59

我发现 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.

那小子欠揍 2024-09-13 00:27:59

你怎么知道它不起作用?

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!

伴我老 2024-09-13 00:27:59

问题
与@bencode意见相同,您的xml在a通道中启动dtmf,但不在b通道中

解决方案
但是在我的配置中,仅 set exec_after_bridge_app=start_dtmf 不起作用
我尝试了另一种在 b 通道中启用 dtmf 的方法

<action application="export" data="execute_on_answer=start_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 work
I tried another way to enable dtmf in b-channel

<action application="export" data="execute_on_answer=start_dtmf"/>

which will execute start_dtmf in a-channel and b-channel when call establish

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文