Dialogflow com не работает

Чат-бот понимающий человеческую речь на Dialogflow

Хочу поделится с вами своим опытом работы с сервисом Dialogflow и рассказать о некоторых не самых очевидных вещах.

Dialogflow — это сервис, позволяющий создавать чат-ботов для разных платформ и языков на разных устройствах.

Сервис возможно использовать абсолютно бесплатно, так что не теряем времени и приступаем к работе.

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

Шаг 0. Задача

Бот должен принимать от пользователя запрос, состоящий из трех параметров: имя, город и адрес. При этом, если пользователь ранее упоминал один из этих параметров — помнить его в рамках контекста.

Шаг 1. Первичная настройка

Для начала нужно зарегистрироваться и создать нового агента:

  • Название агента можно указать любое.
  • Язык я выбрал русский. Но в дальнейшем можно добавить и другие.
  • Временная зона важна, так как по ней будут определятся такие фразы как «Сегодня», «3 дня назад»
  • Создадим новый Google проект
  • Я буду использовать первую версию API

После создания агента переходим на вкладку «Integrations» и подключаем те платформы, которые нам нужны.

На этом этапе наш бот уже запущен и может общаться с пользователями. Теперь нужно научить его правильно понимать фразы.

Шаг 2. Создание назначений

Назначение — это обработчик определённого запроса от пользователя.
Переходим на вкладку «Intents». После создания агента здесь будут два стандартных назначения:

  1. Default Welcome Intent — запускается для приветствия пользователя (отправит ответное приветствие)
  2. Default Fallback Intent — запускается в том случае, если ни одно из других назначений не подходит. Отправит сообщение, что пользователя не поняли («Вот эта последняя фраза мне не ясна», «Попробуй, пожалуйста, выразить свою мысль по-другому» и т.д.).

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

Добавим в приветствие вопрос о пользователе

Открываем «Default Welcome Intent». Здесь есть несколько секций:

  • Contexts
  • User says
  • Events
  • Action
  • Response

Обратите внимание на секцию «Events»: здесь указано одно служебное событие «WELCOME».
Назначение можно запустить двумя способами: как реакцию на текст пользователя или по событию.

В нашем случае назначение «Default Welcome Intent» реагирует не на какой-то текст от пользователя, а на служебное событие WELCOME. Например, для Telegram это запуск бота командой /start. Подробнее про события.

Итак, рассмотрим секцию «Response». Здесь перечислены сообщения, которые будут отправлены в ответ пользователю. Каждое сообщение может состоять из нескольких строк. Каждая строка — отдельные варианты сообщения. Для ответа будет выбран один из этих вариантов. И чем их больше, тем реже ваш бот будет повторяться.

Добавим сюда сообщение с просьбой рассказать о себе.

Реакция на ответ

Теперь создадим назначение, которое будет реагировать на последующее сообщение.
На вкладке «Intents» наводим курсор на «Default Welcome Intent» и нажимаем «Add follow-up intent». В выпадающем списке, нам предложат несколько предустановленных вариантов. Нас они не интересуют — выбираем «Custom»

Перейдём к секции «User says» и добавим несколько вариантов сообщений от пользователя.

Теперь нужно указать, какие данные в этих сообщениях нам нужны. Для этого следует выбрать фрагмент текста и в выпадающем меню выбрать тип данных. В Dialogflow есть ряд предустановленных типов, в частности для имён и адресов. Но вы можете создавать и собственные. Подробнее.

Теперь обратите внимание на секцию «Action». Здесь перечислены все параметры, которые собирает это назначение. Параметры, которыми мы размечали текстовые сообщения, автоматически импортировались.

Читайте также:  Не работает водительская панель стеклоподъемников


Обозначим имя пользователя как обязательный параметр. Изменим название параметра с «given-name» на «name» для большего удобства. И в колонке «Prompts» укажем вопрос «Как вас зовут?». Теперь, так как «name» это обязательный параметр, в случае если в сообщении не будет этого параметра, пользователю будет отправлен один из вопросов в «Prompts» для получения имени.

И, наконец, добавим ответ пользователю в секцию «Response».

Работа с контекстом

Каждое назначение может работать с входящим контекстом и создавать исходящий контекст.

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

Рассмотрим по порядку:

Default Welcome Intent — входящего контекста нет. Поэтому назначение может запуститься для любого запроса. Назначение создаёт новый пустой контекст «DefaultWelcomeIntent-followup» (добавится автоматически).

Default Welcome Intent — custom — имеет входящий контекст «DefaultWelcomeIntent-followup» (добавился автоматически). Это назначение может запустится только в тех случаях, когда этот контекст существует (когда пользователь поприветствовался). Исходящего контекста здесь пока-что нет.

Добавим исходящий контекст для «Default Welcome Intent — custom» с названием «UserData». Теперь, когда после приветствия пользователь представится, информация о нем будет записана в новый контекст «UserData».

Оформление заказа пользователем

Создадим новое назначение «Order» с исходящим контекстом «UserData». Это назначение может запускаться в любое время, и оно может изменять контекст «UserData».
В тексте заказа нам нужно Имя, Город и Адрес.

Добавим фразы и разметим их. Дублируем все параметры, но в этот раз отметим все как обязательные.

Использование уже известных данных

Наше назначение может работать как в случае отсутствия контекста «UserData», так и при его наличии. В первом случае бот спросит у пользователя все недостающие данные. А во втором он должен использовать уже известные.

  • Для параметра name устанавливаем значение по умолчанию #UserData.name
  • Для параметра address устанавливаем значение по умолчанию #UserData.address
  • Для параметра city устанавливаем значение по умолчанию #UserData.city

Теперь, если пользователь ранее представился (его имя хранится в контексте UserData), то при оформлении заказа его имя подставится автоматически. Если нет — то бот спросит у пользователя имя.

Добавляем ответ с подтверждением заказа. В ответе вы можете использовать ваши параметры. Подробнее.

Результат работы

Результат работы бота приведен на скрине ниже. Пообщаться с ним самостоятельно можно в Telegram: @sample_ShopBot или Web Demo

Спустя время контекст будет сброшен. После первого обращения бот будет спрашивать у вас имя и адрес доставки. И заново установит контекст.

Заключение

Таким образом, Dialogflow берёт на себя сбор информации о пользователе, заказе и отправляет на вашу службу только готовый результат. Осталось настроить отправку WebHook на ваш сервер, который отреагирует и реализует доставку. Подробнее.

Источник

Погода-бот: DialogFlow + OpenWeather + Python

Постановка задачи

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

DialogFlow

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

Переходим по ссылке https://dialogflow.cloud.google.com/, авторизуемся в своем аккаунте гугл и переходим на страницу создания бота. Нажимаем на «Create new agent» и вводим имя агенту: «weather-bot». Выбираем дефолтный язык русский.

Основной объект, с которым работает DialogFlow — интенты или намерения. При взаимодействии с ботом всегда срабатывает то или иное намерение, и задача вас как разработчика — сопроводить каждое намерение разнообразными тренировочными фразами, чтобы бот каждый раз максимально правильно угадывал тот или иной интент.

Читайте также:  Netgear jwnr2000 не могу настроить

Итак, переходим во вкладку «Intents». При создании бота автоматически создаются два интента: «Default Fallback Intent» и «Default Welcome Intent». Welcome Intent вызывается тогда, когда происходит запуск бота либо вы пишете ему приветственное сообщение. Fallback вызывается во всех случаях, когда бот не понимает, что вы ему пишете, т.е. во всех случаях, когда ни один другой интент не срабатывает. Оставляем дефолтные интенты без изменений и жмем на «Create intent», называя его «get-weather». Именно с этим намерением мы и продолжим работать в данной статье.

