Langsung: Membuat tindakan panduan TV untuk Asisten Google dengan Dialogflow dan Actions on Google

1. Pengantar

Anda sedang menonton TV, tetapi tidak dapat menemukan remote, atau mungkin Anda tidak ingin membuka setiap saluran TV untuk mencari tahu apakah ada acara yang menarik di televisi? Tanyakan ke Asisten Google tentang acara TV yang sedang tayang. Di lab ini, Anda akan membuat tindakan sederhana menggunakan Dialogflow dan mempelajari cara mengintegrasikannya dengan Asisten Google.

Latihan ini diurutkan untuk mencerminkan pengalaman developer cloud pada umumnya:

  1. Buat agen Dialogflow v2
  2. Membuat entity kustom
  3. Membuat intent
  4. Menyiapkan webhook dengan Firebase Functions
  5. Menguji chatbot
  6. Mengaktifkan integrasi Asisten Google

Yang akan Anda buat

Kita akan membuat agen chatbot panduan TV interaktif untuk Asisten Google. Anda dapat menanyakan panduan TV, acara apa yang sedang ditayangkan di channel tertentu. Misalnya; "Apa yang sedang diputar di MTV?" Tindakan Panduan TV akan memberi tahu Anda apa yang sedang diputar dan apa yang akan diputar selanjutnya.

Yang akan Anda pelajari

  • Cara membuat chatbot dengan Dialogflow v2
  • Cara membuat entity kustom dengan Dialogflow
  • Cara membuat percakapan linear dengan Dialogflow
  • Cara menyiapkan pemenuhan webhook dengan Dialogflow dan Firebase Functions
  • Cara menghadirkan aplikasi Anda ke Asisten Google dengan Actions on Google

Prasyarat

  • Anda memerlukan alamat Gmail / Identitas Google untuk membuat agen Dialogflow.
  • Pengetahuan dasar tentang JavaScript tidak diperlukan, tetapi dapat berguna jika Anda ingin mengubah kode pemenuhan webhook.

2. Mempersiapkan

Mengaktifkan Aktivitas Web di browser Anda

  1. Klik: http://myaccount.google.com/activitycontrols

  1. Pastikan Aktivitas Web & Aplikasi diaktifkan:

bf8d16b828d6f79a.png

Buat agen Dialogflow

  1. Buka: https://console.dialogflow.com

  1. Di panel kiri, tepat di bawah logo, pilih "Create New Agent". Jika Anda sudah memiliki agen, klik dropdown terlebih dahulu.

1d7c2b56a1ab95b8.png

  1. Tentukan nama agen: your-name-tvguide (gunakan nama Anda sendiri)

35237b5c5c539ecc.png

  1. Sebagai bahasa default, pilih: Inggris - en
  2. Sebagai zona waktu default, pilih zona waktu yang paling dekat dengan Anda.
  3. Klik Buat

Mengonfigurasi Dialogflow

  1. Klik ikon roda gigi di menu kiri, di samping nama project Anda.

1d7c2b56a1ab95b8.png

  1. Masukkan deskripsi agen berikut: Panduan TV Saya

26f262d359c49075.png

  1. Scroll ke bawah ke Setelan Log dan aktifkan kedua tombol untuk mencatat interaksi Dialogflow dan mencatat semua interaksi di Google Cloud Stackdriver. Kita akan memerlukannya nanti, jika ingin men-debug tindakan.

e80c17acc3cce993.png

  1. Klik Simpan

Mengonfigurasi Actions on Google

  1. Klik link Asisten Google di Lihat cara kerjanya di Asisten Google di panel sebelah kanan.

5a4940338fc351e3.png

URL ini akan membuka: http://console.actions.google.com

Jika baru menggunakan Actions on Google, Anda harus mengisi formulir ini terlebih dahulu:

3fd4e594fa169072.png

  1. Coba buka tindakan Anda di simulator**, dengan mengklik nama project.**
  2. Pilih Uji di panel menu

6adb83ffb7adeb78.png

  1. Pastikan simulator disetel ke Inggris, lalu klik Talk to my test-app

Tindakan akan menyapa Anda, dengan maksud default Dialogflow dasar. Artinya, penyiapan integrasi dengan Action on Google berhasil!

3. Entity Kustom

