Настройка очередей звонков в Asterisk

Содержание

Обновлено и опубликованоОпубликовано: 15.10.2018

Организация любого Call-центра начинается с правильной организации очередей. В статье рассмотрим конфигурацию и примеры необходимых настроек через командную строку (правка конфигурационных файлов). Настройку через FreePBX рассматривать не будем.

Базовые команды по работе с очередями

Команды выполняются из консоли asterisk:

asterisk -c || asterisk -r

1. Просмотр очередей и их статуса:

support has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
Members:
SIP/102 with penalty 1 (ringinuse enabled) (Unavailable) has taken no calls yet
SIP/101 with penalty 1 (ringinuse enabled) (Not in use) has taken no calls yet
No Callers

* в данном примере в очереди зарегистрировано 2 оператора и нет звонков (No Callers)

2. Просмотр конкретной очереди:

queue show support

3. Количество звонков в очереди.

Смотрим вышеописанной командой:

queue show support

При наличие активных вызовов, мы увидим что-то на подобие:

.
Callers:
1. SIP/101-000000be (wait: 0:01, prio: 0)

4. Перезапуск очереди:

queue reload параметр [имя очереди]

* возможны следующие параметры:

  • members перечитывает состав агентов.
  • parameters перезапуск параметров.
  • rules правил.
  • all всего вышеперечисленного.

* если имя очереди не указано, перезапуск выполняется для всех очередей.

queue reload all

Создание и настройка очереди

Очередь создается и настраивается в конфигурационном файле queues.conf:

[support]
strategy = ringall
announce-frequency = 45

* в данном примере мы создаем очередь с названием support и стратегией ringall (одновременный звонок всем операторам).
* чтобы создать очередь, достаточно определить только стратегию (strategy).

Открываем консоль Asterisk и перечитываем конфиги:

Параметры очереди

Опции, которые применяются для настройки создаваемой очереди:

  • paused: считать недоступным, если оператор на паузе;
  • penalty: считать недоступным, если пенальти оператора меньше чем QUEUE_MAX_PENALTY;
  • inuse: считать недоступным, если телефон оператора в данный момент вызывается (звонит);
  • ringing: a member is not considered available if his phone is currently ringing
  • unavailable: Касается в основном каналов Agent (заданных в agents.conf). если агент назначен в agent.conf, но не зарегистрировался(каналы Agent можно считать устаревшими)
  • invalid: Интерфейсы имеющие статус invalid.
  • unknown: Не имеющий явного статуса оператор.
  • wrapup: Оператор на таймауте wrapuptime после вызова.
  • QUEUENAME имя очереди.
  • QUEUEMAX максимальное кол-во вызовов разр. в очереди;
  • QUEUESTRATEGY стратегия очереди;
  • QUEUECALLS текущее кол-во вызовов в очереди;
  • QUEUEHOLDTIME среднее время ожидания в очереди на данный момент;
  • QUEUECOMPLETED кол-во обработанных вызовов;
  • QUEUEABANDONED кол-во отвергнутых (неотвеченных) вызовов;
  • QUEUESRVLEVEL уровень обслуживания очереди;
  • QUEUESRVLEVELPERF процент вызовов отвечающих условию servicelevel на данный момент;
  • MEMBERINTERFACE имя интерфейса оператора
  • MEMBERNAME имя оператора
  • MEMBERCALLS количество принятых вызовов оператором.
  • MEMBERLASTCALL время последнего вызова.
  • MEMBERPENALTY пенальти оператора.
  • MEMBERDYNAMIC динамический агент или нет.
  • MEMBERREALTIME указывает realtime конфигурация оператора или нет.
  • QEHOLDTIME время ожидания вызывающего абонента.
  • QEORIGINALPOS позиция в очереди.
  • ringall вызываются все операторы одновременно.
  • leastrecent вызвать того оператора, который дольше всех не принимал звонки.
  • fewestcalls вызвать того оператора, который приниял меньше всех звонков.
  • random в случайном порядке.
  • rrmemory по кругу, после того, кто ответил последним.
  • linear вызывать по очереди в порядке перечисления или в порядке добавления (динамические).
  • wrandom случайно с учетом пенальти.