Переходим в наш интент «get-weather», затем — во вкладку «Training phrases» и создаем несколько тренировочных фраз, например, таких:

Заметим, что DialogFlow автоматически определяет города как параметры location. Это очень удобно, поскольку мы будем передавать эти самые параметры в бэкенд нашего приложения.

В самом DialogFlow осталось сделать совсем немного — разрешить ему вебхуки для взаимодействия с бэкендом нашего бота. Для этого листаем в самый низ, разворачиваем вкладку «Fulfillment» и ставим галочку на «Enable webhook call for this intent».

Приступим к написанию серверной части нашего бота. Писать будем на Python в связке с Flask. Для получения информации о погоде был выбран OpenWeather API. Зарегистрируйтесь на этом сайте, затем вам на почту придет API KEY — он и понадобится в нашем приложении. Кроме того, поскольку информация о погоде в этом API выдается по параметрам latitude и longitude — ширина и долгота — нам необходимо как-то преобразовывать город в его ширину и долготу. В этом нам поможет Python-библиотека geopy.

Импортируем все необходимое:

Создаем Flask application:

и вставляем в переменную API_KEY свой API KEY:

Пишем роут для пути «/»:

и далее функцию results(), в которой и будет осуществлена вся логика программы:

Осталось дописать роут, по которому будет переход в наше приложение, назовем его webhook:

и запустить приложение:

И это все?

Не совсем. Программа лежит на нашей локальной машине, но DialogFlow о ней ничего не знает. Чтобы превратить нашу машину в сервер, который станет доступен в интернете, нужна особая утилита. Этим требованиям соответствует ngrok. Скачиваем ее, запускаем и вводим в консоли следующее: «ngrok http 5000». Появится https-ссылка, которую необходимо скопировать и поместить в DialogFlow. Копируем, переходим в Fulfillment в DialogFlow, ставим Webhook в состояние enabled и вставляем в получившееся поле ссылку. Дописываем роут, т.е. «/webhook». Должно получиться что-то похожее на следующее:

Теперь запускаем наше Python-приложение. Осталось совсем немного — подключить интеграцию с Telegram. Переходим на вкладку «Integrations», выбираем телеграм, далее следуем инструкции по получению токена, вставляем токен, и вуаля — приложение готово! Остается его протестировать:

Надеюсь, данная статья была вам полезна и сподвигнет на собственные эксперименты в этой области. Код проекта доступен по ссылке.

Источник

ИИ продает пиццу или как Voximplant дружит с Dialogflow

Недавно мы презентовали решение для бизнеса, которое назвали Dialogflow Connector: связка из гугловского Dialogflow и нашего облака Voximplant. Коннектор может работать вместо оператора колл-центра и принимать сложные заказы. Это стало возможным, потому что Dialogflow позволяет уйти от сценария обычного IVR, где клиент вынужден называть слова из заданного набора, на который умеет реагировать интерактивное меню. Гугловская платформа может последовательно получать входные данные от клиента и собирать их воедино – например, чтобы сформировать заказ в интернет-магазине. Вероятно, вы уже слышали модное слово «slot filling», так вот это он и есть. Под катом вас ждут подробности, как мы делали бота для заказа пиццы – по аналогии вы можете запилить нечто похожее и возрадоваться, что времена лифта и «eleven» давно прошли…

Номер телефона

Для начала следует арендовать виртуальный номер, на который будет «отвечать» бот. Для этого в админке Voximplant в меню «Номера» щелкните «Купить телефонный номер».

Читайте также:  Как настроить поток обезличенных сделок квик

На новом экране поставьте переключатель в позицию «Тестовые номера» – это позволит арендовать виртуальный номер.

Виртуальные номера очень дешевы и позволяют полноценно протестировать любое решение на нашей платформе. Арендуйте номер и далее…

… создайте сценарий

