4

我已经阅读了 freeswitch 中用于检测带内 dtmf 的 start_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"/>

请帮我。

4

4 回答 4

3

老问题,但值得再试一次。

假设

我假设 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"/>
于 2011-07-29T04:33:59.773 回答
2

我发现mod_spandsp的带内 DTMF 检测比内置的 FreeSwitch 检测更可靠。我还发现它不能在 Windows 上运行,只能在 Linux 上运行。

于 2016-08-03T14:39:28.000 回答
0

你怎么知道它不起作用?

1) 确保电话路径使用带内 DTMF 什么样的 SIP 用户代理或电话参与此测试呼叫?软电话通常可以选择更改 DTMF 设置。

2) 确保将控制台日志设置为 DEBUG 以查看 DTMF 是否被识别。通常你可以通过在 FreeSWITCH 控制台上按 F8 键在 DEBUG 中设置它。

再见!

于 2010-06-24T09:06:53.083 回答
0

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

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

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

调用建立时将在 a-channel 和 b-channel 中执行 start_dtmf

于 2019-08-27T03:01:00.600 回答