Рассмотрим как настроить распределение входящих звонков в Asterisk.
Очереди звонков являются важным функционалом для компаний в которых телефонные звонки принимают несколько операторов. Звонки должны распределяться между операторами следуя определенной логике, операторы должны иметь возможность регистрироваться на линии и выключаться с нее без привлечения администратора сервера.
Распределение входящих звонков в Asterisk
Займемся настройкой очередей, прописывать необходимые директивы будем в файле queues.conf
Просмотрим его
less /etc/asterisk/queues.conf
queues.conf как и другие конфигурационные файлы Asterisk хорошо задокументированы, но применять дефолтные конфиги в функционирующей системе является плохой практикой, поэтому создаем копию файла
cp /etc/asterisk/queues.conf /etc/asterisk/queues.conf_orig
После этого открываем основной файл в текстовом редакторе
vi /etc/asterisk/queues.conf
Удаляем все комментарии
:g/^\s^*;/d
Добавляем секцию очереди support и прописываем двух операторов, которые будут принадлежать к этой очереди user1 и user2
[support]
member => SIP/user1
member => SIP/user2
Переходим в консольный режим сервера телефонии
asterisk -rvvv
Выполняем команду queue чтобы посмотреть возможные опции применительно к очереди
>queue
Очередь нужно перезагрузить
>queue reload
После нажатия Enter выдается список возможных опций
Можно перезагрузить отдельные элементы и параметры, а можно всю очередь, что и сделаем:
>queue show support
Видим статистику 'support has 0 calls', среднее время разговора и операторов, принадлежащих к очереди
Можно посмотреть информацию о приложении, которое добавляем агентов в очередь
> core show application Queue
Открываем для редактирования файл с расширениями:
mcedit extentions.conf
[incoming] exten => 922123100,1,GotoIfTime(8:00-17:00,mon-fri,*,*?phones,100,1) exten => 922123100,1,Playback(tt-monkeys) exten => 922123100,n,Hangup exten => 922123200,1,GoSub(timecheck,s,1) exten => 922123200,n,Goto(phones,200,1) exten => 922123300,1,GoSub(timecheck,s,1) exten => 922123300,n,Goto(phones,300,1) [timecheck] exten => s,1,GotoIfTime(8:00-17:00,mon-thu,*,*?ok,1) exten => s,n,GotoIfTime(8:00-12:00,fri-fri,*,*?ok,1) exten => s,n,Playback(tt-monkeys) exten => s,n,Hangup exten => ok,1,Return [phones] exten => 100,1,NoOp(call for user1) same => n,Dial(Sim/user1,5) same => n,GotoIf($[ "${DIALSTATUS}" = "BUSY" ]?100-busy,1) same => n,Voicemail(${EXTEN,u}) same = > n,Hangup exten => 100-busy,1,VoiceMail(${EXTEN:0:3},b) same => n,Hungup exten => 200,1,NoOp(call for user2) same => n,Dial(Sim/user2,10) same => n,Voicemail(${EXTEN}) same = > n,Hangup exten => 300,1,NoOp(Support Team) same => n,Queue(support,,,,120) same => n,Hangup exten => *100,1,VoicemailMain(100) same => n,Hangup exten => 0X.,1,NoOp( ${EXTEN:1}) same => n, Goto(ougoing,${EXTEN:1},1) [outgoing] extent => _X.,1,Dial(SIP/outside)
В примере звонки поступают с номера 922123100, на практике здесь прописывается номер провайдера SIP телефонии
asterisk -rvvv
>dialplan reload
В диалплане заложена следующая логика: звонок поступает на расширение очереди Support, после этого звонят телефоны обоих агентов, если в течение 15 секунд на телефон никто не отвечает — звонок возвращается в очередь. Общий таймаут определяется правилом same => n,Queue(support,,,,120) и составляет 120 секунд.
Стратегии распределения звонков между агентами
Описание стратегии распределения звонков часто берется из документации и помещается в конфигурационный файл в закомментированном виде.
Asterisk позволяет использовать ряд стратегий, основные из них:
- ringall — при поступлении звонка на расширение очереди звонить будут телефоны всех операторов — часто применяется в небольших организациях
- leastrecent — каждый следующий звонок будет приходить оператору, который в последний раз положил трубку раньше всех остальных
- fewest calls — звонок будет приходить агенту, который ответил на самое меньшее количество звонков (важно, что если агент покинул очередь зарегистрировавшись вновь он будет иметь количество звонков равное 0, соответственно все входящие будут приходить только ему)
- linear option — первым будет отвечать всегда один оператор
- random — агент, которому будет приходить звонок будет выбран случайно
Чаще всего в реальных системах применяется применяется стратегия random
mcedit queues.conf
strategy = random
timeout = 15
В соответствии с этими опциями телефон оператора, выбранного случайным образом будет звонить 15 секунд, если ответа не будет, звонок вернется в очередь, затем выбор произойдет случайным образом вновь.
Переходим в консольный режим
asterisk -rvvv
Перезапускаем диалплан
>dialplan reload
Перезапускаем все очереди
queue reload all
Смотрим состояние очереди Support
>queue show support
В выводе можно увидеть внесенные изменения и заданные нами таймауты.
Распределение входящих звонков в Asterisk на этом настроено. Читайте про перевод звонка на другого оператора.