Entitas adalah objek yang ditindaklanjuti oleh aplikasi atau perangkat Anda. Anggap saja ini sebagai parameter / variabel. Di Panduan TV kami, kami akan bertanya: "Apa yang sedang tayang di MTV". MTV adalah entity dan variabel. Saya juga dapat meminta saluran lain, seperti: "National Geographic" atau "Comedy Central". Entitas yang dikumpulkan akan digunakan sebagai parameter dalam permintaan saya ke layanan web TV Guide API.

Berikut informasi selengkapnya tentang Entity Dialogflow.

Membuat Entitas Channel

  1. Klik item menu di Konsol Dialogflow: Entities
  2. Klik Buat Entity.
  3. Nama entitas: channel (pastikan semuanya huruf kecil)
  4. Teruskan nama channel. (beberapa saluran akan memerlukan sinonim jika Asisten Google memahami sesuatu yang lain). Anda dapat menggunakan tombol tab dan enter saat mengetik. Masukkan nomor saluran sebagai nilai referensi. Dan nama channel sebagai sinonim, seperti:
  • 1 - 1, Net 1, Net Station 1

ee4e4955aa77232d.png

5**.** Beralihlah ke mode **Edit Mentah** dengan mengklik tombol menu di samping tombol simpan biru.

e294b49b123e034f.png

  1. Salin & tempel entitas lainnya dalam format 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. Klik Simpan.

4. Intent

Dialogflow menggunakan intent untuk mengategorikan maksud pengguna. Intent memiliki Frasa Pelatihan, yang merupakan contoh-contoh apa yang mungkin diucapkan pengguna kepada agen Anda. Misalnya, pengguna yang ingin mengetahui acara TV yang sedang ditayangkan dapat bertanya, "Apa yang ditayangkan di TV hari ini?", "Apa yang sedang diputar?", atau cukup ucapkan "panduan tv".

Saat pengguna menulis atau mengucapkan sesuatu, yang disebut sebagai ekspresi pengguna, Dialogflow akan mencocokkan ekspresi pengguna dengan intent terbaik di agen Anda. Mencocokkan maksud juga dikenal sebagai klasifikasi maksud.

Berikut informasi selengkapnya tentang Maksud Dialogflow.

Mengubah Maksud Sambutan Default

Saat Anda membuat agen Dialogflow baru, dua intent default akan dibuat secara otomatis. Default Welcome Intent adalah alur pertama yang Anda dapatkan saat memulai percakapan dengan agen. Default Fallback Intent adalah alur yang akan Anda dapatkan setelah agen tidak dapat memahami Anda atau tidak dapat mencocokkan intent dengan apa yang baru saja Anda katakan.

  1. Klik Default Welcome Intent

Dalam kasus Asisten Google, Asisten akan otomatis dimulai dengan Maksud Sambutan Default. Hal ini karena Dialogflow memproses Welcome event. Namun, Anda juga dapat memanggil intent dengan mengucapkan salah satu frasa pelatihan yang dimasukkan.

6beee64e8910b85d.png

Berikut pesan selamat datang untuk Default Welcome Intent:

Pengguna

Agent

"Ok Google, bicara dengan your-name-tvguide".

"Selamat datang, saya adalah agen Panduan TV. Saya dapat memberi tahu Anda konten yang sedang diputar di channel TV. Misalnya, Anda dapat bertanya kepada saya: "Apa saja acara di MTV".

  1. Scroll ke bawah ke Respons.
  2. Hapus semua Respons Teks.
  3. Buat satu respons teks baru, yang berisi salam berikut:

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. Klik Simpan

Membuat intent pengujian sementara

Untuk tujuan pengujian, kita akan membuat intent pengujian sementara, sehingga kita dapat menguji webhook nanti.

  1. Klik item menu Intents lagi.
  2. Klik Create Intent
  3. Masukkan Nama Maksud: Test Intent (pastikan Anda menggunakan huruf besar T dan huruf besar I. - Jika Anda mengeja maksud secara berbeda, layanan backend tidak akan berfungsi!)

925e02caa4de6b99.png

  1. Klik Tambahkan Frasa pelatihan
  • Test my agent
  • Test intent

2e44ddb2fae3c841.png

  1. Klik Fulfillment > Enable Fulfillment

7eb73ba04d76140e.png

