Asterisk: sig_pri.c Received DISCONNECT cause code 17 (User busy)
- В 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-314. Отключение отладки после завершения диагностики
pri set debug off span 1 Частые вопросы (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.