Asterisk: организуем автоматическое распределение поступающих вызовов::Журнал СА 12.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
20.12.2019г.
Просмотров: 5101
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 6343
Комментарии: 0
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 7599
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 7922
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 6978
Комментарии: 0
Django 2 в примерах

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Asterisk: организуем автоматическое распределение поступающих вызовов

Архив номеров / 2007 / Выпуск №12 (61) / Asterisk: организуем автоматическое распределение поступающих вызовов

Рубрика: Администрирование /  Продукты и решения

Сергей Яремчук

Asterisk: организуем автоматическое распределение поступающих вызовов

От оперативности персонала, работающего с клиентами, зависит мнение о самой организации в целом. Если клиент подолгу будет звонить в службу поддержки, это вряд ли положительно скажется на имидже компании. Использование популярного VoIP-сервера IP-PBX Asterisk поможет решить эту проблему.

В журнале уже подробно рассказывалось о настройке Asterisk [1-3]. Конечно, много воды с тех пор утекло. Уже доступна новая ветка продукта 1.4.x с новыми возможностями и параметрами, а некоторые старые убраны, но общий принцип настроек остался таким же.

Asterisk может работать как система, автоматически распределяющая поступающие вызовы (ACD – Automatic Call Distribution). В службах поддержки это очень полезная возможность, пользователь звонит на один из номеров, а на звонок отвечает свободный в данное время сотрудник.

Реализуется такая функциональность при помощи агентов. Агент активируясь в системе, используя специальную процедуру, объявляет себя доступным для приема вызовов. Количество агентов ничем в общем-то не ограничено. Каждый агент при настройке получает идентификационный номер. Здесь следует учитывать, что номера телефонов и ID агента – это не одно и то же.

