SIP Error 600 Busy Everywhere: глобальная занятость абонента и режим DND
- Входящий вызов немедленно сбрасывается с кодом
600 Busy Everywhere. - Вызов не переходит на голосовую почту или следующего оператора в группе (Queue / Ring Group).
- На IP-телефоне абонента горит индикатор 'Не беспокоить' (DND / Do Not Disturb).
- В логах АТС фиксируется прерывание цепочки обработки правил диалплана (Forking/Hunt Groups остановлены).
1. Архитектурное отличие 600 Busy Everywhere от 486 Busy Here
Код 486 Busy Here указывает, что занят конкретный терминал, но прокси-сервер может продолжить поиск абонента на других устройствах (параллельный форкинг) или перевести вызов на голосовую почту. Код 600 Busy Everywhere — это глобальный отказ: вызываемый абонент занят на всех возможных устройствах, и система обязана немедленно прекратить любые попытки поиска (RFC 3261 §21.6.1).
2. Диагностика причины отказа в Asterisk CLI
asterisk -rvvv
core set debug 3
pjsip set logger onВ выводе консоли найдите ответ от SIP-устройства:
<--- Received SIP response (452 bytes) to id 1421 --->
SIP/2.0 600 Busy Everywhere
Via: SIP/2.0/UDP 192.168.1.10:5060;branch=z9hG4bK-12345
From: "Manager" ;tag=as123
To: ;tag=phone-tag
Reason: SIP;cause=600;text="DND Activated" 3. Отключение аппаратного режима DND на IP-телефонах (Yealink, Fanvil, Grandstream)
Если телефон абонента отправляет 600 вместо внутреннего сервисного кода АТС:
- Перейдите в Web-интерфейс телефона: Features -> Forward & DND -> DND.
- Переключите режим DND в Disabled либо переведите тип DND в Server Side DND (чтобы телефоном управляла АТС, а не локальный чипсет).
- В файле автопровижининга
y0000000000XX.cfg(Yealink) задайте:
features.dnd.enable = 0
features.dnd_mode = 0
features.dnd_code_on = *78
features.dnd_code_off = *794. Перехват и трансляция кода 600 в 486 внутри Asterisk Dialplan
Чтобы ошибка 600 не ломала очереди колл-центра, перехватите статус канала в extensions.conf:
[internal-calls]
exten => _1XX,1,NoOp(Вызов абонента ${EXTEN})
same => n,Dial(PJSIP/${EXTEN},30)
same => n,GotoIf($["${HANGUPCAUSE}" = "17"]?handle_busy:hangup)
same => n(handle_busy),NoOp(Абонент занят глобально - переводим на IVR/Voicemail)
same => n,VoiceMail(${EXTEN}@default,b)
same => n(hangup),Hangup() Частые вопросы (FAQ)
Почему при ошибке 600 звонок не переходит на второго секретаря в группе?
Согласно RFC 3261, статус 6xx является категорическим глобальным отказом (Global Failure). Получив 600, SIP-прокси обязан прекратить перебор всех параллельных ветвей вызова.
Какой ISDN Cause Code соответствует SIP 600?
SIP коду 600 соответствует ISDN Q.850 Cause Code 17 (User busy).
Может ли транк оператора возвращать 600 Busy Everywhere?
Да, если оператор фиксирует исчерпание лимита одновременных вызовов (CPS / Channel Limit) по контракту, либо если номер назначения находится в глобальном черном списке на платформе связи.
Как в FreePBX запретить IP-телефонам слать локальный DND 600?
Включите модуль Asterisk Phone Apps / Commercial Endpoint Manager и настройте 'Server-Side DND', чтобы нажатие кнопки DND на телефоне отправляло SIP NOTIFY / Feature Code на сервер, а не блокировало стек телефона.