Anda menentukan percakapan untuk Action dengan fulfillment, yakni kode yang di-deploy sebagai webhook yang berisi alamat web agen Dialogflow Anda logika percakapan. Fulfillment memberi tahu Action Anda apa yang harus dilakukan saat pengguna melakukan permintaan.
Untuk Canvas Interaktif, fulfillment Anda juga menyampaikan informasi tentang
aplikasi web Anda ke Asisten. Anda dapat menggunakan HtmlResponse untuk memberi tahu Asisten agar
merender aplikasi web Anda. HtmlResponse juga dapat memberikan update untuk data, yang
logika khusus aplikasi web Anda untuk
membuat perubahan pada aplikasi web Anda.
Halaman ini membahas cara menggunakan HtmlResponse dalam fulfillment Anda dan
pedoman untuk menggunakan jenis respons ini.
Respons HTML
Untuk menyampaikan informasi tentang aplikasi web ke Asisten, Anda harus menyertakan
HtmlResponse
dalam fulfillment khusus intent Anda. 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
HtmlResponseke perangkat. - Perangkat menggunakan URL di
HtmlResponseuntuk memuat aplikasi web. - Payload JSON
dataditeruskan ke aplikasi web dalam callback. Action percakapan Anda mengirimkan
HtmlResponsebaru untuk mengirim pembaruan atau memuat status baru.
Contoh fulfillment
Kutipan berikut dari contoh
kode fulfillment 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 akan menerima informasi 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 akan meneruskan nilai variabel
(tint atau spin dalam contoh) ke aplikasi web. Logika kustom untuk 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 membangun 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 di intent pertama yang Anda kirim
pengguna (biasanya ini adalah intent
Welcome). HtmlResponseharus berukuran 50 KB atau lebih kecil.