Freeswitch:start_dtmf没有检测到DTMF

时间:2010-06-16 07:54:51

标签: freeswitch

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

请帮帮我。

4 个答案:

答案 0 :(得分:3)

老问题,但又值得回答。

<强>假设

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

<强>问题

任何基于呼叫的应用程序都要记住的一件重要事情是,它处理呼叫支路/通道,被叫方,来电或a-leg,b-leg。这在执行特定于腿特定的基于拨号计划的应用程序(即仅在一条腿上启用)时非常重要,例如“start_dtmf”,请参阅documentation特别是声明的行:

  

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

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

<强>解决方案

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

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

答案 1 :(得分:1)

我发现mod_spandsp的带内DTMF检测比内置的FreeSwitch检测更可靠。另外我发现它在Windows上不起作用,只在Linux上运行。

答案 2 :(得分:0)

你怎么知道它不起作用?

1)确保电话路径使用带内DTMF 此测试呼叫涉及哪种SIP用户代理或电话?软电话通常可以选择更改DTMF设置。

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

侨!

答案 3 :(得分:0)

问题
与@bencode意见相同,您的xml在A通道而不是B通道中启动dtmf

解决方案
但是在我的配置中,仅<md-select v-model="myOptionSelected"> <md-option v-for="item in group" v-bind:key="item" :value="item.codigo"> {{item.nome}} </md-option> </md-select> export default { data() { return { myOptionSelected: '', group: [] } } 不起作用
我尝试了另一种在b通道中启用dtmf的方法

set exec_after_bridge_app=start_dtmf

它将在调用建立时在a通道和b通道中执行start_dtmf