我有一个非常奇怪的问题,甚至不知道从哪里开始看。
我们正在使用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;
我对此感到茫然,特别是因为并非所有人都会这样做。我甚至会在哪里开始寻找/调试这样的东西?
提前谢谢!
答案 0 :(得分:0)
是的,它通常来自提供商端,因为信号是从提供商发送/接收的,总是尝试使用不同的dtmf模式。