Файл конфигурации queues.conf


ACD распределяет входящие вызовы, в порядке их поступления, первому доступному и свободному агенту, который обрабатывает данную очередь. Система сразу же переводит входящий вызов в отвеченное состояние и, при необходимости, удерживает этот вызов в очереди, пока не появиться возможность направить его первому же свободному агенту колл центра. Сбалансированное распределение нагрузки по обработки вызовов между агентами гарантирует, что каждый вызывающий абонент получит голосовое приглашение и профессиональный сервис обслуживания.

В Asterisk поддерживается несколько очередей вызовов. Их определения находятся в файле queues.conf, имена очередей вызовов используются в качестве аргумента команды Queue в файле конфигурации плана набора extensions.conf. Агенты, которые обрабатывают вызовы, поступающие в очередь, описываются в файле agents.conf.

Новая возможность (начиная с 31 июля, 2005 CVS HEAD)

Сообщения с периодическим напоминанием вызывающему абоненту, что о нем еще не забыли, можно включить, используя новые опции: periodic-announce и periodic-announce-frequency. С их помощью, через, определенные параметром periodic-announce-frequency промежутки времени ожидания, абоненту будет проигрываться определенное голосовое сообщение, например: "Спасибо за Ваше терпение, Ваш звонок очень важен для нас...." .
Например:

periodic-announce = thank-you-message
periodic-announce-frequency = 60 ; проигрывать каждые 60 секунд ожидания

Новая возможность (начиная с 06 января, 2005):

Теперь для очередей можно использовать параметр 'weight' (который подразумевает приоритет вызова), для гарантии того, что вызов, ожидающий в очереди с более высоким приоритетом, будет обработан одним из первых. Будет задерживаться обработка вызовов только для менее приоритетных очередей, если участник, который обрабатывает очередь, уже занимается вызовом из более высокоприоритетной очереди.

weight =

weight = целое число

Новые возможности (начиная с 28 сентября, 2004):

Полностью и правильно поддерживается, начиная с релиза v1.0 .
Если у Вас возникло желание удалять все вызовы, поступившие в очередь, у которой нет участников или агентов, для ее обработки, добавьте в файл queues.conf следующую строку:

leavewhenempty = yes

; При использовании CVS-HEAD версии, используйте:
; leavewhenempty=strict
; joinempty=strict

Новая возможность: Анонс позиции в очереди

