SIP 491 Request Pending: состояние Glare и гонки Re-INVITE запросов
Сбои во время активного разговора при выполнении дополнительных функций обслуживания вызова:
- Ошибка или зависание при попытке поставить звонок на удержание (Hold), снять с удержания или выполнить перевод (Transfer).
- В сигнальном логе регистрируется статус
SIP/2.0 491 Request Pending. - Обе стороны одновременно отправили запрос
re-INVITEилиUPDATEвнутри существующего диалога (Glare Condition). - Некорректная обработка раннего медиа при одновременной перепосылке кодеков или сессионных таймеров.
1. Механизм возникновения состояния Glare (RFC 3261 Раздел 14.2)
Состояние Glare возникает, когда узел UAC отправляет re-INVITE, еще не получив финального ответа (200 OK / 4xx) на ранее отправленный запрос, либо когда оба терминала шлют re-INVITE навстречу друг другу одновременно.
2. Проверка алгоритма случайной задержки (Backoff Timer)
Согласно спецификации, при получении 491 узел обязан выждать случайный интервал времени перед повторной отправкой re-INVITE:
- Для владельца начального вызова (Caller/Owner): случайное время от
2.1до4.0секунд. - Для вызываемой стороны (Callee/Non-owner): случайное время от
0.0до2.0секунд.
Убедитесь, что прошивка IP-телефона или шлюза реализует стандартный таймер Backoff и не отправляет re-INVITE мгновенно.
3. Оптимизация таймеров сессий (Session Timers) во FreePBX / Asterisk
Частой причиной Glare являются автоматические запросы подтверждения активности сессии (Session Refresh). Настройте pjsip.conf:
[my_endpoint]
type=endpoint
timers=yes
timers_min_se=90
timers_sess_expires=1800
; Использовать UPDATE вместо re-INVITE для обновления сессий:
session_refresh_method=UPDATE4. Отключение Direct Media (Re-invites) при сбоях переводов
Если софтсвич пытается перевести медиа-поток напрямую между телефонами (Direct Media / canreinvite) в момент удержания:
[my_endpoint]
type=endpoint
direct_media=noЭто заставит медиатрафик всегда проходить через АТС, исключая гонки сигнальных пакетов между телефонами.
Частые вопросы (FAQ)
Что такое состояние Glare в SIP?
Glare (состояние гонки) — ситуация, когда обе стороны диалога одновременно генерируют транзакцию изменения параметров сессии (re-INVITE или UPDATE) до завершения предыдущей транзакции.
Является ли ошибка 491 фатальной для звонка?
Нет, 491 не разрывает текущую сессию разговора. Она лишь отменяет конкретный re-INVITE и предписывает клиенту повторить попытку изменения параметров через расчетный интервал времени.
Как метод UPDATE помогает снизить вероятность 491?
Метод UPDATE (RFC 3311) может выполняться без создания нового состояния диалога и с меньшим количеством промежуточных фаз, снижая временное окно возникновения коллизий.
Почему 491 часто возникает при интеграциях с CRM?
Если интеграционный модуль CRM шлет команду перевода вызова через AMI/ARI ровно в тот момент, когда пользователь нажимает кнопку Hold на физическом телефоне, их запросы сталкиваются, вызывая 491.