Выбор IVR и Queue в зависимости от свободных операторов

использование функции queue_member для роутинга

Alexcr

Задача распределить по разным 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

На этом все :)