Появилась в Asterisk, начиная с версии v0.7.2 (см. багрепорт #214 в Mantis bugtracker). Рассмотрим пример файла конфигурации queues.conf.sample, на предмет параметров, которые можно в нем использовать:

; Вызовы могут быть записаны, с использованием системы мониторинга Asterisk
; Эта возможность можно включить для команды Queue, запись начнется,
; когда вызов из очереди начнет обрабатываться оператором. Будут записаны
; только состоявшиеся вызовы, в запись не будет включен тот промежуток времени,
; пока вызывающий абонент слушает музыку в процессе ожидания, т.е. пока его
; вызов не будет обработан оператором (MOH).
; Для включения записи вызовов, просто определите параметр "monitor-format",
; иначе, эта возможность будет отключена.
;
; monitor-format = gsm|wav|wav49

; Как часто абоненту, ожидающему в очереди вызовов, сообщать его позицию и/или
; приблизительное время ожидания обработки его вызова (0=выключено)
;
;announce-frequency = 90
;
; Нужно ли нам включать в периодический анонс приблизительное время ожидания
; обработки вызова абонента?
; Возможные значения: yes, no, или once (только один раз); время ожидания будет
; сообщаться только в том случае, если абонент ожидает своей очереди более 1 минуты.
;
;announce-holdtime = yes|no|once
;
; Далее идут описания звуковых файлов, для анонса абоненту эго позиции в очереди и/или
; приблизительного времени ожидания обработки его вызова.
; Файлы, используемые по умолчанию, приведены ниже,
; Вы можете изменить их имена на другие, если Вам это реально нужно.
;
;queue-youarenext = "queue-youarenext" ; ("You are now first in line.")
;queue-thereare = "queue-thereare" ; ("There are")
;queue-callswaiting = "queue-callswaiting" ; ("calls waiting.")
;queue-holdtime = "queue-holdtime" ; ("The current est. holdtime is")
;queue-minutes = "queue-minutes" ; ("minutes.")
;queue-thankyou = "queue-thankyou" ; ("Thank you for your patience.")
;Обратите внимание: что не нужно использовать точку с запятой, описывайте файлы без этого символа, например:
;queue-thankyou=yoursoundfile
;
; Обратите внимание, что значение timeout'а, по достижении которого, происходит выход из очереди
; вызовов, можно определить в самой команде queue в файле extensions.conf:
; Queue(queuename|options|optionalurl|announceoverride|timeout)
; пример: Queue(dave|t|||45)

Wrapuptime

Этот параметр может быть использован как для агентов, так и для самой очереди вызовов. Необходимость использования этой настройки в файле queue.conf, обусловлено тем, что в этом файле для очереди могут быть описаны агенты, в качестве участников, которые обрабатывают эту очередь.
;
; Параметр wrapuptime - это значение минимального промежутка времени,
; с момента, когда работа с абонентом завершена и до того,
; как участник обработки может принять новый вызов из очереди.
; Значение в миллисекундах. (0 - задержка отсутствует)
;
;wrapuptime=15

Memberdelay

Параметр устанавливает время задержки между моментом, когда агент отвечает на вызов и соединения его с вызывающим абонентом.
;memberdelay = 5

timeoutrestart

Если параметр "timeoutrestart" установлен в значение yes, тогда значение таймаута для агента будет сбрасываться, если от него будет получен сигнал BUSY или CONGESTION. Это бывает полезно, когда агент имеет возможность отметить вызов, отвергая его или, производя некоторые действия, которые имеют подобный эффект. (Обнаружено, что если вызов агента завершился со статусом NOANSWER (ring, no-answer), это так же заставляет вызов отправить к следующему агенту в очереди по алгоритму roundrobin).
;timeoutreset = yes


Примеры:



Замечания

  • Параметр penalty: Очередь вызовов могут обрабатывать люди с разными обязанностями и, следовательно, у одних это обязанность основная , а у других - второстепенная, и основную нагрузку по приему вызовов нам надо возложить на одних людей, а для подстраховки - других (к примеру, если у нас есть очередь, куда поступают вызовы от клиентов, которые хотят что-то купить, то основная обязанность ее обработки ложиться на менеджеров, следовательно, их определяем без пенальти. Еще некоторые люди могут принимать звонки, если у менеджеров полный завал, с пенальти 1, и, с пенальти 2, мы можем определить агентов совсем уж не относящихся к продажам, например, телефон в службе технической поддержки).
  • Если вы включите группу участников в определение Вашей очереди вызовов, тогда вызовы будут распределяться между агентами в группе, в заданном для нее порядке, вне зависимости от заданной стратегии. Теперь, определим каждого агента при помощи директивы member=.

member=Agent/@1 ; группа агентов
member=Agent/501 ; одиночный агент

Поступивший вызов в очередь, куда попадают звонки от покупателей, будет отправлен на обработку работникам службы технической поддержки, только в том случае, если менеджеры, которые отвечают на эти вызовы сильно заняты.


Некоторые пояснения работы режимов распределения вызовов между агентами: roundrobin и rrmemory
Режим roundrobin не сбивает алгоритм режима "циклического распределения входящих вызовов между агентами", Фактически, использование режима roundrobin без запоминания того, кто обработал последний вызов, приводит к тому, что вызовы циклически распределяются между агентами.
Ниже приводятся пояснения по работе этих режимов от kpfleming.

При использовании режима roundrobin, запоминается последний агент, с которого начался поиск свободного участника для передачи ему поступившего вызова. Поиск агента для следующего вызова начнется со следующего агента из списка. В том случае, если у нас есть свободный агент, то для первого вызова, поиск свободного агента будет осуществляться в последовательности: 1->2->3, для второго - в последовательности: 2->3->1, для следующего: 3->2->1, и т.д.

При использовании режима rrmemory, запоминается последний агент, которого пытались вызвать (у которого звонил телефон), вне зависимости от того, с кого из них начался поиск свободного агента. Тогда, поиск свободного агента для следующего вызова начнется с агента, который по списку следующий за тем, который ответил на первый вызов. Если у нас есть свободные агенты, то поиск свободного агента для обработки первого поступившего вызова будет произведен в следующем порядке 1->2 (предположим, что агент номер 2, отвечает на него), далее, при поступлении следующего вызова, порядок поиска агента для направления ему вызова будет такой: 3->1 (предположим, что агент номер 1 отвечает на него), тогда порядок поиска для следующего вызова будет таким: 2->3->1, и т.д.
Если же использовать режим roundrobin, то для первого поступившего вызова, в том случае, если агент номер 2 принимает вызов, тогда, он снова первый в списке поиска свободного агента, при поступлении следующего вызова. Если же используется режим rrmemory, тогда он будет перемещен в конец списка, при поиске свободного агента для второго вызова.

Однако, Вы можете добиться циклического распределения вызовов между агентами, используя режим roundrobin, и задав различные значения параметра penalty для каждого агента, для обеспечения порядка выбора свободного агента в том порядке, который Вам необходим. Приложение app_queue будет всегда сначала искать свободного агента у которого нет пенальти, далее среди тех, у кого значение пенальти - 1, и т.д.

Ссылки по теме: