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

 

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

Автор: admin от 12-02-2018, 10:25, посмотрело: 839

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



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

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



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

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



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



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



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

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



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

Теперь мы можем проверить работу агента либо в сервисе 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 %D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0 %D0%B2 %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 и надо обязательно передавать ключик в заголовке (ключ можно найти в настройках агента). Если в запросе указан контекст, то желательно задавать уникальные номера сессии при всех последующих запросах, чтобы не “смешивать” контексты.



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





Как будет выглядеть этот запрос из нашего облачного сценария:



const sessionId = () => Math.floor(100000 * Math.random());
Net.httpRequest("https://api.dialogflow.com/v1/query?v=20150910&contexts=weather&query=" + encodeURI(userSpeech) + "&lang=ru&sessionId=" + sessionId() + "&timezone=Europe/Moscow", (e) => {
       // проверка ответного JSON и последующие действия
    }, 
    { headers: ["Authorization: bearer d146627e5ef843fc9757028t410faa80"]});


Запрашиваем погоду



Теперь, когда мы знаем город, мы может запросить погоду. Я использовал довольно простой API openweathermap.org. Регистрируемся, получаем API-ключ и можем делать запросы вида:



curl 'https://api.openweathermap.org/data/2.5/weather?q={CITY NAME}&lang=ru&appid={API_KEY}'


Из ответа мы возьмем простейшее описание погоды из поля description: “облачно” / “пасмурно” / “небольшой снегопад” и т.д.:





Зная погоду, мы можем синтезировать эту информацию в звонок.



All together now..!



Настало время отразить все эти шаги в сценарии javascript. Итак, что мы хотим сделать?




  • Пользователь звонит на арендованный номер.

  • Пользователю отвечает наше облако со словами “Привет, хабрапользователь! Спроси, какая погода в Москве или другом городе.”

  • Человек спрашивает, “какая погода в {CITY NAME}”, наше облако распознает запрос и делает запрос с получившейся строкой в Dialogflow.

  • Получив ответ, проверяем наличие в ответе темы weather и есть ли в ответе город. Если что-то пошло не так, робот говорит об этом и снова просит задать вопрос о погоде.

  • Если в ответе от Dialogflow есть город, то облако обращается к openweathermap.org, подставляя в запрос этот город.

  • Получив ответ о погоде, озвучиваем пользователю “Сегодня в городе {CITY NAME} – облачно / пасмурно / небольшой снег” и кладем трубку.



  • Такую логику обеспечит следующий код:





    Осталось только создать “приложение” в панели управления Voximplant, а затем привязать к нему созданный сценарий и арендованный номер (подробности есть на нашем сайте).

    Источник: Хабрахабр

    Категория: Операционные системы » Android

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *