Траблшутинг раннего медиа (Early Media): гудки и автоответчики (183 vs 180)
- Тишина вместо длинных гудков (КПВ) при исходящем звонке вплоть до момента снятия трубки.
- Абонент не слышит голосовые сообщения оператора ('Абонент временно недоступен', 'Неверно набран номер').
- Первые секунды приветствия автоответчика срезаются при ответе
200 OK. - Ранний медиапоток блокируется межсетевым экраном до подтверждения соединения.
1. Архитектурная разница между 180 Ringing и 183 Session Progress
- 180 Ringing (без SDP): указание вызывающему телефону генерировать стандартный тональный сигнал КПВ (гудки) локально из своей памяти.
- 183 Session Progress (с телом SDP): указание немедленно открыть RTP-сессию и воспроизводить медиапоток из сети (Early Media) — реальные гудки АТС оператора или голосовые фразы.
2. Анализ пакета 183 в дампе Wireshark
Убедитесь, что пакет 183 содержит валидный блок SDP:
SIP/2.0 183 Session Progress
Via: SIP/2.0/UDP 192.168.1.10:5060;rport;branch=z9hG4bK123
Content-Type: application/sdp
v=0
c=IN IP4 203.0.113.50
m=audio 16420 RTP/AVP 8 1013. Принудительная генерация Early Media на Asterisk
Если оператор шлет 183, но RTP не передает (в трубке тишина), используйте команды диалплана для принудительного прогрева медиа или подстановки тонов:
# Генерация КПВ для вызывающего абонента
exten => _X.,1,Progress() ; Отправляет 183 с SDP
exten => _X.,n,Ringing() ; Отправляет 180 Ringing
exten => _X.,n,Dial(PJSIP/${EXTEN}@trunk,,r) ; Флаг 'r' генерирует гудки принудительно4. Настройка надежной доставки через PRACK (RFC 3262)
Если промежуточный 183 теряется на UDP, включите механизм PRACK на транке:
# Asterisk pjsip.conf
[endpoint]
100rel = yes Частые вопросы (FAQ)
Почему флаг 'r' в команде Dial в Asterisk может мешать?
Флаг 'r' принудительно заглушает Early Media от оператора и заменяет его стандартными гудками, из-за чего абонент не услышит реальное сообщение 'Номер заблокирован' или 'Недостаточно средств'.
Что такое Early Bridge?
Это соединение медиапотоков вызывающего и вызываемого абонентов до отправки окончательного ответа 200 OK (на этапе 183 Session Progress).
Почему фаервол сбрасывает RTP-пакеты раннего медиа?
Некоторые Statefull Firewall не пропускают входящий UDP-трафик на порт, пока от внутреннего клиента не уйдет хотя бы один исходящий UDP-пакет (требуется symmetric RTP).
Что означает заголовок Require: 100rel в INVITE?
Он требует обязательной поддержки механизма надежной доставки предварительных ответов (18x) с использованием квитирования запросом PRACK.