Голосовое дерево
Теперь настроим возможность выбора отдела, с которым абонент захочет соединиться.
Приводим наш диалплан к следующему виду:
vi /etc/asterisk/extensions.conf
exten => 333,1,Answer()
exten => 333,2,Background(basic-pbx-ivr-main)
exten => 333,3,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/managers)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/201)
exten => 2,1,Dial(SIP/202)
exten => 0,1,Goto(outcaling,333,1)
exten => s,1,Ringing
same => n,Wait(1)
same => n,Background(/var/lib/asterisk/sounds/wav/support)
same => n,Waitexten(5)
exten => 1,1,Dial(SIP/101)
exten => 2,1,Dial(SIP/102)
exten => 0,1,Goto(outcaling,333,1)
* где:
- 333 — внутренний номер, позвонив на который мы услышим голосовое меню.
- WaitExten(5) — система ожидает ввода номера в течение 5 секунд.
- 1,1,Goto(managers,s,1) — если абонент ввел 1, переходим к диалплану managers, пункту s,1.
- 2,1,Goto(support,s,1) — если абонент ввел 2, переходим к диалплану support, пункту s,1.
- Background(/var/lib/asterisk/sounds/wav/managers) — запись голосового меню для managers.
- Background(/var/lib/asterisk/sounds/wav/support) — запись голосового меню для support.
Перечитываем настройки диалплана:
asterisk -x «dialplan reload»
Настройка IVR в FreePBX 13
”Здравствуйте, вы позвонили в компанию «Company Name», для соединения с отделом продаж – нажмите 1, если вы являетесь партнером нашей компании – нажмите 2, по вопросам технической поддержки – 3. Для соединения с оператором – оставайтесь на линии”. Наверное, сейчас уже ни одна компания не осталась без подобного сценария обработки входящих звонков. Короткие гудки в трубке, прежде чем Вам ответит сотрудник компании, в которую Вы пытаетесь дозвониться – теперь уже большая редкость. Всё это стало возможным с появлением цифровых АТС, а функционал, пример которого был приведен выше, называется IVR (Interactive Voice Response) в русской литературе – голосовое меню. В сегодняшней статье, мы рассмотрим функционал IVR на примере IP-АТС Asterisk и FreePBX 13.
Основной функцией IVR – является маршрутизация входящих вызовов между департаментами компании, посредством обработки сигналов тонального набора, осуществляемых дозвонившимся клиентом, на своем телефоне. Тем самым, IVR позволяет распределить нагрузку на операторов кол-центра, т.к клиенту предоставляется возможность соединиться с интересующим его отделом и получить всю необходимую информацию, минуя первую линию операторов. Помимо данной функции, IVR может использоваться в рекламных и маркетинговых акциях, в целях получения статистической информации и даже в организации автономных голосовых порталов с распознаванием речи, где вообще не требуется присутствие оператора.
В больших кол-центрах к организации IVR подходят серьёзно, учитываются все факторы вплоть до психологического. От того насколько грамотно подобран голос диктора, музыкальное сопровождение и информация сообщения, зависит расположение клиента, который дозвонился в компанию и его лояльность. Информация, которая сообщается в меню IVR должна быть изложена лаконично, дружелюбно и емко. Поэтому в первую очередь – необходимо написать текст IVR и его сценарий. Общая рекомендация – ограничиться несколькими опциями, т.е не стоит задавать слишком большое меню с 6 и более опциями, поскольку в нем попросту будет сложно ориентироваться.
Принцип настройки
IVR настраивается в плане набора Aterisk (dialplan) — в конфигурационном файле extensions.conf.
Сначала мы проигрываем запись с голосовым приветствием и предложением ввести номер в тональном режиме. В том же файле мы обрабатываем вводимую информацию, перекидывая абонента на другие диалплан, очередь или конкретного сотрудника.
Записать голосовое приветствие с просьбой ввода номера можно с помощью различных программ звукозаписи. Asterisk работает с форматами .waw, .gsm. В случае наличия другого формата, можно воспользоваться пакетом для конвертации — sox. Также можно загрузить и установить готовый список голосов на русском, который частично, можно использовать.
Freepbx13 распределение звонков по времени
Модуль, отвечающий за распределение вызовов по времени – Time Conditions. Данный модуль представляет из себя набор правил, в который включены временные группы (Time Group).В модуле настраиваются два условия: первое – если выполняются правила Time Group, а второе, если данные правила не выполняется. Модуль Time Conditions чаще всего применяется для маршрутизации вызовов в зависимости от рабочего времени в компании, например, маршрут для вызовов с 10:00 до 19:00 на секретаря, а после и по выходным, вызовы маршрутизируются на заранее записанное голосовое сообщение.
Важно отметить, что если вы решили настроить данный модуль, то стоит начать с настройки Time Group. Итак, приступаем к настройке
Для этого, подключитесь к интерфейсу FreePBX в правами администратора, и перейдите во вкладку Applications и далее во вкладку Time Conditions
Итак, приступаем к настройке. Для этого, подключитесь к интерфейсу FreePBX в правами администратора, и перейдите во вкладку Applications и далее во вкладку Time Conditions
Перейдя в интерфейс настройки, нажимаем Add Time Condition и добавляем новое условии маршрутизации по времени:
Разберемся конкретнее с каждым из параметров настройки:
- Time Condition Name — Укажите название данного условия. Удобнее всего давать имена в соответствие с логикой работы данных кондиций. Например, «Work Hours» для рабочего времени и «Holidays» для выходных.
- Override Code Pin — В FreePBX13 существует Feature Code, по умолчанию это *27. С его помощью можно менять временные кондиции (Time Conditions). Поле Override Code Pin позволяет ввести пин-код, который будет запрошен у пользователя, который попытается изменить это временное условие.
- Invert BLF Hint — Да/Нет. Для каждой из временных кондиций, создается BLF хинт (hint). Соответственно, ка телефонном аппарате с поддержкой BLF можно отображать статус данной временной кондиции. По умолчанию, (Invert BLF Hint = No) – это означает, что в случае, если данный временная кондиция не совпадает, то в BLF выставляется статус «INUSE», а это как правило, красная лампочка. В случае, если кондиция совпадает с временной группой, то выставляется статус «NOT_INUSE», а это, как правило зеленая лампочка. В случае, если параметр Invert BLF Hint = Yes, то указанные выше позиции определяется в обратном порядке.
-
Change Override — Текущий статус перезаписи временного условия отображается в выпадающем меню. Если это новое временное условие, которое ещё не сохранено, статус будет НЕИЗВЕСТНО. В ином случае, вы увидите текущий статус. Выпадающее меню дает вам возможность изменять статус перезаписи:
- Unchanged — статус перезаписи не будет изменен.
- Reset Override — удаляет любой статус перезаписи, который отмечен.
- Temporary Matched / Unmatched — создает временную перезапись, пока текущий промежуток времени не истечет.
- Permanent Matched / Unmatched — создает постоянную перезапись, пока перезапись не будет удалена.
- Time Group — Временная группа, в которой отмечается временной промежуток, дни недели и месяцы. Именно на базе Time Group происходит маршрутизация вызовов в Time Condition
- Destination non-matches — Направление для вызова, если вызов не попал под правила настроенные в Time Group
После внесения всех настроек необходимо нажать Save, а затем Apply Config.
Маршрутизация звонков по времени в Asterisk
Приведу пример маршрутизации звонков по времени в Asterisk. Допустим в файле /etc/asterisk/extensions.conf есть настроенный контекст для транка со следующими параметрами:
И чтобы разрулить звонки по времени на разные телефоны укажем для контекста этого транка только вложенные контексты:
По сути daytime, nighttime, sunday это только названия контекстов, для которых прописано время в контексте , их можно называть как угодно.
И потом в этих отдельных контекстах уже пропишем нужные екстеншены. То есть, днем:
Можно также например создать контекст holiday с праздничными днями:
Для тех кто хочет расписать подробнее по дням, приведу список дней на английском: mon — Monday — Понедельник tue — Tuesday — Вторник wed — Wednesday — Среда thu — Thursday — Четверг fri — Friday — Пятница sat — Saturday — Суббота sun — Sunday — Воскресенье
Аналогично сокращаются до трех букв и названия месяцев.
источник
Таймаут по времени ожидания и неправильные действия
Добавим обработку неправильно введенной цифры и превышение времени ожидания. В вышеуказанном примере просто происходит отбой звонка.
Данное поведения указывается в диалплане с помощью ключей t и i. Добавим их в наш конфиг:
vi /etc/asterisk/extensions.conf
exten => 333,1,Answer()
same => n,Background(basic-pbx-ivr-main)
same => n,WaitExten(5)
exten => 1,1,Goto(managers,s,1)
exten => 2,1,Goto(support,s,1)
exten => t,1,Dial(SIP/101)
exten => i,1,Background(invalid)
same => n,Goto(outcaling,333,3)
…
* где t,1,Dial(SIP/101) — позвонить по номеру 101, если будет превышен таймаут ожидания; i,1,Background(invalid) — сообщить о том, что введен неправильный номер.
Добавление операторов к очереди (агентов)
Пользователей, которые отвечают на звонки очереди называют агентами или операторами. Есть два типа агентов — статические и динамические. Первые прописываются в конфигурационном файле queues.conf, вторые — могут присоединятся к очереди, становясь на некоторое время оператором.
Статические агенты
Для создания статического оператора, открываем конфигурационный файл очереди:
vi /etc/asterisk/queues.conf
В настройках очереди добавляем:
strategy = ringall
member => SIP/101,1
* в данном примере, мы добавили оператора к нашей очереди. Это sip агент с именем 101. 1 на конце — пенальти (используется для выставления приоритета при использовании некоторых стратегий).
Перечитываем все конфигурационные файлы:
asterisk -x «core reload»
Динамические агенты
Динамические агенты могут присоединиться к очереди в любой момент набором специального сочетания кнопок на телефонном аппарате. Настройка сервера выполняется в конфигурационном файле диалплана:
vi /etc/asterisk/extensions.conf
exten => *999#,1,Verbose(2,Adding dynamic member to support queue)
same => n,Set(MemberInfo=${CHANNEL(channeltype)}/${CHANNEL(peername)})
same => n,AddQueueMember(support,${MemberInfo})
same => n,Playback(agent-loginok)
same => n,Hangup()
exten => *888#,1,Verbose(2,Removing dynamic member from support queue.)
same => n,Set(MemberInfo=${CHANNEL(channeltype)}/${CHANNEL(peername)})
same => n,RemoveQueueMember(support,${MemberInfo})
same => n,Playback(agent-loggedoff)
same => n,Hangup()
* в данном примере, если агент набирает *999#, он присоединяется к очереди и может принимать вызовы. При наборе *888# агент выходит из очереди.
* Verbose — вывод в консоль информации; Set — задает значение переменной, в данном примере, MemberInfo; AddQueueMember/RemoveQueueMember — соответственно, добавляет к очереди агента и удаляет из нее; Playback — проигрывает голосовой сигнал; Hangup — дает сигнал отбоя.
Аутентификация агентов
1. Общий пароль для всех агентов
Можно сделать так, чтобы Asterisk требовал от агентов ввод пароля для присоединения к очереди. Для этого наш диалплан приводим к такому виду:
vi /etc/asterisk/extensions.conf
exten => *999#,1,Verbose(2,Adding dynamic member to support queue)
same => n,Authenticate(1234)
same => n,Set(MemberInfo=${CHANNEL(channeltype)}/${CHANNEL(peername)})
same => n,AddQueueMember(support,${MemberInfo})
same => n,Playback(agent-loginok)
same => n,Hangup()
* где Authenticate — запрос пароля, в данном примере, 1234.
2. Индивидуальные пароли для каждого агента
Если необходимо, чтобы каждый агент перед входом вводил свои номер и пароль, необходимо воспользоваться приложением VMAuthenticate (аутентификация по электронному почтовому ящику). Настройку начнем с правки диалплана:
vi /etc/asterisk/extensions.conf
exten => *999#,1,Verbose(2,Adding a member to the cc_ege_support queue.)
same => n,Read(AGENT_USERID,agent-user)
same => n,VMAuthenticate(${AGENT_USERID}@vmauth)
same => n,Set(MemberInfo=${CHANNEL(channeltype)}/${CHANNEL(peername)})
same => n,AddQueueMember(support,${MemberInfo})
same => n,Playback(agent-loginok)
same => n,Hangup()
* Read — запрашиваем данные у агента (agent-user — голосовой файл), и записываем в переменную AGENT_USERID; VMAuthenticate — запрашиваем пароль для почтового ящика ${AGENT_USERID} с контекстом vmauth.
Добавляем почтовые ящики:
1001 => 1234, dmosk, dmosk@example.com
1002 => 5678, dmosk2, dmosk2@example.com
* vmauth — контекст (его мы указали в диалплане); 1001/1002 — номера агентов; 1234/5678 — пароли.
Для применения настроек перечитываем диалплан:
asterisk -x «dialplan reload»