artem
02.12.2015
5296

Использование правил очереди для динамического изменения состава вызываемых операторов

В практике настройки серверов Asterisk нередко встречается такое распределение входящих вызовов, когда сперва должен звонить один набор операторов, затем, в случае неответа, второй набор операторов, затем, возможно, ещё и третий набор операторов.

Обычно для настройки такого распределения используют цепочку из очередей и/или групповых вызовов, но с помощью правил очереди, подобную логику можно реализовать, используя всего одну очередь. Это упрощает логику работы Asterisk, также по одной очереди гораздо проще получать статистику, чем по нескольким.

ПРИМЕЧАНИЕ: Всё, что описано в статье проверялось и верно для Asterisk 11.

Параметр оператора очереди penalty

У каждого оператора в очереди есть параметр penalty (штраф), этот параметр принимает неотрицательные числовые значения (по умолчанию – 0) и определяет, приоритет при выборе оператора для вызова. Чем ниже значение penalty у оператора, тем выше его приоритет для вызова. При использовании любой стратегии вызова, очередь всегда выбирает доступных операторов с наименьшим значением penalty. Только если абсолютно все операторы со значением penalty 0 заняты или недоступны, очередь будет распределять вызовы операторам со значением penalty 1 и т.д.

Перед входом вызова в очередь можно установить значения переменных QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY, они ограничивают минимальное и максимальное значение параметра penalty, т.е. если установить QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY равными 1, то только операторы со значением penalty 1 будут выбираться для этого вызова. Чтобы можно было изменить значения этих переменных для вызова находящегося в очереди средствами диалплана, вызов должен сперва выйти из очереди, это создает определённые проблемы – вызов теряет место в очереди, вызов отмечается как пропущенный в статистике по очереди. Правила очереди позволяют менять значения переменных QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY пока вызов находится в очереди.

Правила очереди (queue rules)

Правила очереди задаются в файле /etc/asterisk/queuerules.conf. Формат правил:

[имя_набора_правил]
penaltychange => <время_вызова>,<изменение_QUEUE_MAX_PENALTY>,<изменение_QUEUE_MIN_PENALTY>

Пример:

[rule_test]
penaltychange => 15,+1,+1
penaltychange => 30,+1,-1
penaltychange => 45,0
penaltychange => 60,,+1

Это означает, что
через 15 секунд нахождения вызова в очереди, QUEUE_MAX_PENALTY и QUEUE_MIN_PENALTY будут увеличены на 1
через 30 секунд нахождения вызова в очереди, QUEUE_MAX_PENALTY будет увеличено на 1, а QUEUE_MIN_PENALTY – уменьшено на 1
через 45 секунд нахождения вызова в очереди, QUEUE_MAX_PENALTY будет присвоено значение 0, QUEUE_MIN_PENALTY остается без изменений
через 60 секунд нахождения вызова в очереди, QUEUE_MAX_PENALTY остается без изменений, QUEUE_MIN_PENALTY будут увеличено на 1

К сожалению нельзя создавать правила, вступающие в силу каждые N секунд, поэтому циклические изменения QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY придётся прописывать на всё время пребывания вызова в очереди с абсолютными значениями времени (не забудьте учесть, что между циклами обзвона операторов проходит не менее одной секунды).

Для того, чтобы применить настроенный набор правил к вызовам в очереди нужно указать название набора правил в параметре очереди defaultrule. Также можно указывать название набора правил в девятом параметре при вызове приложения Queue.

Пример

20 секунд звонят 101 и 102 , если они не отвечают, 20 секунд звонят 201 и 202, если и они не отвечают, 20 секунд звонят 301 и 302, затем вызов уходит обратно на 101 и 102.

queuerules.conf:

[change_oper_set]
penaltychange => 20,+1,+1
penaltychange => 41,+1,+1
penaltychange => 62,0,0
penaltychange => 83,+1,+1
penaltychange => 104,+1,+1
penaltychange => 125,0,0
penaltychange => 146,+1,+1
penaltychange => 167,+1,+1
penaltychange => 188,0,0
penaltychange => 209,+1,+1
penaltychange => 230,+1,+1
penaltychange => 251,0,0
penaltychange => 272,+1,+1
penaltychange => 293,+1,+1

queues.conf:

[1111]
strategy=ringall
autofill=yes
ringinuse=no
timeout=20
retry=1
defaultrule=change_oper_set
member=SIP/101,0
member=SIP/102,0
member=SIP/201,1
member=SIP/202,1
member=SIP/301,2
member=SIP/302,2

extensions.conf:

exten => 1111,1,Set(QUEUE_MAX_PENALTY=0)
same => n,Set(QUEUE_MIN_PENALTY=0)
same => n,Queue(1111,,,,300)

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices