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_nametimemin_penaltymax_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'

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

[general]

; Look for queue rules in the queue_rules database table through RealTime. Note
; that this option is not strictly "RealTime", in the sense that the queue
; rules are only loaded and parsed during module load/reload. Queue rules
; must have a unique rule name and support relative min/max penalties.
;
; realtime_rules = yes
;

; It is possible to change the value of the QUEUE_MAX_PENALTY and QUEUE_MIN_PENALTY
; channel variables in mid-call by defining rules in the queue for when to do so. This can allow for
; a call to be opened to more members or potentially a different set of members.
; The advantage to changing members this way as opposed to inserting the caller into a
; different queue with more members or reinserting the caller into the same queue with a different
; QUEUE_MAX_PENALTY or QUEUE_MIN_PENALTY set is that the caller does not lose his place in the queue.
;
; Note: There is a limitation to these rules; a caller will follow the penaltychange rules for
; the queue that were defined at the time the caller entered the queue. If an update to the rules is
; made during the caller's stay in the queue, these will not be reflected for that caller.
;
; The syntax for these rules is
; penaltychange => <number of seconds into the call>,<absolute or relative change to QUEUE_MAX_PENALTY>[,absolute or relative change to QUEUE_MIN_PENALTY]
;
; Example:
; [myrule]
; penaltychange => 30,+3   ; 30 seconds into the call increase the QUEUE_MAX_PENALTY by 3, no change to QUEUE_MIN_PENALTY
; penaltychange => 60,10,5 ; 60 seconds into the call increase the QUEUE_MAX_PENALTY to 10 and increase the QUEUE_MIN_PENALTY to 5
; penaltychange => 75,,7   ; 75 seconds into the call keep the QUEUE_MAX_PENALTY the same and increase the QUEUE_MIN_PENALTY to 7

Asterisk app AddQueueMember

Asterisk: PauseQueueMember

Команда Asterisk: Queue

Asterisk app: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk: agents.conf

Asterisk настройка очереди - queues.conf

Asterisk function 'CURL'

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

Функция диалплана Asterisk: QUEUE_VARIABLES

function 'QUEUE_WAITING_COUNT'

Asterisk: queue_log в MySQL через unixODBC

Handlebars Helper LastCall Queue Agent

FreePBX Очереди - Queue

Freeswitch: mod_callcenter

Asterisk Call Center Stats - статистика колл-центра

Asterisk Колл Центр

~~socialite~~

  • asterisk/cf/queuerules.conf.txt
  • Последние изменения: 2016/12/17