Если 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, я могу проверить цепочку звонка и исправить конкретную причину.