Bạn xác định cuộc trò chuyện cho Hành động bằng phương thức thực hiện, đây là mã được triển khai dưới dạng webhook chứa thông tin logic đàm thoại. Việc thực hiện đơn hàng cho Hành động của bạn biết việc cần làm khi người dùng thực hiện yêu cầu.
Đối với Interactive Canvas, phương thức thực hiện đơn hàng cũng cho biết thông tin về
ứng dụng web cho Trợ lý. Bạn có thể dùng HtmlResponse để yêu cầu Trợ lý
hiển thị ứng dụng web của bạn. HtmlResponse cũng có thể cung cấp nội dung cập nhật cho data
logic tuỳ chỉnh trên ứng dụng web dùng để thực hiện các thay đổi đối với ứng dụng web của bạn.
Trang này trình bày cách sử dụng HtmlResponse trong phương thức thực hiện và thông tin chung
nguyên tắc sử dụng loại câu trả lời này.
Phản hồi HTML
Để chuyển tiếp thông tin về ứng dụng web của bạn đến Trợ lý, bạn phải bao gồm
HtmlResponse
trong phương thức thực hiện theo ý định cụ thể. HtmlResponse có thể chứa URL
của ứng dụng web và dữ liệu cập nhật ứng dụng web. Khi bạn gửi
HtmlResponse, thì các bước sau sẽ xảy ra:
- Việc thực hiện ý định được so khớp sẽ gửi một
HtmlResponseđến thiết bị. - Thiết bị sử dụng URL trong
HtmlResponseđể tải ứng dụng web. - Tải trọng JSON
datađược truyền đến ứng dụng web trong lệnh gọi lại. Hành động trò chuyện của bạn gửi một
HtmlResponsemới để gửi nội dung cập nhật hoặc tải trạng thái mới.
Phương thức thực hiện mẫu
Phần trích dẫn sau từ mẫu
mã phương thức thực hiện cho biết cách triển khai 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);
Ý định welcome
Trong đoạn mã trên, việc thực hiện ý định welcome sẽ gửi một
HtmlResponse bằng URL của ứng dụng web. Trợ lý sẽ nhận được thông tin này
và tải HTML và JavaScript tại địa chỉ đó.
...
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',
}));
});
...
Ý định khác
HtmlResponse trong phương thức thực hiện cho các ý định khác sẽ chuyển các giá trị biến
(tint hoặc spin trong mẫu) đối với ứng dụng web. Logic tuỳ chỉnh cho web
ứng dụng sử dụng các giá trị này để cập nhật các phần tử (ảnh động, màu sắc, v.v.):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Nguyên tắc và quy định hạn chế
Hãy ghi nhớ các nguyên tắc và quy định hạn chế sau đây đối với HtmlResponse
khi xây dựng phương thức thực hiện:
- Mỗi ý định trong phương thức thực hiện phải bao gồm một
HtmlResponse. Nếu ý định không cóHtmlResponse, ứng dụng web của bạn sẽ đóng. - Bạn chỉ cần bao gồm URL ứng dụng web của mình trong ý định đầu tiên bạn gửi đến
người dùng (thường là ý định
Welcome). HtmlResponsephải có kích thước từ 50 KB trở xuống.