Interaksi Langsung: Workshop Perempuan dalam Suara

1. Pengantar

Di lab ini, Anda akan membangun tindakan sederhana menggunakan Dialogflow dan mempelajari cara mengintegrasikannya dengan Asisten Google.

Latihan-latihan ini diurutkan untuk mencerminkan pengalaman developer cloud pada umumnya:

  1. Membuat agen Dialogflow v2
  2. Membuat entity
  3. Membuat intent
  4. Menyiapkan webhook dengan Cloud Functions GCP
  5. Menggunakan pusat informasi untuk mengimpor FAQ
  6. Menguji chatbot
  7. Mengaktifkan integrasi Asisten Google

Yang akan Anda buat

Kita akan membangun aplikasi Asisten Google untuk grup pertemuan Perempuan dalam Voice. Anda dapat menanyakan kapan pertemuan berikutnya, artikel & petunjuk buku atau pertanyaan umum tentang grup pertemuan.

Yang akan Anda pelajari

  • Cara membuat chatbot dengan Dialogflow v2
  • Cara membuat percakapan linear dengan Dialogflow
  • Cara memanfaatkan entity
  • Cara memanfaatkan pusat informasi
  • Cara menyiapkan fulfillment webhook dengan fungsi Dialogflow dan GCP
  • Cara memasukkan aplikasi Anda ke Asisten Google dengan Actions on Google

Prasyarat

2. Mempersiapkan

Mengaktifkan Aktivitas Web di browser Anda

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

  1. Pastikan Web & Aktivitas Aplikasi diaktifkan:

bf8d16b828d6f79a.png

Membuat agen Dialogflow

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

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

1d7c2b56a1ab95b8.pngS

  1. Tentukan nama agen: yourname-wiv (gunakan nama Anda sendiri)
  2. Sebagai bahasa default, pilih: Bahasa Inggris - en.
  3. Sebagai zona waktu default, pilih zona waktu yang paling dekat dengan lokasi Anda.
  4. Jangan pilih Agen Besar. (Dengan fitur ini, Anda dapat membuat agen menyeluruh, yang dapat mengorkestrasi antara agen "sub". Kami tidak memerlukannya sekarang.)
  5. Klik Buat

382af956cbf308a4.pngS

Mengonfigurasi Dialogflow

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

1d7c2b56a1ab95b8.pngS

  1. Masukkan deskripsi agen berikut: Wanita dalam agen Voice
  2. Scroll ke bawah ke Fitur Beta, lalu geser tombol untuk mengaktifkan fitur beta.
  3. Scroll ke bawah ke Log Settings, lalu geser kedua tombol ke Log interaksi Dialogflow dan catat semua interaksi di Google Cloud Stackdriver. Kita akan membutuhkannya nanti, jika kita ingin men-debug tindakan.

e80c17acc3cce993.png

  1. Klik Simpan
  2. Klik Selesai

Mengonfigurasi Actions on Google

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

5a4940338fc351e3.pngS

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

CATATAN: Pastikan Anda login dengan Akun Google yang sama seperti yang ada di Dialogflow.

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

3fd4e594fa169072.pngS

  1. Cobalah untuk membuka aksi Anda di simulator**, dengan mengklik nama proyek.**
  2. Pilih Develop di panel menu

Hapus centang Cocokkan setelan bahasa pengguna. Untuk memastikan penyintesis text to speech tidak dikesampingkan oleh bahasa default Asisten.

3b6bc284050571f5.png

  1. Klik Simpan
  2. Pilih Test di panel menu

dd55b141677932fe.png

  1. Pastikan simulator disetel ke Bahasa Inggris lalu Klik Bicara dengan aplikasi uji saya

Tindakan ini akan menyambut Anda, dengan intent default Dialogflow dasar. Artinya, penyiapan integrasi dengan Action on Google berhasil.

Mengonfigurasi Google Cloud

Untuk tutorial ini, Anda memerlukan akun GCP dengan akun penagihan. Jika belum memilikinya, Anda dapat membuatnya dengan langkah-langkah berikut.

Biasanya akun penagihan memerlukan metode pembayaran seperti kartu kredit. Untuk workshop ini, kita dapat menggunakan kredit workshop yang dapat melewati proses ini.

  1. Buka URL ini dan login

gcpcredits.com/wivnl

  1. Klik: Klik di sini dan akses kredit Anda
  2. Klik Setujui & Lanjutkan

Anda sudah siap. Anda telah membuat akun penagihan dengan biaya sebesar 25 dolar, yang seharusnya lebih dari cukup untuk menggunakan Cloud Functions dalam jangka waktu yang lama.

Mengaktifkan Google Sheets API

Jika agen Anda memerlukan lebih dari sekadar respons intent statis (misalnya untuk mengambil data dari layanan web, database, atau Spreadsheet), Anda harus menggunakan fulfillment untuk menghubungkan layanan web ke agen Anda. Menghubungkan layanan web memungkinkan Anda mengambil tindakan berdasarkan ekspresi pengguna dan mengirim respons dinamis kembali kepada pengguna.

Misalnya, jika pengguna ingin menerima tips blog atau buku, layanan web Anda dapat memeriksa database Anda dan merespons pengguna dengan artikel untuk dibaca.

Dalam tutorial ini, kita tidak akan menggunakan database, melainkan menggunakan Spreadsheet Google. Setelah sheet diperbarui, tindakan Asisten Google juga akan diperbarui. Keren!

  1. Buka Google Spreadsheet ini di tab browser baru, jika Anda belum melakukannya:
  2. https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
  3. PENTING: Buat salinan sheet ini. Klik File > Buat Salinan
  4. Setelah sheet disalin, klik Bagikan
  5. Kita perlu memberikan hak edit Akun Layanan Dialogflow. Untuk melakukannya, buka Dialogflow > Setelan (roda roda gigi).
  6. Scroll ke bawah ke Project Google
  7. Salin alamat akun layanan (email). Konfigurasinya akan terlihat seperti ini: dialogflow-<someid>@<my-gcp-project>.iam.gserviceaccount.com

8bc778a04efb3dd2.pngS

  1. Tempel akun layanan ini di pop-up Bagikan Google Spreadsheet, dan berikan hak Edit.

e296b9c069c2028e.png

  1. Selanjutnya, kita perlu mengingat ID Spreadsheet yang sedang kita kerjakan.

f9061a3724086bf7.png

    The Sheets URL will look something like this:

https://docs.google.com/spreadsheets/d/1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o/edit#gid=1240329448

    But we are only interested in the Sheet id, which is the part between:

https://docs.google.com/spreadsheets/d/ dan /edit#gid=1240329448 (tanpa garis miring).

    So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**

    **Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
  1. Buka di tab browser lain; http://console.cloud.google.com. (Jika Anda memiliki lebih banyak project Google Cloud, aktifkan project Dialogflow baru: yourname-wiv). - Di kotak penelusuran, telusuri: Google Sheets API

8b42de259eb40547.pngS

  1. Klik ini, dan klik tombol Enable Google Sheets API di bagian atas.

4b41a64a6cd5a37e.pngS

3. Entity Khusus

Entity adalah objek yang mengambil tindakan oleh aplikasi atau perangkat Anda. Anggap saja sebagai parameter / variabel. Dalam tindakan, kami akan menanyakan:

"Saya ingin tips membaca tentang

chatbot

/ Saya ingin tips membaca tentang

suara*"*

Baik Anda menggunakan Chatbot, Voice, atau Keduanya, data ini akan dikumpulkan dari entity kustom yang akan digunakan sebagai parameter dalam permintaan saya ke layanan web.

Berikut informasi selengkapnya tentang Entitas Dialogflow.

