javascript

Сделаем это по-быстрому: голосовой бот на Dialogflow и Voximplant

  • вторник, 13 февраля 2018 г. в 03:13:49
https://habrahabr.ru/company/Voximplant/blog/348720/
  • Разработка мобильных приложений
  • Разработка веб-сайтов
  • Программирование
  • JavaScript
  • Блог компании Voximplant


Голосовые боты были и остаются полезной фичей для общения с клиентами. Потому что если что-то возможно автоматизировать, то надо срочно это делать. Подтверждение заказов и информация о них, запись обратной связи от клиентов, распознавание голоса и действия согласно тому, что распозналось и т.д. Кстати, о последнем – сделать бота с распознаванием в 2018 году стало еще проще: Voximplant отлично умеет распознавать и транскрибировать речь, а инструмент Dialogflow от “корпорации добра” хорошо анализирует текст. Ниже я покажу, как можно быстро собрать демо-бота, который расскажет о погоде в названном городе.



Почему “демо”-бот?


Потому что принцип. Эта статья показывает принцип создания ботов на Dialogflow + Voximplant. Поэтому диалог с ботом будет простым, например:

Бот: – Привет, хабрапользователь! Спроси, какая погода в Москве или другом городе.
Хабрапользователь: – Какая погода в Лондоне?
Бот: – Сегодня в городе Лондон – облачно.

Voximplant позволит арендовать телефонный номер, распознать и транскрибировать голос, а также взаимодействовать с сервисами Dialogflow и openweathermap.org. Мы передадим в Dialogflow строку, транскрибированную из ответа пользователя, после чего NLP (Natural Language Processing) вернет нам JSON, в котором будет лежать название города в именительном падеже. Название города мы передадим в openweathermap.org, который, в свою очередь, расскажет нам, что же там с погодой в указанном городе.

Создаем тайного агента NLP


Dialogflow – это мощный сервис NLP, которым владеет google. Сервис бесплатный, но чтобы использовать его, нужен гугловский аккаунт. Заходим на https://dialogflow.com/ и регистрируемся. Сервис оперирует понятием “агент” – по сути, агент это и есть бот. По умолчанию у нового аккаунта нет агентов. В сервисе есть prebuild agents, но вот так сразу их нельзя себе добавить. Поэтому создаем нового агента просто для того, что получить доступ к предустановленным агентам; звучит как костыль, но поверьте, это он и есть.


Введите имя для агента, остальные параметры можно оставить по умолчанию. Поле Google project подразумевает проект в Firebase (если у вас нет проектов Firebase, то создастся новый). Нажимаем Create и попадаем в консоль Dialogflow, так называется главный экран сервиса. Слева вертикальное меню, кликаем Prebuild Agents, находим агента Weather и щелкаем Import. Готово, теперь в нашем аккаунте есть агент weather!

По умолчанию агент поддерживает только английский язык, поэтому берем агента на редактирование (заодно можно поменять его имя, если есть желание), переходим на вкладку Languages, добавляем русский язык и клацаем “Save”.

Теперь у нашего агента есть выбор языка. Увы, агент не умеет общаться на русском “из коробки”, но ничего, научим. Щелкаем “ru”, чтобы сделать русский язык активным и затем проваливаемся в “Intents”.


В открывшемся списке Intents выбираем самый верхний – weather. На новом экране видим раздел User says, здесь должны быть реплики пользователя: чем больше вариаций, тем лучше. Мы же пока обойдемся фразой “какая погода в Москве?”. Когда вы введете ее, Dialogflow почти сразу подсветит название города и назначит ему соответствие в возвращаемом JSON’е! Обязательно используем это в нашем коде. Также на этом экране видно название контекста/темы разговора — weather.


Теперь мы можем проверить работу агента либо в сервисе Dialogflow (правый верхний угол, Try it now), либо сделать запрос через cURL. Чтобы меньше курить документацию, можно посмотреть пример cURL и возвращаемого JSON здесь же.

Запрос:

curl 'https://api.dialogflow.com/v1/query?v=20170712&query=%D0%BA%D0%B0%D0%BA%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0%20%D0%B2%20%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5%3F&lang=ru&sessionId=e2c9fe05-6219-4317-ae96-2dbb6a429df4&timezone=Europe/Moscow' -H 'Authorization:Bearer d146627e5ef843fc9757028t410faa80'

Обратите внимание, что текст query должен быть URIencoded и надо обязательно передавать ключик в заголовке (ключ можно найти в настройках агента). Если в запросе указан контекст, то желательно задавать уникальные номера сессии при всех последующих запросах, чтобы не “смешивать” контексты.

Ответ на запрос:

Dialogflow response