Define la conversación para tu acción con entrega, que es el código implementado como un webhook que contiene la lógica conversacional de tu agente de Dialogflow. La entrega le indica a tu acción qué hacer cuando los usuarios realizan solicitudes.
En el caso de Interactive Canvas, tu entrega también comunica información sobre tu app web al Asistente. Puedes usar un HtmlResponse
para indicarle al Asistente que renderice tu app web. Un HtmlResponse
también puede proporcionar actualizaciones de data
, que la lógica personalizada de tu app web usa para realizar cambios en ella.
En esta página, se explica cómo usar HtmlResponse
en tu entrega y se explican los lineamientos generales para usar este tipo de respuesta.
Respuestas HTML
Para retransmitir información sobre tu app web al Asistente, debes incluir un HtmlResponse
en la entrega específica del intent. Una HtmlResponse
puede contener la URL de la aplicación web y los datos que la actualizan. Cuando envías una HtmlResponse
, se producen los siguientes pasos:
- La entrega del intent coincidente envía un
HtmlResponse
al dispositivo. - El dispositivo usa la URL de
HtmlResponse
para cargar la app web. - La carga útil de JSON
data
se pasa a la app web en una devolución de llamada. Tu acción de conversación envía un
HtmlResponse
nuevo para enviar actualizaciones o cargar estados nuevos.
Entrega de muestra
En el siguiente extracto del código de entrega de muestra, se muestra cómo 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);
Intent welcome
En el fragmento anterior, la entrega para el intent welcome
envía un HtmlResponse
con la URL de la app web. El Asistente recibe este mensaje y carga el código HTML y JavaScript en esa dirección.
...
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',
}));
});
...
Otros intents
El HtmlResponse
de la entrega para otros intents pasa valores variables (tint
o spin
en la muestra) a la app web. La lógica personalizada para la app web usa estos valores para actualizar elementos (animaciones, color, etc.):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Lineamientos y restricciones
Ten en cuenta los siguientes lineamientos y restricciones para HtmlResponse
cuando compiles tu entrega:
- Cada intent de tu entrega debe incluir un
HtmlResponse
. Si un intent no incluye unHtmlResponse
, se cierra la app web. - Solo debes incluir la URL de la aplicación web en el primer intent que envías al usuario (normalmente es el intent
Welcome
). HtmlResponse
debe tener un tamaño de 50 KB o menos.