Membuat Entitas Saluran

  1. Klik item menu di Konsol Dialogflow: Entity
  2. Klik Create Entity
  3. Nama entitas: tech (pastikan semua huruf kecil)
  4. Tentukan opsi dengan sinonim. (Anda dapat menekan tombol tab melalui antarmuka.)
  • Chatbots - Chatbots, Chat, Web
  • Voice - Voice, Voicebots, Voice Assistants
  • Both - Both, All

f9b213472a75915b.png

5**.** Beralih ke mode **Raw Edit** dengan mengklik tombol menu di samping tombol simpan berwarna biru.

e294b49b123e034f.png

  1. Perhatikan bahwa Anda juga dapat memasukkan semua entitas dalam format CSV. Hal ini berguna ketika Anda memiliki banyak entity yang perlu dibuat.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"

6cfaa328bcd2bad3.png

  1. Tekan Simpan

4. Intent

Dialogflow menggunakan intent untuk mengategorikan niat pengguna. Intent memiliki Frasa Pelatihan, yang merupakan contoh ucapan pengguna kepada agen Anda.

Misalnya, pengguna yang ingin tahu siapa yang ingin tahu kapan peristiwa berikutnya mungkin bertanya:

"Kapan pertemuan berikutnya?"

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

Berikut informasi selengkapnya tentang Intent Dialogflow.

Mengubah Intent Selamat Datang Default

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

  1. Klik Intent > Intent Selamat Datang Default

Dalam kasus Asisten Google, Asisten akan otomatis dimulai dengan Intent Selamat Datang Default. Hal ini karena Dialogflow memproses peristiwa Selamat datang. Namun, Anda juga dapat memanggil intent dengan mengucapkan salah satu frasa latihan yang dimasukkan.

17610dbd5450e53.pngS

Berikut adalah pesan selamat datang untuk Intent Selamat Datang Default:

Pengguna

Agen

"Ok Google, bicara dengan <namaanda>-WIV"

"Halo, saya Anna, agen virtual Women in Voice.""Anda bisa bertanya kepada saya informasi tentang pertemuan, Women in Voice, atau tips membaca."Apa yang ingin Anda ketahui?"

  1. Scroll ke bawah ke Respons.
  2. Hapus semua Respons Teks.
  3. Di tab default, buat 3 respons berikut. (Klik Add Responses > Text atau SSML Response, untuk setiap baris baru:)
  • Halo, saya Anna, agen virtual Women in Voice.
  • Anda bisa menanyakan informasi tentang pertemuan, Women in Voice, atau tips membaca.
  • Apa yang ingin Anda ketahui?

Konfigurasinya akan mirip dengan screenshot ini.

a0078ea79188dcb3.png

  1. Output sebelumnya digunakan untuk chatbot. Kita bisa sedikit mengubah output, khususnya untuk Asisten Google. Kita akan menggunakan SSML (Speech Synthesis Markup Language) untuk membuat jeda dalam kalimat kita. Klik tab Asisten Google.
  • Jangan aktifkan tombol Default, karena kami tidak akan menggunakan kembali pesan chatbot.
  • Klik Tambahkan Respons > Respons Sederhana
  • Tambahkan versi teks berikut:

Hey there, I'm Anna, the virtual agent of Women in Voice.

You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?

  • Lalu, klik Sesuaikan output audio
  • Dan tambahkan versi SSML berikut:

<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>

You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s> What would you like to know?</s></p></speak>

Konfigurasinya akan mirip dengan screenshot ini.

62f0f58753463fbe.pngS

  1. Klik Simpan

Di sini Anda dapat menemukan informasi selengkapnya tentang SSML untuk Actions on Google.

  1. Mari kita uji intent ini. Pertama, kita dapat mengujinya di Dialogflow Simulator.

Jenis: Hello. Tindakan ini akan memunculkan pesan ini.

12d40056fbd25dfe.pngS

  1. Sekarang, beralih kembali ke konsol Actions on Google.

(Anda dapat menyimpannya di tab lain.)

Klik: "Bicara dengan aplikasi pengujian saya". Kemudian, dengarkan pesan selamat datang yang baru.

Mengubah Intent Penggantian Default

  1. Klik Intent > Intent Penggantian Default
  2. Scroll ke bawah ke Respons.
  3. Hapus semua Respons Teks.
  4. Pada tab default, buat respons berikut, masing-masing pada baris baru, sehingga bergantian di antara opsi berikut:
  • Sorry, can you repeat this?
  • I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.

bdecc217bafff97b.png

  1. Klik Simpan

Catatan, jika Anda tidak memasukkan output Asisten Google, output tersebut akan menggunakan output default.

Membuat Intent Berhenti

  1. Klik item menu Intent.
  2. Klik Create Intent
  3. Masukkan Nama Intent: Stop Intent
  4. Klik Tambahkan Frasa pelatihan
  • No
  • That's it
  • Bye
  • I don't want that
  • Goodbye
  • It's ok for now
  • Quit
  • I want to stop
  • Close this
  • End the conversation

7ec6455cabdf7e36.pngS

  1. Scroll ke bawah ke bagian Respons.> Tambahkan Respons
  2. Tambahkan opsi teks berikut:
  • Alright! Hopefully we will see you at one of our meetups!
  • No problem. See you at one of our meetups!
  1. Menggeser tombol: Tetapkan intent ini sebagai akhir percakapan. Tindakan ini akan memastikan, setelah intent ini cocok, tindakan tersebut akan menutup tindakan Asisten Google.

ba532398680d457d.png

  1. Klik Simpan.

Membuat Intent Meetup

Tujuan Pertemuan akan berisi bagian percakapan berikut:

Pengguna

Agen

"Kapan pertemuan berikutnya?"

"Pertemuan berikutnya akan <date> pukul <time> di <location>. Topiknya adalah <topic>. Dan speaker-nya adalah: <speakers>. Anda dapat mendaftar melalui newsletter kami."

  1. Klik item menu Intent.
  2. Klik Create Intent
  3. Masukkan Nama Intent: Meetup Intent (pastikan Anda menggunakan huruf besar M dan huruf I besar. - Jika Anda mengeja intent dengan cara berbeda, layanan backend tidak akan berfungsi.)
  4. Klik Tambahkan Frasa pelatihan
  • When is the next meetup?
  • Do you have any events?
  • Which events are in the planning?
  • Are there meetup events soon?
  • I would love to attend a meetup
  • Can I join a virtual meetup?
  • When will you get together?
  • Can I join?
  • What does your calendar look like?
  1. Klik Fulfillment > Aktifkan Fulfillment

7eb73ba04d76140e.pngS

  1. Geser tombol Aktifkan panggilan Webhook untuk intent ini.

748a82d9b4d7d253.pngS

  1. Tekan Simpan

Membuat Intent Tip

Intent Tip akan berisi bagian percakapan berikut:

Pengguna

Agen

"Saya menginginkan tips membaca".

"Ingin membaca info selengkapnya tentang Chatbot, Voice, atau Keduanya?"

"Suara"

"Baiklah, inilah tips hari ini. <type> &lt;title&gt; <author>. Mau buku atau tips artikel lain? Selain itu, saya bisa memberi tahu Anda lebih banyak tentang pertemuan atau apa yang kami lakukan. Ada yang bisa saya bantu?"

  1. Klik item menu Intent lagi.
  2. Klik Create Intent
  3. Masukkan Nama Intent: Tip Intent (pastikan Anda menggunakan huruf L dan huruf besar I. - Jika Anda mengeja intent dengan cara berbeda, layanan backend tidak akan berfungsi.)
  4. Klik Add Training strategy, lalu tambahkan perintah berikut:
  • Can I get a tip for an article?
  • I would like to receive a reading tip
  • Any book tips?
  • What's nice to read?
  • I want to learn more about Chatbots, what should I read?
  • What are nice blogs?
  • Do you have book suggestions?
  • I want to receive information about Both
  • Can I have Chatbots reading tip
  • I would like to read more about Voice
  • Voice please
  • Both are okay.
  • Reading tip
  • Tip
  • Blog
  • Article
  • Book
  • Book suggestions
  • Yes
  • Yeah
  • Another tip
  • Yes one more
  1. Scroll ke bawah ke Tindakan dan parameter
  2. Tandai tech sebagai required

