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

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

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

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

Asterisk: DISCONNECT with cause code 16 - Normal call clearing (Q.850)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В журнале вызовов фиксируется WARNING[6789]: sig_pri.c: Received DISCONNECT with cause code 16 (Normal call clearing) on channel 0/1.
  • Звонок завершается штатно со стороны одного из участников разговора (абонент повесил трубку).
  • В CDR поле disposition получает статус ANSWERED или BUSY.
  • В дампе Q.931 отображается сообщение DISCONNECT (0x45) -> Cause: 16 (Normal call clearing).

1. Интерпретация кода Q.850 Cause 16

Код Cause 16 (Normal Call Clearing) является штатным статусом телефонии по стандарту ITU-T Q.850. Он указывает, что соединение было успешно разорвано по инициативе одного из абонентов (повешена трубка) или логикой диалплана (команда Hangup()).

2. Проверка инициатора сброса в PRI Debug

asterisk -rx "pri set debug 2 span 1"
# Анализ направления сообщения DISCONNECT:
# Если '-- < [08 02 81 90]' (стрелка влево) — трубку повесил оператор связи/городской абонент.
# Если '-- > [08 02 81 90]' (стрелка вправо) — трубку повесил Asterisk/внутренний абонент.

3. Предотвращение ложных срабатываний в extensions.conf

Если вызовы обрываются слишком быстро с кодом 16, проверьте таймауты в диалплане:

[outgoing-calls]
exten => _X.,1,NoOp(Вызов абонента)
 same => n,Dial(DAHDI/g1/${EXTEN},45,tT) ; Убедитесь, что таймаут не равен 0 или слишком мал
 same => n,NoOp(Причина отбоя HANGUPCAUSE: ${HANGUPCAUSE})
 same => n,Hangup()

4. Отключение избыточного логирования нормального отбоя

В /etc/asterisk/logger.conf исключите уровень предупреждений для штатных сообщений:

console => notice,warning,error
messages => notice,warning,error
💡 Практика специалистов: Если клиенты жалуются на обрывы, а в логах фиксируется Cause 16, проверяйте направление стрелок в pri set debug: в 99% случаев трубку кладет сам клиент, либо мобильный оператор клиента принудительно рвет звонок по достижении 30 или 60 минут разговора.

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

Является ли Cause 16 ошибкой?

Нет. Cause 16 — это стандартный информационный код успешного завершения звонка без сбоев оборудования или сети.

Какой SIP ответ соответствует ISDN Cause 16?

Если звонок уже был отвечен, Cause 16 транслируется в SIP-запрос BYE с заголовком Reason: Q.850;cause=16. Если звонок отменен до ответа — в SIP 200 OK на CANCEL.

Почему Asterisk пишет WARNING в лог для Cause 16?

В некоторых версиях Asterisk модуль sig_pri выводит все события DISCONNECT с уровнем WARNING, если в канале были активны специфические сервисные таймеры или трансляции.

Как получить код причины завершения в диалплане?

Используйте стандартную переменную канала ${HANGUPCAUSE}. Она вернет числовое значение по стандарту ITU-T Q.850 (например, 16, 17, 34).

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