Настройка очередей звонков в Asterisk
Содержание
- Базовые команды по работе с очередями
- Создание и настройка очереди
- Добавление операторов к очереди (агентов)
- Настройка плана набора (dialplan)
- Русификация голоса
Опубликовано: 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($
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
При необходимости, чтобы язык менялся только для определенной очереди, менять настройку нужно в диалплане:
Источник: