1. Введение
Вы смотрите телевизор, но не можете найти пульт, или, может быть, вам не хочется переходить по каждому каналу, чтобы узнать, что показывают? Давайте спросим у Google Ассистента, что показывают по телевизору! В этой лабораторной работе вы создадите простое действие с помощью Dialogflow и узнаете, как интегрировать его с Google Ассистентом.
Упражнения расположены в порядке, отражающем типичный опыт разработчиков облачных решений:
- Создайте агент Dialogflow v2.
- Создайте пользовательскую сущность
- Создайте интенты
- Настройте веб-перехватчик с помощью Firebase Functions.
- Протестируйте чат-бота.
- Включите интеграцию с Google Ассистентом.
Что вы построите
Мы создадим интерактивного чат-бота-телегида для Google Ассистента. Вы сможете спросить у телегида, что сейчас идёт на конкретном канале. Например: «Что показывают на MTV?» Действие «Телегид» покажет вам, что идёт сейчас и что будет дальше. |
|
Что вы узнаете
- Как создать чат-бота с помощью Dialogflow v2
- Как создавать пользовательские сущности с помощью Dialogflow
- Как создать линейный диалог с помощью Dialogflow
- Как настроить обработку веб-хуков с помощью Dialogflow и Firebase Functions
- Как интегрировать ваше приложение в Google Ассистент с помощью Actions on Google
Предварительные требования
- Для создания агента Dialogflow вам потребуется учетная запись Google Identity / адрес Gmail.
- Базовые знания JavaScript не требуются, но могут пригодиться, если вы захотите изменить код обработки веб-хуков.
2. Настройка
Включите функцию «Веб-активность» в настройках вашего браузера.
- Перейдите по ссылке: http://myaccount.google.com/activitycontrols
- Убедитесь, что функция «Активность веб-сайтов и приложений» включена :

Создайте агента Dialogflow.
- Откройте: https://console.dialogflow.com
- В левой боковой панели, прямо под логотипом, выберите « Создать нового агента ». Если у вас уже есть агенты, сначала нажмите на выпадающее меню.

- Укажите имя агента:
your-name-tvguide(используйте своё имя)

- В качестве языка по умолчанию выберите: английский - en
- В качестве часового пояса по умолчанию выберите ближайший к вам часовой пояс.
- Нажмите «Создать».
Настройка Dialogflow
- Нажмите на значок шестеренки в левом меню рядом с названием вашего проекта.

- Введите следующее описание агента: Мой телегид

- Прокрутите вниз до раздела «Настройки логирования» и переключите оба ключа в положение «Логировать взаимодействия Dialogflow» и «Логировать все взаимодействия в Google Cloud Stackdriver». Это понадобится нам позже, если мы захотим отладить наше действие.

- Нажмите «Сохранить».
Настройка действий в Google
- В правой панели нажмите на ссылку Google Assistant в разделе "Посмотрите, как это работает в Google Assistant" .

Откроется следующая ссылка: http://console.actions.google.com
Если вы впервые используете Actions on Google, вам сначала нужно заполнить эту форму:

- Попробуйте открыть свой проект в симуляторе, щелкнув по его названию.
- Выберите пункт «Тест» в строке меню.

- Убедитесь, что в симуляторе установлен английский язык , и нажмите «Поговорить с моим тестовым приложением».
В ответ на ваше сообщение будет отображаться стандартный Intent Dialogflow. Это означает, что интеграция с Action on Google прошла успешно!
3. Пользовательские сущности
Сущности — это объекты, над которыми ваше приложение или устройство выполняет действия. Представьте их как параметры/переменные. В нашем телегиде мы спросим: «Что показывают на MTV ?». MTV — это сущность и переменная. Я мог бы спросить и о других каналах, например: «National Geographic» или «Comedy Central». Полученная сущность будет использоваться в качестве параметра в моем запросе к веб-сервису API телегида.
Более подробная информация о сущностях Dialogflow доступна здесь .
Создание сущности канала
- В консоли Dialogflow выберите пункт меню: Сущности
- Нажмите «Создать сущность» .
- Название сущности:
channel(убедитесь, что все буквы строчные) - Укажите название канала. (Для некоторых каналов потребуется синоним на случай, если Google Ассистент поймет что-то другое). Вы можете использовать клавиши Tab и Enter во время набора текста. Введите номер канала в качестве справочного значения. А названия каналов — в качестве синонимов, например:
-
1 - 1, Net 1, Net Station 1

