1. Введение
Вы смотрите телевизор, но не можете найти пульт, или, может быть, вам не хочется заходить на каждый телеканал, чтобы узнать, есть ли что-нибудь интересное по телевизору? Давайте спросим Google Assistant, что показывают по телевизору! В этой лабораторной работе вы создадите простое действие с помощью Dialogflow и узнаете, как интегрировать его с Google Assistant.
Упражнения упорядочены так, чтобы отразить общий опыт разработчиков облачных технологий:
- Создайте агент Dialogflow v2.
- Создать пользовательскую сущность
- Создание намерений
- Настройте вебхук с функциями Firebase
- Протестируйте чат-бота
- Включите интеграцию с Google Ассистентом
Что вы построите
Мы создадим чат-бота-агента интерактивной телепрограммы для Google Assistant. Вы можете узнать у телегида, что сейчас транслируется на том или ином канале. Например; «Что идет по MTV?» Действие «Телегид» сообщит вам, что идет сейчас и что будет дальше. |
Что вы узнаете
- Как создать чат-бота с помощью Dialogflow v2
- Как создавать собственные сущности с помощью Dialogflow
- Как создать линейный разговор с помощью Dialogflow
- Как настроить выполнение вебхука с помощью функций Dialogflow и Firebase
- Как перенести свое приложение в Google Assistant с помощью Actions on Google
Предварительные условия
- Для создания агента Dialogflow вам понадобится Google Identity/адрес Gmail.
- Базовые знания JavaScript не требуются, но могут пригодиться, если вы захотите изменить код выполнения вебхука.
2. Приступаем к настройке
Включите веб-активность в вашем браузере
- Нажмите: http://myaccount.google.com/activitycontrols .
- Убедитесь, что активность приложений и веб-поиска включена :
Создайте агент Dialogflow
- Открыть: https://console.dialogflow.com.
- На левой панели, прямо под логотипом, выберите « Создать нового агента ». Если у вас уже есть агенты, сначала щелкните раскрывающийся список.
- Укажите имя агента:
your-name-tvguide
(используйте свое имя)
- В качестве языка по умолчанию выберите: English - en.
- В качестве часового пояса по умолчанию выберите ближайший к вам часовой пояс.
- Нажмите Создать
Настроить диалоговый поток
- Нажмите на значок шестеренки в левом меню рядом с названием вашего проекта.
- Введите следующее описание агента: My TV Guide.
- Прокрутите вниз до пункта «Настройки журнала» и переключите оба переключателя, чтобы регистрировать взаимодействия Dialogflow и регистрировать все взаимодействия в Google Cloud Stackdriver. Это понадобится нам позже, если мы захотим отладить наше действие.
- Нажмите « Сохранить».
Настройка действий в Google
- Нажмите ссылку Google Assistant в разделе «Посмотрите, как это работает в Google Assistant» на правой панели.
Откроется: http://console.actions.google.com.
Если вы новичок в Actions on Google, вам сначала нужно будет заполнить эту форму:
- Попробуйте открыть свое действие в симуляторе**, нажав на название проекта.**
- Выберите «Тест» в строке меню.
- Убедитесь, что в симуляторе установлен английский язык , и нажмите « Поговорить с моим тестовым приложением».
Действие приветствует вас с базовым намерением Dialogflow по умолчанию. Это означает, что настройка интеграции с Action on Google сработала!
3. Пользовательские объекты
Сущности — это объекты, над которыми ваше приложение или устройство выполняет действия. Думайте об этом как о параметрах/переменных. В нашем телегиде мы спросим: «Что идет по MTV ». MTV — это сущность и переменная. Я мог бы попросить и другие каналы, например: «National Geographic» или «Comedy Central». Собранная сущность будет использоваться в качестве параметра в моем запросе к веб-сервису TV Guide API.
Вот дополнительная информация о Dialogflow Entities .
Создание сущности канала
- Нажмите в консоли Dialogflow на пункт меню: Сущности.
- Нажмите «Создать объект».
- Имя объекта:
channel
(убедитесь, что оно написано строчными буквами). - Передайте имя канала. (некоторым каналам потребуется синоним, если Google Assistant поймет что-то еще). Вы можете использовать вкладку и вводить клавиши во время набора текста. Введите номер канала в качестве справочного значения. И названия каналов как синонимы, например:
-
1 - 1, Net 1, Net Station 1
5**.** Переключитесь в режим **Raw Edit**, нажав кнопку меню рядом с синей кнопкой сохранения.
- Скопируйте и вставьте другие объекты в формате 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 .
Изменение намерения приветствия по умолчанию
Когда вы создаете новый агент Dialogflow, два намерения по умолчанию будут созданы автоматически. Приветственное намерение по умолчанию — это первый поток, который вы получаете, когда начинаете разговор с агентом. Резервное намерение по умолчанию — это поток, который вы получите, если агент не сможет вас понять или не сможет сопоставить намерение с тем, что вы только что сказали.
- Нажмите «Намерение приветствия по умолчанию».
В случае с Google Assistant он автоматически запустится с приветствием по умолчанию. Это связано с тем, что Dialogflow прослушивает событие Welcome . Однако вы также можете вызвать намерение, произнеся одну из введенных обучающих фраз.
Вот приветственное сообщение для намерения приветствия по умолчанию:
Пользователь | Агент |
«Окей, 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 как необходимый
Когда вы разговариваете с агентом ТВ Гида, вам всегда нужно будет заполнить поле имени параметра слота Channel. Если имя канала не было упомянуто в начале разговора, Dialogflow будет спрашивать дальше, пока не будут заполнены все слоты параметров.
В качестве приглашения введите:
-
For which TV channel do you want to hear the tv guide information?
-
In which TV channel are you interested?
- Не устанавливайте параметр времени так, как требуется.
Время будет необязательным. Если время не указано, веб-сервис вернет текущее время.
- Нажмите «Выполнение».
На этот раз мы не жестко программируем ответ. Ответ придет от облачной функции! Таким образом, переверните вызов Enable Webhook для этого переключателя намерений .
- Нажмите «Сохранить ».
5. Выполнение вебхука
Если вашему агенту требуется нечто большее, чем статические ответы о намерениях, вам необходимо использовать выполнение для подключения вашего веб-сервиса к вашему агенту. Подключение вашего веб-сервиса позволяет вам выполнять действия на основе пользовательских выражений и отправлять динамические ответы обратно пользователю. Например, если пользователь хочет получить расписание телепередач 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 (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 стартует Rupauls 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 Assistant. Он позволяет третьим лицам разрабатывать «действия» — апплеты для Google Assistant, обеспечивающие расширенные функциональные возможности.
Вам нужно будет вызвать действие Google, попросив Google открыть приложение или поговорить с ним.
Это откроет ваше действие, изменит голос, и вы выйдете из «родной» области действия Google Assistant. Это означает, что все, что вы просите своего агента с этого момента, должно быть создано вами. Вы не можете внезапно запросить у Google Assistant информацию о погоде в Google, если вы этого хотите; вам следует сначала покинуть (закрыть) область действия (ваше приложение).
Тестирование своих действий в симуляторе Google Assistant
Давайте проверим следующий разговор:
Пользователь | Google Ассистент |
«Эй, Google, поговори со своим именем-телегидом ». | «Конечно. Позвольте мне взять ваше имя-телегид ». |
Пользователь | Ваше имя-агент телегида |
- | «Добро пожаловать, я телегид…» |
Проверьте моего агента | «Это тестовое сообщение. Когда вы его видите, это означает, что выполнение вебхука сработало!» |
Что на MTV? | На MTV с 16:30 играет MTV Unplugged. Затем в 17:30 стартует Rupauls Drag Race. |
- Вернитесь к симулятору Google Assistant.
Открыть: 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 Assistant с помощью Dialogflow, молодец!
Как вы могли заметить, ваше действие выполнялось в тестовом режиме , привязанном к вашей учетной записи Google. Если вы войдете в систему на своем устройстве Nest или в приложении Google Assistant на своем телефоне iOS или Android, используя ту же учетную запись. Вы также можете проверить свои действия.
Теперь это демонстрация мастер-класса. Но когда вы действительно создаете приложения для Google Assistant, вы можете отправить свое действие на утверждение. Прочтите это руководство для получения дополнительной информации.
Что мы рассмотрели
- Как создать чат-бота с помощью Dialogflow v2
- Как создавать собственные сущности с помощью Dialogflow
- Как создать линейный разговор с помощью Dialogflow
- Как настроить выполнение вебхука с помощью функций Dialogflow и Firebase
- Как перенести свое приложение в Google Assistant с помощью Actions on Google
Что дальше?
Понравилась эта лаборатория кода? Взгляните на эти замечательные лаборатории!
Продолжите эту лабораторную работу по коду, интегрировав ее в Google Chat:
Создайте телегид в Google Chat с помощью G Suite и Dialogflow
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 1)
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 2)
- Создайте действия для Google Assistant с помощью Dialogflow (уровень 3)
- Понимание выполнения заказов путем интеграции Dialogflow с Календарем Google
- Интегрируйте API Google Cloud Vision с Dialogflow