Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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