Asterisk-агенты не привязаны к одному номеру и могут подключаться с любых номеров. Для этого пользователь должен позвонить по определенному внутреннему номеру и ввести последовательно по подсказкам системы свой ID, пароль и номер телефона (в конце каждого действия необходимо нажимать <#>), к которому его нужно привязать. То есть агент – это как бы еще один виртуальный номер телефона, но позвонить по нему может только сервер. Кстати, поэтому агентов можно использовать и в том случае, когда сотрудники не имеют постоянного рабочего места, назначив каждому ID агента, можно всегда его «поймать» вне зависимости от того, какой телефон он сейчас использует.

Настройки agents.conf в AsteriskNOW

Настройки agents.conf в AsteriskNOW

Настройки queues.conf в AsteriskNOW

Настройки queues.conf в AsteriskNOW

По умолчанию все конфигурационные файлы сервера Asterisk находятся в каталоге /etc/asterisk. Применение агентов не снимает необходимости в создании записи для регистрации телефона в sip.conf или users.conf и экстеншна в extensions.conf. Поэтому в sip.conf заносим информацию о номере телефона, например 600:

[600]

type=friend

host=dynamic

username=600

secret=600_password

nat=no

canreinvite=no

context=callcenter

callerid="User" <600>

allow=gsm

allow=ulaw

allow=alaw

Остальные пользователи добавляются аналогично. Если база пользователей ведется в файле users.conf, то в описание номера следует добавить параметр «hasagent = yes».

Теперь можно перейти непосредственно к настройке работы агентов.

Настройка агентов

Агенты определяются в файле agents.conf, в самом простом случае достаточно добавить в конце файла параметр agent с необходимыми значениями.

$ sudo mcedit /etc/asterisk/agents.conf

[general]

; Сохранение статуса агентов в локальной базе не требует

; повторной его регистрации в случае перезагрузки сервера

persistentagents=yes

; Разрешение/запрет привязывать к одному экстеншну

; несколько агентов. По умолчанию разрешено

;multiplelogin=yes

[agents]

; Количество неудачных регистраций агента перед отказом

; (по умолчанию – 3)

maxlogintries=5

; Отключение агента, если трубка в течение

; указанного времени (в секундах) не снята

autologoff=15

; Отключаем обязательное подтверждение регистрации кнопкой

; <#> при регистрации агента через agentcallpark,

; по умолчанию включено, но иногда это вызывает проблемы

ackcall=no

; Время (в мс) между окончанием разговора и повторным вызовом

; агента из очереди. Нужно, например, чтобы пользователь

; успел заполнить отчет (0 – задержка отсутствует)

wrapuptime=5000

; Класс фоновой музыки ожидания для агентов

musiconhold = default

; Звуковой сигнал, проигрываемый при подключении агентов

custom_beep=beep

; Звуковой файл, проигрываемый при отключении агента

;agentgoodbye => vm-goodbye

; Членство в группах для агентов, используется в queues.conf

;group=1,2

; Далее описывается запись разговоров агентов с клиентами.

; Эта секция является глобальной для канала агентов

; chan_agent

; Включение записи (по умолчанию выключено)

;recordagentcalls=yes

; Формат файла: wav (по умолчанию), gsm, wav49

recordformat=gsm

; Включать в записи CDR поле с именем файла, содержащего

; запись этого вызова. По умолчанию - отключено

;createlink=yes

; Строка, добавляемая к имени при записи, позволяет

; формировать URL

;urlprefix=http://localhost/calls/

; По умолчанию записи сохраняются

; в /var/spool/asterisk/monitor, каталог можно изменить

;savecallsin=/var/calls

; Описание агентов, в виде

; agent => agentID,agentPassword,имя

agent => 3001,1234,Vasja Pupkin

agent => 3002,2345, Serg Jaremchuk

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

Очереди обработки вызовов

Очереди для обработки вызовов определены в файле queues.conf. Причем одновременно поддерживается несколько очередей вызовов. Имена очередей используются затем в качестве аргумента Queue в extensions.conf. В queues.conf все можно оставить по умолчанию, достаточно добавить в конце файла описание новой очереди. Некоторые параметры файлов agents.conf и queues.conf совпадают, объяснение этому простое, агентов также можно записать в этом файле в качестве участников, обрабатывающих указанную очередь.

Файл queues.conf:

; Создаем новую очередь MyQueue

[MyQueue]

; Персональный MOH, используется, если нет musiconhold

; в agents.conf

; musicclass = default

; Если агент участвует в нескольких очередях,

; ему проигрывается сообщение, помогающее сориентироваться

; и правильно принять клиента

announce = queue-markq

; Поиск свободного агента

strategy=ringall

; Сколько должен звонить телефон у агента прежде,

; чем переключиться на следующего

timeout=15

; Ожидание перед повторной попыткой обзвона

retry=5

; Вес очереди, то есть приоритет вызова, очереди

; с большим приоритетом будет отдаваться предпочтение

weight=0  

wrapuptime=15

; Максимальное количество абонентов в очереди

; (0 - без ограничений)

maxlen = 0

; Через сколько объявлять о приблизительном времени

; ожидания или позиции абонента в очереди (0 - выкл)

announce-frequency = 60

; yes|no|once – включение в анонсы времени ожидания

; абонента

announce-holdtime = no

; Периодическое сообщение, вроде «Спасибо, что позвонили,

; ожидайте, вам скоро ответят», чтобы абонет не думал,

; что о нем все забыли

periodic-announce = thank-you-message

; Проигрывать thank-you-message каждые 60 секунд ожидания

periodic-announce-frequency = 60

; Величина для округления значения времени

announce-round-seconds = 10

; При подключении агенту указывается, сколько времени

; прождал клиент

reportholdtime = yes

; При установке в yes, значение тайм-аута для агента будет

; сбрасываться, если от него будут получены сигналы BUSY

; или CONGESTION, например агент отметил вызов

timeoutrestart = no

; Описание агентов, обслуживающих очередь

member => Agent/3001

member => Agent/3002

; member => Agent/@1    ; Это группа агентов

При описании агента, через запятую, после ID (member => Agent/3002,1) может указываться параметр penalty. Сервер будет последовательно обзванивать агентов, начиная с penalty с меньшим номером, если они все заняты, то перейдет на агентов с более высоким значением penalty. Это можно использовать для обслуживания очереди в критические моменты. Например, у персонала с номером penalty = 0 отвечать на звонки – это основная обязанность, они и будут обслуживать очередь. Если количество звонков увеличится, будет привлечен дополнительный персонал с penalty = 1 и так далее.

Параметр strategy отвечает за распределение вызовов между агентами. По умолчанию используется значение ringall, при котором звонок производится по всем свободным номерам, пока один из них не ответит. Такой режим не всегда удобен, и можно рекомендовать только при критических нагрузках, поэтому в зависимости от ситуации его нужно изменить на другой. Например, в небольшом офисе подойдет вариант более справедливый rrmemory. В этом случае запоминается последний агент, которому был передан звонок, при поступлении следующего запроса поиск начнется со следующего по списку агента. Режим roundrobin несколько похож на rrmemory, только запоминается агент, с которого начинался поиск, и в следующий раз поиск начнется со следующего по списку. Возможны другие варианты: random (произвольный агент), leastrecent (отвечавший ранее других) и fewestcalls (получивший меньшее количество звонков в этой очереди).

Также в файле в параметрах, начинающихся на queue-*, описано несколько звуковых файлов, используемых для указания абоненту его позиции в очереди или приблизительного времени ожидания обработки его вызова. Сами сообщения на английском, нужно на их место подставить свои.

Чтобы агенты могли регистрироваться, необходимо в extensions.conf добавить специальные расширения и занести сам экстеншн:

; номер для регистрации агента

exten=> 7001,1,AgentCallbackLogin(||${CALLERIDNUM}@callcenter)

[callcenter]

exten=> 911,1,Answer

exten=> 911,2,Ringing

exten=> 911,3,Wait(2)

exten=> 911,4,Queue(MyQueue)

exten=> 911,5,Hangup

; и номера телефонов

exten => 600,1,Dial(SIP/600)

; и так далее

После изменений в конфигурации не забываем перезагружать Asterisk:

$ sudo asterisk -r

CLI> reload

Сервер должен показать, что модуль app_queue.so готов к работе (True Call Queueing).

Теперь, чтобы зарегистрировать агента, набираем номер 7001 и по подсказкам системы вводим сначала ID = 3001 и #, затем пароль 1234 и #. При работе с некоторыми софтфонами (X-Lite и ZoIPer njxyj) Asterisk почему-то не определяет автоматически номер телефона, поэтому на третьем шаге может последовать запрос о номере, к которому следует привязать агента – 600 и #.

Если все сделано правильно, то будет проиграно сообщение «agent-loginok», сервер положит трубку, а в консоли появится сообщение:

Callback Agent '3001' logged in on 600@callcenter

Setting global variable 'AGENTBYCALLERID_600' to '3001'

Если в регистрации отказано и в консоли выдано сообщение:

Extension '600@callcenter' is not valid for automatic login of agent '3001'

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

Unable to join queue 'MyQueue'

то скорее всего на данный момент ни один из агентов не зарегистрирован. Позвонив повторно на номер 7001, можно сменить телефон, к которому будет привязан агент, или, нажав <#>, отменить регистрацию агента. При поступлении входящего звонка Asterisk поднимает трубку, переводя соединение в состояние ответа, и вызывает свободного в данное время агента. Если все номера заняты, звонившему может выдаваться информация о времени ожидания и приблизительном времени, когда ему ответят, и музыка.

Настройка музыки при ожидании

Слушать гудки, пока абонент не снял трубку, скучно, чтобы немного снять напряжение, можно установить мелодию, которая будет проиграна вместо гудков. В Asterisk в качестве источника звука можно использовать файлы в форматах WAV, MP3, UL, RAW и других, а также потоковое аудио. Формат WAV в версии 1.4.x используется по умолчанию и является предпочтительным, так как отнимает меньше системных ресурсов на конвертирование. Учитывая нагрузку на канал и качество связи, 8 бит часто вполне достаточно, использовать файлы с лучшим качеством не стоит. В ранних версиях для воспроизведения MP3-файлов необходимо было установить утилиту mpg123 или другую, используемую для преобразования mpeg в PCM. Сейчас разработчики Asterisk отказались от его использования, и для поддержки MP3 необходимо использовать пакет asterisk-addons. В поставке Asterisk уже есть несколько мелодий, которые находятся в каталоге /var/lib/asterisk/moh. В самом простом случае достаточно в musiconhold.conf указать новый класс, состоящий всего из нескольких директив:

[default]

mode => files

directory => /var/lib/asterisk/moh

random=yes

Класс default описывает ресурс для MON. В нем мы указали режим воспроизведения файлов, каталог, в котором находится музыка, и установили их случайное воспроизведение. Если файлы имеют специфический формат, который не может воспроизвести Asterisk, дополнительно следует использовать директиву «application». В качестве аргумента в «application» можно использовать и скрипты, умеющие воспроизводить музыку в определенном формате.

Вот собственно и все настройки. Как видите, использование Asterisk может помочь решить весьма непростую проблему обслуживания клиентов. Успехов.

  1. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 1 //«Системный администратор», № 6, 2005 г. – C. 12-19.
  2. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 2 //«Системный администратор», № 7, 2005 г. – C. 32-38.
  3. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 3 //«Системный администратор», № 8, 2005 г. – C. 10-19.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru