Callback

Puoi implementare i seguenti callback in Interactive Canvas Action:

onUpdate()

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

Per maggiori informazioni su onUpdate(), consulta Trasmettere dati per aggiornare l'app web.

onTtsMark()

Il callback onTtsMark() viene chiamato quando i tag <mark> personalizzati inclusi nel linguaggio SSML (Speech Synthesis Markup Language) della risposta vengono letti all'utente durante la sintesi vocale (TTS). Puoi utilizzare onTtsMark() in entrambi i modelli di sviluppo del fulfillment lato server e lato client.

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

Nell'esempio seguente, il gestore di webhook revealWord include un contrassegno personalizzato nella risposta all'utente quando ha perso la partita:

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

Lo snippet di codice riportato di seguito registra quindi il callback onTtsMark(), controlla il nome del marchio ed esegue la funzione revealCorrectWord(), che aggiorna l'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'input cambia in Interactive Canvas Action. Le modifiche dello stato dell'input indicano quando il microfono si apre e si chiude o quando l'assistente sta elaborando una query. 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 (AGSA)
  • L'app web che utilizza l'API sendTextQuery() per inviare una query di testo all'azione
  • L'Azione scrive nello spazio di archiviazione di Google Home 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 l'utente sta riproducendo un gioco interattivo di Canvas e apre il microfono, puoi mettere in pausa il gioco mentre l'utente parla. Puoi anche attendere che il microfono sia attivo per inviare una query di testo all'assistente e assicurarti che la riceva.

Questa API segnala i seguenti stati:

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

L'API segnala lo stato di input all'Azione ogni volta che lo stato cambia.

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

  • IDLE>LISTENING>PROCESSING>IDLE: l'utente pronuncia una query, la query viene elaborata 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 fa una query.

Per utilizzare questa funzionalità nell'Azione, aggiungi onInputStatusChanged() al codice dell'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 di input attuale. inputStatus può essere LISTENING, PROCESSING o IDLE.

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

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