Kali ini kita tidak akan meng-hardcode respons. Respons akan berasal dari fungsi cloud.

  1. Balikkan tombol Enable Webhook call for this intent.

748a82d9b4d7d253.png

  1. Klik Simpan.

Membuat Maksud Channel

Maksud Channel akan berisi bagian percakapan ini:

Pengguna

Agent

"Apa yang ada di Comedy Central?"

""Saat ini di Comedy Central mulai pukul 18.00, The Simpsons sedang diputar. Setelah itu pada pukul 19.00, Family Guy akan dimulai.""

  1. Klik item menu Intents lagi.
  2. Klik Create Intent
  3. Masukkan Nama Maksud: Channel Intent (pastikan Anda menggunakan huruf besar T dan huruf besar I. - Jika Anda mengeja maksud secara berbeda, layanan backend tidak akan berfungsi!)
  4. Klik Add Training phrases dan tambahkan yang berikut:
  • 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. Scroll ke bawah ke Tindakan dan parameter

b7e917026760218a.png

Perhatikan entity @channel & @sys.time yang diketahui oleh Dialogflow. Selanjutnya di webhook, nama parameter dan nilai parameter akan dikirim ke layanan web Anda. Contoh:

channel=8

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

  1. Menandai channel sebagai wajib

Saat melakukan percakapan dengan agen Panduan TV, Anda harus selalu mengisi nama parameter slot channel. Jika nama channel tidak disebutkan di awal percakapan, Dialogflow akan bertanya lebih lanjut, hingga semua slot parameter terisi. 6f36973fd789c182.png

Sebagai perintah, masukkan:

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

cdb5601ead9423f8.png

  1. Jangan tetapkan parameter waktu sesuai kebutuhan.

Waktu akan bersifat opsional. Jika tidak ada waktu yang ditentukan, layanan web akan menampilkan waktu saat ini.

  1. Klik Fulfillment

Kali ini kita tidak akan meng-hardcode respons. Respons akan berasal dari fungsi cloud. Jadi, balikkan tombol Enable Webhook call for this intent.

  1. Klik Simpan.

5. Webhook Pemenuhan

Jika agen Anda memerlukan lebih dari sekadar respons intent statis, Anda harus menggunakan pemenuhan untuk menghubungkan layanan web ke agen Anda. Dengan menghubungkan layanan web, Anda dapat melakukan tindakan berdasarkan ekspresi pengguna dan mengirimkan respons dinamis kembali kepada pengguna. Misalnya, jika pengguna ingin menerima jadwal TV untuk MTV, layanan web Anda dapat memeriksa database Anda dan merespons pengguna, jadwal untuk MTV.

  1. Klik Pemenuhan di menu utama
  2. Aktifkan tombol Editor Inline

cc84351f0d03ab6f.png

Untuk pengujian dan penerapan webhook sederhana, Anda dapat menggunakan editor inline. Fitur ini menggunakan Cloud Functions for Firebase serverless.

  1. Klik tab index.js di editor dan salin tempelkan potongan JavaScript ini untuk kode 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. Klik tab package.json di editor dan salin tempel potongan kode JSON ini, yang mengimpor semua library 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"
  }
}

af01460c2a023e68.png

  1. Klik tombol Deploy. Proses ini akan memakan waktu beberapa saat karena fungsi tanpa server Anda sedang di-deploy. Di bagian bawah layar, akan ada jendela pop-up yang menampilkan status Anda.
  2. Mari kita uji webhook untuk melihat apakah kodenya berfungsi. Di simulator di sisi kanan, ketik:

Test my agent.

Jika semuanya sudah benar, Anda akan melihat: "This is a test message".

  1. Mari kita uji Maksud Channel, sekarang ajukan pertanyaan:

What's on MTV?

Jika semuanya sudah benar, Anda akan melihat:

"MTV Unplugged akan diputar di MTV mulai pukul 16.30. Setelah itu pada pukul 17.30, Rupaul's Drag Race akan dimulai."

Langkah Opsional - Firebase

Saat mengujinya dengan channel lain, Anda akan melihat bahwa hasil tv-nya sama. Hal ini karena fungsi cloud belum mengambil data dari server web yang sebenarnya.

Untuk melakukannya, kita perlu membuat koneksi jaringan keluar.

