יצירת מילוי בקשה (Dialogflow)

מילוי הבקשה מגדיר את ממשק השיחה בפרויקט הפעולות שלכם כדי לקבל משוב מהמשתמשים ואת הלוגיקה לעיבוד הקלט ובסופו של דבר לביצוע הפעולה.

סקירה כללית

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

בשלבים הבאים מוסבר איך ליצור מילוי הזמנות באמצעות Actions SDK עם Node.js או עם ספריית הלקוח Java/Kotlin:

  1. מפעילים את האובייקט ActionsSdkApp.
  2. יוצרים פונקציות לטיפול בבקשות בלוגיקה של מילוי ההזמנות.

מבנה תיבות דו-שיח

אתחול האובייקט ActionsSdkApp

הקוד הבא יוצר תצוגה של ActionsSdkApp ומבצע הגדרה של Node.js בפורמט סטנדרטי עבור Google Cloud Functions:

Actions SDK (Node.js)
'use strict';

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');

const app = actionssdk({debug: true});

app.intent('actions.intent.MAIN', (conv) => {
  conv.ask('Hi!');
});

// More intent handling if needed
exports.myFunction = functions.https.onRequest(app);
Actions SDK (Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

יצירת פונקציות לטיפול בבקשות

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

כדי לטפל בבקשות:

  1. להוציא לפועל את כל הלוגיקה הנדרשת לעיבוד הקלט של המשתמש.

  2. מפעילים את הפונקציה conv.ask() שמעבירה את התשובה שרוצים להציג כארגומנט.

הקוד הבא מראה איך לבנות תשובה פשוטה:

Actions SDK (Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
Actions SDK (Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi! Say something, and I'll repeat it."
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

טיפול בכוונות

אחרי שכל הפונקציות מטפלות במנגנוני Intent שמופעלים, יש להשתמש ב-app.intent כדי להקצות גורמי handler ל-Intents.

Actions SDK (Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
Actions SDK (Java)
@ForIntent("actions.intent.MAIN")
public ActionResponse main(ActionRequest request) {
  // handle main intent
  // ...
}

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  // handle text intent
  // ...
}

השיחה מסתיימת

אם לא רוצים לקבל הודעות נוספות ממשתמשים ורוצים לסיים את השיחה, אפשר לקרוא לפונקציה conv.close(). הפונקציה הזו מורה ל-Google Assistant לומר למשתמש את הטקסט ולסיים את השיחה על ידי סגירת המיקרופון.

טיפול בכוונת ההפעלה העיקרית

כשמשתמשים מפעילים את Intent app.intent.action.MAIN, בדרך כלל אין צורך לעבד קלט של משתמשים. אם חבילת הפעולות כוללת פעולות רבות ומכסה תרחישים רבים לדוגמה, כדאי להסביר למשתמשים מה הם יכולים לעשות כדי להתמצא.

  1. קוראים לפונקציה conv.ask() שמעבירה את התשובה שלכם כארגומנט. Google Assistant מקריאה את התשובה שלכם למשתמש, ואז מחכה שהמשתמש יפעיל את אחת מכוונות ה-Intent שציינתם.

קטע הקוד הבא מראה איך לטפל בכוונת הצטרפות פשוטה:

Actions SDK (Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
Actions SDK (Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

מצב השיחה

אם אתם משתמשים ב-Call HTTP/JSON webhook API, אתם יכולים לשמור על המצב של השיחות באמצעות אובייקט בפורמט JSON (conversationToken) שעובר הלוך ושוב ביניכם לבין Google Assistant. אם אתם משתמשים בספריית הלקוח של Node.js, אתם יכולים לכתוב ישירות בשדה conv.data ולקרוא ממנו. השדה הזה מועבר באופן אוטומטי בין בקשות ותשובות.

Actions SDK (Node.js)
conv.data = {something: 10};
let value = conv.data.something;
Actions SDK (Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");