7cdf7fdf5d2c3fbe.pngS

Klik: Define Prompt dan masukkan:

  • Do you want to read more about Chatbots, Voice or Both?
  1. Klik Fulfillment > Aktifkan Fulfillment

Kali ini kita tidak melakukan hardcoding respons. Responsnya akan berasal dari fungsi cloud. Jadi, alihkan tombol Enable Webhook call for this intent.

Klik Fulfillment > Aktifkan Fulfillment

7eb73ba04d76140e.pngS

  1. Geser tombol Aktifkan panggilan Webhook untuk intent ini.

748a82d9b4d7d253.pngS

  1. Tekan Simpan

5. Knowledge Connector

Konektor pengetahuan melengkapi intent yang ditentukan. Alat ini menguraikan dokumen pengetahuan untuk menemukan respons otomatis. (misalnya, FAQ atau artikel dari file CSV, situs online, atau bahkan file PDF!) Untuk mengonfigurasinya, Anda menentukan satu atau beberapa pusat informasi, yang merupakan kumpulan dokumen pengetahuan.

Baca selengkapnya tentang Knowledge Connector.

Jadi, mari kita coba.

  1. Pilih tag en, untuk memilih bahasa Inggris di menu atas.
  2. Pilih Pengetahuan (beta) di menu.

e0a3d2e03dd1076c.png

  1. Klik tombol biru kanan: Create Knowledge Base
  2. Ketik sebagai nama Pusat Informasi; Women in Voice dan tekan simpan.
  3. Klik link Buat yang pertama

9b2ca6b25c4100ab.pngS

  1. Tindakan ini akan membuka jendela.

Gunakan konfigurasi berikut:

Nama Dokumen: Lembar FAQ Perempuan dalam Suara

Jenis Pengetahuan: FAQ

Jenis Mime: CSV

  1. Kita akan memerlukan data dari sheet ini, pastikan sheet data dibuka, lalu pilih tab FAQ
  2. Pilih File > Unduh > CSV

e7f0066408fc1721.png

  1. Kembali ke Dialogflow, klik Upload File from Computer, lalu pilih file CSV yang telah didownload. Klik Buat

Basis informasi telah dibuat:

64513e2e484dda31.pngS

  1. Klik Tambahkan Respons

Buat jawaban berikut dan tekan simpan:

$Knowledge.Answer[1]

  1. Klik Lihat Detail

Tindakan ini akan menampilkan semua FAQ yang telah Anda terapkan di Dialogflow.

Ini mudah!

Perlu diketahui bahwa Anda juga dapat mengarahkan ke situs HTML online dengan FAQ untuk mengimpor FAQ ke agen Anda. Anda bahkan dapat mengupload PDF dengan blok teks, dan Dialogflow akan memunculkan pertanyaan itu sendiri.

  1. Klik Knowledge (beta) di menu Dialogflow untuk kembali ke semua konektor Knowledge base.
  2. Anda dapat mengubah kekuatan dan kelemahan Pusat Informasi. Hal ini masuk akal, jika Anda memiliki gagasan bahwa FAQ menang atau kalah dari niat Anda sendiri. Karena kita tidak memiliki banyak intent, mari kita membuat Basis Pengetahuan sedikit lebih kuat. Ubah skala menjadi -0,2. Setelah menarik penggeser, nilai akan otomatis disimpan.

Sekarang FAQ harus dilihat sebagai ‘tambahan' untuk ditambahkan ke agen, di sebelah alur intent Anda. FAQ Knowledge Base tidak dapat melatih model. Jadi, mengajukan pertanyaan dengan cara yang sama sekali berbeda mungkin tidak akan cocok karena tidak menggunakan Natural Language Understanding (model Machine Learning). Itulah sebabnya, terkadang ada baiknya mengonversi FAQ menjadi intent.

