Asterisk DTMF有时会被忽略(但仅限某些人)

时间:2011-12-05 19:39:44

标签: java asterisk dtmf agi

我有一个非常奇怪的问题,甚至不知道从哪里开始看。

我们正在使用AGI和Java库来呈现IVR,但是用户抱怨他们的按键被忽略了。

在我的 sip.conf 中,在一般部分下,我将DTMF定义为这样(“放松”行被注释掉):

dtmfmode = rfc2833
;relaxdtmf=yes

我已经向提供商确认它应该 rfc2833 ,因为这是他们为我们专门配置的。

我将 logger.conf 中的 dtmf 调试级别设置为消息文件:

messages => notice,warning,error,dtmf

我现在看到这样的行:

DTMF[8744] channel.c: DTMF begin '1' received on SIP/veracity-00005052
DTMF[8744] channel.c: DTMF begin ignored '1' on SIP/veracity-00005052
DTMF[8744] channel.c: DTMF end '1' received on SIP/veracity-00005052, duration 270 ms
DTMF[8744] channel.c: DTMF end passthrough '1' on SIP/veracity-00005052
DTMF[8741] channel.c: DTMF begin '1' received on SIP/veracity-00005056
DTMF[8741] channel.c: DTMF begin ignored '1' on SIP/veracity-00005056
DTMF[8741] channel.c: DTMF end '1' received on SIP/veracity-00005056, duration 415 ms
DTMF[8741] channel.c: DTMF end passthrough '1' on SIP/veracity-00005056

它说,“忽略”的事实让我感到担忧,但我没有阅读任何可能表明这是不受欢迎行为的信息或论坛帖子。

接收输入的Java代码如下所示。基本上它表示返回的任何数字或 - 如果它为零 - 重放菜单。

char key = 0;

if ( validOptions.contains( "1" ) )
    key = agiChan.streamFile( menu( "menu1" ), validOptions );

if ( validOptions.contains( "2" ) && key == 0 )
    key = agiChan.streamFile( menu( "menu2" ), validOptions );

if ( validOptions.contains( "3" ) && key == 0 )
    key = agiChan.streamFile( menu( "menu3" ), validOptions );

if ( !validOptions.contains( "1" ) && !validOptions.contains( "2" ) && key == 0 )
    key = agiChan.streamFile( menu( "menu4" ), validOptions );

if ( key == 0 )
    key = agiChan.waitForDigit( 5000 );

return key;

我对此感到茫然,特别是因为并非所有人都会这样做。我甚至会在哪里开始寻找/调试这样的东西?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

是的,它通常来自提供商端,因为信号是从提供商发送/接收的,总是尝试使用不同的dtmf模式。