Очереди звонков в Asterisk'е

Администратор,

asterisk

Очереди звонков состоят из:

  • Входящих звонков, которые ставятся в очередь
  • Участников (расширения системы или пользователи, которые вошли в систему как агенты), которые отвечают на звонки
  • Алгоритм по которому обрабатывается очередь и звонки распределяются между участниками
  • Музыка, которая играет во время ожидания в очереди
  • Объявления для участников и звонящих

Очереди описываются в файле queues.conf или непосредственно в реальном времени (dynamic realtime). Последний вариант позволяет сохранять настройки непосредственно в базе данных, по этому, изменения сразу вступают в силу для звонящих и исчезает нужда в перезагрузке.

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

Новое в Asterisk v1.2

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

Сейчас возможно использовать многознаковые расширения при выходи из очереди (так же у вас не должно быть перекрывающихся расширений, потому что, не существует знакового таймаута). Это значит что событие EXITWITHKEY в queue_log может содержать более одного символа в поле ключа (key field).

Участники

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

Алгоритмы

Звонки распределяются между отвечающими на звонки из очереди, по одному из следующий алгоритмов, определённых в queues.conf:

  • ringall: звонить по всем доступным каналам пока один не ответит (по умолчанию)
  • roundrobin: звонить по очереди каждому доступному (не используется начиная с 1.4, используйте rrmemory)
  • leastrecent: перенаправить звонок на канал который самое долгое время не отвечал на звонки
  • fewestcalls: звонить по каналу который ответил на наименьшее количество звонков из очереди
  • random: звонить по случайному каналу
  • rrmemory: перенаправить звонок на канал следующий после канала который отвечал на прошлый звонок (см. roundrobin)

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

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

Наказание

Звонящим (участникам очереди) можно определять наказание, примеры:

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 будет звонить.

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

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

Первое что вы должны сделать, при поднятие каскадных очередей, это настроить таймаут для очереди. Это делается, передавая параметр для команды 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) 
Мы рекомендуем для Asterisk телефоны Digium