התקשרות חזרה

ניתן ליישם את הקריאות החוזרות הבאות בפעולת לוח הציור האינטראקטיבית:

onUpdate()

onUpdate()הקריאה החוזרת (callback) מעבירה נתונים מהתגובה לפעולה מאתר אחר (webhook) לאפליקציית האינטרנט כדי לעדכן את אפליקציית האינטרנט בהתאם. יש להשתמש בקריאה החוזרת הזו רק בצד השרת של פיתוח אינטראקטיבי (Interactive Canvas).

מידע נוסף על onUpdate() זמין במאמר מעבירים נתונים כדי לעדכן את אפליקציית האינטרנט.

onTtsMark()

הקריאה החוזרת (callback) של onTtsMark() מתבצעת כאשר תגי <mark> מותאמים אישית כלולים ב- שפת סימון של סינתזת דיבור (SSML) של התשובה שלך, יוקראו למשתמש במהלך המרת טקסט לדיבור (TTS). אפשר להשתמש ב-onTtsMark() בפיתוח מילוי ההזמנות בצד השרת ובצד הלקוח למשימות ספציפיות.

בקטעי הקוד הבאים, onTtsMark() מסנכרן את האנימציה של אפליקציית האינטרנט בפלט ה-TTS התואם. כשהפעולה נאמרת למשתמש, "מצטערים, הפסדת," שאפליקציית האינטרנט מאייתת את המילה הנכונה ומציגה את האותיות למשתמש.

בדוגמה הבאה, ה-handler של התגובה לפעולה מאתר אחר (webhook) revealWord כולל לסמן בתשובה למשתמש שהפסיד:

JavaScript

…
app.handle('revealWord', conv => {
  conv.add(new Simple(`<speak>Sorry, you lost.<mark name="REVEAL_WORD"/> The word is ${conv.session.params.word}.</speak>`));
  conv.add(new Canvas());
});
…
    

קטע הקוד הבא רושם את הקריאה החוזרת של onTtsMark(), ובודק את שם הסימן ומפעיל את הפונקציה revealCorrectWord(), שמעדכנת אפליקציית האינטרנט:

JavaScript

…
setCallbacks() {
    // declare Assistant Canvas Action callbacks
    const callbacks = {
        onTtsMark(markName) {
            if (markName === 'REVEAL_WORD') {
                // display the correct word to the user
                that.revealCorrectWord();
            }
        },
    }
    callbacks.onUpdate.bind(this);
}
…
    

onInputStatusChanged()

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

  • המשתמש שמדבר אל הפעולה שלכם
  • המשתמש שמזינים טקסט באפליקציית חיפוש Google ל-Android (AGSA)
  • אפליקציית האינטרנט שמשתמשת ב-API sendTextQuery() כדי לשלוח שאילתת טקסט לפעולה
  • הכתיבה של הפעולה לאחסון בבית ולאירועים אחרים ב-Assistant

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

ה-API הזה מדווח על הסטטוסים הבאים:

  • LISTENING – מציין שהמיקרופון פתוח.
  • IDLE – מציין שהמיקרופון סגור.
  • PROCESSING – מציין ש-Assistant מבצעת שאילתה כרגע, וגם המיקרופון סגור.

ה-API מדווח על סטטוס הקלט לפעולה בכל פעם שהסטטוס משתנה.

כל מעבר בין מדינות הוא אפשרי, אבל התהליכים הבאים הם נפוצים:

  • IDLE>LISTENING>PROCESSING>IDLE – המשתמש אומר שאילתה, המערכת מעבדת את השאילתה, והמיקרופון נסגר.
  • IDLE>PROCESSING>IDLE – אפליקציית האינטרנט משתמשת ב-API של sendTextQuery() כדי לשלוח שאילתת טקסט לפעולה.
  • IDLE>LISTENING>IDLE – המשתמש פותח את המיקרופון אבל לא אומרים שאילתה.

כדי להשתמש בתכונה הזו בפעולה, צריך להוסיף את onInputStatusChanged() לאפליקציית האינטרנט כפי שמוצג בקטע הקוד הבא:

onInputStatusChanged(inputStatus) {
   console.log("The new input status is: ", inputStatus);
}

הקריאה החוזרת (callback) של onInputStatusChanged() מחזירה פרמטר enum יחיד, inputStatus. אפשר לבדוק את הערך הזה כדי לראות את סטטוס הקלט הנוכחי. inputStatus יכול להיות LISTENING, PROCESSING או IDLE.

בשלב הבא צריך להוסיף את onInputStatusChanged() לאובייקט callbacks כדי לרשום אותו, כפי שמוצגת בקטע הקוד הבא:

 /**
  * Register all callbacks used by the Interactive Canvas Action
  * executed during game creation time.
  */
 setCallbacks() {
   const that = this;
   // Declare the Interactive Canvas action callbacks.
   const callbacks = {
     onUpdate(data) {
       console.log('Received data', data);
     },
     onInputStatusChanged(inputStatus) {
       console.log("The new input status is: ", inputStatus);
     },
   };
   // Called by the Interactive Canvas web app once web app has loaded to
   // register callbacks.
   this.canvas.ready(callbacks);
 }
}