1. Введение
В этой лабораторной работе вы создадите простое действие с помощью Dialogflow и узнаете, как интегрировать его с Google Assistant.
Упражнения упорядочены так, чтобы отразить общий опыт разработчиков облачных технологий:
- Создайте агент Dialogflow v2.
- Создание сущностей
- Создание намерений
- Настройте вебхук с функциями GCP Cloud
- Используйте базу знаний для импорта часто задаваемых вопросов
- Протестируйте чат-бота
- Включите интеграцию с Google Ассистентом
Что вы построите
Мы создадим приложение Google Assistant для группы встреч «Женщины в голосе». Можно будет спросить, когда будет следующая встреча, советы по статьям и книгам или общие вопросы о группе встреч. |
Что вы узнаете
- Как создать чат-бота с помощью Dialogflow v2
- Как создать линейный разговор с помощью Dialogflow
- Как использовать сущности
- Как пользоваться базой знаний
- Как настроить выполнение вебхука с помощью функций Dialogflow и GCP
- Как перенести свое приложение в Google Assistant с помощью Actions on Google
Предварительные условия
- Для создания агента Dialogflow вам понадобится Google Identity/адрес Gmail.
- Мы предоставим вам облачные кредиты GCP для использования облачных функций GCP.
- Вам понадобится доступ к этой общедоступной таблице Google для получения данных агента.
- Откройте его в новой вкладке: https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit?usp=sharing .
- Базовые знания JavaScript не требуются, но могут пригодиться, если вы захотите изменить код выполнения вебхука.
2. Приступаем к настройке
Включите веб-активность в вашем браузере
- Нажмите: http://myaccount.google.com/activitycontrols .
- Убедитесь, что активность приложений и веб-поиска включена :
Создайте агент Dialogflow
- Открыть: https://console.dialogflow.com.
- На левой панели, прямо под логотипом, выберите « Создать нового агента ». Если у вас уже есть агенты, сначала щелкните раскрывающийся список.
- Укажите имя агента:
yourname-wiv
(используйте свое имя) - В качестве языка по умолчанию выберите: Английский – ru.
- В качестве часового пояса по умолчанию выберите ближайший к вам часовой пояс.
- Не выбирайте Mega Agent. (С помощью этой функции вы можете создать всеобъемлющего агента, который сможет организовывать работу между «дополнительными» агентами. Сейчас нам это не нужно.)
- Нажмите Создать
Настроить диалоговый поток
- Нажмите на значок шестеренки в левом меню рядом с названием вашего проекта.
- Введите следующее описание агента: «Женщины в голосовом агенте».
- Прокрутите вниз до раздела «Бета-функции» и нажмите переключатель, чтобы включить бета-функции.
- Прокрутите вниз до пункта «Настройки журнала» и переключите оба переключателя, чтобы регистрировать взаимодействия Dialogflow и регистрировать все взаимодействия в Google Cloud Stackdriver. Это понадобится нам позже, если мы захотим отладить наше действие.
- Нажмите « Сохранить».
- Нажмите Готово
Настройка действий в Google
- Нажмите ссылку Google Assistant в разделе «Посмотрите, как это работает в Google Assistant» на правой панели.
Откроется: http://console.actions.google.com.
ПРИМЕЧАНИЕ. Убедитесь, что вы вошли в систему с той же учетной записью Google, что и в Dialogflow.
Если вы новичок в Actions on Google, вам сначала нужно будет заполнить эту форму:
- Попробуйте открыть свое действие в симуляторе**, нажав на название проекта.**
- Выберите «Разработка» в строке меню.
Снимите флажок Совпадать с языковыми настройками пользователя . Чтобы убедиться, что синтезатор речи не будет отменяться языком Ассистента по умолчанию.
- Нажмите « Сохранить».
- Выберите «Тест» в строке меню.
- Убедитесь, что в симуляторе установлен английский язык , и нажмите « Поговорить с моим тестовым приложением».
Действие приветствует вас с базовым намерением Dialogflow по умолчанию. Это означает, что настройка интеграции с Action on Google сработала!
Настроить Google Cloud
Для работы с этим руководством вам понадобится учетная запись GCP с платежной учетной записью. Если у вас его еще нет, вы можете создать его, выполнив следующие действия.
Обычно для платежного аккаунта требуется способ оплаты, например кредитная карта. Для этого семинара мы можем использовать мастерские кредиты, которые позволяют пропустить этот процесс.
- Перейдите по этому URL-адресу и войдите в систему.
- Нажмите: Нажмите здесь и получите доступ к своим кредитам
- Нажмите «Принять и продолжить».
Все готово. Вы создали платежный аккаунт на сумму 25 долларов, чего должно быть более чем достаточно для длительного использования Cloud Functions.
Включить API Google Таблиц
Если вашему агенту требуется нечто большее, чем статические ответы о намерениях (например, для получения данных из веб-службы, базы данных или листа), вам необходимо использовать выполнение для подключения вашего веб-сервиса к вашему агенту. Подключение вашего веб-сервиса позволяет вам выполнять действия на основе пользовательских выражений и отправлять динамические ответы обратно пользователю.
Например, если пользователь хочет получить совет по блогу или книге, ваш веб-сервис может проверить вашу базу данных и ответить пользователю статьей для чтения.
В этом уроке мы не будем использовать базу данных, вместо этого мы будем использовать Google Sheet. Как только таблица будет обновлена, действие Google Assistant также будет обновлено. Аккуратный!
- Откройте этот Google Sheet в новой вкладке браузера, если вы еще этого не сделали:
- https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
- ВАЖНО : Сделайте копию этого листа. Нажмите «Файл» > «Создать копию».
- После копирования листа нажмите « Поделиться» .
- Нам нужно будет предоставить права на редактирование учетной записи службы Dialogflow. Для этого откройте Dialogflow > Настройки (шестеренка).
- Прокрутите вниз до Google Project.
- Скопируйте адрес учетной записи службы (электронной почты). Это должно выглядеть примерно так: диалоговый поток-<someid>@<my-gcp-project>.iam.gserviceaccount.com
- Вставьте эту учетную запись службы во всплывающее окно «Поделиться» в Google Таблицах и предоставьте ей права на редактирование .
- Далее нам нужно будет запомнить идентификатор листа, над которым мы сейчас работаем.
The Sheets URL will look something like this:
https://docs.google.com/spreadsheets/d/ 1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o /edit#gid=1240329448
But we are only interested in the Sheet id, which is the part between:
https://docs.google.com/spreadsheets/d/ и /edit#gid=1240329448 (без косых черт).
So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**
**Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
- Открыть в другой вкладке браузера; http://console.cloud.google.com . (Если у вас есть другие проекты Google Cloud, активируйте новый проект Dialogflow: yourname-wiv). - В строке поиска найдите: Google Sheets API.
- Нажмите на нее и нажмите кнопку «Включить API Google Таблиц» вверху.
3. Пользовательские объекты
Сущности — это объекты, над которыми ваше приложение или устройство выполняет действия. Думайте об этом как о параметрах/переменных. В нашем действии мы спросим:
«Мне нужен совет по чтению о
чат-боты
/ Мне нужен совет по чтению
голос *"*
Независимо от того, говорите ли вы «Чат-боты», «Голос» или «Оба», это будет получено из пользовательского объекта, который будет использоваться в качестве параметра в моем запросе к веб-сервису.
Вот дополнительная информация о Dialogflow Entities .
Создание сущности канала
- Нажмите в консоли Dialogflow на пункт меню: Сущности.
- Нажмите «Создать объект».
- Имя объекта:
tech
(убедитесь, что оно написано строчными буквами) - Укажите варианты с синонимами. (Вы можете использовать вкладку через интерфейс.)
-
Chatbots - Chatbots, Chat, Web
-
Voice - Voice, Voicebots, Voice Assistants
-
Both - Both, All
5**.** Переключитесь в режим **Raw Edit**, нажав кнопку меню рядом с синей кнопкой сохранения.
- Обратите внимание, что вы также могли бы ввести все объекты в формате CSV. Это может быть удобно, если у вас есть много объектов, которые необходимо создать.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"
- Нажмите «Сохранить ».
4. Намерения
Dialogflow использует намерения для классификации намерений пользователя. У намерений есть обучающие фразы, которые являются примерами того, что пользователь может сказать вашему агенту.
Например, пользователь, который хочет знать, когда будет следующее событие, может спросить:
«Когда следующая встреча?»
Когда пользователь что-то пишет или говорит, это называется выражением пользователя , Dialogflow сопоставляет выражение пользователя с наилучшими намерениями вашего агента. Соответствие намерению также известно как классификация намерений .
Вот дополнительная информация о намерениях Dialogflow .
Изменение намерения приветствия по умолчанию
Когда вы создаете новый агент Dialogflow, два намерения по умолчанию будут созданы автоматически. Приветственное намерение по умолчанию — это первый поток, который вы получаете, когда начинаете разговор с агентом. Резервное намерение по умолчанию — это поток, который вы получите, если агент не сможет вас понять или не сможет сопоставить намерение с тем, что вы только что сказали.
- Нажмите «Намерения» > «Намерение приветствия по умолчанию».
В случае с Google Assistant он автоматически запустится с приветствием по умолчанию. Это связано с тем, что Dialogflow прослушивает событие Welcome . Однако вы также можете вызвать намерение, произнеся одну из введенных обучающих фраз.
Вот приветственное сообщение для намерения приветствия по умолчанию:
Пользователь | Агент |
«Окей, Google, поговори с <ваше имя>-WIV» | «Привет, я Анна, виртуальный агент Women in Voice». «Вы можете попросить меня предоставить информацию о встречах, Women in Voice или дать совет по чтению». Что бы вы хотели узнать?» |
- Прокрутите вниз до «Ответы» .
- Очистить все текстовые ответы.
- На вкладке по умолчанию создайте следующие 3 ответа. (Нажмите «Добавить ответы» > «Текстовый ответ» или «Ответ SSML» для каждой новой строки:)
- Привет, я Анна, виртуальный агент Women in Voice.
- Вы можете запросить у меня информацию о встречах, «Женщины в голосе» или советы по чтению.
- Что бы вы хотели знать?
Конфигурация должна быть похожа на этот скриншот.
- Предыдущий вывод используется для чат-ботов, мы можем немного изменить вывод, специально для Google Assistant. Мы будем использовать SSML (язык разметки синтеза речи) для создания пауз в наших предложениях. Откройте вкладку Google Ассистент .
- Не включайте переключатель «По умолчанию», так как мы не будем повторно использовать сообщение чат-бота.
- Нажмите «Добавить ответы» > «Простой ответ».
- Добавьте следующую текстовую версию:
Hey there, I'm Anna, the virtual agent of Women in Voice.
You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?
- Затем нажмите «Настроить аудиовыход».
- И добавьте следующую версию SSML:
<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>
You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s>
What would you like to know?</s></p></speak>
Конфигурация должна быть похожа на этот скриншот.
- Нажмите « Сохранить».
Здесь вы можете найти дополнительную информацию о SSML для Actions on Google .
- Давайте проверим это намерение. Сначала мы можем протестировать это в симуляторе Dialogflow.
Тип: Здравствуйте . Он должен вернуть это сообщение.
- Теперь вернитесь к консоли «Действия в Google».
(Возможно, вы захотите сохранить это на другой вкладке.)
Нажмите: « Поговорите с моим тестовым приложением». И прослушайте новое приветственное сообщение.
Изменение резервного намерения по умолчанию
- Нажмите «Намерения» > «Запасное намерение по умолчанию».
- Прокрутите вниз до «Ответы» .
- Очистить все текстовые ответы.
- На вкладке по умолчанию создайте следующие ответы, каждый на новой строке, чтобы эти параметры чередовались:
-
Sorry, can you repeat this?
-
I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.
- Нажмите « Сохранить».
Обратите внимание: если вы не вводите вывод Google Assistant, он будет использовать значение по умолчанию.
Создайте намерение «Стоп»
- Нажмите на пункт меню «Намерения» .
- Нажмите «Создать намерение».
- Введите имя намерения:
Stop Intent
- Нажмите «Добавить обучающие фразы».
-
No
-
That's it
-
Bye
-
I don't want that
-
Goodbye
-
It's ok for now
-
Quit
-
I want to stop
-
Close this
-
End the conversation
- Прокрутите вниз до «Ответы» > «Добавить ответ» .
- Добавьте следующие параметры текста:
-
Alright! Hopefully we will see you at one of our meetups!
-
No problem. See you at one of our meetups!
- Нажмите переключатель: установите это намерение как конец разговора . Это гарантирует, что как только это намерение будет сопоставлено, действие Google Assistant закроется.
- Нажмите Сохранить .
Создайте намерение встречи
Намерение встречи будет содержать эту часть разговора:
Пользователь | Агент |
«Когда следующая встреча?» | «Следующая встреча состоится <дата> в <время> в <место>. Тема будет <тема>. Спикеры: <спикеры>. Вы можете зарегистрироваться через нашу рассылку». |
- Нажмите на пункт меню «Намерения» .
- Нажмите «Создать намерение».
- Введите имя намерения:
Meetup Intent
(убедитесь, что вы используете заглавные буквы M и I. Если вы напишете намерение по-другому, серверная служба не будет работать!) - Нажмите «Добавить обучающие фразы».
-
When is the next meetup?
-
Do you have any events?
-
Which events are in the planning?
-
Are there meetup events soon?
-
I would love to attend a meetup
-
Can I join a virtual meetup?
-
When will you get together?
-
Can I join?
-
What does your calendar look like?
- Нажмите «Выполнение» > «Включить выполнение».
- Переверните вызов Enable Webhook для этого переключателя намерений .
- Нажмите «Сохранить ».
Создайте намерение подсказки
Tip Intent будет содержать эту часть разговора:
Пользователь | Агент |
«Мне нужен совет по чтению». | «Хотите узнать больше о чат-ботах, голосовом или и том, и другом?» |
"Голос" | «Хорошо, вот совет дня! <тип> <название> <автора>. Хотите еще совет по книге или статье? Кроме того, я могу рассказать вам больше о встречах или о том, чем мы занимаемся. Чем я могу помочь? " |
- Нажмите на пункт меню «Намерения» еще раз.
- Нажмите «Создать намерение».
- Введите имя намерения:
Tip Intent
(убедитесь, что вы используете заглавную букву L и заглавную букву I. Если вы напишете намерение по-другому, серверная служба не будет работать!) - Нажмите «Добавить обучающие фразы» и добавьте следующее:
-
Can I get a tip for an article?
-
I would like to receive a reading tip
-
Any book tips?
-
What's nice to read?
-
I want to learn more about Chatbots, what should I read?
-
What are nice blogs?
-
Do you have book suggestions?
-
I want to receive information about Both
-
Can I have Chatbots reading tip
-
I would like to read more about Voice
-
Voice please
-
Both are okay.
-
Reading tip
-
Tip
-
Blog
-
Article
-
Book
-
Book suggestions
-
Yes
-
Yeah
-
Another tip
-
Yes one more
- Прокрутите вниз до пункта «Действие и параметры».
- Отметить технологию как необходимую
Нажмите: Определить подсказку и введите:
-
Do you want to read more about Chatbots, Voice or Both?
- Нажмите «Выполнение» > «Включить выполнение».
На этот раз мы не жестко программируем ответ. Ответ придет от облачной функции! Таким образом, переверните вызов Enable Webhook для этого переключателя намерений .
Нажмите «Выполнение» > «Включить выполнение».
- Переверните вызов Enable Webhook для этого переключателя намерений .
- Нажмите «Сохранить ».
5. Соединители знаний
Соединители знаний дополняют определенные намерения. Они анализируют документы знаний , чтобы найти автоматические ответы. (например, часто задаваемые вопросы или статьи из файлов CSV, веб-сайтов или даже файлов PDF!) Для их настройки вы определяете одну или несколько баз знаний, которые представляют собой коллекции документов знаний.
Узнайте больше о соединителях знаний.
Давайте попробуем это.
- Выберите тег en , чтобы выбрать английский язык в верхнем меню.
- В меню выберите Знания (бета).
- Нажмите правую синюю кнопку: Создать базу знаний.
- Введите имя базы знаний; Женщины в голосе и нажмите «Сохранить».
- Нажмите Создать первую ссылку.
- Это откроет окно.
Используйте следующую конфигурацию:
Название документа: Часто задаваемые вопросы «Женщины в голосе»
Тип знаний: Часто задаваемые вопросы
Тип MIME: CSV
- Нам понадобятся данные из этого листа, убедитесь, что лист данных открыт, и выберите вкладку «Часто задаваемые вопросы».
- Выберите «Файл» > «Загрузить» > CSV.
- Вернувшись в Dialogflow, нажмите «Загрузить файл с компьютера» и выберите загруженный CSV-файл. Нажмите Создать
Создана база знаний:
- Нажмите Добавить ответ.
Создайте следующие ответы и нажмите «Сохранить»:
$Knowledge.Answer[1]
- Нажмите « Просмотреть подробности».
Здесь будут отображены все часто задаваемые вопросы, которые вы реализовали в Dialogflow.
Это легко!
Помните, что вы также можете указать онлайн-сайт HTML с часто задаваемыми вопросами, чтобы импортировать часто задаваемые вопросы в свой агент. Можно даже загрузить PDF-файл с блоком текста, и Dialogflow сам предложит вопросы.
- Нажмите «Знание (бета)» в меню «Поток диалога», чтобы вернуться ко всем соединителям базы знаний.
- Можно изменить силу и слабость Базы знаний. Это имеет смысл, если вы считаете, что ваши часто задаваемые вопросы выигрывают или проигрывают из-за ваших собственных намерений. Поскольку у нас не так уж много намерений, давайте сделаем нашу базу знаний немного сильнее. Измените масштаб на - 0,2. После перетаскивания ползунка значение автоматически сохранится.
Теперь часто задаваемые вопросы следует рассматривать как «дополнительные материалы», которые можно добавить к вашим агентам, рядом с вашими потоками намерений. Часто задаваемые вопросы базы знаний не могут обучать модель. Таким образом, задавая вопросы совершенно по-другому, вы можете не получить совпадения, поскольку при этом не используется понимание естественного языка (модели машинного обучения). Вот почему иногда стоит преобразовать часто задаваемые вопросы в намерения.
6. Выполнение вебхука
Создайте функцию Google Cloud
- Перейдите на http://console.cloud.google.com на другой вкладке браузера.
- Выберите в левом меню Облачные функции.
- Нажмите «Создать функцию».
- Укажите следующую конфигурацию:
- Название:
dialogflow
- Выделенная память: 256 МБ
- Триггер: HTTP
- Скопируйте URL-адрес в буфер обмена.
- Выберите встроенный редактор
- Среда выполнения: NodeJS 8.
- Функция для выполнения:
dialogflow
- Убедитесь, что этот флажок аутентификации установлен:
- Вот содержимое package.json . Скопируйте и вставьте это на вкладку package.json редактора.
Этот фрагмент кода загружает правильные библиотеки npm в Google Cloud:
{
"name": "dialogflow",
"description": "Cloud Functions",
"engines": {
"node": "8"
},
"dependencies": {
"request": "^2.85.0",
"request-promise": "^4.2.5",
"dialogflow-fulfillment": "^0.6.1",
"actions-on-google": "^2.2.0",
"googleapis": "^48.0.0",
"moment": "^2.24.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"ngrok": "^3.2.7"
},
"private": true
}
- Вот содержимое index.js . Скопируйте и вставьте это на вкладку index.js редактора.
Этот фрагмент кода будет интегрирован с библиотекой googleapis для получения данных из Google Sheet. Он использует библиотеку действий в Google для отображения карточек на устройстве Google Assistant. Он использует библиотеку Dialogflow-fulfillment для классификации намерений Dialogflow. И он использует момент библиотеки для обработки объектов даты и времени.
/* jshint esversion: 8 */
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';
const {
BasicCard,
Button,
} = require('actions-on-google');
const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;
const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';
/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
// Should change this to file.only probably
const auth = await google.auth.getClient({
scopes: [SHEETS_SCOPE],
});
return google.sheets({version: 'v4', auth});
}
/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
let datetime = moment(date, 'YYYY-MM-DD');
return `${datetime.format('D MMMM')}`;
};
/* When the tipIntent Intent gets invoked. */
function tipIntent(agent) {
var par = agent.parameters.tech;
var selection = [];
//console.log(par);
//console.log(books);
for(var i = 0; i<books.length; i++){
if(books[i][2].toLowerCase() == par.toLowerCase()) {
selection.push(books[i]);
}
}
var random = Math.floor(Math.random() * selection.length);
var booktip = selection[random];
//console.log(selection[random]);
let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
//console.log(booktip[8]);
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(`<speak>${spokenText}</speak>`);
conv.ask(new BasicCard({
title: `Tip of the day!`,
subtitle: `${par}`,
text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
buttons: new Button({
title: 'Read',
url: `${booktip[8]}`,
})
}));
conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
}
}
function meetupIntent(agent) {
let conv = agent.conv();
let record;
console.log(meetups);
for(var i = 0; i<meetups.length; i++){
let d = moment(meetups[i][0], 'YYYY-MM-DD');
let today = moment(new Date());
if(moment(d).isSameOrAfter(today)) {
// the i event is not in the past
record = meetups[i];
console.log(record);
break;
}
}
let date = getSpokenDate(record[0]);
let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
let spokenText3 = `You can register via our newsletter.`;
let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
conv.ask(new BasicCard({
title: `Meetup`,
subtitle: `${record[2]}`,
text: `${record[0]} ${record[1]} - ${record[3]}`,
buttons: new Button({
title: 'Register',
url: `http://www.meetup.com`
})
}));
conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
agent.add(conv);
} else {
agent.add(`${writtenText} Is there anything else I can help you with?`);
}
}
exports.dialogflow = async (request, response) => {
var agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
const client = await getSheetsClient();
const allBooks = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Books&Blogs!A:I',
});
const allEvents = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Meetups!A:D',
});
books = allBooks.data.values;
meetups = allEvents.data.values;
books.shift();
meetups.shift();
var intentMap = new Map();
intentMap.set('Tip Intent', tipIntent);
intentMap.set('Meetup Intent', meetupIntent);
agent.handleRequest(intentMap);
};
- Нажмите ссылку «Переменные среды, сеть, таймауты и т. д.».
- Выберите учетную запись службы интеграции Dialogflow .
(По умолчанию используется учетная запись службы GAE App Engine, но это должна быть та же учетная запись службы, которая использовалась в ваших Google Таблицах на первых шагах этого руководства.)
- Прежде чем мы развернем облачную функцию. Мы изменим одну строку в нашем коде на вкладке index.js . Третья строка кода:
const
ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';
На одном из первых шагов мы записали этот ключ в Блокноте. Поэтому скопируйте и вставьте этот идентификатор в свой код.
- Теперь мы готовы. Нажмите кнопку «Создать» . Это займет некоторое время, поскольку развертывается ваша бессерверная функция.
Включить выполнение в Dialogflow
- Вернитесь к Dialogflow
- Нажмите «Выполнение» в главном меню.
- Включите переключатель Вебхук .
- Введите URL-адрес облачной функции, который был скопирован в буфер обмена.
Например: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow
- Нажмите «Сохранить».
- Давайте проверим вебхук, чтобы увидеть, работает ли код, и проверим потоки непосредственно в симуляторе Dialogflow.
7. Действия в Google
Actions on Google — это платформа разработки Google Assistant. Он позволяет третьим лицам разрабатывать «действия» — апплеты для Google Assistant, обеспечивающие расширенные функциональные возможности.
Вам нужно будет вызвать действие Google, попросив Google открыть приложение или поговорить с ним.
Это откроет ваше действие, изменит голос, и вы выйдете из «родной» области действия Google Assistant. Это означает, что все, что вы просите своего агента с этого момента, должно быть создано вами. В рамках вашего собственного действия вы не можете внезапно запросить у Google Assistant информацию о погоде в Google, если вы этого хотите; вам следует сначала покинуть (закрыть) область вашего текущего действия (вашего приложения).
Тестирование своих действий в симуляторе Google Assistant
Давайте проверим следующий разговор:
Пользователь | Google Ассистент |
«Окей, Google, поговори с моим тестовым приложением». | «Получаю тестовую версию моего приложения».» |
Пользователь | Ваше-Имя-WIV |
- | «Привет, я Анна, виртуальный агент организации «Женщины в голосе». Вы можете спросить у меня информацию о встречах, «Женщины в голосе» или советы по чтению. Что бы вы хотели узнать?» |
Могу ли я получить совет для блога? | «Хотите узнать больше о чат-ботах, голосовых или обоих?» |
Чат-боты | «Хорошо, вот совет дня! Статья «Чат-боты и проблема невидимых возможностей Кобуса Грейлинга». Хотите еще одну книгу или статью? Кроме того, я могу рассказать вам больше о встречах или о том, чем мы занимаемся. Чем я могу помочь? ?" |
Когда следующая встреча? | «Следующая встреча состоится 29 апреля в 18:00 в виртуальной видеовстрече. Темой будет: «Онлайн-семинар: создание действий Google с помощью Dialogflow!. Вы можете зарегистрироваться через нашу рассылку новостей. Могу ли я вам чем-нибудь еще помочь?» |
Какой URL-адрес вашего сайта? | «Вы можете найти нас на сайте www.womeninvoice.com. Могу ли я еще что-нибудь для вас сделать?» |
Нет, это все, спасибо | «Хорошо! Надеюсь, мы увидим вас на одной из наших встреч!» |
- Вернитесь к симулятору Google Assistant.
Открыть: https://console.actions.google.com.
- Нажмите на значок микрофона и задайте следующий вопрос:
-
Talk to my test app.
- Теперь давайте спросим:
-
Can I have a tip for a blog?
Это должно вернуться:
«Хотите узнать больше о чат-ботах, голосовых или обоих?»
-
Chatbots
«Хорошо, вот совет дня! Статья «Чат-боты и проблема невидимых возможностей Кобуса Грейлинга».
Хотите еще одну книгу или совет по статье? Также я могу рассказать вам больше о встречах или о том, чем мы занимаемся. Как я могу помочь?»
- Давайте попробуем другую версию того же вопроса:
-
"Yes, I want to read more about Voice"
«Хорошо, вот совет дня! Книга «Проектирование голосовых пользовательских интерфейсов: принципы разговорного опыта» Кэти Перл.
Хотите еще одну книгу или совет по статье? Также я могу рассказать вам больше о встречах или о том, чем мы занимаемся. Как я могу помочь?»
Обратите внимание, что вы никогда раньше не использовали эту обучающую фразу в Dialogflow. Это просто соответствовало правильному намерению.
Также обратите внимание, что вы не получили дополнительный вопрос, поскольку вы предоставили достаточно информации, чтобы Dialogflow мог продолжить.
- Продолжите диалог следующими фразами:
-
What's the URL for your website
-
Bye
Ошибки? Проверьте логи!
Каждый раз, когда вы используете console.log()
в коде облачной функции, данные будут записываться в ваши журналы GCP (Stackdriver). Вы можете получить доступ к этим журналам, открыв Cloud Console > Ведение журнала.
В первом раскрывающемся списке вы можете выбрать «Облачная функция» > «Диалоговый поток», чтобы отфильтровать журналы.
8. Поздравления
Вы создали свое первое действие Google Assistant с помощью Dialogflow, молодец!
Как вы могли заметить, ваше действие выполнялось в тестовом режиме , привязанном к вашей учетной записи Google. Если вы войдете в систему на своем устройстве Nest или в приложении Google Assistant на телефоне iOS или Android, используя ту же учетную запись. Вы также можете проверить свои действия.
Теперь это демонстрация мастер-класса. Но когда вы действительно создаете приложения для Google Assistant, вы можете отправить свое действие на утверждение. Прочтите это руководство для получения дополнительной информации.
Что мы рассмотрели
- Как создать чат-бота с помощью Dialogflow v2
- Как создавать собственные сущности с помощью Dialogflow
- Как создать линейный разговор с помощью Dialogflow
- Как настроить выполнение веб-перехватчиков с помощью Dialogflow и Google Cloud Functions
- Как перенести свое приложение в Google Assistant с помощью Actions on Google
Что дальше?
Понравилась эта лаборатория кода? Взгляните на эти замечательные лаборатории!
- Создайте действие телегида с помощью Dialogflow и Actions on Google.
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 1)
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 2)
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 3)
- Понимание выполнения заказов путем интеграции Dialogflow с Календарем Google
- Интегрируйте API Google Cloud Vision с Dialogflow