Введение


Зачастую нам нужно воспроизвести аудио-информацию, которая не была записана заранее, и извлекается из источника данных динамически: имя человека, название города, статус заказа и т.п. Особенно эта возможность востребована в колл-центрах и порталах самообслуживания.

Для этого лучше всего использовать технологию TTS (преобразование текста в речь), поскольку она динамически создает нужные аудиофайлы, а голосовое приложение, работающее на сервере 3CX, проигрывает их абоненту. Для генерации аудиофайлов используется определенный веб-сервис, после чего создается локальный WAV файл. Когда разговор с абонентом завершился, файл удаляется для освобождения места на диске.

Для данной возможности в 3CX следует зарегистрировать аккаунт на Amazon Web Services. 3CX использует веб-сервис TTS Amazon Polly. После изучения различных TTS сервисов, мы выяснили, что Amazon Polly обладает отличным качеством генерации, хорошим охватом языков, множеством разных голосов и весьма доступной ценой. Также он бесплатен в течение первого года использования! С другой стороны, в будущем мы планируем добавить поддержку TTS и от других мировых производителей.

Обратите внимание — для работы TTS генерации необходимо использовать 3CX v15.5 SP2 и выше.

Среда разработки 3CX Call Flow Designer получила новый тип аудио-сообщений Text to Speech Audio Prompt. Вы можете выбрать его в любом месте, где требуется проиграть сообщение, например, в компонентах Prompt Playback, Menu, User Input и других.

В этой статье мы расскажем, как создать аккаунт Amazon Web Services, включить Amazon Polly и начать использовать компонент Text to Speech Audio Prompt для генерации естественной речи в вашем колл-центре.

Обратите внимание — среда разработки 3CX CFD поставляется бесплатно. Но голосовые приложения будут выполняться только на 3CX редакции Pro и Enterprise. Скачать CFD можно отсюда.      
 
Для вашего удобства, демо-проект этого голосового приложения поставляется вместе с дистрибутивом 3CX CFD и находится в папке Documents\3CX Call Flow Designer Demos.

Создание аккаунт Amazon Web Services (AWS)


Перед началом работы с CFD приложением, создайте аккаунт Amazon Web Services. Для этого ознакомьтесь с руководством от Amazon.

Создание служебного пользователя Identity and Access Management (IAM)


После создания AWS аккаунта, создайте пользователя, учетные данные которого наше голосовое приложение использует для доступа к AWS. Следуйте руководству от Amazon. Укажите тип доступа Programmatic access. При настройки прав доступа выберите Attach existing policies directly, затем найдите и отметьте AmazonPollyFullAccess.



Затем перейдите в параметры пользователя в раздел Security credentials и кликните Create access key. Зафиксируйте Access key ID и Secret access key — эти данные потребуются при настройке TTS сервиса в голосовом приложении.



Внимание! Ознакомьтесь с ограничениями TTS Amazon Polly. Эти ограничения не должны создавать проблем в большинстве CFD приложений, однако имейте их ввиду.

Создание проекта


Для создания проекта CFD перейдите в File > New > Project, укажите папку размещения проекта и его имя, например, TextToSpeechDemo.



Выделите проект в разделе Project Explorer. Рассмотрим параметры проекта (раздел Properties), которые необходимо указать для работы TTS:

  • AmazonClientID — Access key ID, сгенерированный выше.
  • AmazonClientSecret — Secret access key, сгенерированный выше.
  • AmazonRegion — выберите географический регион AWS, ближайший к расположению сервера 3CX.

Эти параметры будут использоваться в любом сообщении типа Text To Speech Audio Prompt в этом проекте.

Добавление компонента Prompt Playback


Как было сказано ранее, обычно TTS используется для генерации речи из текста, полученного из базы данных или веб-сервиса. Но для упрощения нашего примера мы подготовим короткую фразу, добавим к ней переменную из нашего голосового приложения и преобразуем все это в речь. Мы определим переменную AccountBalance и установим ее значение в 100. Затем подготовим фразу: «Баланс вашего счёта 100 долларов».



