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 распределение входящих звонков

 

В выводе можно увидеть внесенные изменения и заданные нами таймауты.