É possível implementar os seguintes callbacks na ação de tela interativa:
onUpdate()
O callback onUpdate()
transmite dados do webhook para seu app da Web para atualizar
o app da Web adequadamente. Use esse callback apenas com o modelo de fulfillment do lado do servidor de 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 as 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, na sigla em inglês). É possível
usar onTtsMark()
nos modelos de desenvolvimento de fulfillment do lado do servidor e do
cliente.
Nos snippets abaixo, onTtsMark()
sincroniza a animação do app da Web
com a saída de TTS correspondente. Quando a ação disser ao usuário "Desculpe,
você perdeu", o app da Web soletra a palavra correta e mostra as letras para
o usuário.
No exemplo a seguir, o gerenciador de webhook revealWord
inclui uma marca
personalizada na resposta para o usuário ter perdido 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()); }); …
O snippet de código a seguir registra o callback onTtsMark()
, verifica o
nome da marca e executa a função revealCorrectWord()
, que atualiza
o 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 você quando o status de entrada muda
na ação de tela interativa. As mudanças no status de entrada indicam quando o
microfone abre e fecha ou quando o Google Assistente está processando uma consulta. Os
eventos a seguir podem fazer com que o status de entrada mude:
- O usuário que está falando com sua Ação
- Usuário digitando um texto no app Pesquisa Google para Android (AGSA, na sigla em inglês)
- O app da Web usando a API
sendTextQuery()
para enviar uma consulta de texto para a ação - Gravação de ações no armazenamento do Google Home e em outros eventos do Google Assistente
O principal caso de uso desse callback é sincronizar sua ação com as interações por voz do usuário. Por exemplo, se um usuário estiver jogando um jogo de tela interativa e abrir o microfone, você poderá pausar o jogo enquanto ele fala. Você também pode aguardar até que o microfone esteja aberto para enviar uma consulta de texto ao Google Assistente e garantir que ela seja recebida.
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 e o microfone está fechado.
A API informa o status de entrada para sua ação sempre que o status é alterado.
Embora qualquer transição entre estados seja possível, os seguintes fluxos são comuns:
IDLE
>LISTENING
>PROCESSING
>IDLE
: o usuário diz uma consulta, a consulta é processada e o microfone é fechado.IDLE
>PROCESSING
>IDLE
: o app da Web usa a APIsendTextQuery()
para enviar uma consulta de texto para a ação.IDLE
>LISTENING
>IDLE
: o usuário abre o microfone, mas não diz uma consulta.
Para usar esse recurso na sua Ação, adicione onInputStatusChanged()
ao código do seu app
da Web, conforme mostrado no snippet abaixo:
onInputStatusChanged(inputStatus) {
console.log("The new input status is: ", inputStatus);
}
O callback onInputStatusChanged()
transmite um único parâmetro de tipo enumerado,
inputStatus
. Você pode verificar esse valor para ver o status atual da entrada. O
inputStatus
pode ser LISTENING
, PROCESSING
ou IDLE
.
Em seguida, adicione onInputStatusChanged()
ao objeto callbacks
para registrá-lo, conforme
mostrado no snippet a seguir:
/**
* 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);
}
}