Практическое занятие: создайте действие телегида для Google Assistant с помощью Dialogflow и Actions on Google.

1. Введение

Вы смотрите телевизор, но не можете найти пульт, или, может быть, вам не хочется заходить на каждый телеканал, чтобы узнать, есть ли что-нибудь интересное по телевизору? Давайте спросим Google Assistant, что показывают по телевизору! В этой лабораторной работе вы создадите простое действие с помощью Dialogflow и узнаете, как интегрировать его с Google Assistant.

Упражнения упорядочены так, чтобы отразить общий опыт разработчиков облачных технологий:

  1. Создайте агент Dialogflow v2.
  2. Создать пользовательскую сущность
  3. Создание намерений
  4. Настройте вебхук с функциями Firebase
  5. Протестируйте чат-бота
  6. Включите интеграцию с Google Ассистентом

Что вы построите

Мы создадим чат-бот-агент интерактивного телегида для Google Assistant. Вы можете узнать у телегида, что сейчас транслируется на том или ином канале. Например; «Что идет по MTV?» Действие «Телегид» сообщит вам, что идет сейчас и что будет дальше.

Что вы узнаете

  • Как создать чат-бота с помощью Dialogflow v2
  • Как создавать собственные сущности с помощью Dialogflow
  • Как создать линейный разговор с помощью Dialogflow
  • Как настроить выполнение вебхука с помощью функций Dialogflow и Firebase
  • Как перенести свое приложение в Google Assistant с помощью Actions on Google

Предварительные условия

  • Для создания агента Dialogflow вам понадобится Google Identity/адрес Gmail.
  • Базовые знания JavaScript не требуются, но могут пригодиться, если вы захотите изменить код выполнения вебхука.

2. Приступаем к настройке

Включите веб-активность в вашем браузере

  1. Нажмите: http://myaccount.google.com/activitycontrols .

  1. Убедитесь, что активность приложений и веб-поиска включена :

bf8d16b828d6f79a.png

Создайте агент Dialogflow

  1. Открыть: https://console.dialogflow.com.

  1. На левой панели, прямо под логотипом, выберите « Создать нового агента ». Если у вас уже есть агенты, сначала щелкните раскрывающийся список.

1d7c2b56a1ab95b8.png

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

35237b5c5c539ecc.png

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

Настроить диалоговый поток

  1. Нажмите на значок шестеренки в левом меню рядом с названием вашего проекта.

1d7c2b56a1ab95b8.png

  1. Введите следующее описание агента: My TV Guide.

26f262d359c49075.png

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

e80c17acc3cce993.png

  1. Нажмите « Сохранить».

Настройка действий в Google

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

5a4940338fc351e3.png

Откроется: http://console.actions.google.com.

Если вы новичок в Actions on Google, вам сначала нужно будет заполнить эту форму:

3fd4e594fa169072.png

  1. Попробуйте открыть свое действие в симуляторе**, нажав на название проекта.**
  2. Выберите «Тест» в строке меню.

6adb83ffb7adeb78.png

  1. Убедитесь, что в симуляторе установлен английский язык , и нажмите « Поговорить с моим тестовым приложением».

Действие приветствует вас с базовым намерением Dialogflow по умолчанию. Это означает, что настройка интеграции с Action on Google сработала!

3. Пользовательские объекты

Сущности — это объекты, над которыми ваше приложение или устройство выполняет действия. Думайте об этом как о параметрах/переменных. В нашем телегиде мы спросим: «Что идет по MTV ». MTV — это сущность и переменная. Я мог бы попросить и другие каналы, например: «National Geographic» или «Comedy Central». Собранная сущность будет использоваться в качестве параметра в моем запросе к веб-сервису TV Guide API.

Вот дополнительная информация о Dialogflow Entities .

Создание сущности канала

  1. Нажмите в консоли Dialogflow на пункт меню: Сущности.
  2. Нажмите «Создать объект».
  3. Имя объекта: channel (убедитесь, что оно написано строчными буквами).
  4. Передайте имя канала. (некоторым каналам потребуется синоним, если Google Assistant поймет что-то еще). Вы можете использовать вкладку и вводить клавиши во время набора текста. Введите номер канала в качестве справочного значения. И названия каналов как синонимы, например:
  • 1 - 1, Net 1, Net Station 1

ee4e4955aa77232d.png

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

e294b49b123e034f.png

  1. Скопируйте и вставьте другие объекты в формате 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"

ed78514afd5badef.png

  1. Нажмите «Сохранить ».

4. Намерения

Dialogflow использует намерения для классификации намерений пользователя. У намерений есть обучающие фразы, которые являются примерами того, что пользователь может сказать вашему агенту. Например, пользователь, который хочет знать, что показывают по телевизору, может спросить: «Что сегодня по телевизору?», «Что сейчас идет?» или просто сказать «ТВГид».

Когда пользователь что-то пишет или говорит, это называется выражением пользователя , Dialogflow сопоставляет выражение пользователя с наилучшими намерениями вашего агента. Соответствие намерению также известно как классификация намерений .

Вот дополнительная информация о намерениях Dialogflow .

Изменение намерения приветствия по умолчанию

Когда вы создаете новый агент Dialogflow, два намерения по умолчанию будут созданы автоматически. Приветственное намерение по умолчанию — это первый поток, который вы получаете, когда начинаете разговор с агентом. Резервное намерение по умолчанию — это поток, который вы получите, если агент не сможет вас понять или не сможет сопоставить намерение с тем, что вы только что сказали.

  1. Нажмите «Намерение приветствия по умолчанию».

В случае с Google Assistant он автоматически запустится с приветствием по умолчанию. Это связано с тем, что Dialogflow прослушивает событие Welcome . Однако вы также можете вызвать намерение, произнеся одну из введенных обучающих фраз.

