Алина Леонова
30.05.2020
10422

Интеграция Asterisk и RHVoice

В последнее время всё больше набирают популярность системы синтеза речи, интегрированные с Asterisk. Их можно использовать на разных этапах маршрутизации: например в голосовом меню, в очередях. Также их используют в голосовых ботах и системах автоматического обзвона. RHVoice – бесплатная кроссплатформенная система синтеза речи, которая поддерживает множество языков. Она разработана на движке Ольги Яковлевой. У данной […]

Asterisk и RHVoice

В последнее время всё больше набирают популярность системы синтеза речи, интегрированные с Asterisk. Их можно использовать на разных этапах маршрутизации: например в голосовом меню, в очередях. Также их используют в голосовых ботах и системах автоматического обзвона.

RHVoice – бесплатная кроссплатформенная система синтеза речи, которая поддерживает множество языков. Она разработана на движке Ольги Яковлевой. У данной системы открытый исходный код.

В данной статье рассмотрим возможность интеграции RHVoice с Asterisk. Также покажем пример работы в связке с умной маршрутизацией входящих вызовов.

Шаг 1. Установка зависимостей

Для успешной установки синтезатора речи в системе необходимы следующий зависимости: GCC, PKG-config и scons.

Если ранее на Вашем сервере не было данных зависимостей, установим их с помощью команд ниже.

Обратите внимание, что в статье установка производится на CentOS 7.
  • GCC – совокупность компиляторов для ряда языков программирования. Среди таких яызков, например, Java, Си, C++ и другие.

Для установки GCC в CentOS введём команду:

yum install gcc
  • SCons – ПО для сборки, созданный в качестве замены для make. Сборка RHVoice происходит именно через SCons.

Для установки SCons введём команду:

yum install scons
Установка SCons
  • PKG-Config – программа, которая опрашивает все установленные библиотеки при компиляции ПО, что позволяет писать код без знания полного пути к каждой из этих библиотек.

Для установки PKG-Config введём команду:

  yum install pkgconfig
Также для дальнейшей работы с Asterisk на сервере телефонии обязательно иметь установленный sox.

Далее нужно убедиться, что в системе установлено хотя бы одно из ниже перечисленных приложений, отвечающих за вывод звука:

        — PulseAudio;

        — Libao;

        — PortAudio V19.

При установке важно понимать, что для работы RHVoice требуются как пакеты типа devel, так и само приложение.

В качестве примера рассмотрим установку PulseAudio.

Шаг 2. Установка PulseAudio

Для установки приложения введём команду:

yum install pulseaudio
Установка приложения PulseAudio

Также установим пакеты библиотек разработчика. Для этого введём команды:

  yum install pulseaudio-libs
  yum install pulseaudio-libs-devel
Установка библиотек PulseAudio

Далее перейдём к компиляции системы синтеза речи.

Шаг 3. Компиляция и установка

Для компиляции нам потребуется архив с исходным кодом RHVoice. Его можно скачать по данной ссылке.

Затем удобным способом помещаем его на сервер телефонии и разархивируем его командой

unzip RHVoice-master.zip

После того, как произошла разархивация, переходим в появившуюся папку и начинаем компиляцию. Для этого вводим команду:

  scons
Компиляция может завершиться ошибкой: src/include/core/pitch.hpp:76:12: error: non-static const member ‘const size_t RHVoice::pitch::stylizer::point_t::index’, can’t use default assignment operator. Эта ошибка связана с версией компилятора g++.

Для решения данной ошибки выполним следующие действия:

                — Перейдём в файл SConstruct (в корне папки RHVoice-master);

                — Находим нужную строку ‘env.AppendUnique(CXXFLAGS= [«-std=c++03»])’;

                — Заменяем ‘-std=c++03’ на ‘-std=c++11’.

Если до этого были установлены все зависимости, то после текущих правок компиляция завершится удачно.

Далее приступаем к установке.

  scons install

Установка

После успешной установки делаем ldconfig и проверяем работу командой:

  echo test | LD_LIBRARY_PATH=/usr/local/lib RHVoice-test

Шаг 4. Подготовка на стороне сервера телефонии

Создадим директорию для хранения файлов, которые будут проигрываться клиенту. Для этого введём команду:

  mkdir /var/lib/asterisk/sounds/ru/custom/rhv_playback

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

 chown asterisk-asterisk /var/lib/asterisk/sounds/ru/custom/rhv_playback -R
RHVoice записывает в .wav, но по умолчанию в 24КГц. Минимальное значение, до которого его можно свести в рамках синтезатора – 16КГц. Поэтому, для работы с Asterisk, потребуется конвертация записей.

Поэтому переходим в /usr/local/bin создаём скрипт для конвертации созданных записей – rhvoice_synthesis.sh .

#!/bin/bash
NAME=$2
TEXT="Приветствую Вас, $NAME ! Пожалуйста, оставайтесь на линии. Соединяем Вас с Вашим менеджером."
VOICE=anna
RATE=8000
FILENAME=$1
PATH_TO_RH=/usr/local/bin/RHVoice-test
PATH_TO_PLAY=/var/lib/asterisk/sounds/ru/custom/rhv_playback
PATH_TO_SOX=/usr/bin/sox
echo "$TEXT" | LD_LIBRARY_PATH=/usr/local/lib $PATH_TO_RH -p $VOICE -o "$PATH_TO_PLAY/temp_$FILENAME.wav"
if [ -f "$PATH_TO_PLAY/temp_$FILENAME.wav" ]; then
	$PATH_TO_SOX "$PATH_TO_PLAY/temp_$FILENAME.wav" -r $RATE -c1 -s "$PATH_TO_PLAY/$FILENAME.wav"
	rm -f $PATH_TO_PLAY/temp_$FILENAME.wav
fi

В данный скрипт передаём имя звонящего. Также здесь прописываем текст, который будет воспроизведён, указываем нужный голос, нужное количество Гц, имя файла и все необходимые пути. Затем запускаем RHVoice, записываем текст в аудиофайл и производим его конвертацию с помощью sox. Затем удаляем исходный аудиофайл.

Далее перейдём к подготовке диалплана и ODBC. Посмотреть, как сделать VIP-маршрутизацию, можно здесь.

Однако, в CDR не всегда есть имя звонящего. Поэтому сделаем отдельную таблицу соответствия номер -> имя.

Создать такую таблицу и настроить с ней взаимодействие можно на примере статьи: «Взаимодействие Festival и базы данных с помощью модуля func_odbc».

Перейдём в диалплан и в нужном контексте пропишем:

exten => s,1,Answer()
same  => n,Set(NAME=${ODBC_RHV(${CALLERID(num)})})
same  => n,Set(RHV_FILE=${CALLERID(num)}_${EPOCH})
same  => n,System(/usr/local/bin/rhvoice_synthesis.sh ${RHV_FILE} "${NAME}")
same  => n,Playback(custom/rhv_playback/${RHV_FILE})
same  => n,System(rm -f /var/lib/asterisk/sounds/ru/custom/rhv_playback/${RHV_FILE}.wav)

Подробнее рассмотрим описанный диалплан. Передаём в ODBC номер звонящего и получаем его имя. Затем формируем название аудиофайла, который будет проигран клиенту. Передаём имя звонящего в скрипт конвертации, затем проигрываем сконвертированный аудиофайл клиенту. После этого удаляем файл.

Теперь совершим звонов (в примере звоним на номер 0000) и проверяем работу. Как видно из скриншота ниже, диалплан отработал корректно. Также при тестовом звонке будет слышно воспроизведение имени.

Пример работы

На этом статья по интеграции Asterisk с RHVoice завершена.

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.