5. Переключитесь в режим **редактирования исходного файла**, нажав на кнопку меню рядом с синей кнопкой сохранения.

- Скопируйте и вставьте остальные данные в формате CSV:
"2","2","Net 2, Net Station 2"
"3","3","Net 3, Net Station 3"
"4","4","RTL 4"
"5","5","Movie Channel"
"6","6","Sports Channel"
"7","7","Comedy Central"
"8","8","Cartoon Network"
"9","9","National Geographic"
"10","10","MTV"

- Нажмите « Сохранить» .
4. Намерения
Dialogflow использует интенты для классификации намерений пользователя. У интентов есть обучающие фразы, которые представляют собой примеры того, что пользователь может сказать вашему агенту. Например, пользователь, который хочет узнать, что показывают по телевизору, может спросить: «Что сегодня показывают по телевизору?», «Что сейчас показывают?» или просто сказать «телепрограмма».
Когда пользователь что-то пишет или говорит, что называется пользовательским выражением , Dialogflow сопоставляет это выражение с наиболее подходящим намерением в вашем агенте. Сопоставление намерений также известно как классификация намерений .
Более подробная информация о Dialogflow Intents доступна здесь .
Изменение стандартного приветственного намерения
При создании нового агента Dialogflow автоматически создаются два намерения по умолчанию. Намерение «Приветствие по умолчанию» — это первый сценарий, который вы получаете при начале разговора с агентом. Намерение «Запасной сценарий по умолчанию» — это сценарий, который вы получаете, когда агент не может вас понять или не может сопоставить намерение с тем, что вы только что сказали.
- Нажмите «По умолчанию» (Klick Default Welcome Intention)
В случае с Google Ассистентом, он автоматически запустится с приветственным намерением по умолчанию. Это связано с тем, что Dialogflow отслеживает событие «Добро пожаловать» . Однако вы также можете вызвать намерение, произнеся одну из введенных обучающих фраз.

Вот приветственное сообщение для стандартного приветственного намерения:
Пользователь | Агент |
«Окей, Google, поговори с вашим-имя-телегидом». | «Добро пожаловать, я агент телегида. Я могу рассказать вам, что сейчас показывают по тому или иному телеканалу. Например, вы можете спросить меня: Что показывают на MTV?» |
- Прокрутите вниз до раздела «Ответы» .
- Очистить все текстовые ответы.
- Создайте новый текстовый ответ, содержащий следующее приветствие:
Welcome, I am the TV Guide agent. I can tell you what's currently playing on a TV channel. For example, you can ask me: What's on MTV?

- Нажмите «Сохранить».
Создайте временный тестовый намерение.
В целях тестирования мы создадим временный тестовый интент, чтобы позже проверить работу веб-хука.
- Снова щелкните пункт меню «Намерения» .
- Нажмите «Создать намерение»
- Введите название намерения:
Test Intent(убедитесь, что вы используете заглавные буквы T и I. — Если вы напишете намерение по-другому, серверная часть не будет работать!)

- Нажмите «Добавить обучающие фразы» .
-
Test my agent -
Test intent

- Нажмите «Выполнение заказов» > «Включить выполнение заказов».

В этот раз мы не будем жестко задавать ответ. Ответ будет получен от облачной функции!
- Переключите параметр Enable Webhook для этого интента .

