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

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

סקירה כללית

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

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

  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 כדי להקצות handlers ל-Intent.

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();
}

מצב השיחה

אם אתם משתמשים בשיחה מסוג 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");