Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

IVR_DTMF_UNRECOGNIZED IP-Телефония и СКУД

Настройка голосового меню (IVR) в Asterisk: многоуровневая маршрутизация и распознавание DTMF

Обновлено: 24.08.2026 · Официальная документация ↗
  • Абонент нажимает цифры на клавиатуре телефона в голосовом меню, но Asterisk не реагирует на нажатия (DTMF ignored).
  • Зацикливание IVR-меню или обрыв звонка при неправильном вводе добавочного.
  • Двойное срабатывание цифр при однократном нажатии (DTMF Bounce / Duplication).
  • Аудиофайл приветствия прерывается с задержками или воспроизводится с металлическим скрежетом.

1. Настройка согласования DTMF в PJSIP

Убедитесь, что в pjsip.conf для всех эндпоинтов выставлен режим rfc4733 (RFC 2833):

[endpoint-template](!)
type=endpoint
dtmf_mode=rfc4733
use_callerid=yes

2. Создание многоуровневого IVR в extensions.conf

; --- Главное меню компании ---
[ivr-main]
exten => s,1,NoOp(Starting IVR Main Menu)
 same => n,Answer(500)
 same => n,Set(TIMEOUT(digit)=3)
 same => n,Set(TIMEOUT(response)=7)
 same => n,Set(IVR_TRIES=0)
 same => n(play_menu),Background(/var/lib/asterisk/sounds/custom/ivr-welcome-menu)
 same => n,WaitExten()

; Варианты выбора
exten => 1,1,NoOp(Selected: Sales Department)
 same => n,Queue(sales_queue,tTkK,,,60)
 same => n,Hangup()

exten => 2,1,NoOp(Selected: Support Department)
 same => n,Goto(ivr-support-submenu,s,1)

exten => 3,1,NoOp(Selected: Accounting)
 same => n,Dial(PJSIP/301,25)
 same => n,Hangup()

; Прямой донабор внутреннего трехзначного номера
exten => _[1-8]XX,1,NoOp(Direct Extension Dialing: ${EXTEN})
 same => n,Dial(PJSIP/${EXTEN},30)

; Обработка неверного ввода
exten => i,1,NoOp(Invalid Option Selected)
 same => n,Playback(/var/lib/asterisk/sounds/custom/invalid-choice)
 same => n,Goto(s,play_menu)

; Обработка таймаута бездействия
exten => t,1,NoOp(Timeout waiting for DTMF)
 same => n,Set(IVR_TRIES=$[${IVR_TRIES} + 1])
 same => n,GotoIf($[${IVR_TRIES} >= 2]?operator:retry)
 same => n(retry),Goto(s,play_menu)
 same => n(operator),Playback(/var/lib/asterisk/sounds/custom/transferring-operator)
 same => n,Dial(PJSIP/100,30)
 same => n,Hangup()

; --- Вложенное подменю техподдержки ---
[ivr-support-submenu]
exten => s,1,NoOp(Starting Support Submenu)
 same => n,Background(/var/lib/asterisk/sounds/custom/ivr-support-options)
 same => n,WaitExten(5)

exten => 1,1,Queue(hardware_support,t,,,60)
exten => 2,1,Queue(software_support,t,,,60)
exten => 0,1,Goto(ivr-main,s,play_menu) ; Возврат в главное меню

3. Подготовка качественных аудиофайлов приветствия

# Конвертация в нативный формат Asterisk (8kHz, 16bit, Mono PCM WAV)
ffmpeg -i raw_welcome.mp3 -ar 8000 -ac 1 -ab 16 -c:a pcm_s16le /var/lib/asterisk/sounds/custom/ivr-welcome-menu.wav
💡 Практика специалистов: Всегда переводите аудиозаписи IVR в нативный формат Alaw/WAV (8 кГц, 16 бит моно) или используйте специализированные форматы .alaw/.ulaw. Это исключает транскодирование аудио при каждом входящем вызове и экономит ресурсы CPU.

Частые вопросы (FAQ)

В чем разница между командами Playback и Background в IVR?

Playback полностью блокирует выполнение диалплана до окончания воспроизведения аудиофайла, игнорируя нажатия клавиш. Background воспроизводит аудио в фоновом режиме и мгновенно перехватывает нажатия цифр DTMF, прерывая воспроизведение.

Почему при нажатии цифры 1 срабатывает ввод 11?

Это эффект дублирования DTMF (DTMF Duplication), возникающий, когда шлюз/провайдер передает сигнал одновременно и как RFC4733 событие, и как звук внутри полосы (Inband). Убедитесь, что на всех узлах выбран единый метод RFC2833/RFC4733.

Как разрешить звонящему сразу набрать добавочный номер без прослушивания IVR?

Используйте шаблоны экстеншенов (например, _[1-8]XX) прямо внутри контекста IVR. Функция WaitExten() или Background() сопоставит введенную комбинацию с шаблоном.

Что делают экстеншены 'i' и 't' в контексте голосового меню?

Экстеншен 'i' (Invalid) срабатывает, если абонент нажал клавишу, которой нет в меню. Экстеншен 't' (Timeout) срабатывает по истечении времени ожидания ответа TIMEOUT(response).

Полезные материалы
Рекомендуем