Траблшутинг передачи DTMF: RFC 2833 / 4733 против In-band и SIP INFO
- Голосовое меню (IVR) не реагирует на нажатия клавиш тонального набора абонентом.
- Задвоение цифр при вводе пин-кода или добавочного номера (вместо '1' нажимается '11').
- Домофоны и контроллеры СКУД не открывают дверь по DTMF-коду.
- В логах АТС фиксируются ошибки несоответствия динамического Payload Type.
1. Проверка согласования DTMF в SDP (RFC 4733)
Проверьте наличие атрибута telephone-event в дампе SDP:
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16Если оба плеча вызова не договорились о едином номере Payload Type (обычно 101), тональные сигналы не будут декодированы.
2. Выбор правильного метода передачи DTMF
- RFC 4733 / RFC 2833 (Out-of-band RTP) — золотой стандарт для большинства операторов и IP-АТС.
- SIP INFO — передача цифр через сигнальные SIP-сообщения (часто используется в СКУД и специфических банкоматах).
- In-band — передача тонов непосредственно в аудиопотоке. Работает только с кодеком G.711 (alaw/ulaw) и ломается на компрессированных кодеках G.729/Opus.
3. Настройка в Asterisk PJSIP / FreeSWITCH
Для Asterisk (pjsip.conf):
[endpoint-trunk]
type=endpoint
dtmf_mode=rfc4733
;
; Если оператор требует передачу через SIP INFO:
; dtmf_mode=info4. Устранение задвоения DTMF-сигналов (DTMF Bounce)
Задвоение происходит, когда шлюз транслирует сигнал одновременно через RFC 2833 и пропускает остаточный звук через In-band. Отключите пропуск тонального звука:
# Asterisk sip.conf / pjsip.conf
relaxdtmf=no
# Включение подавления тонов из аудиотракта
dsp_drop_silence=yes Частые вопросы (FAQ)
Почему In-band DTMF не работает при использовании кодека G.729?
Кодек G.729 использует психоакустическую компрессию (CS-ACELP), которая вырезает неречевые частоты. Тональные частоты DTMF искажаются до неузнаваемости и не распознаются декодером IVR.
Что делать, если СКУД принимает DTMF только через SIP INFO?
Настройте транк к панели СКУД с явным указанием dtmf_mode=info (в Asterisk) или dtmf-type=sip-info (в FreeSWITCH) и проверьте наличие заголовка Content-Type: application/dtmf-relay.
Что означает параметр '0-16' в строке a=fmtp:101 0-16?
Он указывает диапазон поддерживаемых событий: цифры 0-9, символы * и #, спецсимволы A-D и событие Flash (сигнал 16).
Как исправить проблему слишком короткого нажатия клавиши абонентом?
Увеличьте длительность генерации тона в настройках шлюза/АТС (параметр minimal DTMF duration, рекомендуется не менее 100 мс).