Вы определяете диалог для своего действия с помощью выполнения , который представляет собой код, развернутый как веб-перехватчик, содержащий логику диалога вашего агента Dialogflow. Выполнение сообщает вашему действию, что делать, когда пользователи делают запросы.
В случае с Interactive Canvas при выполнении также передается Помощнику информация о вашем веб-приложении. Вы можете использовать HtmlResponse
, чтобы сообщить Ассистенту о необходимости отрисовки вашего веб-приложения. HtmlResponse
также может предоставлять обновления data
, которые пользовательская логика вашего веб-приложения использует для внесения изменений в ваше веб-приложение.
На этой странице рассказывается, как использовать HtmlResponse
при выполнении заданий, а также общие рекомендации по использованию этого типа ответа.
HTML-ответы
Чтобы передать информацию о вашем веб-приложении Помощнику, вы должны включить HtmlResponse
в выполнение конкретного намерения. HtmlResponse
может содержать URL-адрес веб-приложения и данные, обновляющие веб-приложение. Когда вы отправляете HtmlResponse
, происходят следующие шаги:
- При выполнении совпадающего намерения на устройство отправляется
HtmlResponse
. - Устройство использует URL-адрес в
HtmlResponse
для загрузки веб-приложения. - Полезная нагрузка
data
JSON передается веб-приложению в обратном вызове. Ваше диалоговое действие отправляет новый
HtmlResponse
для отправки обновлений или загрузки новых состояний.
Образец выполнения
В следующем отрывке из примера кода выполнения показано, как реализовать 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
намерение
В приведенном выше фрагменте при выполнении намерения welcome
отправляется HtmlResponse
с URL-адресом веб-приложения. Помощник получает это сообщение и загружает HTML и JavaScript по этому адресу.
...
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',
}));
});
...
Другие намерения
HtmlResponse
при выполнении других намерений передает значения переменных ( tint
или spin
в примере) в веб-приложение. Пользовательская логика веб-приложения использует эти значения для обновления элементов (анимации, цвета и т. д.):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Рекомендации и ограничения
При построении выполнения помните о следующих правилах и ограничениях для HtmlResponse
:
- Каждое намерение вашего выполнения должно включать
HtmlResponse
. Если намерение не включаетHtmlResponse
, ваше веб-приложение закрывается. - Вам нужно только включить URL-адрес вашего веб-приложения в первое намерение, которое вы отправляете пользователю (обычно это намерение
Welcome
). - Размер
HtmlResponse
должен составлять 50 КБ или меньше.