Глобальные параметры очереди

Перечисленные выше опции имеют отношение к конкретной очереди. Также, в Asterisk можно настроить общие для всех очередей опции они размещаются в секции [general]. Некоторые из них пересекаются с параметрами очереди в таком случае приоритет будет за параметром последней.

Перечень глобальных опций:

Параметр Описание По умолчанию
persistentmembers Хранить динамических операторов в базе astdb для возможности их автоматического подключения после перезагрузки. yes
autofill Способ организации очереди. Если yes общая очередь ко всем операторам, попадаем к тому, кто первый освободиться. Если no при постановке на очередь идет сразу закрепление за определенным оператором. no
monitor-type Программа, с помощью которой идет запись разговора. MixMonitor
updatecdr Добавлять в поле dstchannel CDR имя агента. no
shared_lastcall Для операторов, обслуживающих несколько очередей будут учитываться параметры паузы после завершения разговора для всех вызовов всех очередей. no
negative_penalty_invalid Не отправлять звонки на операторов с отрицательным пенальти. no
log_membername_as_agent Регистрировать агентов с именем, а не номером. no

Добавление операторов к очереди (агентов)

Пользователей, которые отвечают на звонки очереди называют агентами или операторами. Есть два типа агентов статические и динамические. Первые прописываются в конфигурационном файле queues.conf, вторые могут присоединятся к очереди, становясь на некоторое время оператором.

Статические агенты

Для создания статического оператора, открываем конфигурационный файл очереди:

В настройках очереди добавляем:

[support]
strategy = ringall
member = SIP/101,1

* в данном примере, мы добавили оператора к нашей очереди. Это sip агент с именем 101. 1 на конце пенальти (используется для выставления приоритета при использовании некоторых стратегий).

Перечитываем все конфигурационные файлы:

asterisk -x core reload

Динамические агенты

Динамические агенты могут присоединиться к очереди в любой момент набором специального сочетания кнопок на телефонном аппарате. Настройка сервера выполняется в конфигурационном файле диалплана:

exten = *999#,1,Verbose(2,Adding dynamic member to support queue)
same = n,Set(MemberInfo=$/$)
same = n,AddQueueMember(support,$)
same = n,Playback(agent-loginok)
same = n,Hangup()

exten = *888#,1,Verbose(2,Removing dynamic member from support queue.)
same = n,Set(MemberInfo=$/$)
same = n,RemoveQueueMember(support,$)
same = n,Playback(agent-loggedoff)
same = n,Hangup()

* в данном примере, если агент набирает *999#, он присоединяется к очереди и может принимать вызовы. При наборе *888# агент выходит из очереди.
* Verbose вывод в консоль информации; Set задает значение переменной, в данном примере, MemberInfo; AddQueueMember/RemoveQueueMember соответственно, добавляет к очереди агента и удаляет из нее; Playback проигрывает голосовой сигнал; Hangup дает сигнал отбоя.

Аутентификация агентов

1. Общий пароль для всех агентов

Можно сделать так, чтобы Asterisk требовал от агентов ввод пароля для присоединения к очереди. Для этого наш диалплан приводим к такому виду:

exten = *999#,1,Verbose(2,Adding dynamic member to support queue)
same = n,Authenticate(1234)
same = n,Set(MemberInfo=$/$)
same = n,AddQueueMember(support,$)
same = n,Playback(agent-loginok)
same = n,Hangup()

* где Authenticate запрос пароля, в данном примере, 1234.

2. Индивидуальные пароли для каждого агента

