מילוי הבקשה מגדיר את ממשק השיחה בפרויקט הפעולות שלכם כדי לקבל משוב מהמשתמשים ואת הלוגיקה לעיבוד הקלט ובסופו של דבר לביצוע הפעולה.
סקירה כללית
בזמן מילוי הבקשה, מתקבלות בקשות מ-Assistant, מעבדות את הבקשה ומגיבה. בקשת ההלוך ותהליך התגובה האלה מניעים את השיחה עד שבסופו של דבר תמלאו את הבקשה הראשונית של המשתמש.
בשלבים הבאים מוסבר איך ליצור מילוי הזמנות באמצעות Actions SDK עם Node.js או עם ספריית הלקוח Java/Kotlin:
- מפעילים את האובייקט ActionsSdkApp.
- יוצרים פונקציות לטיפול בבקשות בלוגיקה של מילוי ההזמנות.
מבנה תיבות דו-שיח
אתחול האובייקט ActionsSdkApp
הקוד הבא יוצר תצוגה של ActionsSdkApp
ומבצע הגדרה של Node.js בפורמט סטנדרטי עבור Google Cloud Functions:
'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);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
יצירת פונקציות לטיפול בבקשות
כשמשתמשים אומרים ביטוי, מקבלים בקשה מ-Google Assistant. כדי למלא את הכוונות שמופיעות בבקשות, עליכם ליצור פונקציות שמטפלות ב-Intent המופעל.
כדי לטפל בבקשות:
להוציא לפועל את כל הלוגיקה הנדרשת לעיבוד הקלט של המשתמש.
מפעילים את הפונקציה
conv.ask()
שמעבירה את התשובה שרוצים להציג כארגומנט.
הקוד הבא מראה איך לבנות תשובה פשוטה:
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "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.
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@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
, בדרך כלל אין צורך
לעבד קלט של משתמשים. אם חבילת הפעולות כוללת פעולות רבות ומכסה תרחישים רבים לדוגמה, כדאי להסביר למשתמשים מה הם יכולים לעשות כדי להתמצא.
- קוראים לפונקציה
conv.ask()
שמעבירה את התשובה שלכם כארגומנט. Google Assistant מקריאה את התשובה שלכם למשתמש, ואז מחכה שהמשתמש יפעיל את אחת מכוונות ה-Intent שציינתם.
קטע הקוד הבא מראה איך לטפל בכוונת הצטרפות פשוטה:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
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
ולקרוא ממנו. השדה הזה מועבר באופן אוטומטי בין בקשות ותשובות.
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");