אתם מגדירים את השיחה בפעולה באמצעות מילוי הזמנה, שהוא קוד שנפרס כ-webhook שמכיל את לוגיקת השיחה של הנציג שלכם ב-Dialogflow. מילוי הבקשה מציין מה לעשות כשמשתמשים שולחים בקשות.
אם משתמשים בלוח הציור האינטראקטיבי, מילוי הבקשה מעביר ל-Assistant גם מידע על אפליקציית האינטרנט שלכם. אפשר להשתמש ב-HtmlResponse
כדי להורות ל-Assistant לעבד את אפליקציית האינטרנט. HtmlResponse
יכול גם לספק עדכונים ל-data
, שהלוגיקה המותאמת אישית של אפליקציית האינטרנט משתמשת בו כדי לבצע שינויים באפליקציית האינטרנט.
בדף הזה מוסבר איך להשתמש ב-HtmlResponse
למילוי הבקשה, ובהנחיות כלליות לשימוש בסוג התשובה הזה.
תגובות HTML
כדי להעביר מידע על אפליקציית האינטרנט שלכם ל-Assistant, עליכם לכלול HtmlResponse
במילוי הבקשה הספציפי ל-Intent. השדה HtmlResponse
יכול להכיל את כתובת ה-URL של אפליקציית האינטרנט ונתונים שמעדכנים את אפליקציית האינטרנט. כששולחים HtmlResponse
, מתרחשים השלבים הבאים:
- מילוי הבקשה של Intent התואם שולח
HtmlResponse
למכשיר. - המכשיר משתמש בכתובת ה-URL שב
HtmlResponse
כדי לטעון את אפליקציית האינטרנט. - המטען הייעודי (payload) בפורמט JSON של
data
מועבר לאפליקציית האינטרנט בקריאה חוזרת. הפעולה בשיחה שולחת
HtmlResponse
חדש כדי לשלוח עדכונים או כדי לטעון מצבים חדשים.
מילוי הזמנה לדוגמה
בקטע הבא מתוך קוד מילוי ההזמנה לדוגמה
מוצג איך להטמיע את 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
בקטע הקוד שלמעלה, מילוי הבקשה ל-Intent welcome
שולח HtmlResponse
עם כתובת ה-URL של אפליקציית האינטרנט. Assistant מקבלת את הקוד וטוענת את ה-HTML וה-JavaScript בכתובת הזו.
...
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',
}));
});
...
כוונות אחרות
הפונקציה HtmlResponse
במילוי הבקשה לאובייקטים אחרים של Intent מעבירה ערכי משתנים (tint
או spin
במדגם) לאפליקציית האינטרנט. הערכים האלה משמשים את הלוגיקה המותאמת אישית של אפליקציית האינטרנט כדי לעדכן רכיבים (אנימציות, צבע וכו'):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
הנחיות והגבלות
כשאתם בונים מילוי הזמנות, חשוב לזכור את ההנחיות וההגבלות הבאות לגבי הדומיין HtmlResponse
:
- כל Intent במילוי הבקשה חייב לכלול
HtmlResponse
. אם אובייקט ה-Intent לא כוללHtmlResponse
, אפליקציית האינטרנט נסגרת. - צריך לכלול את כתובת ה-URL של אפליקציית האינטרנט רק ב-Intent הראשון ששולחים למשתמש (בדרך כלל זוהי ה-Intent
Welcome
). - הגודל של
HtmlResponse
צריך להיות 50kb או פחות.