Задача распределить по разным IVR и Очередям звонки на номер 8800 в зависимости от доступных операторах в очереди. К примеру у нас две очереди, VIP и обычная. Задача отправить звонящего на ИВР с VIP Очередью если в обычной очереди нету операторов.
Решение на базе Freepbx
Редактируем файл /etc/asterisk/extensions_custom.conf
[check-queue-first] exten => _XXXXX.,1,Noop(check queue status) same => n,Set(__FROM_DID=${EXTEN}) same => n,Set(CDR(did)=${FROM_DID}) same => n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)})) same => n,Set(CHANNEL(musicclass)=main) same => n,Set(__MOHCLASS=main) same => n,Noop(Queue 600 member ${QUEUE_MEMBER(600,ready)}) same => n,GotoIf($["${QUEUE_MEMBER(600,ready)}"="0"]?notwork:work) same => n(notwork),Goto(ivr-1,s,1) same => n(work),Goto(ivr-2,s,1)
${QUEUE_MEMBER(600,ready)} - возвращает количество со статусом ready
Goto(ivr-1,s,1) отправляет вызов на первый ИВР
Goto(ivr-2,s,1) отправляет вызов на второй ИВР
ivr-1 и ivr2 это контексты которые freepbx генерирует автоматически, для того чтобы узнать какой контест на какой ИВР из веба относится, можно просто посмотреть по ссылке http://192.168.1.2/admin/config.php?display=ivr&action=edit&id=1 id=1 и есть контекст ivr-1
Для того чтоб сработал наш кастомный контекст добавляем Custom Destination
Custom Destination: check-queue-first,${EXTEN},1
Description: check-queue-first
После надо в Incoming Route указать Set Destination на наш Custom Destination
На этом все :)