Callback

Puoi implementare i seguenti callback nell'azione Interactive Canvas:

onUpdate()

Il onUpdate()callback trasmette i dati dal webhook all'app web per aggiornarli in modo appropriato per l'app web. Devi utilizzare questo callback solo con il lato server di completamento dello sviluppo di Interactive Canvas.

Per ulteriori informazioni su onUpdate(), vedi Trasmetti i dati per aggiornare l'app web.

onTtsMark()

Il callback onTtsMark() viene chiamato quando i tag <mark> personalizzati inclusi nella Speech Synthesis Markup Language (SSML) della tua risposta viene letta all'utente durante la sintesi vocale (TTS). Puoi utilizza onTtsMark() nello sviluppo del fulfillment lato server e lato client di grandi dimensioni.

Negli snippet seguenti, onTtsMark() sincronizza l'animazione dell'app web con l'output della sintesi vocale corrispondente. Quando l'azione dice all'utente "Spiacenti, che hai perso" l'app web si scrive la parola corretta e mostra le lettere per l'utente.

Nell'esempio seguente, il gestore webhook revealWord include una richiesta contrassegna l'utente nella risposta quando ha perso il gioco:

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

Il seguente snippet di codice registra quindi il callback onTtsMark(), controlla la nome del marchio ed esegue la funzione revealCorrectWord(), che si aggiorna nell'app web:

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

Il callback onInputStatusChanged() ti avvisa quando lo stato dell'ingresso cambia nell'azione Canvas interattiva. Le modifiche dello stato dell'input indicano quando il microfono si apre e si chiude o quando l'assistente elabora una query. La i seguenti eventi possono causare la modifica dello stato dell'input:

  • L'utente che parla all'azione
  • L'utente che inserisce il testo nell'app Ricerca Google per Android
  • L'app web che utilizza l'API sendTextQuery() per inviare una query di testo all'azione
  • L'azione scrive nello spazio di archiviazione di casa e in altri eventi dell'assistente

Il caso d'uso principale per questo callback è la sincronizzazione dell'azione con le interazioni vocali dell'utente. Ad esempio, se un utente sta riproducendo un video Canvas gioco e apre il microfono; puoi mettere in pausa il gioco mentre l'utente parla. Puoi anche attendere che il microfono sia aperto per inviare una query di testo a l'assistente per assicurarsi che lo riceva.

Questa API segnala i seguenti stati:

  • LISTENING: indica che il microfono è aperto.
  • IDLE. Indica che il microfono è chiuso.
  • PROCESSING: indica che l'assistente sta attualmente eseguendo una query e il microfono sia chiuso.

L'API segnala lo stato dell'input all'azione ogni volta che lo stato cambia.

Sebbene sia possibile qualsiasi transizione tra stati, i seguenti flussi sono comuni:

  • IDLE>LISTENING>PROCESSING>IDLE - L'utente dice che una query, viene elaborata la query e il microfono si chiude.
  • IDLE>PROCESSING>IDLE: l'app web utilizza l'API sendTextQuery() per inviare una query di testo all'azione.
  • IDLE>LISTENING>IDLE: l'utente apre il microfono ma non lo apre pronuncia una query.

Per usare questa funzionalità nell'azione, aggiungi onInputStatusChanged() alla tua app web come mostrato nello snippet seguente:

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

Il callback onInputStatusChanged() restituisce un singolo parametro enum, inputStatus. Puoi controllare questo valore per visualizzare lo stato dell'input corrente. La inputStatus può essere LISTENING, PROCESSING o IDLE.

Poi, aggiungi onInputStatusChanged() all'oggetto callbacks per registrarlo, come mostrato nel seguente snippet:

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