Xây dựng hành động trò chuyện (Dialogflow)

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:

  1. Việc thực hiện ý định được so khớp sẽ gửi một HtmlResponse đến thiết bị.
  2. Thiết bị sử dụng URL trong HtmlResponse để tải ứng dụng web.
  3. Tải trọng JSON data được truyền đến ứng dụng web trong lệnh gọi lại.
  4. 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.