6. Pemenuhan Webhook

Membuat Google Cloud Function

  1. Buka http://console.cloud.google.com di tab browser lain.
  2. Pilih di menu kiri Cloud Functions
  3. Klik Create Function

bf2441ba1271a95e.png

  1. Tentukan konfigurasi berikut:
  • Nama: dialogflow
  • Memori yang dialokasikan: 256 MiB
  • Pemicu: HTTP
  • Salin URL ke papan klip.
  • Pilih Editor Inline
  • Runtime: NodeJS 8
  • Fungsi yang akan dijalankan: dialogflow
  1. Pastikan kotak centang autentikasi ini dicentang:

317140d44ec3299c.pngS

61ecb8f57a6fd21b.pngS

  1. Berikut ini konten untuk package.json. Salin dan tempel ini dalam tab package.json pada editor.

Potongan kode ini memuat library npm yang benar ke Google Cloud:

{
 "name": "dialogflow",
 "description": "Cloud Functions",
 "engines": {
   "node": "8"
 },
 "dependencies": {
   "request": "^2.85.0",
   "request-promise": "^4.2.5",
   "dialogflow-fulfillment": "^0.6.1",
   "actions-on-google": "^2.2.0",
   "googleapis": "^48.0.0",
   "moment": "^2.24.0"
 },
 "devDependencies": {
   "eslint": "^5.12.0",
   "eslint-plugin-promise": "^4.0.1",
   "ngrok": "^3.2.7"
 },
 "private": true
}
  1. Berikut adalah konten untuk index.js. Salin dan tempel ini di tab index.js editor.

Potongan kode ini akan terintegrasi dengan library googleapis untuk mengambil data dari Spreadsheet Google. Aplikasi ini menggunakan library actions-on-google untuk menampilkan kartu di perangkat Asisten Google. Library ini menggunakan dialogflow-fulfillment library untuk mengklasifikasikan intent Dialogflow. Aplikasi ini juga memanfaatkan momen library untuk menangani objek tanggal dan waktu.

/* jshint esversion: 8 */
'use strict';

process.env.DEBUG = 'dialogflow:debug';

const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';

const {
 BasicCard,
 Button,
} = require('actions-on-google');

const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;

const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';

/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
   // Should change this to file.only probably
   const auth = await google.auth.getClient({
       scopes: [SHEETS_SCOPE],
   });
   return google.sheets({version: 'v4', auth});
}

/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
   let datetime = moment(date, 'YYYY-MM-DD');
   return `${datetime.format('D MMMM')}`;
};


/* When the tipIntent Intent gets invoked.  */
function tipIntent(agent) {
 var par = agent.parameters.tech;
   var selection = [];
   //console.log(par);
   //console.log(books);
    for(var i = 0; i<books.length; i++){
     if(books[i][2].toLowerCase() == par.toLowerCase()) {
         selection.push(books[i]);
       }
   }
    var random = Math.floor(Math.random() * selection.length);
   var booktip = selection[random];
   //console.log(selection[random]);

   let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
   let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
   //console.log(booktip[8]);
    if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
       let conv = agent.conv();
       conv.ask(`<speak>${spokenText}</speak>`);
       conv.ask(new BasicCard({
           title: `Tip of the day!`,
           subtitle: `${par}`,
           text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
           buttons: new Button({
               title: 'Read',
               url: `${booktip[8]}`,
           })
       }));
       conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
       // Add Actions on Google library responses to your agent's response
       agent.add(conv);
   } else {
       agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
   }
}


