Callbacks

É possível implementar os seguintes callbacks na ação da tela interativa:

onUpdate()

O callback onUpdate() transmite dados do webhook ao seu app da Web para atualização o app da Web adequadamente. Use esse callback somente com o servidor modelo de fulfillment do desenvolvimento de tela interativa.

Para mais informações sobre onUpdate(), consulte Transmitir dados para atualizar o app da Web.

onTtsMark()

O callback onTtsMark() é chamado quando tags <mark> personalizadas incluídas na Linguagem de marcação de síntese de fala (SSML, na sigla em inglês) da sua resposta são lidas para o usuário durante a conversão de texto em voz (TTS). Você pode usar onTtsMark() no desenvolvimento de fulfillment do lado do servidor e do cliente de modelos de machine learning.

Nos snippets abaixo, o onTtsMark() sincroniza a animação do app da Web. com a saída TTS correspondente. Quando a ação disser ao usuário: "Desculpe, que você perdeu", o aplicativo da web soletra a palavra correta e exibe as letras para o usuário.

No exemplo a seguir, o gerenciador de webhook revealWord inclui um marca na resposta ao usuário quando ele perder o jogo:

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

Em seguida, o snippet de código a seguir registra o callback onTtsMark(), verifica a da marca e executa a função revealCorrectWord(), que atualiza app da 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()

O callback onInputStatusChanged() notifica quando o status da entrada muda. na ação de tela interativa. As mudanças de status de entrada indicam quando microfone abre e fecha ou quando o Google Assistente está processando uma consulta. A seguintes eventos podem causar a mudança do status da entrada:

  • O usuário falando com sua Ação
  • O usuário inserindo texto no app Pesquisa Google para Android (AGSA)
  • O app da Web usando a API sendTextQuery() para enviar uma consulta de texto à ação
  • A ação gravando no armazenamento do Google Home e outros eventos do Google Assistente

O principal caso de uso desse callback é sincronizar a ação com o as interações por voz do usuário. Por exemplo, se um usuário estiver jogando um jogo Jogo do Canvas e abre o microfone, você pode pausar o jogo enquanto o usuário fala. Também é possível aguardar até que o microfone esteja aberto para enviar uma consulta de texto para ao Google Assistente para garantir o recebimento.

Essa API informa os seguintes status:

  • LISTENING: indica que o microfone está aberto.
  • IDLE: indica que o microfone está fechado.
  • PROCESSING: indica que o Google Assistente está executando uma consulta no momento. o microfone está fechado.

A API informa o status da entrada para a ação sempre que o status muda.

Embora qualquer transição entre estados seja possível, os seguintes fluxos são comuns:

  • IDLE>LISTENING>PROCESSING>IDLE: o usuário faz uma consulta, a consulta é processada e o microfone é fechado.
  • IDLE>PROCESSING>IDLE: o app da Web usa a API sendTextQuery(). para enviar uma consulta de texto à ação.
  • IDLE>LISTENING>IDLE: o usuário abre o microfone, mas não dizer uma consulta.

Para usar esse recurso na ação, adicione onInputStatusChanged() ao app da Web conforme mostrado no snippet a seguir:

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

O callback onInputStatusChanged() transmite de volta um único parâmetro de tipo enumerado. inputStatus. Verifique esse valor para saber o status atual da entrada. A inputStatus pode ser LISTENING, PROCESSING ou IDLE.

Em seguida, adicione onInputStatusChanged() ao objeto callbacks para registrá-lo, conforme como mostrado no seguinte 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);
 }
}