- Нажмите « Сохранить» .
Создайте намерение канала
В поле «Намерение канала» будет содержаться следующая часть разговора:
Пользователь | Агент |
Что показывают на канале Comedy Central? | «Сейчас на канале Comedy Central с 18:00 идёт «Симпсоны». После этого, в 19:00, начнётся «Гриффины»». |
- Снова щелкните пункт меню «Намерения» .
- Нажмите «Создать намерение»
- Введите название намерения:
Channel Intent(убедитесь, что вы используете заглавные буквы T и I. — Если вы напишете намерение по-другому, серверная служба работать не будет!) - Нажмите «Добавить обучающие фразы» и добавьте следующее:
-
What's on MTV? -
What's playing on Comedy Central? -
What show will start at 8 PM on National Geographic? -
What is currently on TV? -
What is airing now. -
Anything airing on Net Station 1 right now? -
What can I watch at 7 PM? -
What's on channel MTV? -
What's on TV? -
Please give me the tv guide. -
Tell me what is on television. -
What's on Comedy Central from 10 AM? -
What will be on tv at noon? -
Anything on National Geographic? -
TV Guide

- Прокрутите вниз до раздела «Действия и параметры» .

Обратите внимание на сущности @channel и @sys.time , известные Dialogflow. Позже в вашем веб-хуке имя параметра и значение параметра будут отправлены в ваш веб-сервис. Например:
channel=8
time=2020-01-29T19:00:00+01:00
- Марк канал l как требуется
При общении с агентом телегида вам всегда потребуется заполнить поле имени параметра канала . Если название канала не было упомянуто в начале разговора, Dialogflow будет запрашивать его дополнительно, пока не заполнит все поля параметров. 
В качестве подсказки введите:
-
For which TV channel do you want to hear the tv guide information? -
In which TV channel are you interested?

- Не устанавливайте параметр времени по мере необходимости.
Время будет указываться по желанию. Если время не указано, веб-сервис вернет текущее время.
- Выполнение заказов по клику
На этот раз мы не задаем ответ жестко в коде. Ответ придет от облачной функции! Поэтому переключите параметр «Включить вызов веб-перехватчика для этого намерения» .
- Нажмите « Сохранить» .
5. Выполнение веб-хуков
Если вашему агенту требуются не только статические ответы на запросы, вам необходимо использовать механизм выполнения (fulfillment) для подключения вашего веб-сервиса к агенту. Подключение веб-сервиса позволяет выполнять действия на основе пользовательских выражений и отправлять пользователю динамические ответы. Например, если пользователь хочет получить расписание телепередач MTV, ваш веб-сервис может проверить базу данных и отправить пользователю расписание MTV.
- Нажмите «Выполнение» в главном меню.
- Включите переключатель " Встроенный редактор"

