Asterisk queuerules.conf
queuerules - правила позволяющие динамически изменять значения переменных QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY, в зависимости от времени ожидания вызывающего абонента.
Penalty
Каждый оператор очереди Asterisk имеет параметр penalty. Пенальти может быть определен в настройках пользователя очереди:
member ⇒ interface[,penalty][,membername][,state_interface][,ringinuse]
или при добавлении динамического агента:
queue add member <dial string> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>]
Данный параметр определяет приоритет для посылки вызова на оператора, чем ниже пенальти, тем выше приоритет при выборе оператора для вызова. Если пенальти не задан, то по умолчанию = 0
Предположим, очередь обслуживают 3 оператора с пенальти - 0,1 и 2 соответственно. Первым будет вызван оператор с пенальти = 0 и только если он недоступен, оператор с пенальти = 1 и так далее.
Пенальти оператора может быть динамически изменен, например через CLI:
queue set penalty <penalty> on <interface> [in <queue>]
или через AMI Actions QueuePenalty.
Перед тем как входящий вызов будет поставлен в очередь, можно задать переменные канала - QUEUE_MIN_PENALTY и QUEUE_MAX_PENALTY. Они укажут диапазон пенальти операторов очереди, для посылки вызова. Например:
exten => s,1,NoOp(**penalty**) same = n,Set(QUEUE_MIN_PENALTY=1) same = n,Set(QUEUE_MAX_PENALTY=2) same = n,Queue(queue101)
Вызовы очереди queue101 будут распределены между операторами с пенальти 1 и 2. Но предположим, что все операторы с пенальти 1 и 2 заняты или недоступны. В этом случае можно применить queuerules.
Правила связываются с конкретной очередью параметром defaultrule: etc/asterisk/queues.conf
[queuename] defaultrule = myrule
etc/asterisk/queuerules.conf
penaltychange => <время ожидания в секундах>,<абсолютное или относительное изменение QUEUE_MAX_PENALTY>[,абсолютное или относительное изменение QUEUE_MIN_PENALTY]
[myrule] penaltychange => 30,+3 ; через 30 секунд ожидания в увеличить QUEUE_MAX_PENALTY на +3, но не менять QUEUE_MIN_PENALTY; ;где +3 относительное значение penaltychange => 60,10,5 ; через 60 секунд ожидания в установить значение QUEUE_MAX_PENALTY = 10 и установить QUEUE_MIN_PENALTY = 5 ;где 10 абсолютное значение penaltychange => 75,,7 ; через 75 секунд ожидания не изменять QUEUE_MAX_PENALTY, но установить QUEUE_MIN_PENALTY = 7;
Таким образом очередь может получать дополнительных операторов, в зависимости от нагрузки (времени ожидания).
Правила могут получаться в реальном времени из хранилища Realtime. Для это включите опцию в секции [general] конфига queuerules.conf:
[general] realtime_rules = yes
Данная опция не требует работы строго c реалтайм базами данных. При выполнении команды queue reload rules все правила, независимо от расположения в БД или конфигурационном файле, будут применены, при условии, что они имеют уникальные имена и правильную конфигурацию мин/макс пенальти.
В etc/asterisk/extconfig.conf определите таблицу БД в которой находятся правила:
queue_rules => odbc,asterisk,queue_rules
И создайте таблицу в используемой БД.
rule_name | time | min_penalty | max_penalty |
---|---|---|---|
'default' | '10' | '20' | '30' |
'queue1' | '20' | '30' | '55' |
'queue2' | '25' | '-11' | '+1111' |
'queue2' | '400' | '112' | '333' |
'queue3' | '0' | '4564' | '46546' |
'queue_rule' | '40' | '15' | '50' |
Asterisk настройка очереди - queues.conf
Функция диалплана Asterisk: QUEUE_VARIABLES
function 'QUEUE_WAITING_COUNT'
Asterisk: queue_log в MySQL через unixODBC
Handlebars Helper LastCall Queue Agent
Asterisk Call Center Stats - статистика колл-центра
~~socialite~~