Callbacks

Sie können die folgenden Callbacks in Ihrer interaktiven Canvas-Aktion implementieren:

onUpdate()

Der onUpdate()-Callback übergibt Daten vom Webhook an die Web-App, um sie zu aktualisieren Web-App entsprechend anpassen. Sie sollten diesen Callback nur bei der serverseitigen Ausführungsmodell der Interactive Canvas-Entwicklung.

Weitere Informationen zu onUpdate() finden Sie unter Daten übergeben, um die Web-App zu aktualisieren

onTtsMark()

Der onTtsMark()-Callback wird aufgerufen, wenn benutzerdefinierte <mark>-Tags im Speech Synthesis Markup Language (SSML) Ihrer Antwort werden dem Nutzer während der Sprachausgabe vorgelesen. Sie können onTtsMark() sowohl bei der Entwicklung der serverseitigen als auch der clientseitigen Auftragsausführung verwenden Modelle.

In den folgenden Snippets synchronisiert onTtsMark() die Animation der Web-App mit der entsprechenden Text-in-Sprache-Ausgabe. Wenn die Aktion zum Nutzer sagt: die Sie verloren haben.“ buchstabiert die Web-App das richtige Wort und zeigt die Buchstaben an, Nutzenden.

Im folgenden Beispiel enthält der Webhook-Handler revealWord einen benutzerdefinierten in der Antwort an den Nutzer, wenn er das Spiel verloren hat:

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

Das folgende Code-Snippet registriert dann den onTtsMark()-Callback und prüft die der Marke und führt die Funktion revealCorrectWord() aus, die der Webanwendung:

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

Der onInputStatusChanged()-Callback benachrichtigt dich, wenn sich der Eingabestatus ändert. in Ihrer Interactive Canvas Action. Änderungen des Eingabestatus zeigen an, Das Mikrofon wird geöffnet und geschlossen oder wenn Assistant eine Anfrage verarbeitet. Die folgende Ereignisse können dazu führen, dass sich der Eingabestatus ändert:

  • Der Nutzer, der mit deiner Aktion spricht
  • Der Nutzer, der Text in die Google Suche App (AGSA) für Android eingibt
  • Die Webanwendung, die die sendTextQuery() API zum Senden einer Textanfrage an die Aktion verwendet
  • Die Aktion schreibt in den Speicher des Zuhauses und andere Assistant-Ereignisse

Der primäre Anwendungsfall für diesen Callback ist die Synchronisierung deiner Aktion mit der Sprachinteraktionen der Nutzenden. Spielt ein Nutzer beispielsweise ein interaktives Canvas-Spiel und öffnet das Mikrofon. Sie können das Spiel anhalten, während der Nutzer spricht. Sie können auch warten, bis das Mikrofon eingeschaltet ist, bevor Sie eine Textanfrage an um zu prüfen, ob sie empfangen wurde.

Diese API meldet die folgenden Status:

  • LISTENING: Das Mikrofon ist eingeschaltet.
  • IDLE: Das Mikrofon ist geschlossen.
  • PROCESSING: Gibt an, dass Assistant gerade eine Anfrage ausführt, und wenn das Mikrofon geschlossen ist.

Die API meldet den Eingabestatus jedes Mal an deine Aktion, wenn sich der Status ändert.

Obwohl jeder Übergang zwischen Zuständen möglich ist, sind die folgenden Abläufe üblich:

  • IDLE>LISTENING>PROCESSING>IDLE: Der Nutzer stellt eine Anfrage, mit der wird verarbeitet und das Mikrofon wird ausgeschaltet.
  • IDLE > PROCESSING > IDLE – Die Web-App verwendet die sendTextQuery() API um eine Textanfrage an die Aktion zu senden.
  • IDLE > LISTENING > IDLE: Der Nutzer öffnet das Mikrofon, schließt aber nicht etwa eine Suchanfrage.

Um diese Funktion in deiner Aktion zu verwenden, füge onInputStatusChanged() deiner Web-App hinzu wie im folgenden Snippet gezeigt:

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

Der onInputStatusChanged()-Callback gibt einen einzelnen enum-Parameter zurück. inputStatus. Sie können diesen Wert überprüfen, um den aktuellen Eingabestatus zu sehen. Die inputStatus kann LISTENING, PROCESSING oder IDLE sein.

Fügen Sie als Nächstes onInputStatusChanged() zum Objekt callbacks hinzu, um es zu registrieren: wie im folgenden Snippet dargestellt:

 /**
  * 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);
 }
}