Если необходимо, чтобы каждый агент перед входом вводил свои номер и пароль, необходимо воспользоваться приложением VMAuthenticate (аутентификация по электронному почтовому ящику). Настройку начнем с правки диалплана:

exten = *999#,1,Verbose(2,Adding a member to the cc_ege_support queue.)
same = n,Read(AGENT_USERID,agent-user)
same = n,VMAuthenticate($@vmauth)
same = n,Set(MemberInfo=$/$)
same = n,AddQueueMember(support,$)
same = n,Playback(agent-loginok)
same = n,Hangup()

* Read запрашиваем данные у агента (agent-user голосовой файл), и записываем в переменную AGENT_USERID; VMAuthenticate запрашиваем пароль для почтового ящика $ с контекстом vmauth.

Добавляем почтовые ящики:

[vmauth]
1001 = 1234, dmosk, dmosk@example.com
1002 = 5678, dmosk2, dmosk2@example.com

* vmauth контекст (его мы указали в диалплане); 1001/1002 номера агентов; 1234/5678 пароли.

Для применения настроек перечитываем диалплан:

asterisk -x dialplan reload

Настройка плана набора (dialplan)

Отправка звонка в очередь

Чтобы при звонке на нужный нам номер звонящий попадал в нашу очередь, добавляем правило в диалплане:

exten = 111,1,Answer()
exten = 111,n,Ringing
exten = 111,n,Wait(2)
exten = 111,n,Queue(support)
exten = 111,n,Hangup

  • Answer установка соединения. С скобках может быть задан период задержки в миллисекундах.
  • Ringing воспроизводим звонок, сигнализирующий ожидания взятие трубки.
  • Wait ждем (в данном примере 2 секунды).
  • Queue добавляем звонок в очередь.
  • HangUp отбой.

* в данном примере, при звонке на короткий номер 111 мы услышим на 2 секунды звонок, сигнализирующий, что мы дозвонились; после абонент направляется в нашу очередь support.

asterisk -x dialplan reload

Приветствие

Для того, чтобы проиграло приветствие, редактируем наш диалплан, добавив функцию Playback после Answer:

exten = 111,1,Answer()
exten = 111,n,Playback(queue-callswaiting)
exten = 111,n,Ringing
.

* где queue-callswaiting название файла из каталога /var/lib/asterisk/sounds/язык/.

asterisk -x dialplan reload

Приоритеты звонков

Мы можем создать два входящих номера, звонки на которые обрабатываются одной и той же очередью, но с разными приоритетами. Например, внутренние номера 120 и 130 диалплан выглядит так:

exten = 120,1,Answer()
exten = 120,1,Playback(welcome)
exten = 120,n,Ringing
exten = 120,n,Wait(2)
exten = 120,2,SetVar(QUEUE_PRIO=100)
exten = 120,3,Queue(support)
exten = 120,n,Hangup

exten = 130,1,Answer()
exten = 130,1,Playback(welcome)
exten = 130,n,Ringing
exten = 130,n,Wait(2)
exten = 130,2,SetVar(QUEUE_PRIO=50)
exten = 130,3,Queue(support)
exten = 130,n,Hangup

* в данном примере, звонки на номер 120 являются более приоритетными; QUEUE_PRIO собственно, и является переменной, в которой хранится значение приоритета звонка.

Русификация голоса

По умолчанию, Asterisk может идти с набором голосовых записей на английском языке. Они находятся в каталоге /var/lib/asterisk/sounds/en. Для добавления русского голоса, открываем список языковых архивов и копируем ссылку на архив с нужным языком:

Копируем ссылку на архив с голосовыми файлами

Используя ссылку, скачиваем архив:

Создаем каталог для нашего языка:

Распаковываем архив в созданную папку:

tar -xvf asterisk-core-sounds-ru-wav-current.tar.gz -C /var/lib/asterisk/sounds/ru/

В конфигурационном файле sip.conf добавим:

asterisk -x sip reload

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


Источник: www.dmosk.ru