Очереди вызовов в сервере Asterisk


Система очередей вызовов состоит из следующих компонентов:
  • Поступающие вызовы помещаются в очередь.
  • Участники, обрабатывающие очередь, отвечают на вызовы поступающие в очередь (в их качестве могут быть либо екстеншены либо пользователи, зарегистрировавшиеся в системе в качестве агентов).
  • Порядок распределения поступающих вызовов между участниками, обрабатывающими очередь, зависит от определенной для нее стратегии распределения вызовов.
  • Пока вызывающий абонент ожидает ответа в очереди, ему может проигрываться музыка.
  • Есть возможность включения периодических анонсов, для ожидающих в очереди абонентов, и для участников, обрабатывающих очередь.

Очереди определяются в файле конфигурации queues.conf или с помощью RealTime Queue" href="tiki-index.php?page=Asterisk+RealTime+Queue" class="wiki">механизма realtime. В последнем случае, у Вас имеется возможность хранить конфигурацию во внешней базе данных, что дает возможность немедленного вступления изменений в силу без перезагрузки, после внесения изменений в конфигурацию очередей вызовов.

  • Агенты (Agents) - это люди (персоны), которые отвечают на входящие вызовы, которые помещаются в определенную очередь вызовов. Агенты должны зарегистрироваться (войти) в систему, для индикации того, что они готовы обрабатывать вызовы. Сервер Asterisk перенаправляет входящий вызов в очередь, откуда он уже перенаправляется доступным для данной очереди агентам по заданной стратегии распределения вызовов между агентами.
  • Участники обработки очереди (Members) - это каналы связи, через которые происходит работа с вызовами, помещенными в очередь (через которые отвечают на эти вызовы). В этом качестве могут выступать агенты или обычные каналы связи, например: "sip/snom23".


Новое в сервере Asterisk версии 1.2


Теперь, очередь вызовов считается пустой не только в случае, когда для нее нет ни одного участника, который ее обрабатывает, а также в том случае, если нет ни одного доступного участника ее обработки (т.е. нет ни одного агента зарегистрированного на сервере для очереди вызовов). Для восстановления оригинального поведения, используйте: "leavewhenempty=strict" или "joinwhenempty=strict" вместо значения "=yes", для данных параметров.

Теперь имеется возможность использовать номера екстеншенов состоящих из нескольких цифр в контексте, используемом для выхода из очереди вызовов. Это означает, что событие EXITWITHKEY в queue_log, может содержать в своем ключевом поле значение, большее, чем один символ.


Участники, обрабатывающие вызовы.


Участником обработки вызовов может быть обычный канал связи, т.е. телефоны, подключенные к серверу Asterisk. Вы также можете определить участника, как некую персону, которая может зарегистрировать себя на сервере с любого места для приема вызовов из очереди.
Настройки агентов определяются в файле agents.conf. Агенты регистрируются с любых телефонов (известных серверу Asterisk), совершая вызов на специальный екстеншен, в котором исполняется команда agentlogin.


Стратегии обработки вызовов.


Входящие вызовы, поступающие в очередь, распределяются между участниками, обрабатывающих ее, согласно одной из нескольких стратегий, которая определяется для очереди вызовов в файле queues.conf
  • ringall: вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию).
  • roundrobin: циклически вызывается каждый из доступных участников. (Устарело в версии 1.4, используйте: rrmemory)
  • leastrecent: Вызывается первый свободный участник, который меньше всего вызывался из этой очереди.
  • fewestcalls: Вызывается первый свободный участник, который обработал наименьшее количество вызовов из данной очереди.
  • random: случайным образом вызывается не занятый участник, обрабатывающий очередь.
  • rrmemory: циклическое распределение с памятью, запоминается последний участник, ответивший на вызов.


Пользовательское меню


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


Пенальти


Для участников, обрабатывающие очередь вызовов, может быть задано значение для пенальти, например, так:
member => SIP/200,1
member => SIP/201,2
member => SIP/202,3
member => SIP/203,2
Эсли стратегия распределения вызовов определена как 'ringall', тогда, при поступлении вызова в очередь, будет звонить телефон только у тех не занятых участников, которые определены с наименьшем приоритетом. Согласно вышеприведенному примеру, если свободен пользователь с номером 200, будет звонить только телефон с номером 200. Если он занят, тогда будут звонить только телефоны с номерами: 201 и 203. Если заняты телефоны 200, 201 и 203, тогда будет звонить телефон с номером 202.


Каскадирование очередей вызовов


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

Первое, что Вы должны сделать, это установить максимальное время ожидания абонентом ответа в очереди (timeout). Это можно сделать, указав его в качестве параметра команды Queue, в файле плана набора - extensions.conf (например: Queue(dave|t|||45)).

Тогда Вы можете определить несколько очередей вызовов и последовательно вызывать их в Вашем плане набора.

Пример:
exten => 1589,1,Answer
exten => 1589,2,Ringing
exten => 1589,3,Wait(2)
exten => 1589,4,Queue(testq|t|||45)
exten => 1589,5,Queue(testq2|t|||45)
exten => 1589,6,Hangup


Новые возможности


Команда Queue() имеет опции для: penalty, wrapuptime и priority, которые можно определить для механизма обработки очередей в сервере Asterisk. Система приоритетов работает, согласно автору, так:

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

Теперь Вы можете при помощи одной очереди вызовов обрабатывать все вызовы (как от более важных клиентов, так и от менее важных) в правильном порядке. Приоритет вызова, помещаемого в очередь, определяется значением специальной переменной канала - QUEUE_PRIO. Более высокое значение означает более высокий приоритет вызова. Если переменная не установлена, все вызовы будут иметь одинаковый приоритет, равный нулю, и будет использоваться механизм по умолчанию (FIFO). Пример:

; Вызовы от важных клиентов
exten => 111,1,Playback(welcome)
exten => 111,2,SetVar(QUEUE_PRIO=10)
exten => 111,3,Queue(support)

; Вызовы от менее важных клиентов
exten => 112,1,Playback(welcome)
exten => 112,2,SetVar(QUEUE_PRIO=5)
exten => 112,3,Queue(support)


Функции

  • Queue: Помещение вызова в очередь, используется в плане набора: extensions.conf
  • AddQueueMember: Динамическое добавление агента для обработки очереди.
  • RemoveQueueMember: Динамическое удаление агента из участников обработки очереди.
  • AgentLogin: Авторизация агента.
  • AgentCallbackLogin: Авторизация агента с обратным вызовом.
  • AGENT: Получить информацию об агенте.
  • QUEUEAGENTCOUNT: Получить число агентов обрабатывающих очередь вызовов в данный момент.
  • QUEUE_MEMBER_COUNT: Возвращает число участников, которые заняты обработкой вызова из очереди.
  • QUEUE_MEMBER_LIST: Возвращает список интерфейсов, принимающих вызовы из очереди.


Команды CLI консоли


  • show agents: Показывает агентов.
  • show queues: Выводит список очередей вызовов.
  • show queue : Показывает данные указанной очереди вызовов.


Конфигурация


  • файл agents.conf: Конфигурация агентов для обработки очередей вызовов.
  • файл queues.conf: Конфигурация очередей вызовов.


Книги




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