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

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

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

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

Asterisk: sig_pri.c Received DISCONNECT cause code 21 (Call rejected)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В консоли Asterisk выводится WARNING: sig_pri.c: Received DISCONNECT with cause code 21 (Call rejected).
  • Исходящий вызов в город прерывается сразу после отправки SETUP.
  • SIP-абоненты видят завершение вызова с ошибкой SIP/2.0 403 Forbidden или SIP/2.0 603 Declined.
  • В дампе PRI возвращается Cause: [21] Call rejected.

1. Анализ диагностических данных в PRI дампе

Включите расширенный трейс PRI:

asterisk -rx "pri set debug on span 1"

Изучите диагностические байты в структуре Cause IE:

-- PRI Span: 1 < DISCONNECT (len 9) [ 08 02 81 95 ]
-- PRI Span: 1 < Cause: [21] Call rejected (Location: Public network serving the local user)

2. Проверка соответствия исходящего CallerID (А-номера)

Операторы ISDN PRI отклоняют вызовы с кодом 21 при подмене А-номера на несогласованный:

[macro-outbound-callerid]
exten => s,1,Set(CALLERID(num)=74955550199)
same => n,Set(CALLERID(ANI-num)=74955550199)
same => n,Set(CALLERID(pres)=allowed)
same => n,Dial(DAHDI/g1/${ARG1})

3. Проверка параметров канала в chan_dahdi.conf

Проверьте права на передачу CallerID и категорию номера:

[channels]
usecallingpres=yes
sendcallerid=yes
hidecallerid=no
callerid=asreceived
switchtype=euroisdn
signalling=pri_cpe
channel => 1-15,17-31

4. Обработка ошибки 21 в диалплане для резервного маршрута

exten => _89XXXXXXXXX,1,Dial(DAHDI/g1/${EXTEN},30)
same => n,GotoIf($["${HANGUPCAUSE}" = "21"]?failover:end)
same => n(failover),Verbose(1, [PRI-FAILOVER] Primary E1 rejected call, routing through PJSIP Trunk)
same => n,Dial(PJSIP/${EXTEN}@backup-sip-provider,30)
same => n(end),Hangup(${HANGUPCAUSE})
💡 Практика специалистов: Cause 21 на PRI линиях почти всегда означает административную блокировку оператора связи из-за несоответствия А-номера договору (Anti-Spoofing законодательство).

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

Почему оператор возвращает Q.931 Cause 21?

Основные причины: блокировка аккаунта оператором за неуплату, запрет на совершение международных/междугородних вызовов, поддельный или незарегистрированный CallerID, либо отсутствие прав на вызов по тарифному плану.

Какой SIP-статус формирует Asterisk при получении Cause 21?

Asterisk транслирует Q.931 Cause 21 в статус SIP 603 (Declined) или SIP 403 (Forbidden) в зависимости от контекста сессии.

Что означает параметр usecallingpres=yes в chan_dahdi.conf?

Параметр предписывает Asterisk передавать флаги приватности и презентации CallerID (Presentation Allowed / Restricted) в сигнальный поток ISDN PRI.

Может ли Cause 21 вызываться нехваткой каналов B-каналов?

Нет, при нехватке B-каналов оператор возвращает Cause 34 (Circuit/channel congestion) или Cause 44 (Requested channel not available).

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