我有一个非常奇怪的问题,甚至不知道从哪里开始寻找。
我们正在使用 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;
我对此感到不知所措,尤其是因为并不是每个人都会发生这种情况。我什至会从哪里开始寻找/调试这样的东西?
先感谢您!