Для простого тестирования и реализации веб-хуков можно использовать встроенный редактор. Он использует бессерверные облачные функции для Firebase .
- В редакторе перейдите на вкладку index.js и скопируйте и вставьте следующий фрагмент кода JavaScript для Node.js:
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const {
dialogflow,
BasicCard,
Button,
Image,
List
} = require('actions-on-google');
const functions = require('firebase-functions');
const moment = require('moment');
const TVGUIDE_WEBSERVICE = 'https://tvguide-e4s5ds5dsa-ew.a.run.app/channel';
const { WebhookClient } = require('dialogflow-fulfillment');
var spokenText = '';
var results = null;
/* When the Test Intent gets invoked. */
function testHandler(agent) {
let spokenText = 'This is a test message, when you see this, it means your webhook fulfillment worked!';
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new BasicCard({
title: `Test Message`,
subTitle: `Dialogflow Test`,
image: new Image({
url: 'https://dummyimage.com/600x400/000/fff',
alt: 'Image alternate text',
}),
text: spokenText,
buttons: new Button({
title: 'This is a button',
url: 'https://assistant.google.com/',
}),
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/* When the Channel Intent gets invoked. */
function channelHandler(agent) {
var jsonResponse = `{"ID":10,"Listings":[{"Title":"Catfish Marathon","Date":"2018-07-13","Time":"11:00:00"},{"Title":"Videoclips","Date":"2018-07-13","Time":"12:00:00"},{"Title":"Pimp my ride","Date":"2018-07-13","Time":"12:30:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"13:00:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"13:30:00"},{"Title":"Daria","Date":"2018-07-13","Time":"13:45:00"},{"Title":"The Real World","Date":"2018-07-13","Time":"14:00:00"},{"Title":"The Osbournes","Date":"2018-07-13","Time":"15:00:00"},{"Title":"Teenwolf","Date":"2018-07-13","Time":"16:00:00"},{"Title":"MTV Unplugged","Date":"2018-07-13","Time":"16:30:00"},{"Title":"Rupauls Drag Race","Date":"2018-07-13","Time":"17:30:00"},{"Title":"Ridiculousness","Date":"2018-07-13","Time":"18:00:00"},{"Title":"Punk'd","Date":"2018-07-13","Time":"19:00:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"20:00:00"},{"Title":"MTV Awards","Date":"2018-07-13","Time":"20:30:00"},{"Title":"Beavis & Butthead","Date":"2018-07-13","Time":"22:00:00"}],"Name":"MTV"}`;
var results = JSON.parse(jsonResponse);
var listItems = {};
spokenText = getSpeech(results);
for (var i = 0; i < results['Listings'].length; i++) {
listItems[`SELECT_${i}`] = {
title: `${getSpokenTime(results['Listings'][i]['Time'])} - ${results['Listings'][i]['Title']}`,
description: `Channel: ${results['Name']}`
}
}
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new List({
title: 'TV Guide',
items: listItems
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/**
* Return a text string to be spoken out by the Google Assistant
* @param {object} JSON tv results
*/
var getSpeech = function(tvresults) {
let s = "";
if(tvresults['Listings'][0]) {
let channelName = tvresults['Name'];
let currentlyPlayingTime = getSpokenTime(tvresults['Listings'][0]['Time']);
let laterPlayingTime = getSpokenTime(tvresults['Listings'][1]['Time']);
s = `On ${channelName} from ${currentlyPlayingTime}, ${tvresults['Listings'][0]['Title']} is playing.
Afterwards at ${laterPlayingTime}, ${tvresults['Listings'][1]['Title']} will start.`
}
return s;
}
/**
* Return a natural spoken time
* @param {string} time in 'HH:mm:ss' format
* @returns {string} spoken time (like 8 30 pm i.s.o. 20:00:00)
*/
var getSpokenTime = function(time){
let datetime = moment(time, 'HH:mm:ss');
let min = moment(datetime).format('m');
let hour = moment(datetime).format('h');
let partOfTheDay = moment(datetime).format('a');
if (min == '0') {
min = '';
}
return `${hour} ${min} ${partOfTheDay}`;
};
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((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));
let channelInput = request.body.queryResult.parameters.channel;
let requestedTime = request.body.queryResult.parameters.time;
let url = `${TVGUIDE_WEBSERVICE}/${channelInput}`;
var intentMap = new Map();
intentMap.set('Test Intent', testHandler);
intentMap.set('Channel Intent', channelHandler);
agent.handleRequest(intentMap);
});

- В редакторе перейдите на вкладку package.json и скопируйте и вставьте этот фрагмент JSON-кода, который импортирует все библиотеки Node.js Package Manager (NPM):
{
"name": "tvGuideFulfillment",
"description": "Requesting TV Guide information from a web service.",
"version": "1.0.0",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "8"
},
"scripts": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^2.2.0",
"firebase-admin": "^5.13.1",
"firebase-functions": "^2.0.2",
"request": "^2.85.0",
"request-promise": "^4.2.5",
"moment" : "^2.24.0",
"dialogflow-fulfillment": "^0.6.1"
}
}

- Нажмите кнопку «Развернуть» . Это займет некоторое время, поскольку выполняется развертывание вашей бессерверной функции. В нижней части экрана появится всплывающее окно с информацией о вашем статусе.
- Давайте протестируем веб-хук, чтобы проверить, работает ли код. В симуляторе справа введите:
Test my agent.
Когда всё будет в порядке, вы должны увидеть: «Это тестовое сообщение».
- Давайте проверим намерение канала, а теперь зададим вопрос:
What's on MTV?
Когда всё будет в порядке, вы увидите:
«На канале MTV с 16:30 будет транслироваться MTV Unplugged. Затем, в 17:30, начнётся шоу RuPaul's Drag Race».
Дополнительные шаги - Firebase
Если вы протестируете это на другом канале, вы заметите, что результаты просмотра телепередач остаются теми же. Это происходит потому, что облачная функция пока не получает данные с реального веб-сервера.
Для этого нам потребуется установить исходящее сетевое соединение .
Если вы хотите протестировать это приложение с помощью веб-сервиса, обновите свой тарифный план Firebase до Blaze . Примечание: эти шаги необязательны. Вы также можете перейти к следующим шагам этой лабораторной работы, чтобы продолжить тестирование вашего приложения в Actions on Google .
- Перейдите в консоль Firebase: https://console.firebase.google.com
- В нижней части экрана нажмите кнопку «Обновить» .

Выберите тарифный план Blaze во всплывающем окне.
- Теперь, когда мы знаем, что веб-хук работает, мы можем продолжить и заменить код
index.jsследующим кодом. Это гарантирует, что вы сможете запрашивать информацию о телепрограмме у веб-сервиса:
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const {
dialogflow,
BasicCard,
Button,
Image,
List
} = require('actions-on-google');
const functions = require('firebase-functions');
const moment = require('moment');
const { WebhookClient } = require('dialogflow-fulfillment');
const rp = require('request-promise');
const TVGUIDE_WEBSERVICE = 'https://tvguide-e4s5ds5dsa-ew.a.run.app/channel';
var spokenText = '';
var results = null;
/* When the Test Intent gets invoked. */
function testHandler(agent) {
let spokenText = 'This is a test message, when you see this, it means your webhook fulfillment worked!';
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new BasicCard({
title: `Test Message`,
subTitle: `Dialogflow Test`,
image: new Image({
url: 'https://dummyimage.com/600x400/000/fff',
alt: 'Image alternate text',
}),
text: spokenText,
buttons: new Button({
title: 'This is a button',
url: 'https://assistant.google.com/',
}),
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/* When the Channel Intent gets invoked. */
function channelHandler(agent) {
var listItems = {};
spokenText = getSpeech(results);
for (var i = 0; i < results['Listings'].length; i++) {
listItems[`SELECT_${i}`] = {
title: `${getSpokenTime(results['Listings'][i]['Time'])} - ${results['Listings'][i]['Title']}`,
description: `Channel: ${results['Name']}`
}
}
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new List({
title: 'TV Guide',
items: listItems
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/**
* Return a text string to be spoken out by the Google Assistant
* @param {object} JSON tv results
*/
var getSpeech = function(tvresults) {
let s = "";
if(tvresults && tvresults['Listings'][0]) {
let channelName = tvresults['Name'];
let currentlyPlayingTime = getSpokenTime(tvresults['Listings'][0]['Time']);
let laterPlayingTime = getSpokenTime(tvresults['Listings'][1]['Time']);
s = `On ${channelName} from ${currentlyPlayingTime}, ${tvresults['Listings'][0]['Title']} is playing.
Afterwards at ${laterPlayingTime}, ${tvresults['Listings'][1]['Title']} will start.`
}
return s;
}
/**
* Return a natural spoken time
* @param {string} time in 'HH:mm:ss' format
* @returns {string} spoken time (like 8 30 pm i.s.o. 20:00:00)
*/
var getSpokenTime = function(time){
let datetime = moment(time, 'HH:mm:ss');
let min = moment(datetime).format('m');
let hour = moment(datetime).format('h');
let partOfTheDay = moment(datetime).format('a');
if (min == '0') {
min = '';
}
return `${hour} ${min} ${partOfTheDay}`;
};
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((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));
let channelInput = request.body.queryResult.parameters.channel;
let requestedTime = request.body.queryResult.parameters.time;
let url = `${TVGUIDE_WEBSERVICE}/${channelInput}`;
if (requestedTime) {
console.log(requestedTime);
let offsetMin = moment().utcOffset(requestedTime)._offset;
console.log(offsetMin);
let time = moment(requestedTime).utc().add(offsetMin,'m').format('HH:mm:ss');
url = `${TVGUIDE_WEBSERVICE}/${channelInput}/${time}`;
}
console.log(url);
var options = {
uri: encodeURI(url),
json: true
};
// request promise calls an URL and returns the JSON response.
rp(options)
.then(function(tvresults) {
console.log(tvresults);
// the JSON response, will need to be formatted in 'spoken' text strings.
spokenText = getSpeech(tvresults);
results = tvresults;
})
.catch(function (err) {
console.error(err);
})
.finally(function(){
// kick start the Dialogflow app
// based on an intent match, execute
var intentMap = new Map();
intentMap.set('Test Intent', testHandler);
intentMap.set('Channel Intent', channelHandler);
agent.handleRequest(intentMap);
});
});
6. Действия в Google
Actions on Google — это платформа для разработки Google Ассистента. Она позволяет сторонним разработчикам создавать «действия» — апплеты для Google Ассистента, расширяющие его функциональность.
Вам потребуется вызвать действие Google, попросив Google открыть приложение или взаимодействовать с ним.
Это откроет ваше действие, изменит голос, и вы выйдете за пределы «собственной» области действия Google Ассистента. Это означает, что все ваши дальнейшие запросы к агенту должны создаваться вами. Вы не можете внезапно попросить Google Ассистента предоставить информацию о погоде Google, если вам это нужно; сначала следует выйти за пределы (закрыть) области действия вашего действия (вашего приложения).
Проверка ваших действий в симуляторе Google Ассистента
Давайте проверим следующий диалог:
Пользователь | Google Ассистент |
«Эй, Google, поговори с телепрограммой вашего имени ». | "Конечно. Сейчас я найду вашу телепрограмму ." |
Пользователь | Агент телегида Your-Name |
- | «Добро пожаловать, я — телегид...» |
Проверить моего агента | «Это тестовое сообщение. Когда вы его увидите, это значит, что обработка вашего веб-хука прошла успешно!» |
Что показывают на MTV? | На канале MTV с 16:30 начнётся программа MTV Unplugged. Затем, в 17:30, начнётся шоу RuPaul's Drag Race. |
- Вернитесь к симулятору Google Ассистента.
Откройте: https://console.actions.google.com
- Нажмите на значок микрофона и задайте следующий вопрос:

-
Talk to my test agent -
Test my agent
Ассистент Google должен ответить следующим образом:

- Теперь давайте спросим:
-
What's on Comedy Central?
В результате должно получиться следующее:
Сейчас на канале Comedy Central с 18:00 идёт «Симпсоны». После этого, в 19:00, начнётся «Гриффины».
7. Поздравляем!
Вы создали свою первую функцию Google Ассистента с помощью Dialogflow, отлично!
Как вы могли заметить, ваше действие выполнялось в тестовом режиме , привязанном к вашей учетной записи Google. Если бы вы вошли в систему на своем устройстве Nest или в приложение Google Assistant на телефоне iOS или Android, используя ту же учетную запись, вы бы также могли протестировать свое действие.
Это демонстрационный пример из мастерской. Но когда вы будете создавать реальные приложения для Google Ассистента, вы сможете отправить свое действие на утверждение. Подробнее об этом читайте в этом руководстве.
Что мы рассмотрели
- Как создать чат-бота с помощью Dialogflow v2
- Как создавать пользовательские сущности с помощью Dialogflow
- Как создать линейный диалог с помощью Dialogflow
- Как настроить обработку веб-хуков с помощью Dialogflow и Firebase Functions
- Как интегрировать ваше приложение в Google Ассистент с помощью Actions on Google
Что дальше?
Вам понравилась эта практическая работа по программированию? Тогда взгляните и на эти замечательные практические работы!
Продолжите выполнение этого практического задания, интегрировав его в Google Chat:
Создать телепрограмму с помощью Google Chat, G Suite и Dialogflow.
- Создание действий для Google Ассистента с помощью Dialogflow (уровень 1)
- Создание действий для Google Ассистента с помощью Dialogflow (уровень 2)
- Создание действий для Google Ассистента с помощью Dialogflow (уровень 3)
- Понимание процесса выполнения заказов путем интеграции Dialogflow с Google Calendar.
- Интеграция API Google Cloud Vision с Dialogflow