function meetupIntent(agent) {
 let conv = agent.conv();
 let record;
  console.log(meetups);
  for(var i = 0; i<meetups.length; i++){
   let d = moment(meetups[i][0], 'YYYY-MM-DD');
   let today = moment(new Date());

   if(moment(d).isSameOrAfter(today)) {
     // the i event is not in the past
     record = meetups[i];
     console.log(record);
     break; 
   }
 }
  let date = getSpokenDate(record[0]);
 let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
 let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
 let spokenText3 = `You can register via our newsletter.`;
  let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;

 if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
   conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
   conv.ask(new BasicCard({
     title: `Meetup`,
     subtitle: `${record[2]}`,
     text: `${record[0]} ${record[1]} - ${record[3]}`,
     buttons: new Button({
       title: 'Register',
       url: `http://www.meetup.com`
     })
   }));
   conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
   agent.add(conv);
 } else {
   agent.add(`${writtenText} Is there anything else I can help you with?`);
 }
}

exports.dialogflow = async (request, response) => {
 var agent = new WebhookClient({ request, response });

 console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
 console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
  const client = await getSheetsClient();   
 const allBooks = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Books&Blogs!A:I',
 });
 const allEvents = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Meetups!A:D',
 });
  books = allBooks.data.values;
 meetups = allEvents.data.values;
 books.shift();
 meetups.shift();

 var intentMap = new Map();
 intentMap.set('Tip Intent', tipIntent);
 intentMap.set('Meetup Intent', meetupIntent);
 agent.handleRequest(intentMap);
};

b130ee596061832c.png

  1. Klik tautan Variabel lingkungan, jaringan, waktu tunggu, dan lainnya.

e81c29549f696937.png

  1. Pilih akun layanan Dialogflow Integrations.

(Secara default, akun ini menggunakan akun Layanan GAE App Engine, tetapi akun ini harus sama dengan akun yang dibagikan dalam Google Spreadsheet Anda, pada langkah pertama tutorial ini.)

61ecb8f57a6fd21b.pngS

  1. Sebelum kita men-deploy fungsi cloud. Kita akan mengubah satu baris dalam kode di tab index.js. Baris kode ke-3:

const ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';

Di salah satu langkah pertama, kami menulis kunci ini di Notepad. Jadi, salin dan tempel ID ini di kode Anda.

  1. Sekarang kita sudah siap. Klik tombol Buat. Proses ini memerlukan waktu beberapa saat karena perintah tersebut men-deploy fungsi serverless Anda.

Mengaktifkan fulfillment di Dialogflow

  1. Beralih kembali ke Dialogflow
  2. Klik Fulfillment di menu utama
  3. Aktifkan tombol Webhook.
  4. Masukkan URL fungsi cloud yang disalin ke papan klip.

Misalnya: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow

  1. Klik Simpan.

89dfd437c6689538.pngS

  1. Mari kita uji webhook, untuk melihat apakah kode berfungsi, dan uji flow secara langsung di simulator Dialogflow.

297e8f7ed1b9e801.pngS

7. Actions on Google

Actions on Google adalah platform pengembangan untuk Asisten Google. Layanan ini memungkinkan pengembangan "tindakan" pihak ketiga—applet untuk Asisten Google yang menyediakan fungsi tambahan.

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

Tindakan ini akan membuka tindakan Anda, mengubah suara, dan Anda akan keluar dari ‘native’ Cakupan Asisten Google. Artinya, semua yang Anda tanyakan kepada agen mulai saat ini harus Anda buat sendiri. Dalam tindakan Anda sendiri, Anda tidak dapat tiba-tiba meminta informasi cuaca Google ke Asisten Google, jika itu yang Anda inginkan; Anda harus meninggalkan (menutup) cakupan tindakan saat ini (aplikasi Anda) terlebih dahulu.

Menguji tindakan di simulator Asisten Google

Mari kita uji percakapan berikut:

Pengguna

Asisten Google

"Ok Google, bicara dengan aplikasi pengujian saya".

"Mendapatkan versi uji coba aplikasi saya.""

Pengguna

Nama-Anda-WIV

-

"Halo, saya Anna, agen virtual Women in Voice. Anda bisa menanyakan informasi tentang pertemuan, Women in Voice, atau tips membaca. Apa yang ingin Anda ketahui?"

