Создание очередей на примере Asterisk 1.6

Автор | 15.02.2011

Здравствуйте.
Для того, что бы более эффективно распределять звонки в офисе в Asterisk присутствует возможность создания очередей обработки звонка. Особенно эта функция актуальна для рекламных отделов компаний.
Будем считать, что у вас уже установлен и настроен Asterisk версии 1.6 и выше
Для начала расмотрим как описываются очереди (Queues)

Code queues.conf:
......
[queue_template](!)
musicclass=default      ; play [default] music
strategy=rrmemory       ; использовать стратегию обзвона  Round Robin Memory
joinempty=yes           ; загонять звонок в очередь если там отсутствуют агенты
leavewhenempty=no       ; оставлять очередь без агентов
ringinuse=no            ; звонить на члена очереди когда он занят ?

[sales](queue_template)
; Sales queue

[support](queue_template)
; Support queue

В данном примере мы создали шаблон queue_template и на базе шаблона создали 2 очереди: sales и support.
Теперь приступим к написанию диалплана.
Для этого нам нужно описать, как абоненты будут попадать в очередь, а также как логиниться и вылогиниваться из очереди агентам.
Пример 1:

Code extensions.conf

;описываем диалплан для логина в очередь
exten => 8101,1,Answer
exten => 8101,2,AddQueueMember(sales)   ; если агент уже залогинен - переходим на приоритет +101
exten => 8101,3,Playback(agent-loginok)
exten => 8101,4,Hangup
exten => 8101,103,RemoveQueueMember(sales)
exten => 8101,102,Playback(agent-loggedoff)
exten => 8101,105,Hangup

exten => 8102,1,Answer
exten => 8102,2,AddQueueMember(support)
exten => 8102,3,Playback(agent-loginok)
exten => 8102,4,Hangup
exten => 8102,103,RemoveQueueMember(support)
exten => 8102,102,Playback(agent-loggedoff)
exten => 8102,105,Hangup

;обрабатываем входящие вызовы и запускаем их в очередь обработки
exten => 0441112233,1,Answer
exten => 0441112233,n,Playback(welcome)
exten => 0441112233,n,Queue(sales)

; Вызовы от важных клиентов
exten => 0441112234,1,Answer
exten => 0441112234,n,Playback(welcome)
exten => 0441112234,n,SetVar(QUEUE_PRIO=10)
exten => 0441112234,n,Queue(support)

; Вызовы от менее важных клиентов
exten => 0441112235,1,Answer
exten => 0441112235,n,Playback(welcome)
exten => 0441112235,n,SetVar(QUEUE_PRIO=5)
exten => 0441112235,n,Queue(support)

Если очередей намечается много, то диалплан по входу агентов можно вынести в макрос, что сократит код и улучшит читабельность:

Code extensions.conf

[macro-queueloginout]
exten => s,1,Answer
exten => s,2,AddQueueMember(${ARG1})   ; если агент уже залогинен - переходим на приоритет +101
exten => s,3,Playback(agent-loginok)
exten => s,4,Hangup
exten => s,103,RemoveQueueMember(${ARG1})
exten => s,102,Playback(agent-loggedoff)
exten => s,105,Hangup


[default]
exten => 8101,1,Macro(queueloginout|sales)
exten => 8102,1,Macro(queueloginout|support)
exten => 8103,1,Macro(queueloginout|market)

;обрабатываем входящие вызовы и запускаем их в очередь обработки
exten => 0441112233,1,Answer
exten => 0441112233,n,Playback(welcome)
exten => 0441112233,n,Queue(sales)

; Вызовы от важных клиентов
exten => 0441112234,1,Answer
exten => 0441112234,n,Playback(welcome)
exten => 0441112234,n,SetVar(QUEUE_PRIO=10)
exten => 0441112234,n,Queue(support)

; Вызовы от менее важных клиентов
exten => 0441112235,1,Answer
exten => 0441112235,n,Playback(welcome)
exten => 0441112235,n,SetVar(QUEUE_PRIO=5)
exten => 0441112235,n,Queue(support)

Залишити відповідь