Голосовое меню АТС (IVR) не реагирует на нажатия цифр: настройка DTMF
Симптомы сбоя тонального набора:
- Клиент звонит в компанию, робот говорит: «Нажмите 1 для связи с отделом продаж», клиент нажимает единицу, но ничего не происходит — запись играет дальше.
- После окончания приветствия звонок сбрасывается или уходит по таймауту на секретаря.
- В логах консоли Asterisk отсутствуют события
DTMF tone received. - С одних моделей мобильных телефонов цифры срабатывают, а с других — игнорируются.
Шаг 1. Разница между стандартами передачи DTMF сигналов
DTMF (Dual-Tone Multi-Frequency) — это передача нажатий кнопок телефона в цифровой канал связи. Существует 3 основных режима:
- RFC2833 (или RFC4733 / telephone-event): Общепринятый мировой индустриальный стандарт. Звук нажатия кнопки изымается из аудиопотока и передается отдельными надежными служебными пакетами. (Рекомендуется в 99% случаев).
- Inband (Внутриполосный): Звук писка клавиши передается прямо внутри голоса. Работает нестабильно, так как сжимающие кодеки (G.729, GSM) искажают частоту звука, и АТС не может его распознать.
- SIP INFO: Нажатия клавиш отправляются текстовыми командами протокола сигнализации SIP.
Шаг 2. Настройка DTMF в Asterisk для PJSIP (pjsip.conf)
Откройте настройки конечной точки (endpoint) или транка провайдера:
[my-trunk]
type=endpoint
dtmf_mode=rfc4733 ; Либо rfc2833 в старых версиях
[101-endpoint]
type=endpoint
dtmf_mode=rfc4733Шаг 3. Настройка DTMF в Asterisk для старого chan_sip (sip.conf)
[general]
dtmfmode=rfc2833
[trunk-provider]
type=peer
dtmfmode=rfc2833Шаг 4. Включение отладки DTMF в реальном времени
Чтобы точно увидеть, приходят ли цифры от звонящего, выполните команду в консоли:
asterisk -rx "pjsip set logger on"
; Либо включить логирование DTMF:
asterisk -rx "core set debug 1"
asterisk -rx "logger reload" Частые вопросы (FAQ)
Почему при звонках внутри офиса цифры работают, а от внешних клиентов нет?
Внутренние телефоны используют режим RFC2833, а на внешнем SIP-транке телефонного оператора выставлен несовпадающий режим (например, SIP INFO или Inband). Режим DTMF на транке в Asterisk должен строго совпадать с настройками провайдера.
Может ли кодек G.729 ломать работу голосового меню?
Да, при режиме 'Inband' кодек G.729 сжимает звук с потерями, делая распознавание тонов невозможным. При использовании G.729 передача DTMF обязана работать строго по стандарту RFC2833/RFC4733.
Что такое параметр relaxdtmf в Asterisk?
Опция relaxdtmf=yes в конфигурационном файле заставляет ядро Asterisk менее строго анализировать длительность тонального сигнала, помогая распознавать нажатия со старых или бракованных телефонных аппаратов.
Почему одна цифра при нажатии двоится (вместо '1' нажимается '11')?
Это происходит при дублировании: телефон одновременно отправляет нажатие и как Inband-звук в голосе, и как пакет RFC2833. В настройках телефона отключите параллельную отправку тонов.