Dapatkah saya memiliki tips untuk sebuah blog?

"Ingin membaca info selengkapnya tentang Chatbot, Voice, atau Keduanya?"

Chatbot

"Baiklah, inilah tips hari ini. Artikel Chatbots dan Tantangan Kemampuan Tak Terlihat Cobus Greyling.Mau buku atau tips artikel lainnya? Selain itu, saya bisa memberi tahu Anda lebih banyak tentang pertemuan atau apa yang kami lakukan. Ada yang bisa saya bantu?"

Kapan pertemuan berikutnya?

"Pertemuan berikutnya akan berlangsung pada 29 April pukul 18.00 di Hangout virtual. Topiknya adalah Workshop Online: Membuat Google Actions dengan Dialogflow!.Anda dapat mendaftar melalui newsletter kami.Ada hal lain yang bisa saya bantu?"

Apa URL situs Anda?

"Anda dapat menemukan kami di www.Womeninvoice.com. Apakah ada hal lain yang bisa saya lakukan untuk Anda?"

Tidak, terima kasih

"Baiklah. Semoga kita bisa bertemu di salah satu pertemuan kita!"

  1. Beralih kembali ke simulator Asisten Google

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

  1. Klik ikon mikrofon dan tanyakan hal berikut:

aa43d7f1568c4d80.png

  • Talk to my test app.
  1. Sekarang mari kita tanyakan:
  • Can I have a tip for a blog?

Ini akan menampilkan:

"Ingin membaca info selengkapnya tentang Chatbot, Voice, atau Keduanya?"

  • Chatbots

"Baiklah, inilah tips hari ini. Artikel Chatbots dan Tantangan Kemampuan Tidak Terlihat Cobus Greyling.

Ingin buku atau tips artikel lain? Selain itu, saya bisa memberi tahu Anda lebih banyak tentang pertemuan atau apa yang kami lakukan. Ada yang bisa saya bantu?"

  1. Mari kita coba versi lain dari pertanyaan yang sama:
  • "Yes, I want to read more about Voice"

"Baiklah, inilah tips hari ini. Buku Merancang Antarmuka Pengguna Suara: Prinsip Pengalaman Percakapan. ... dari Cathy Pearl.

Ingin buku atau tips artikel lain? Selain itu, saya bisa memberi tahu Anda lebih banyak tentang pertemuan atau apa yang kami lakukan. Ada yang bisa saya bantu?"

Perhatikan bahwa Anda belum pernah menggunakan frasa pelatihan ini di Dialogflow. Fitur ini cocok dengan intent yang tepat.

Selain itu, perhatikan bahwa Anda tidak mendapatkan pertanyaan lanjutan, karena Anda memberikan informasi yang cukup agar Dialogflow dapat dilanjutkan.

  1. Lanjutkan Dialogflow dengan frasa berikut:
  • What's the URL for your website
  • Bye

a0bd5578d6833c98.png

Error? Periksa log.

Setiap kali Anda menggunakan console.log() dalam kode Cloud Function, data akan ditulis ke log GCP (Stackdriver). Anda dapat mengakses log ini, dengan membuka Cloud Console > Logging.

Di dropdown pertama, Anda dapat memilih Cloud Function > dialogflow untuk memfilter log Anda.

8. Selamat

Bagus, Anda telah membuat tindakan Asisten Google pertama Anda dengan Dialogflow.

Seperti yang mungkin telah Anda ketahui, tindakan Anda sedang berjalan dalam mode pengujian yang dikaitkan 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 bisa menguji aksi Anda.

Ini adalah demo workshop. Namun, saat membuat aplikasi untuk Asisten Google secara nyata, 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 fulfillment webhook dengan Dialogflow dan Google Cloud Functions
  • Cara memasukkan aplikasi Anda ke Asisten Google dengan Actions on Google

Apa selanjutnya?

Suka dengan codelab ini? Lihatlah lab-lab hebat ini!