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

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

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

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

Asterisk: Spawn extension failed - Priority out of range (Ошибки pbx.c)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В журнале вызовов фиксируется WARNING[7890]: pbx.c: Spawn extension failed: Priority out of range (priority 5 in 'from-internal', exten '100').
  • Звонок внезапно прерывается в середине выполнения логики диалплана.
  • Функция Goto() или GotoIf() ссылается на несуществующий порядковый номер шага (приоритет).
  • Команда dialplan show указывает на пропуски в нумерации строк диалплана.

1. Анализ трассировки вызова в Asterisk CLI

asterisk -vvvvvr
core set verbose 5
core set debug 3

2. Проверка порядка приоритетов в extensions.conf

Классическая ошибка — использование жестких номеров приоритетов с пропусками:

; ОШИБОЧНАЯ КОНФИГУРАЦИЯ:
exten => 100,1,Answer()
exten => 100,2,Playback(welcome)
exten => 100,5,Dial(PJSIP/101)  ; Ошибка: нет приоритетов 3 и 4!

3. Рефакторинг диалплана на использование unnumbered same => n

Перепишите контекст с использованием относительных приоритетов same => n и строковых меток (labels):

[from-internal]
exten => 100,1,NoOp(Старт вызова)
 same => n,Answer()
 same => n,Playback(welcome)
 same => n,GotoIf($["${DEVICE_STATE(PJSIP/101)}" = "UNAVAILABLE"]?offline:online)
 
 same => n(online),Dial(PJSIP/101,20)
 same => n,Hangup()
 
 same => n(offline),Playback(user-offline)
 same => n,VoiceMail(101@default,u)
 same => n,Hangup()

4. Проверка синтаксиса диалплана и перезагрузка

asterisk -rx "dialplan show 100@from-internal"
asterisk -rx "dialplan reload"
💡 Практика специалистов: Всегда начинайте правило строго с приоритета 1 (exten => 100,1,NoOp()), а все последующие команды оформляйте только через same => n. Если первого приоритета нет, весь экстеншен будет проигнорирован парсером.

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

Почему нельзя использовать жесткую нумерацию приоритетов (1, 2, 3...)?

При добавлении новых строк в середину контекста жесткая нумерация требует ручного переписывания всех последующих цифр. Любая ошибка в последовательности приводит к 'Priority out of range'.

Что означает конструкция same => n(label)?

same означает продолжение предыдущего экстеншена; n — автоматический инкремент следующего приоритета (+1); (label) — именованная текстовая метка для безопасных переходов через Goto.

Как синтаксически правильно вызывать Goto по метке?

Синтаксис: Goto([context,][extension,]priority/label). Пример внутри одного экстеншена: Goto(offline) или для другого номера: Goto(from-internal,102,start).

Что происходит при возврате функции n+101 в старых версиях Asterisk?

В устаревших версиях при занятости вызываемого абонента Dial() переходил на приоритет n+101. В современных версиях это поведение отключено, а статус проверяется через переменную ${DIALSTATUS}.

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