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
HtmlResponse
mớ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
). HtmlResponse
phải có kích thước từ 50 KB trở xuống.