Если IVR не принимает тоновый набор, абонент слышит меню, нажимает цифру, но сценарий не меняется или выбирается неверный пункт. Чаще всего голос передается нормально, а DTMF идет другим способом и теряется между телефоном, оператором, шлюзом и АТС.
Не меняйте весь диалплан сразу. Сделайте два тестовых звонка, включите SIP-лог и определите, появляется ли событие нажатия на входе в АТС. Это быстро разделит проблему провайдера и ошибку обработки внутри IVR.
Что сделать в первую очередь
- Запишите номер, время звонка, выбранную цифру и направление вызова.
- Проверьте, воспроизводится ли ошибка с мобильного и стационарного номера.
- Включите журнал SIP или DTMF только на время теста, не сохраняя лишние персональные данные.
- Уточните, какой режим ожидает АТС: RFC 4733, SIP INFO или in-band.
Почему возникает проблема
Симптом обычно появляется не из-за одной настройки. Сначала разделите путь данных на этапы и найдите место, где фактическое поведение расходится с ожидаемым.
- Одна сторона отправляет RFC 4733, а другая ожидает SIP INFO.
- In-band DTMF искажается голосовым кодеком или транскодированием.
- Провайдер удаляет telephone-event из согласованного SDP.
- Диалплан принимает цифры до завершения приветствия или в неправильном контексте.
Пошаговая диагностика
- Найдите в SDP строку telephone-event и согласованный payload type.
- Проверьте, видит ли Asterisk события DTMF begin и end с нужной цифрой.
- Сравните входящий и исходящий участки звонка, если между ними есть шлюз.
- Временно исключите транскодирование и повторите тест с G.711.
- Проверьте таймаут ожидания, допустимые цифры и переходы в IVR-контексте.
Как исправить
Исправляйте подтвержденную первопричину и сохраняйте возможность отката. После каждого изменения повторяйте один и тот же контрольный сценарий, чтобы не спутать результат нескольких правок.
- Установите единый режим DTMF на транке и конечном устройстве.
- Для RTP-событий согласуйте RFC 4733 и корректный payload в SDP.
- Если используется in-band, оставьте кодек без потерь и уберите лишнее транскодирование.
- Исправьте последовательность Background, WaitExten и обработчиков invalid и timeout.
- Перезагрузите только измененный диалплан или транк и сохраните предыдущую конфигурацию.
Как проверить результат
- Каждая цифра распознается один раз и ведет в правильную ветку.
- Проверка проходит у нескольких операторов связи и на разных устройствах.
- В журнале нет двойных событий, неизвестных payload и преждевременного timeout.
Как не допустить повторения
- Фиксируйте режим DTMF в документации каждого SIP-транка.
- После смены провайдера или кодеков запускайте короткий тест всех пунктов IVR.
- Добавьте мониторинговый звонок, проверяющий критические ветки меню.
Частые вопросы
Почему цифры работают во время разговора, но не в IVR?
Разные участки звонка могут использовать разные режимы передачи DTMF. Нужен лог именно входа в голосовое меню.
Нужно ли отключать сжатие голоса?
Не всегда. Для RFC 4733 DTMF идет отдельно от аудио, а при in-band кодек действительно может искажать сигнал.
Когда стоит обратиться за помощью
Если в цепочке несколько транков, шлюзов или серверов, соберите один тестовый call flow и журналы обеих сторон. Так можно точно определить участок потери DTMF без перебора всех настроек.
Итог
Рабочий IVR должен одинаково принимать цифры независимо от устройства абонента. Если нужна диагностика SIP-трассы, диалплана и настройка DTMF, я могу проверить цепочку звонка и исправить конкретную причину.