Очереди вызовов в сервере Asterisk
Система очередей вызовов состоит из следующих компонентов:
- Поступающие вызовы помещаются в очередь.
- Участники, обрабатывающие очередь, отвечают на вызовы поступающие в очередь (в их качестве могут быть либо екстеншены либо пользователи, зарегистрировавшиеся в системе в качестве агентов).
- Порядок распределения поступающих вызовов между участниками, обрабатывающими очередь, зависит от определенной для нее стратегии распределения вызовов.
- Пока вызывающий абонент ожидает ответа в очереди, ему может проигрываться музыка.
- Есть возможность включения периодических анонсов, для ожидающих в очереди абонентов, и для участников, обрабатывающих очередь.
Очереди определяются в файле конфигурации queues.conf или с помощью механизма 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 <name>: Показывает данные указанной очереди вызовов.
Конфигурация
- файл agents.conf: Конфигурация агентов для обработки очередей вызовов.
- файл queues.conf: Конфигурация очередей вызовов.
Книги
- Asterisk Queues Tutorial (Orderly Software).
Ссылки по теме:
- Asterisk call parking
- Asterisk Realtime Queue
- Asterisk agents: Дополнительная информация об агентах, обрабатывающих очередь.
- Asterisk Queue Callback - Let your callers hangup while waiting for an agent without losing their place in line
- OrderlyQ - Extension to Asterisk Queues that lets callers hang up, then call back without losing their place.
- Statistics that would be useful to add to this application: http://lists.digium.com/pipermail/asterisk-users/2003-July/014965.html
- Список команд плана набора
- Asterisk