Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Q931_CAUSE_17_USER_BUSY IP-Телефония и СКУД

Asterisk: sig_pri.c Received DISCONNECT cause code 17 (User busy)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В CLI Asterisk появляется предупреждение WARNING: sig_pri.c: Received DISCONNECT with cause code 17 (User busy).
  • Вызывающий абонент слышит сигнал «занято» или короткие гудки при звонке через цифровой поток E1/T1 (ISDN PRI).
  • SIP-клиенты получают ответ SIP/2.0 486 Busy Here или SIP/2.0 600 Busy Everywhere.
  • В дампе DAHDI PRI фиксируется кадр Q.931 DISCONNECT с информационным элементом Cause: [17] User busy.

1. Анализ трассировки ISDN PRI

Включите расширенную отладку DAHDI/PRI на консоли Asterisk:

asterisk -rvvv
pri set debug on span 1

Убедитесь, что удаленная АТС или оператор действительно возвращает статус занятости терминала:

-- PRI Span: 1 < DISCONNECT (len 9) [ 08 02 81 91 ]
-- PRI Span: 1 < Cause: [17] User busy (Location: Private network serving the local user)

2. Корректная обработка статуса в extensions.conf

Перехватывайте переменную ${HANGUPCAUSE} и ${DIALSTATUS} для перенаправления вызова на голосовую почту или резервный номер:

[outgoing-e1]
exten => _XXXX,1,Dial(DAHDI/g1/${EXTEN},30)
same => n,Goto(s-${DIALSTATUS},1)

exten => s-BUSY,1,Verbose(1, [ISDN-PRI] Abonent ${EXTEN} is busy, HANGUPCAUSE is ${HANGUPCAUSE})
same => n,Playback(user-busy-short)
same => n,Voicemail(${EXTEN}@default,b)
same => n,Hangup(17)

exten => s-NOANSWER,1,Playback(no-answer)
same => n,Hangup(19)

exten => _s-.,1,Hangup(16)

3. Проверка параметров сигнализации в chan_dahdi.conf

Убедитесь, что switchtype и signalling соответствуют спецификации оператора связи:

[channels]
switchtype=euroisdn
signalling=pri_cpe
pridialplan=unknown
prilocaldialplan=unknown
resetinterval=never
overlapdial=no
group=1
channel => 1-15,17-31

4. Отключение отладки после завершения диагностики

pri set debug off span 1
💡 Практика специалистов: Если Cause 17 приходит мгновенно (менее 100 мс после отправки SETUP), проверяйте включенный режим DND на терминале абонента или правила черного списка в маршрутизаторе оператора.

Частые вопросы (FAQ)

Является ли Cause 17 критической ошибкой Asterisk?

Нет, Cause 17 — это штатный код завершения вызова по спецификации ITU-T Q.850 / Q.931, сигнализирующий о том, что вызываемый абонент разговаривает по другой линии или отклонил входящий вызов.

Какой SIP-код соответствует Q.931 Cause 17?

По RFC 3398 код Q.931 Cause 17 (User busy) транслируется модулем chan_pjsip / chan_sip в статус SIP 486 (Busy Here).

Почему оператор возвращает Cause 17 при свободной трубке абонента?

Такое возможно при некорректно настроенном количестве одновременных линий (Call Waiting отключен на АТС), блокировке DND (Не беспокоить) или лимите транковых каналов на стороне вышестоящего провайдера.

Как принудительно вернуть SIP 486 вызывающему клиенту при Cause 17?

Используйте в диалплане команду Hangup(17). Asterisk автоматически преобразует этот ISDN Cause в ответ SIP 486 Busy Here.

Полезные материалы
Рекомендуем