0

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

我们正在使用 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;

我对此感到不知所措,尤其是因为并不是每个人都会发生这种情况。我什至会从哪里开始寻找/调试这样的东西?

先感谢您!

4

1 回答 1

0

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

于 2014-11-18T06:13:06.200 回答