6beee64e8910b85d.png

Вот приветственное сообщение для намерения приветствия по умолчанию:

Пользователь

Агент

«Окей, Google, поговори со своим именем-телегидом».

«Добро пожаловать, я агент телегида. Я могу сказать вам, что сейчас крутят на телеканале. Например, вы можете спросить меня: что показывают на MTV».

  1. Прокрутите вниз до «Ответы» .
  2. Очистить все текстовые ответы.
  3. Создайте один новый текстовый ответ, содержащий следующее приветствие:

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?

84a1110a7f7edba2.png

  1. Нажмите « Сохранить».

Создайте временное тестовое намерение

В целях тестирования мы создадим временное тестовое намерение, чтобы позже можно было протестировать вебхук.

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

925e02caa4de6b99.png

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

2e44ddb2fae3c841.png

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

7eb73ba04d76140e.png

На этот раз мы не жестко программируем ответ. Ответ придет от облачной функции!

  1. Переверните вызов Enable Webhook для этого переключателя намерений .

748a82d9b4d7d253.png

  1. Нажмите «Сохранить ».

Создайте намерение канала

Намерение канала будет содержать эту часть разговора:

Пользователь

Агент

«Что показывают на Comedy Central?»

«Сейчас на Comedy Central с 18:00 идут «Симпсоны». Потом в 19:00 начнется «Гриффины».»

  1. Нажмите на пункт меню «Намерения» еще раз.
  2. Нажмите «Создать намерение».
  3. Введите имя намерения: Channel Intent (убедитесь, что вы используете заглавную букву T и заглавную букву I. Если вы напишете намерение по-другому, серверная служба не будет работать!)
  4. Нажмите «Добавить обучающие фразы» и добавьте следующее:
  • 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

6eee02db02831397.png

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

b7e917026760218a.png

Обратите внимание на объекты @channel и @sys.time , известные Dialogflow. Позже в вашем веб-перехватчике имя и значение параметра будут отправлены в ваш веб-сервис. Например:

channel=8

time=2020-01-29T19:00:00+01:00

  1. Отметить канал l как необходимый

Когда вы разговариваете с агентом ТВ Гида, вам всегда нужно будет заполнить поле имени параметра слота Channel. Если имя канала не было упомянуто в начале разговора, Dialogflow будет спрашивать дальше, пока не будут заполнены все слоты параметров. 6f36973fd789c182.png

В качестве приглашения введите:

  • For which TV channel do you want to hear the tv guide information?
  • In which TV channel are you interested?

cdb5601ead9423f8.png

  1. Не устанавливайте параметр времени так, как требуется.

Время будет необязательным. Если время не указано, веб-сервис вернет текущее время.

  1. Нажмите «Выполнение».

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

  1. Нажмите «Сохранить ».

5. Выполнение вебхука

Если вашему агенту требуется нечто большее, чем статические ответы о намерениях, вам необходимо использовать выполнение для подключения вашего веб-сервиса к вашему агенту. Подключение вашего веб-сервиса позволяет вам выполнять действия на основе пользовательских выражений и отправлять динамические ответы обратно пользователю. Например, если пользователь хочет получить расписание телепередач MTV, ваш веб-сервис может проверить вашу базу данных и ответить пользователю, расписание передач MTV.

  1. Нажмите «Выполнение» в главном меню.
  2. Включите переключатель встроенного редактора

cc84351f0d03ab6f.png

Для простого тестирования и реализации вебхука вы можете использовать встроенный редактор. Он использует бессерверные облачные функции для Firebase .

  1. Нажмите вкладку 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);
});

cc84351f0d03ab6f.png

  1. Щелкните вкладку 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"
  }
}

af01460c2a023e68.png

  1. Нажмите кнопку «Развернуть» . Это займет некоторое время, поскольку развертывается ваша бессерверная функция. В нижней части экрана появится всплывающее окно с указанием вашего статуса.
  2. Давайте проверим вебхук, чтобы увидеть, работает ли код. В симуляторе справа введите:

Test my agent.

Если все правильно, вы должны увидеть: «Это тестовое сообщение».

  1. Давайте проверим намерение канала, а теперь зададим вопрос:

What's on MTV?

Если все верно, вы должны увидеть:

«На MTV с 16:30 идет MTV Unplugged. Затем в 17:30 стартует Rupauls Drag Race».

Дополнительные действия – Firebase

Когда вы протестируете это на другом канале, вы заметите, что результаты телевидения такие же. Это связано с тем, что облачная функция еще не получает данные с реального веб-сервера.

Для этого нам нужно будет установить исходящее сетевое соединение .

Если вы хотите протестировать это приложение с помощью веб-сервиса, обновите свой план Firebase до Blaze . Примечание. Эти шаги не являются обязательными. Вы также можете перейти к следующим шагам этой лабораторной работы, чтобы продолжить тестирование своего приложения в Actions on Google .

  1. Перейдите в консоль Firebase: https://console.firebase.google.com.

  1. В нижней части экрана нажмите кнопку «Обновить» .

ad38bc6d07462abf.png

Выберите план Blaze во всплывающем окне.

  1. Теперь, когда мы знаем, что вебхук работает, мы можем продолжить и заменить код 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.

  1. Вернитесь к симулятору Google Assistant.

Открыть: https://console.actions.google.com.

  1. Нажмите на значок микрофона и задайте следующий вопрос:

c3b200803c7ba95e.png

  • Talk to my test agent
  • Test my agent

Google Ассистент должен ответить:

5d93c6d037c8c8eb.png

  1. Теперь давайте спросим:
  • 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