【发布时间】:2011-12-05 19:39:44
【问题描述】:
我有一个非常奇怪的问题,甚至不知道从哪里开始。
我们正在使用 AGI 和 Java 库来呈现 IVR,但收到了用户抱怨他们的按键被忽略的投诉。
在我的 sip.conf 中,在 general 部分下,我有这样定义的 DTMF(“放松”行被注释掉):
dtmfmode = rfc2833
;relaxdtmf=yes
我已与提供商确认应该是 rfc2833,因为这是他们专门为我们配置的。
我在 logger.conf 中为我的 messages 文件打开了 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 代码如下所示。基本上,它会执行 key 返回的任何数字,或者 - 如果它为零 - 重播菜单。
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;
我对此感到茫然,尤其是因为并非所有人都会发生这种情况。我什至会从哪里开始寻找/调试这样的东西?
提前谢谢你!
【问题讨论】:
-
快速更新:我取消了“relaxdtmf”行的注释并将其设置为“是”。我会查看日志文件,看看我是否仍然被忽略输入。
-
我们的提供商对他们进行了更改,问题似乎已经消失。我仍然不知道原因(甚至解决方案)。