Você define a conversa para a ação com o fulfillment, que é o código implantado como um webhook que contém a lógica de conversa do agente do Dialogflow. O fulfillment informa à sua Ação o que fazer quando os usuários fazem solicitações.
Para a tela interativa, o fulfillment também comunica informações sobre o
app da Web ao Google Assistente. Você pode usar uma HtmlResponse
para pedir ao Google Assistente para
renderizar seu app da Web. Uma HtmlResponse
também pode fornecer atualizações para data
, que
a lógica personalizada do seu app da Web usa para fazer mudanças nele.
Esta página explica como usar o HtmlResponse
no fulfillment e as diretrizes gerais para usar esse tipo de resposta.
Respostas HTML
Para redirecionar informações sobre seu app da Web ao Google Assistente, é necessário incluir um
HtmlResponse
no fulfillment específico da intent. Uma HtmlResponse
pode conter o URL
do app da Web e os dados que o atualizam. Quando você envia
um HtmlResponse
, as seguintes etapas ocorrem:
- O fulfillment da intent correspondente envia uma
HtmlResponse
ao dispositivo. - O dispositivo usa o URL na
HtmlResponse
para carregar o app da Web. - O payload JSON
data
é transmitido ao app da Web em um callback. Sua ação de conversa envia um novo
HtmlResponse
para enviar atualizações ou carregar novos estados.
Exemplo de fulfillment
Este trecho do exemplo de código de fulfillment mostra como implementar HtmlResponse
:
const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');
const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
// map of human speakable colors to color values
const tints = {
red: 0xFF0000,
green: 0x00FF00,
blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
if (color in tints) {
conv.ask(`Ok, I changed my color to ${color}. What else?`);
conv.ask(new HtmlResponse({
data: {
tint: tints[color],
},
}));
return;
}
conv.ask(`Sorry, I don't know that color. What else?`);
conv.ask(new HtmlResponse({
data: {
query: conv.query,
},
}));
});
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
app.intent('pause', (conv) => {
conv.ask(`Ok, I paused spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: false,
},
}));
});
app.intent('restart game', (conv) => {
conv.ask(new HtmlResponse({
data: {
command: 'RESTART_GAME',
},
}));
});
exports.conversation = functions.https.onRequest(app);
welcome
intent
No snippet acima, o fulfillment da intent welcome
envia uma
HtmlResponse
com o URL do app da Web. O Google Assistente recebe isso
e carrega o HTML e o JavaScript nesse endereço.
...
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
...
Outras intents
O HtmlResponse
no fulfillment de outras intents transmite valores de variáveis
(tint
ou spin
no exemplo) para o app da Web. A lógica personalizada
do app da Web usa esses valores para atualizar elementos (animações, cores etc.):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Diretrizes e restrições
Considere as seguintes diretrizes e restrições para HtmlResponse
ao criar o fulfillment:
- Cada intent no fulfillment precisa incluir um
HtmlResponse
. Se uma intent não incluir umaHtmlResponse
, o app da Web será fechado. - Você só precisa incluir o URL do seu app da Web na primeira intent enviada ao
usuário (essa normalmente é a intent
Welcome
). - O
HtmlResponse
precisa ter 50 KB ou menos.