Для добавления компонента Prompt Playback:

  1. Переместите компонент Prompt Playback в окно разработки приложения (Main callflow). Выберите компонент и в разделе свойств переименуйте его в playPrompt.
  2. Там же откройте Prompt Collection Editor, нажав кнопку возле свойства Prompts.
  3. Нажмите Add для добавления нового в сообщении в коллекцию и измените тип сообщения на Text to Speech Audio Prompt.
  4. Выберите голос, который вы хотите использовать. Список голосов отсортирован по языку. Голоса, доступные для Amazon Polly, перечислены здесь. Если Amazon выпустит новый голос, не представленный в списке, вы можете начать использовать его, указав идентификатор из столбца Name/ID. Если вы хотите, чтобы определенный голос всегда был установлен в приложении по умолчанию, укажите его в меню 3CX CFD Tools > Options > Component Templates > Text To Speech. Для нашего примера будем использовать голос Joanna (English — US, Female).
  5. Выберите тип текста: Text и SSML (Speech Synthesis Markup Language). Как правило, вы будете использовать Text. При этом значение свойства Text — обычный набор символов (plain text), и TTS сервис будет синтезировать его как есть. Если вы укажете тип SSML, значение свойства Text — XML файл в соответствии со спецификацией  SSML. SSML позволяет задавать различные параметры речи: произношение, громкость, скорость. Для дополнительной информации см. руководство Using SSML. В нашем примере используется тип Text.
  6. Укажите выражение для опции Text. В зависимости от типа текста, выбранного в предыдущем шаге, выражение должно вернуть простой текст для синтеза или XML данные, в соответствии с SSML спецификацией. Для нашего примера используем следующее выражение:

CONCATENATE("Your account balance is $",callflow$.AccountBalance)

Компиляция и установка приложения на сервер 3CX


Голосовое приложение готово! Теперь его следует скомпилировать и загрузить на сервер 3CX. Для этого:

  1. Перейдите в меню Build > Build All, и CFD создаст файл PredictiveDialerDemo.tcxvoiceapp.
  2. Перейдите в интерфейс управления 3CX, в раздел Очереди вызовов. Создайте новую Очередь вызовов, укажите название и добавочный номер Очереди, а затем установите опцию Голосовые приложения и загрузите скомпилированный файл.
  3. Сохраните изменения в очереди. Выполните вызов на добавочный номер Очереди, чтобы протестировать приложение. Обратите внимание — при самом первом звонке в приложение, TTS генерация может быть выполнена с задержкой в несколько секунд. Это связано с процессом аутентификации и происходит только один раз.

Заключение


Обычно в синтезированной речи используется несколько статических сообщений, например, приветствие для пользователей или выбор опции меню, и несколько динамических —  например, баланс счёта. Желательно использовать TTS сервис Polly только для изменяемых данных — это позволит избежать дополнительных расходов на синтез повторяющихся фраз. С другой стороны, необходимо, чтобы все фразы были произнесены одинаковым голосом. Для этого лучше всего создать готовые голосовые файлы для статических фраз через консоль Amazon Polly и загрузить их как WAV файлы в голосовое приложение. Используйте эти файлы в обычных сообщениях Audio File Prompt вместо повторяющейся динамической генерации.



В консоли Amazon Polly выберите ваш язык, регион, желаемый голос, введите нужный текст и нажмите Download MP3. Обратите внимание, 3CX использует звуковой формат WAV, Моно, 8.000 Гц, 16 бит. Поэтому после загрузки файла сконвертируйте его в поддерживаемый формат, как указано здесь.

Комментарии (7)


  1. ze2n7
    08.12.2017 19:57

    почему нет гендерно-нейтрального голоса?


    1. snezhko Автор
      08.12.2017 19:57

      Согласен. Это преступная халатность Amazon.


  1. Louie
    08.12.2017 23:06

    Не совсем понял про глубокое обучение. Tatyana(Russian,female) со временем начинает понимать, когда нужно заткнуться?
    Понятно, в амазоне есть Lex, который как раз и нужен для ботов. И если, к polly привязать не c3x, а lex и connect — получим ботов с tts и атс.


    1. snezhko Автор
      08.12.2017 23:10

      Я думаю, что здесь вы найдете ответ на вопрос, почему использован этот термин.


  1. EndUser
    09.12.2017 11:44

    Это продукт Ivona, вполне неплохая говорилка. Не нейронка, не глубокое обучение. После покупки амазоном Ивона заткнулась — удалила свои моторы с гуглобазара и закрыла демо на своём сайте. Печально. И вот, через два года новость — она где-то во глубине амазонских руд, и её оттуда надо клещами вытаскивать.


  1. LorDCA
    10.12.2017 16:36

    Ожидал увидеть детальный разбор с подготовкой сэмплов и настройкой нейросети. А увидел инструкцию как отослать текст в амазон и получить вавку. Как это вообще относится к хабру?


    1. snezhko Автор
      10.12.2017 16:38

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