asterisk настройка голосового меню
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Настройка IVR в Asterisk
Как настроить голосовое меню на Asterisk?
Базовый курс по Asterisk
Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk
Нужно отметить, что изменения, которые претерпел интерфейс настройки FreePBX с 12 версии, носят часто косметический характер. Интерфейс стал более симпатичным, современным, но в то же время удобным и интуитивным
Если Вы хотите побольше узнать о принципах работы IVR и что это такое, предлагаем прочитать соответствующую статью в нашей базе знаний.
Итак, перейдём непосредственно к настройке. В данном примере, как было сказано выше, будем пользоваться FreePBX 13 и Asterisk 13 версии
Перед нами откроется страница добавления нового голосового меню IVR, нажимаем Add IVR
Открывается достаточно обширный список параметров, настраивая которые можно создать подходящее Вам голосовое меню. Кратко пробежимся по каждой опции:
Базовый курс по Asterisk
Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk
Настройка голосового меню (IVR) на Asterisk
Интерактивное голосовое меню, или голосовое дерево, IVR меню или просто, IVR используется для возможности позвонившему подключиться к конкретному сотруднику компании или соединиться с линией поддержки определенной категории. Также, с помощью IVR можно получить необходимую информацию без ответа со стороны оператора, выбрав интересующую информацию. Другими словами, это система, взаимодействующая с абонентом и реагирующая на его команды.
Принцип настройки
IVR настраивается в плане набора Aterisk (dialplan) — в конфигурационном файле extensions.conf.
Сначала мы проигрываем запись с голосовым приветствием и предложением ввести номер в тональном режиме. В том же файле мы обрабатываем вводимую информацию, перекидывая абонента на другие диалплан, очередь или конкретного сотрудника.
Базовая настройка
Открываем конфигурационный файл:
[outcaling]
.
exten => 222,1,Answer()
same => n,Background(basic-pbx-ivr-main)
exten => _XXX,1,Dial(SIP/$
* в данном примере, при звонке на номер 222 нам проигрывается голосовая запись basic-pbx-ivr-main (из каталога /var/lib/asterisk/sounds/ ). Когда мы вводим трехзначный добавочный номер, нас соединяет Asterisk с этим номером. Предполагается, что наш основной диалплан называется outcaling.
Перезапускаем настройки диалплана:
Голосовое дерево
Теперь настроим возможность выбора отдела, с которым абонент захочет соединиться.
Приводим наш диалплан к следующему виду:
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)
[managers]
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)
[support]
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)
Перечитываем настройки диалплана:
Таймаут по времени ожидания и неправильные действия
Добавим обработку неправильно введенной цифры и превышение времени ожидания. В вышеуказанном примере просто происходит отбой звонка.
Данное поведения указывается в диалплане с помощью ключей t и i. Добавим их в наш конфиг:
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) — сообщить о том, что введен неправильный номер.
Если не работает донабор
Если во время тестирования возникнут проблемы при донаборе внутреннего номера, необходимо проверить режим DTMF. В двух словах, это аналоговый сигнал для набора телефонного номера. Он может отправляться разными способами: inband, rfc2833 / rfc4733, info. При возникновении проблем, попробуйте в настройках клиента выставить rfc2833 или inband.
На стороне Asterisk также можно настроить sip-пир на определенный способ передачи DTMF:
* настройка может быть задана на глобальном уровне, уровне шаблона или для конкретного пира.
Примеры настроек
Рассмотрим некоторые дополнительные примеры настроек диалплана, которые будут полезны при конфигурировании автоинформатора.
1. Расписание
а) Мы можем вызывать различные контексты диалплана в зависимости от времени суток. Для этого вызываем приложение GotoIfTime:
* в данном примере при звонке с 08 до 20:00 в будние дни нас перекинет в контекст working_hours, иначе — в not_working_hours.
б) Чтобы во время нашей работы в рабочие часы мы могли проверить работу автоинформатора в нерабочее время, можно задать исключение для определенного номера:
* в данном примере мы добавили строку с проверкой исходящего номера. Если мы звоним с телефона 9062504869, то звонок всегда перекидывать в контекст not_working_hours.
в) Также мы можем менять направление диалплана в зависимости от времени:
exten => s,1,NoOp(Разные пути в зависимости от времени и дня)
same => n,GotoIfTime(10:00-13:59,mon-fri,*,*?true:false)
same => n(true),NoOp(TRUE)
same => n,Background(wav/true)
same => n,Hangup()
same => n(false),NoOp(FALSE)
same => n,Background(wav/false)
same => n,Hangup()
* в данном примере мы проиграем файл wav/true, если звонок будет совершен в будние дни с 10 до 14, и wav/false — в любое другое время.
Настройка IVR в Asterisk
Доброго времени суток дорогие читатели. Тема нашей сегодняшней статьи IVR (Interactive Voice Response) — голосовое меню. Сегодня уже почти в каждой организации есть голосовое меню. Меню можно сделать совсем простым либо сложным с большим количеством переходов. Большие меню делать не советую, людям это не нравится. Давайте разбираться как происходит настройка IVR в Asterisk.
Подготовка аудиозаписей
Перед настройкой IVR необходимо подготовить аудиозапись приветствия. Записать приветствие можно самим либо купить профессиональную озвучку. Формат записи должен соответствовать: 8кГц, 16 Бит, Моно
Для конвертации записи в нужный формат я использую программу Audacity она бесплатная и проста в использовании.
Аудиозаписи будем хранить в папке /opt/music
Создание папки music
Скопируйте удобным для вас способом аудиозаписи в созданную папку. Перейдем непосредственно к написанию IVR для Asterisk.
Создание IVR в Asterisk
Необходимо создать автосекретарь на Asterisk с переключением на внутренние номера. IVR меню будет состоять из 4 пунктов:
В основном меню и в каждом из отделов сделаем переключение на оператора по истечению времени. Когда клиент наберет цифру не соответствующую какому-либо из меню он также попадет на оператора. Вы также можете добавить в каждом меню возврат на предыдущий уровень.
Для записи тестового IVR приветствия я воспользовался бесплатным сервисом озвучивания текста. В интернет таких довольно много. У меня получилось 5 аудио записей:
Аудио запись | Назначение |
---|---|
privet | Приветствие в рабочее время |
poka | Приветствие в нерабочее время и выходные дни |
komm_otd | Перечисление сотрудников коммерческого отдела |
otd_dost | Переключение на сотрудников отдела доставки |
otd_yuristov | Сотрудники юридического отдела |
Глобальные переменные
Данные о рабочих днях я заношу в глобальные переменные, секция [globals]. Использование глобальных переменных позволяет менять их только в одном месте без поиска по всему диалплану. Переменные всего две:
Где MSK_week — это период работы в днях недели. Возможные варианты: mon — понедельник, tues — вторник, wed — среда, thues — четверг, fri — пятница, sat— суббота, sun — воскресенье. Записывать можно как целый период через дефис, так и через запятую перечисляя каждый день недели. MSK_time — время работы.
IVR меню
Рассмотрим команды Asterisk используемые в нашем IVR меню. Начнем с воспроизведения аудио записи приветствия.
Рассмотрим меню подробнее
Контекст [from-sipnet] это основное меню. После поднятия трубки и 5 секундного ожидания включается GotoIfTime. Сравнивая текущие параметры с заданными происходит переключение. Если параметры верны, происходит переход на метку dialwork. Далее проигрывается приветствие privet, затем следует 10 секундное ожидание ввода команды. Если входящий звонок произошел в нерабочее время (проверка GotoIfTime) выполняется команда Playback(/opt/music/poka).
С помощью метода перехода по меткам Goto мы указываем при нажатии какой цифры будет переход в нужный отдел. При нажатии 0 мы отправим звонок на номер 2000, это наш оператор.
Внизу контекста основного меню прописаны три дополнительных экстеншена, разберем подробнее:
В контекстах kom_otdel, otdel_dost, ur_otdel описано что делать в случае выбора данных меню в IVR. Описывать их особого смысла не вижу, они очень похожи.
Данный IVR очень удобно использовать как основу и позже добавлять расширенный функционал. Спасибо за внимание и до новых встреч.
Предлагаю посмотреть видео с настройкой и тестированием работы IVR на Asterisk
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Настройка IVR в FreePBX 13
”Здравствуйте, вы позвонили в компанию «Company Name», для соединения с отделом продаж – нажмите 1, если вы являетесь партнером нашей компании – нажмите 2, по вопросам технической поддержки – 3. Для соединения с оператором – оставайтесь на линии”. Наверное, сейчас уже ни одна компания не осталась без подобного сценария обработки входящих звонков. Короткие гудки в трубке, прежде чем Вам ответит сотрудник компании, в которую Вы пытаетесь дозвониться – теперь уже большая редкость. Всё это стало возможным с появлением цифровых АТС, а функционал, пример которого был приведен выше, называется IVR (Interactive Voice Response) в русской литературе – голосовое меню. В сегодняшней статье, мы рассмотрим функционал IVR на примере IP-АТС Asterisk и FreePBX 13.
Базовый курс по Asterisk
Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk
Основной функцией IVR – является маршрутизация входящих вызовов между департаментами компании, посредством обработки сигналов тонального набора, осуществляемых дозвонившимся клиентом, на своем телефоне. Тем самым, IVR позволяет распределить нагрузку на операторов кол-центра, т.к клиенту предоставляется возможность соединиться с интересующим его отделом и получить всю необходимую информацию, минуя первую линию операторов. Помимо данной функции, IVR может использоваться в рекламных и маркетинговых акциях, в целях получения статистической информации и даже в организации автономных голосовых порталов с распознаванием речи, где вообще не требуется присутствие оператора.
В больших кол-центрах к организации IVR подходят серьёзно, учитываются все факторы вплоть до психологического. От того насколько грамотно подобран голос диктора, музыкальное сопровождение и информация сообщения, зависит расположение клиента, который дозвонился в компанию и его лояльность. Информация, которая сообщается в меню IVR должна быть изложена лаконично, дружелюбно и емко. Поэтому в первую очередь – необходимо написать текст IVR и его сценарий. Общая рекомендация – ограничиться несколькими опциями, т.е не стоит задавать слишком большое меню с 6 и более опциями, поскольку в нем попросту будет сложно ориентироваться.
Пошаговое видео
Настройка
Перед нами откроется страница добавления нового голосового меню IVR, нажимаем Add IVR
Пройдёмся по основным пунктам:
Базовый курс по Asterisk
Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk
Asterisk + UniMRCP + VoiceNavigator. Синтез и распознавание речи в Asterisk. Часть 1
Учитывая, возросший интерес сообщества к Asterisk решил внести и свою лепту и рассказать о построении голосовых меню с использованием синтеза и распознавания речи.
Статья рассчитана на специалистов, имеющих опыт работы с построением IVR в Asterisk и имеющих представление о системах голосового самообслуживания.
СГС (системы голосового самообслуживания) значительно расширяют возможности по созданию голосовых приложений и позволяют пользователю получать информацию и заказывать услуги самостоятельно, без участия оператора. Это может быть маршрутизация вызовов, запрос и выдача информации по расписанию авиарейсов, состояние банковского счета, заказ такси, запись на прием к врачу и пр.
Распознавание позволяет отказаться от линейных меню, создаваемых с помощью DTMF, разговаривать с системой человеческим языком и легко создавать меню с множественным выбором.
Синтез значительно упрощает работу с динамически меняющейся информацией и большими объемами текстовых данных.
Ниже я буду описывать интеграцию Asterisk с VoiceNavigator, т.к. являюсь сотрудником компании его разрабатывающей и занимаюсь, в том числе, поддержкой и интеграцией с малыми платформами (Asterisk, FreeSWITCH). Сразу скажу, что решение платное. Реально работающих OpenSource приложений для синтеза и распознавания русской речи нет.
Синтез и распознавание русской речи в Asterisk
Принятым в индустрии стандартом для реализации функционала синтеза и распознавания является использование протокола MRCP.
В Asterisk для этого используется библиотека UniMRCP.
UniMRCP – это кроссплатформенное ПО с открытым исходным кодом, включающее необходимые средства для реализации функций MRCP-клиента и MRCP-сервера.
Проект неспешно развивается и, насколько мне известно, это единственное на сегодня OpenSource решение для работы с MRCP-протоколом. Поддерживает Asterisk(все версии, начиная с 1.4) и FreeSWITCH.
VoiceNavigator
VoiceNavigator является программным комплексом, который устанавливается на отдельную машину с Windows и предоставляет доступ к движкам синтеза и распознавания посредством протокола MRCP.
Включает в себя STC MRCP Server, комплекс синтеза речи STC TTS и комплекс распознавания речи STC ASR.
MRCP-сервер
MRCP-сервер управляет взаимодействием между используемой голосовой платформой и модулями ASR и TTS. STC MRCP Server поддерживает следующие голосовые платформы: Asterisk, FreeSWITCH, Avaya Voice Portal, Genesys Voice Platform, Cisco Unified CCX, Siemens OpenScape.
MRCP-запросы передаются командами протокола RTSP.
Для передачи звуковых данных используется протокол RTP.
Голосовая платформа через MRCP-сервер запрашивает доступ к модулям распознавания и синтеза речи, в зависимости от этого используются различные схемы взаимодействия.
Модуль ASR занимается распознаванием речи. Ключевым понятием для ASR является SRGS-грамматика.
SRGS (speech recognition grammar specification) – стандарт, который описывает структуру грамматики, используемой в распознавании речи. SRGS позволяет задавать слова или словосочетания, которые могут быть распознаны речевым движком.
Создание грамматик – это отдельная наука и при наличии интереса, готов написать отдельную статью.
Модуль TTS использует язык разметки SSML (Speech Synthesis Markup Language) основанный на XML для применения в приложениях синтеза речи.
Управление синтезом происходит с помощью тегов. С их помощью можно определить произношение, управлять интонацией, скоростью, громкостью, длиной пауз, правилами чтения и т.д.
Пример синтеза речи от ЦРТ можно послушать здесь vitalvoice.ru/demo
Схема работы
Звонок поступает на голосовую платформу.
Голосовая платформа активирует сценарий голосового меню, по которому происходит дальнейшее взаимодействие с абонентом.
Сценарий голосового меню определяет: когда система должна прочитать абоненту инструкцию, задать вопрос и как обработать его ответ.
VoiceNavigator принимает от голосовой платформы запросы на распознавание и синтез речи, выполняют их и возвращают результат выполнения по протоколу MRCP.
При распознавании речи, голосовая платформа передает SRGS-грамматику и оцифрованную речь и получает ответ в виде NLSML.
При синтезе речи, голосовая платформа передает plain-текст или SSML и получает в ответ синтезированную речь.
Установка и настройка UniMRCP
Перейдем к практической части.
Ниже описана установка UniMRCP на родную для Asterisk CentOS. При установке на другие ОС могут быть незначительные отличия.
Скачиваем с официального сайта последнюю версию uni-ast-package-0.3.2.
Пакет содержит:
• Asterisk версии 1.6.2.9 – работа с этой версией проверена разработчиком UniMRCP;
• Asterisk-UniMRCP-Bridge 0.1.0 – мост для сопряжения Asterisk и UniMRCP модуля;
• UniMRCP – Модуль UniMRCP 1.0.0;
• APR – Apache Portable Runtime 1.4.2;
• APR-Util – Apache Portable Runtime Utility Library 1.3.9;
• Sofia-SIP – SIP User-Agent library 1.12.10.
Для установки требует autoconf, libtool, gcc, pkg-config.
После распаковки видим в корне папки три скрипта:
ast-install.sh – устанавливает идущий в поставке Asterisk, если он не установлен в системе.
uni-install.sh – устанавливает UniMRCP
connector-install.sh – устанавливает бридж между Asterisk и UniMRCP.
Запускаем их именно в таком порядке (если Asterisk установлен — ast-install.sh не надо) и отвечаем на все вопросы утвердительно.
Смотрим, чтобы все установилось без ошибок.
По моему опыту ошибки бывают только при неудовлетворении зависимостей. Если Asterisk ранее собирался из исходников, то все зависимости уже должны быть удовлетворены и установка пройдет легко и быстро.
После установки у Asterisk появилось 2 новых модуля res_speech_unimrcp.so и app_unimrcp.so, а диалплан обзавелся командами MRCPSynth и MRCPRecog. В корректности установки можно убедиться, введя в консоли Asterisk:
*CLI> module show like mrcp
Module Description Use Count
res_speech_unimrcp.so UniMRCP Speech Engine 0
app_unimrcp.so MRCP suite of applications 0
2 modules loaded
;Имя профиля
[vn-internal]
; +++ MRCP settings +++
;Версия MRCP-протокола
version = 1
;
; +++ RTSP +++
; === RSTP settings ===
; Адрес MRCP-сервера
server-ip = 192.168.2.106
;Порт, по которому VoiceNavigator принимает запросы на синтез и распознавание
server-port = 8000
; force-destination = 1
;Расположение ресурсов синтеза и распознавания на MRCP-сервере
;(для VoiceNavigator – пустое значение)
resource-location =
;Имена ресурсов синтеза и распознавания в VoiceNavigator
speechsynth = tts
speechrecog = asr
;
; +++ RTP +++
; === RTP factory ===
;IP-адрес компьютера, на котором установлен Asterisk и с которого будет сниматься RTP-трафик.
rtp-ip = 192.168.2.104
; rtp-ext-ip = auto
После перезапуска Asterisk профиль будет активирован и система готова к работе и созданию первого голосового приложения.
Как было описано ранее, Asterisk для работы использует функции MRCPSynth и MRCPRecog библиотеки app_unimrcp.so:
MRCPSynth
Функция MRCPSynth имеет следующий формат:
MRCPSynth(text, options), где
text — текст для синтеза (текст \ SSML),
options — параметры синтеза.
Параметры синтеза:
p — Профиль подключения к ресурсу синтеза, содержащийся в файле mrcp.conf
i — Цифры, по нажатию которых на телефоне, синтез будет прерван
f — Имя файла для записи синтезированной речи (запись производится в raw, запись не производится, если параметр или имя файла не заданы)
v — Голос, которым требуется осуществить синтез, например, «Мария8000».
Пример использования функции в диалплане
plain-text:
SSML:
Преимуществом применения SSML по сравнению с plain-text является возможность использования различных тегов (голос, скорость и выразительность речи, паузы, интерпретация текста и т.д.).
MRCPRecog
Функция MRCPRecog имеет следующий формат:
MRCPRecog(grammar,options), где
grammar – грамматика (URL \ SRGS), задается ссылкой на файл, расположенный на http-сервере или непосредственно в теле функции.
options — параметры распознавания.
Параметры распознавания:
p — Профиль подключения к ресурсу распознавания, содержащийся в файле mrcp.conf
i — Цифры кода DTMF, при получении которых распознавание будет прервано.
При значении «any» или других символах, распознавание будет прерываться при их получении, а символ будет возвращаться в план набора.
f — Имя файла для проигрывания в качестве приглашения
b — Возможность прервать проигрываемый файл (режим barge-in) и начать распознавание (нельзя перебить=0, можно перебить и обнаружение речи осуществляет ASR движок=1, можно перебить и обнаружение речи осуществляет Asterisk=2)
t — Время, по истечении которого система распознавания может прервать процедуру распознавания с кодом recognition-timeout (003), в случае, если распознавание началось, и нет ни одного варианта распознавания. Значение задается в миллисекундах в диапазоне [0..MAXTIMEOUT].
ct — Порог уверенного распознавания (0.0 – 1.0).
Если confidence-level, возвращаемый при распознавании, меньше confidence-threshold, то результат распознавания no match.
sl — Чувствительность к несловарным командам. (0.0 — 1.0). Чем больше значение, тем выше чувствительность к шуму.
nb — Определяет количество возвращаемых результатов распознавания. Возвращается N результатов распознавания, с уровнем достоверности больше confidence-threshold. Значение по умолчанию = 1.
nit — Время, по истечении которого система распознавания может прервать процедуру распознавания, с кодом no-input-timeout (002), в случае, если распознавание началось и не найдено речи. Значение задается в миллисекундах, в диапазоне [0..MAXTIMEOUT].
Пример использования функции в диалплане
Задание грамматики в теле функции:
Указание ссылки на грамматику:
Параметры f=hello&b=1 обеспечивают озвучивание звукового файла, например, «Произнести число от 1 до 100», который можно прервать с помощью barge-in, т.е. начать говорить, не дослушав сообщение до конца и тем самым запустить процесс распознавания.
Пример простого голосового приложения для распознавания чисел
В следующей серии будет подробнее рассказано об используемых тегах синтеза и построении грамматик распознавания.