SIP Error 406 Not Acceptable: несовместимость кодеков и SDP параметров
- Звонок завершается с ответом
SIP/2.0 406 Not Acceptableсразу после INVITE. - Невозможность установить голосовой мост между разнородными абонентами.
- В логах сервера регистрируется ошибка
No compatible codecs foundилиSDP offer unacceptable.
1. Анализ тела SDP в пакете INVITE
sngrep -c port 5060Найдите секцию описания медиа (m=audio ...) и список полезных нагрузок (a=rtpmap). Ошибка 406 означает, что вызываемая сторона не может принять ни один из предложенных кодеков или частот дискретизации.
2. Настройка разрешенных кодеков в Asterisk PJSIP
Отредактируйте /etc/asterisk/pjsip.conf для включения широкого пула совместимых кодеков:
[endpoint_template](!)
type=endpoint
disallow=all
allow=alaw ; G.711a (стандарт РФ/Европа)
allow=ulaw ; G.711u (США)
allow=g729 ; Компрессированный кодек для узких каналов
allow=opus ; HD-аудио3. Проверка модулей транскодинга в Asterisk
asterisk -rx "core show translation"Если матрица трансляции пуста для нужного кодека (например, G.729), установите соответствующий кодек или включите транскодинг в ядре АТС.
Частые вопросы (FAQ)
В чем разница между SIP 406 и SIP 488?
SIP 406 Not Acceptable указывает на неприемлемость параметров самого запроса (например, заголовков Accept/Accept-Language/Accept-Encoding), тогда как SIP 488 Not Acceptable Here относится непосредственно к несовместимости медиапотока SDP.
Почему вызов с кодеком Opus сбрасывается с 406 на мобильных сетях?
Операторы ТфОП/PSTN принимают только стандартный кодек G.711 (alaw/ulaw). Если на вашей АТС выключен транскодинг, шлюз оператора вернет ошибку несовместимости.