Кирилл Золотавин
24.09.2020
1205562

Синтез и распознавание речи средствами модуля STT Tinkoff

В одной из ранее описанных статей рассматривались методы синтеза и распознавания речи такими сервисами как: Yandex Speech (https://voxlink.ru/kb/asterisk-configuration/speechkit-asterisk/), Wit.ai (https://voxlink.ru/kb/asterisk-configuration/raspoznavanie-rechi-v-asterisk/), Google Speech (https://voxlink.ru/kb/asterisk-configuration/sintez-rechi-v-asterisk-s-pomoshhju-google-translate/). В рамках данной статьи будет показано как настроить и использовать функционал сервиса STT/TTS Tinkoff. 1. Выполним подключение по SSH к серверу IP АТС Asterisk. В зависимости от используемой системы (Windows, Linux, MacOS), […]

В одной из ранее описанных статей рассматривались методы синтеза и распознавания речи такими сервисами как:

  1. Yandex Speech (https://voxlink.ru/kb/asterisk-configuration/speechkit-asterisk/),
  2. Wit.ai (https://voxlink.ru/kb/asterisk-configuration/raspoznavanie-rechi-v-asterisk/),
  3. Google Speech (https://voxlink.ru/kb/asterisk-configuration/sintez-rechi-v-asterisk-s-pomoshhju-google-translate/).

В рамках данной статьи будет показано как настроить и использовать функционал сервиса STT/TTS Tinkoff.

Все описанные действия в статье необходимо выполнять от имени суперпользователя (root). Установка и настройка производилась на предустановленной системе CentOS 7 + Asterisk 13 + FreePBX 14.

1. Выполним подключение по SSH к серверу IP АТС Asterisk. В зависимости от используемой системы (Windows, Linux, MacOS), подключение по SSH можно выполнить с использованием различного дополнительного программного обеспечения(Putty), либо системного терминала.

2. Приступим к скачиванию исходного кода модуля Tinkoff STT/TTS и установке дополнительных зависимостей. Для этого выполним ряд команд вида:

# cd /usr/src/
# git clone https://github.com/TinkoffCreditSystems/asterisk-voicekit-modules.git
# cd /usr/src/asterisk-voicekit-modules/asterisk_modules/
# yum install libtool opus-devel
# ./bootstrap
Загрузка - актуальная версия Tinkoff STT/TTS
Скачивание актуальной версии модуля Tinkoff STT/TTS
Загрузка дополнительных зависимостей
Установка дополнительных зависимостей
Скрипт bootstrap для загрузки сторонних зависимостей
Запуск скрипта bootstrap для загрузки доп. зависимостей

3. Выполним сборку и установку приложения grpcsttbackground:

# cd /usr/src/asterisk-voicekit-modules/asterisk_modules/app_grpcsttbackground
# ./configure
# make
# make install-strip
grpcsttbackground
Конфигурирование приложения grpcsttbackground
grpcsttbackground
Сборка приложения grpcsttbackground
grpcsttbackground
Установка приложения grpcsttbackground

4. Выполним сборку и установку приложения app_playbackground

# cd /usr/src/asterisk-voicekit-modules/asterisk_modules/app_playbackground
# ./configure
# make
# make install
Конфигурирование playbackground
Конфигурирование приложения playbackground
Сборка playbackground
Сборка приложения playbackground
Установка playbackground
Установка приложения playbackground

5. Выполним сборку и установку приложения app_waitevent

# cd /usr/src/asterisk-voicekit-modules/asterisk_modules/app_waitevent
# ./configure
# make
# make install
Конфигурирование waitevent
Конфигурирование приложения waitevent
Сборка waitevent
Сборка приложения waitevent
Установка waitevent
Установка приложения waitevent

6. Выполним сборку и установку приложения func_gettimensec

# cd /usr/src/asterisk-voicekit-modules/asterisk_modules/func_gettimensec
# ./configure
# make
# make install
Конфигурирование gettimensec
Конфигурирование приложения gettimensec
Сборка gettimensec
Сборка приложения gettimensec
Установка gettimensec
Установка приложения gettimensec

7. Создадим и настроим конфигурационные файлы модуля Tinkoff STT/TTS

# cp -vr /usr/src/asterisk-voicekit-modules/examples/combined/combined_stt_tts/etc/asterisk/grpc*.conf /etc/asterisk/
# nano /etc/asterisk/grpcstt.conf

ключевые параметры для редактирования:
endpoint – доменное имя stt.tinkoff.ru
api_key – API ключ

# nano /etc/asterisk/grpctts.conf

ключевые параметры для редактирования:
endpoint – доменное имя tts.tinkoff.ru
api_key – API ключ
secret_key – ключ авторизации

Редактирование grpcstt.conf
Редактирование конфигурационного файла grpcstt.conf
Редактирование grpctts.conf
Редактирование конфигурационного файла grpctts.conf
API ключ и ключ авторизации можно получить на странице https://voicekit.tinkoff.ru/

8. Копируем собранные модули в директорию модулей Asterisk и подключим их

# cp -vr /usr/local/lib/asterisk/modules/* /lib64/asterisk/modules/
# asterisk -rx "module load app_grpcsttbackground.so"
# asterisk -rx "module load app_playbackground.so"
# asterisk -rx "module load app_waitevent.so"
# asterisk -rx "module load func_gettimensec.so
Копирование готовых модулей в директорию Астериск
Копирование собранных модулей в директорию Asterisk
Способ подключения модулей
Подключение модулей

9. Рассмотрим простой пример использования модуля Tinkoff STT/TTS для маршрутизации на сотрудника по названному имени. Для написания маршрута будем пользоваться официальным образцом написанном на языке расширения Asterisk AEL:

# nano /etc/asterisk/extensions.ael
context from-internal-custom {
        999 => {
                Answer();
                WaitEventInit();             // Инициализация очереди событий
                PlayBackgroundInitGRPCTTS(); // Инициализация модуля синтеза речи
                GRPCSTTBackground();         // Инициализация модуля распознования речи
                PlayBackground(say,,{"text":"здравствуйте, назовите имя сотрудника с которым хотели бы поговорить"}); // Текст приветствия для озвучивания
                Set(PHASE=WAIT_FOR_ALIAS);
                Set(CALL_END_TIME=$[${GET_TIME_NSEC(MONOTONIC)} + 60]); // Установка времени завершения обработки события на минуту больше 
Set(SLEEP_TIME=$[${CALL_END_TIME} - ${GET_TIME_NSEC(MONOTONIC)}]); // Расчет максимального времени ожидания
                while (${SLEEP_TIME} > 0) { // Сравнение с временем ожидания
                        WaitEvent(${SLEEP_TIME}); // Ожидания события
                        if (${WAITEVENTSTATUS} == SUCCESS) {
                                switch (${WAITEVENTNAME}) {
                                case GRPCSTT_UTF8:
                                        switch (${PHASE}) {
                                        case WAIT_FOR_ALIAS:
                                                Set(PET_ALIAS=${JSONELEMENT(WAITEVENTBODY,alternatives/0/transcript)}); // Получения распознанного текста из JSON массива
                                                Log(NOTICE,Pet alias is ${PET_ALIAS});
                                                PlayBackground(say,,{"text":"Имя сотрудника с которым Вы будете соеденены ${PET_ALIAS}"}); // Озвучивание теста с полеченным именем сотрудника
                                                Set(PHASE=OFFER);
                                                Set(CALL_END_TIME=$[${GET_TIME_NSEC(MONOTONIC)} + 30]);
                                                        switch (${PET_ALIAS}) {
                                                        case кирилл:
                                                                goto from-internal|101|1; // Вызов 101 если PET_ALIAS равно «кирилл»
                                                                break;
                                                        case дмитрий:
                                                                goto from-internal|102|1; // Вызов 102 если PET_ALIAS равно «дмитрий»
                                                                break;
                                                                }
                                                break;
                                        case OFFER:
                                                Set(PHASE=EXITING);
                                               Set(CALL_END_TIME=$[${GET_TIME_NSEC(MONOTONIC)} + 0.2]);
                                                break;
                                        default:
                                        }
                                        break;
                                default:
                                }
                        }
                        Set(SLEEP_TIME=$[${CALL_END_TIME} - ${GET_TIME_NSEC(MONOTONIC)}]); // Обновление максимального времени ожидания
                }
                Hangup();
        }
};
Для получения распознанного текста из JSON массива необходим модуль res_json https://github.com/felipem1210/asterisk-res_json
Изменение диалплана AEL
Правка диалплана AEL
Вызов готового EXTEN 999
Вызов созданного EXTEN 999
Распознавание речи с последующей маршрутизацией на сотрудника
Результат распознавания речи и последующая маршрутизация на сотрудника
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии

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

Я - Компаниец Никита, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.