Теперь нам нужен облачный сценарий, сердце нашего решения. Именно он будет принимать звонок, распознавать речь и передавать ее в Dialogflow. Сценарий должен быть создан внутри приложения. В левом меню выберите «Приложения», создайте новое приложение и дайте ему имя.

Затем перейдите на вкладку «Сценарии» в вашем приложении и создайте свой, нажав на плюс. Не забудьте дать ему имя, например, dialogflow.

Время писать код!

Подключим модуль AI – в нем лежат методы и события для Dialogflow – а также модуль распознавания речи и плеер. Объявим переменные и хитрую функцию wordend, которая принимает на вход количество (пицц) и массив со словами (‘маргариту’, ‘маргариты’, ‘маргарит’) и возвращает слово, подходящее цифре по падежу. Это нужно, чтобы бот не говорил «4 маргарита», а грамотно выдавал «4 маргариты».

Теперь добавим хендлер для входящего звонка и вспомогательную функцию startASR:

Когда происходит событие Connected, вызывается функция handleCallConnected. Собственно в ней и происходит весь фарш:

  • создается объект Dialogflow;
  • синтезированный голос приветствует клиента и предлагает сделать заказ;
  • запускается распознавание, клиент делает заказ;
  • слова клиента передаются в Dialogflow, происходит слот филлинг;
  • синтезированный голос озвучивает заказ и адрес клиента;
  • бот кладет трубку, сессия закрывается.

Листинг функции:

Осталось совсем немного. Перейдите на вкладку Роутинг —> «Создать». Появится модальное окно с формой. Название можно дать по аналогии – dialogflow-rule. Маску оставьте по умолчанию и самое главное – прикрепить сценарий dialogflow. Нажмите «Создать правило», модальное окно закроется.

Теперь к приложению нужно прикрепить купленный номер. Для этого перейдите в раздел «Номера» внутри вашего приложения, нажмите «Доступные» и затем – «Прикрепить» возле выбранного номера. Откроется модальное окно, остается только выбрать здесь нужное правило и нажать «прикрепить».

Нажмите «Сохранить». Теперь сценарий знает, на что ему нужно реагировать на любой набранный номер, который вы арендовали. Учитывая, что номер у нас один, это то, что нам нужно.

Отлично, теперь все связано воедино и должно работать!

Агент Dialogflow

В терминах Dialogflow агент – это и есть бот. Мы уже подробно описывали, как создать своего агента и как с ним общаться, но в этот раз мы предлагаем использовать нашу заготовку.

Вам нужно зарегистрироваться на dialogflow.com и создать нового агента. Не забудьте указать русский язык:

По умолчанию агент не знает ни одного высказывания (intents) и вообще ничего не умеет. Скачайте ассеты нашего агента и загрузите их в вашего: для этого в настройках агента перейдите на вкладку «Export and Import» —> «Import from ZIP».

Теперь у вас есть набор высказываний для заказа пиццы! Можно изучить их в разделе «Intents»; обратите внимание, что у агента есть вспомогательные высказывания pizza.sizehelp и pizza.typehelp. Благодаря им после приветствия пиццерии клиент может спросить «А какие у вас есть пиццы» и бот расскажет, что есть в меню.

Проверьте, что в настройках на вкладке General выбрана вторая версия API.

Наконец, скачайте JSON вашего гугловского Service account – это делается в пару кликов.

Привязать агента к приложению Voximplant

В меню слева в вашем приложении Voximplant выберите «Dialogflow коннектор», нажмите «Добавить», в появившейся модальной форме загрузите JSON и снова нажмите «Добавить».

Вы увидите, что JSON-файл появился в списке, это значит, что он привязан к приложению.

Готово! Связка Dialoglow + Voximplant настроена, все звенья цепи собраны вместе.

На случай, если вам лень было делать все эти шаги, вы можете пощупать нашу пиццерийную демку:

Источник

Оцените статью