Asterisk распределение входящих звонков


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


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

Распределение входящих звонков в Asterisk на этом настроено. Читайте про перевод звонка на другого оператора.

Сказать спасибо