Jika Anda ingin menguji aplikasi ini dengan layanan web, upgrade paket Firebase Anda ke Blaze. Catatan: langkah-langkah ini bersifat opsional. Anda juga dapat melanjutkan ke langkah berikutnya di lab ini, untuk terus menguji aplikasi Anda di Actions on Google.

  1. Buka Firebase console: https://console.firebase.google.com

  1. Di bagian bawah layar, tekan tombol Upgrade

ad38bc6d07462abf.png

Pilih paket Blaze di jendela pop-up.

  1. Setelah mengetahui bahwa webhook berfungsi, kita dapat melanjutkan dan mengganti kode index.js dengan kode di bawah. Hal ini akan memastikan bahwa Anda dapat meminta informasi panduan TV dari layanan web:
'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. Actions on Google

Actions on Google adalah platform pengembangan untuk Asisten Google. Hal ini memungkinkan pengembangan "action" pihak ketiga—applet untuk Asisten Google yang menyediakan fungsi yang diperluas.

Anda harus memanggil Google Action, dengan meminta Google untuk membuka atau berbicara dengan aplikasi.

Tindakan ini akan membuka tindakan Anda, mengubah suara, dan Anda keluar dari cakupan Asisten Google 'asli'. Artinya, semua yang Anda minta dari agen Anda mulai saat ini harus dibuat oleh Anda. Anda tidak dapat tiba-tiba meminta informasi cuaca Google kepada Asisten Google, jika itulah yang Anda inginkan; Anda harus keluar (menutup) cakupan tindakan Anda (aplikasi Anda) terlebih dahulu.

Menguji Action Anda di simulator Asisten Google

Mari kita uji percakapan berikut:

Pengguna

Asisten Google

"Ok Google, bicara dengan your-name-tv-guide."

"Oke. Coba buka your-name-tv-guide."

Pengguna

Agen Panduan TV Nama Anda

-

"Selamat datang, saya adalah panduan TV...."

Menguji agen saya

"Ini adalah pesan pengujian, jika Anda melihat pesan ini, berarti pemenuhan webhook Anda berhasil!"

Apa yang tayang di MTV?

Di MTV mulai pukul 16.30, MTV Unplugged sedang diputar. Setelah itu pada pukul 17.30, RuPaul's Drag Race akan dimulai.

  1. Beralih kembali ke simulator Asisten Google

Buka: https://console.actions.google.com

  1. Klik ikon mikrofon dan tanyakan hal berikut:

c3b200803c7ba95e.png

  • Talk to my test agent
  • Test my agent

Asisten Google akan merespons dengan:

5d93c6d037c8c8eb.png

  1. Sekarang mari kita tanyakan:
  • What's on Comedy Central?

Perintah ini akan menampilkan:

Saat ini sedang tayang di Comedy Central mulai pukul 18.00, The Simpsons. Setelah itu pada pukul 19.00, Family Guy akan dimulai.

7. Selamat

Anda telah membuat tindakan Asisten Google pertama dengan Dialogflow. Selamat!

Seperti yang mungkin Anda perhatikan, tindakan Anda berjalan dalam mode pengujian yang terkait dengan Akun Google Anda. Jika Anda akan login di perangkat Nest atau aplikasi Asisten Google di ponsel iOS atau Android, dengan akun yang sama. Anda juga dapat menguji tindakan Anda.

Sekarang ini adalah demo workshop. Namun, saat Anda benar-benar membangun aplikasi untuk Asisten Google, Anda dapat mengirimkan Action untuk mendapatkan persetujuan. Baca panduan ini untuk mengetahui informasi selengkapnya.

Yang telah kita bahas

  • Cara membuat chatbot dengan Dialogflow v2
  • Cara membuat entity kustom dengan Dialogflow
  • Cara membuat percakapan linear dengan Dialogflow
  • Cara menyiapkan pemenuhan webhook dengan Dialogflow dan Firebase Functions
  • Cara menghadirkan aplikasi Anda ke Asisten Google dengan Actions on Google

Apa selanjutnya?

Menyukai lab kode ini? Lihat lab menarik ini.

Lanjutkan codelab ini dengan mengintegrasikannya untuk Google Chat:

Membuat panduan TV Google Chat dengan G Suite dan Dialogflow