Anda menentukan percakapan untuk Action Anda dengan fulfillment, yang merupakan kode yang di-deploy sebagai webhook yang berisi logika percakapan agen Dialogflow Anda. Fulfillment memberi tahu Action Anda apa yang harus dilakukan saat pengguna membuat permintaan.
Untuk Canvas Interaktif, fulfillment Anda juga mengomunikasikan informasi tentang
aplikasi web Anda ke Asisten. Anda dapat menggunakan HtmlResponse
untuk memberi tahu Asisten untuk
merender aplikasi web Anda. HtmlResponse
juga dapat memberikan update untuk data
, yang
digunakan logika kustom aplikasi web untuk membuat perubahan pada aplikasi web Anda.
Halaman ini membahas cara menggunakan HtmlResponse
dalam fulfillment dan panduan
umum Anda untuk menggunakan jenis respons ini.
Respons HTML
Untuk menyampaikan informasi tentang aplikasi web ke Asisten, Anda harus menyertakan
HtmlResponse
dalam fulfillment khusus intent. HtmlResponse
dapat berisi URL
aplikasi web dan data yang memperbarui aplikasi web. Saat Anda mengirim
HtmlResponse
, langkah-langkah berikut akan terjadi:
- Fulfillment intent yang cocok akan mengirimkan
HtmlResponse
ke perangkat. - Perangkat menggunakan URL di
HtmlResponse
untuk memuat aplikasi web. - Payload JSON
data
diteruskan ke aplikasi web dalam callback. Action percakapan Anda mengirimkan
HtmlResponse
baru untuk mengirim pembaruan atau memuat status baru.
Contoh fulfillment
Kutipan berikut dari kode fulfillment contoh
menunjukkan cara menerapkan HtmlResponse
:
const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');
const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
// map of human speakable colors to color values
const tints = {
red: 0xFF0000,
green: 0x00FF00,
blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
if (color in tints) {
conv.ask(`Ok, I changed my color to ${color}. What else?`);
conv.ask(new HtmlResponse({
data: {
tint: tints[color],
},
}));
return;
}
conv.ask(`Sorry, I don't know that color. What else?`);
conv.ask(new HtmlResponse({
data: {
query: conv.query,
},
}));
});
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
app.intent('pause', (conv) => {
conv.ask(`Ok, I paused spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: false,
},
}));
});
app.intent('restart game', (conv) => {
conv.ask(new HtmlResponse({
data: {
command: 'RESTART_GAME',
},
}));
});
exports.conversation = functions.https.onRequest(app);
welcome
intent
Dalam cuplikan di atas, fulfillment untuk intent welcome
mengirimkan
HtmlResponse
dengan URL untuk aplikasi web. Asisten menerima ini
dan memuat HTML dan JavaScript di alamat tersebut.
...
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
...
Intent lainnya
HtmlResponse
dalam fulfillment untuk intent lain meneruskan nilai variabel
(tint
atau spin
dalam contoh) ke aplikasi web. Logika kustom untuk aplikasi web
menggunakan nilai ini untuk memperbarui elemen (animasi, warna, dll):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Panduan dan pembatasan
Perhatikan panduan dan batasan berikut untuk HtmlResponse
saat membuat fulfillment Anda:
- Setiap intent dalam fulfillment Anda harus menyertakan
HtmlResponse
. Jika intent tidak menyertakanHtmlResponse
, aplikasi web Anda akan ditutup. - Anda hanya perlu menyertakan URL aplikasi web dalam intent pertama yang Anda kirim kepada
pengguna (biasanya ini adalah intent
Welcome
). HtmlResponse
harus berukuran 50 kb atau lebih kecil.