Asterisk: Member in queue is paused or unavailable (Ошибки app_queue)
- В логах фиксируется
NOTICE[0123]: app_queue.c: Member 'PJSIP/101' in queue 'support' is paused or unavailable (Max wait exceeded). - Входящие звонки клиентов не распределяются на операторов и сбрасываются по таймауту.
- Клиенты бесконечно слушают музыку на удержании (MOH) или попадают в сценарий переполнения.
- Команда
queue show <имя_очереди>показывает, что все операторы находятся в статусе(paused)или(Unavailable).
1. Просмотр текущего состояния очередей и операторов
asterisk -rx "queue show support"2. Настройка файла /etc/asterisk/queues.conf
Скорректируйте параметры распределения вызовов и поведение при отсутствии доступных операторов:
[support]
strategy = rrmemory
timeout = 15
retry = 2
wrapuptime = 10
maxlen = 20
; Выход из очереди, если нет свободных операторов
joinempty = strict
leavewhenempty = strict
; Автоматическое снятие паузы / контроль статуса
autopause = yes
autopausedelay = 60
ringinuse = no
setinterfacevar = yes3. Снятие всех операторов с паузы через CLI
asterisk -rx "queue unpause member PJSIP/101 queue support"
# Либо снять со всех очередей сразу:
asterisk -rx "queue unpause member PJSIP/101"4. Обработка переполнения и пустоты очереди в extensions.conf
[incoming-queue]
exten => 800,1,NoOp(Поступление в очередь поддержки)
same => n,Answer()
same => n,Queue(support,t,,,120)
same => n,NoOp(Статус очереди: ${QUEUESTATUS})
same => n,GotoIf($["${QUEUESTATUS}" = "TIMEOUT"]?timeout:check_empty)
same => n(check_empty),GotoIf($["${QUEUESTATUS}" = "JOINEMPTY" | "${QUEUESTATUS}" = "LEAVEEMPTY"]?empty:hangup)
same => n(empty),Playback(queue-thereare)
same => n,Playback(queue-no-members)
same => n,VoiceMail(support@default,u)
same => n,Hangup()
same => n(timeout),Playback(queue-periodic-announce)
same => n,VoiceMail(support@default,u)
same => n(hangup),Hangup()5. Перезагрузка очередей
asterisk -rx "queue reload all" Частые вопросы (FAQ)
Что означает опция joinempty = strict?
Опция запрещает клиентам вставать в очередь, если в ней нет ни одного готового принять звонок оператора (все операторы оффлайн, на паузе или недоступны).
Зачем нужен параметр ringinuse = no?
Он запрещает посылать новый звонок из очереди оператору, который уже разговаривает по телефону (например, по другой линии или внутреннему номеру).
Что означает autopause = yes?
Если оператору поступает звонок из очереди, но он не берет трубку в течение времени timeout, Asterisk автоматически ставит его на паузу, исключая холостые вызовы.
Как динамически добавлять операторов в очередь из диалплана?
Используйте приложение AddQueueMember: same => n,AddQueueMember(support,PJSIP/${CALLERID(num)}). Для удаления — RemoveQueueMember().