Звездочка DTMF иногда игнорируется (но только для некоторых людей)
У меня очень странная проблема, и я даже не знаю, с чего начать.
Мы используем AGI и библиотеки Java для представления IVR, но получили жалобы от пользователей на то, что их нажатия клавиш игнорируются.
В моем sip.conf под общим разделом я определил DTMF следующим образом (строка "relax" закомментирована):
dtmfmode = rfc2833
;relaxdtmf=yes
Я подтвердил провайдеру, что это должен быть rfc2833, поскольку именно это они специально настроили для нас.
Я включил уровень отладки dtmf в моем файле logger.conf в мой файл сообщений:
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 ответ
Да, это, как правило, со стороны провайдеров, потому что сигнал отправляется / принимается от провайдеров, всегда старайтесь использовать разные режимы dtmf.