יצירת פעולות בשיחות (Dialogflow)

אתם מגדירים את השיחה בפעולה באמצעות מילוי הזמנה, שהוא קוד שנפרס כ-webhook שמכיל את לוגיקת השיחה של הנציג שלכם ב-Dialogflow. מילוי הבקשה מציין מה לעשות כשמשתמשים שולחים בקשות.

אם משתמשים בלוח הציור האינטראקטיבי, מילוי הבקשה מעביר ל-Assistant גם מידע על אפליקציית האינטרנט שלכם. אפשר להשתמש ב-HtmlResponse כדי להורות ל-Assistant לעבד את אפליקציית האינטרנט. HtmlResponse יכול גם לספק עדכונים ל-data, שהלוגיקה המותאמת אישית של אפליקציית האינטרנט משתמשת בו כדי לבצע שינויים באפליקציית האינטרנט.

בדף הזה מוסבר איך להשתמש ב-HtmlResponse למילוי הבקשה, ובהנחיות כלליות לשימוש בסוג התשובה הזה.

תגובות HTML

כדי להעביר מידע על אפליקציית האינטרנט שלכם ל-Assistant, עליכם לכלול HtmlResponse במילוי הבקשה הספציפי ל-Intent. השדה HtmlResponse יכול להכיל את כתובת ה-URL של אפליקציית האינטרנט ונתונים שמעדכנים את אפליקציית האינטרנט. כששולחים HtmlResponse, מתרחשים השלבים הבאים:

  1. מילוי הבקשה של Intent התואם שולח HtmlResponse למכשיר.
  2. המכשיר משתמש בכתובת ה-URL שבHtmlResponse כדי לטעון את אפליקציית האינטרנט.
  3. המטען הייעודי (payload) בפורמט JSON של data מועבר לאפליקציית האינטרנט בקריאה חוזרת.
  4. הפעולה בשיחה שולחת 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 או פחות.