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:
defaultrule = myrule
penaltychange => <время ожидания в секундах>,<абсолютное или относительное изменение QUEUE_MAX_PENALTY>[,абсолютное или относительное изменение QUEUE_MIN_PENALTY]
etc/asterisk/queuerules.conf
[myrule] penaltychange => 30,+3 ; через 30 секунд ожидания в увеличить QUEUE_MAX_PENALTY на +3, но не менять QUEUE_MIN_PENALTY; penaltychange => 60,10,5 ; через 60 секунд ожидания в установить значение QUEUE_MAX_PENALTY = 10 и установить QUEUE_MIN_PENALTY = 5; penaltychange => 75,,7 ; через 75 секунд ожидания не изменять QUEUE_MAX_PENALTY, но установить QUEUE_MIN_PENALTY = 7;
Таким образом очередь может получать дополнительных операторов, в зависимости от нагрузки (времени ожидания).
Правила могут получаться в реальном времени из хранилища Realtime. Для это включите опцию в секции [general] конфига queuerules.conf:
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' |
function 'QUEUE_WAITING_COUNT'