Операторский центр – это метод организации персонала и оборудования для достижения определенных деловых целей. Офисная АТС должна «уметь» работать как система, автоматически распределяющая поступающие вызовы (ACD — Automatic Call Distribution), позволяющая связаться с несколькими людьми через один номер или обработать несколько вызовов одновременно. В службах поддержки, и не только, это очень полезная возможность. Пользователь звонит на один из номеров, а на звонок отвечает свободный в данное время сотрудник.
Рассмотрим конфигурацию ACD на базе Asterisk и AVAYA. И в том и в другом случае работа центра основана на организации сотрудников (называемых агентами), в группы поиска. Установим группу поиска для внутренней линии справки/помощи. Назначим троих сотрудников (агентов) с собственными добавочными номерами для обслуживания нашей линии справки/помощи. Вызовы будут поступать к любому из свободных сотрудников. И так AVAYA — вводим add hunt-group next:
- Group Name — имя группы — Helpdesk.
- Group Extension — соответствующий номер телефона.
- Group Type — код метода распределения вызовов. ucd-loa вызов будет поступать к агенту, имеющему наименьший показатель процентного содержания рабочего времени с момента входа в систему.
Укажем системе, как поступить с вызовом группы поиска, если он не может быть обработан сразу. Такой вызов устанавливается в “очередь”. Определим, что в очереди может находиться до 5 вызовов, но если вызов находится в очереди более 30 секунд, то системе следует уведомить об этом. Также требуется, чтобы система предупреждала о том, что в очереди находится 3 или более вызовов.
- Queue — y.
- Queue Length — максимальное число вызовов, которые могут находиться в очереди — 5.
- Calls Warning Threshold — максимальное число вызовов в очереди, при превышении которого в системе вспыхнут кнопки состояния очереди — 3.
На третьей странице экрана HUNT GROUP добавим добавочные номера агентов.
Из методов распределения вызовов доступны:
- circ — следующий свободный агент в последовательности.
- UCD-MIA — свободный агент, который не был задействован дольше всех с момента последнего вызова.
- UCD-LOA — свободный агент, имеющий наименьший показатель процентного содержания рабочего времени с момента входа в систему.
- EAD-MIA— свободный агент с наивысшей квалификацией, который не был задействован дольше всех с момента последнего вызова.
- EAD-LOA— свободный агент, имеющий наивысшую квалификацию и наименьший показатель процентного содержания рабочего времени с момента входа в систему.
- DDC— первый агент, администрированный в этой группе поиска. В случае занятости первого агента вызов поступает ко второму агенту, и так далее.
Выполним аналогичные настройки на IP PBX Asterisk.
В отличии от AVAYA, Asterisk-агенты не привязаны к одному номеру и могут подключаться с любых. Для этого пользователь должен позвонить по определенному внутреннему номеру и ввести свой ID, пароль и номер телефона, к которому его нужно привязать. То есть агент – это как бы еще один виртуальный номер телефона. Позволим нашему внутреннему номеру быть агентом.
Данная операция внесет новый параметр в файл users.conf, в описание номера:
- hasagent = yes.
Кроме того нам не придется редактировать файл agents.conf и вносить запись типа: agent => 3001,1234,Vasja Pupkin. Определим очереди для обработки вызовов и выберем агентов(в нашем случае он один 🙂 ).
Asterisk может использовать шесть стратегий распределения вызовов между агентами.
- ringall (звонить всем) Очередь звонит всем доступным агентам и устанавливает соединение с агентом, ответившим первым (это по умолчанию).
- roundrobin (циклический) – устаревший Очередь последовательно перебирает всех агентов до тех пор, пока не найдет того, кто может принять вызов. roundrobin не учитывает загруженности агентов. Также, поскольку roundrobin всегда начинает с первого агента в очереди, эта стратегия подходит только в среде, где агенты более высокого ранга должны обрабатывать все вызовы, и только в случае их занятости принять вызов могут агенты с более низким рангом.
- leastrecent (самый давний) Вызов направляется на обработку агенту, который не получал вызовы дольше всех.
- fewestcalls (меньше всего вызовов) Вызов направляется на обработку агенту, который получил меньше всего звонков. Эта стратегия не учитывает фактической загруженности агента; она учитывает только количество принятых им вызовов (например, агент, принявший 3 вызова по 10 мин каждый, будет предпочтительнее агента, принявшего 5 вызовов по 2 мин каждый).
- random (случайный) Как следует из имени этого параметра, выбор агента осуществляется случайным образом. Для небольшого центра обработки вызовов эта стратегия, вероятно, наиболее предпочтительная.
- rrmemory Очередь перебирает список обработчиков очереди вызовов, отслеживая, кто из них получил вызов последним. При поступлении следующего вызова Asterisk начнет с этого участника. (Эта стратегия известна как циклическая память (round-robin memory)). Она обеспечивает более или менее равномерное распределение вызовов между агентами.
Или что то-же самое, в «ручную» правим файл queues.conf.
[6500]
- fullname=helpdesk
- strategy=ringall
- timeout=15
- wrapuptime=15
- autofill=no
- autopause=no
- joinempty=yes
- leavewhenempty=no
- reportholdtime=no
- maxlen=0
- musicclass=default
- member=Agent/6008
Для постановки вызова в очередь и возможности регистрации агента, добавим в файл extensions.conf соответствующий контекст используя следующую закладку менеджера.
Или правим в «ручную».[queues]
- exten=6500,1,Queue(${EXTEN})
- exten=6006,1,agentlogin()
Теперь, чтобы зарегистрировать агента, набираем номер 6006 и по подсказкам системы вводим сначала ID = 6008 и #, затем пароль XXXX (как вы заметили с тем-же с которым вы регистрируетесь на SIP аккаунте asterisk) и #. Получим сообщение о регистрации агента.
pbx*CLI>
== Agent ‘6008’ logged in (format ulaw/ulaw)
Оператор с этого момента находится на линии и ему проигрывается музыка до тех пор пока не поступит входящий вызов. Когда агенту поступает на обработку вызов из очереди, он услышит звуковой сигнал (beep) и вызывающий абонент соединяется непосредственно с агентом. Используя функцию agentlogin(), «выход» агента происходит при опускании трубки.
Функция AgentCallbackLogin хоть и присутствует в интерфейсе управления но уже не используется.
Это приложение является устаревшим, его функциональность замещена логикой «диалплана» на AEL, размещенного в файле doc/queues-with-callback-members.txt в папке исходного кода Asterisk. Рассмотрим как организовать регистрацию агента с возможностью «обратного вызова». Обеспечим возможность динамической регистрации агента, для этого редактируем файл extensions.ael и добавим новый контекст queues-loginout.
context queues-loginout {
6010 => {
Answer();
Read(AGENT_NUMBER,agent-user);
VMAuthenticate(${AGENT_NUMBER}@default,s);
Set(queue-announce-success=1);
goto queues-manip,I${AGENT_NUMBER},1;
};
6011 => {
Answer();
Read(AGENT_NUMBER,agent-user);
Set(queue-announce-success=1);
goto queues-manip,O${AGENT_NUMBER},1;
};
};
В данном контексте мы описали два внутренних номера, один из которых (6010) предназначен для регистрации агента, второй (6011) для выхода. Коротко остановимся на функциях. Read — проигрывает приглашение agent-user.gsm и считывает в указанную переменную — AGENT_NUMBER, вводимую пользователем, DTMF последовательность, завершенную символом ‘#’.
VMAuthenticate — эта команда ведет себя аналогично приложению Authenticate(), за тем исключением, что пароли для проверки берутся из файла voicemail.conf, попросту говоря Вы проходите аутентификацию по паролю почтового ящика. И в заключении переходим в контекст queues-manip.
context queues-manip {
includes {
queues;
};
_[IO]60XX => {
&queue-addremove(6500,0,${EXTEN});
&queue-success(${EXTEN});
};
};
Из данного контекста вызываются два макроса. В первый в качестве параметра передается имя очереди описанное в queues.conf, приоритет (penalty) и номер абонента, где и происходит динамическая регистрация агента.(функция AddQueueMember() ) Содержание макроса queue-addremove.
macro queue-addremove(queuename,penalty,exten) {
switch(${exten:0:1})
{
case I: // Login
AddQueueMember(${queuename},Local/${exten:1}@agents,${penalty});
break;
case O: // Logout
RemoveQueueMember(${queuename},Local/${exten:1}@agents);
break;
};
};
Макрос queue-success проосто проигрывает соответствующие звуковые файлы о регистрации или выходе.
macro queue-success(exten) {
if( ${queue-announce-success} > 0 )
{
switch(${exten:0:1})
{
case I:
Playback(agent-loginok);
Hangup();
break;
case O:
Playback(agent-loggedoff);
Hangup();
break;
};
};
};
Контекст agents и макрос callagent для возможности совершить «обратный вызов» и отключить не отвечающего агента.
context agents {
6008 => &callagent(SIP/6008,${EXTEN});
};
//***********************************************************************
macro callagent(device,exten) {
if( ${GROUP_COUNT(${exten}@agents)}=0 )
{
Set(OUTBOUND_GROUP=${exten}@agents);
Dial(${device},300,t);
switch(${DIALSTATUS})
{
case BUSY:
Busy();
break;
case NOANSWER:
Set(queue-announce-success=0);
goto queues-manip,O${exten},1;
default:
Hangup();
break;
};
}
else
{
Busy();
};
Для проверки зарегистрируемся в качестве агента. Для этого набираем номер 6010 и следуя подсказкам вводим номер и пароль, завершая символом ‘#’.
Получаем сообщение об успешной регистрации. С этого момента вызовы попадающие в очередь — 6500, будут направлены агенту. В случае его занятости, будет проигрываться музыка и сообщения о состоянии очереди. В случае не ответа агента — он будет отключен из обслуживания данной очереди. Для мониторинга состояния очереди применяем команду queue show.