Defines la conversación para tu acción con entrega, que es código implementado como un webhook que contiene el nombre de tu agente lógica de conversación. La entrega le indica a tu acción qué hacer cuando los usuarios 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 a Asistente que haga lo siguiente:
renderizar tu aplicación web. Un HtmlResponse
también puede proporcionar actualizaciones a data
, que
que usa la lógica personalizada de tu app web para realizar cambios en ella.
En esta página, se explica cómo usar HtmlResponse
en tus entregas y tu
lineamientos para usar este tipo de respuesta.
Respuestas HTML
Para transmitir información sobre tu app web al Asistente, debes incluir una
HtmlResponse
en la entrega específica de un intent. Un elemento HtmlResponse
puede contener la URL
de la aplicación web y los datos que la actualizan. Cuando envías
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 nuevo
HtmlResponse
para enviar actualizaciones o cargar estados nuevos.
Entrega de muestra
El siguiente extracto de la muestra:
En el código de entrega, 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);
welcome
intent
En el fragmento anterior, la entrega del intent welcome
envía un
HtmlResponse
por la URL de la app web El Asistente recibe esto
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 de variables.
(tint
o spin
en la muestra) a la app web. La lógica personalizada para la Web
La app 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 en tu entrega debe incluir un
HtmlResponse
. Si un intent no incluye unHtmlResponse
, se cerrará tu app web. - Solo debes incluir la URL de tu app web en el primer intent que envíes a
el usuario (por lo general, este es el intent
Welcome
) HtmlResponse
debe tener un tamaño de 50 KB o menos.