Phương thức thực hiện bản dựng (Dialogflow)

Thực hiện đơn hàng xác định giao diện trò chuyện để Hành động của bạn nhận được hoạt động đầu vào của người dùng và logic để xử lý thông tin đầu vào để cuối cùng thực hiện Hành động.

Xác định cuộc trò chuyện của bạn

Giờ đây bạn đã xác định Hành động, bạn có thể tạo cuộc trò chuyện tương ứng cho các Hành động đó. Bạn thực hiện việc này bằng cách tạo ý định Dialogflow xác định ngữ pháp hoặc những gì người dùng cần cần nói để kích hoạt ý định và phương thức thực hiện tương ứng để xử lý ý định khi ý định đó được kích hoạt.

Bạn có thể tạo bao nhiêu ý định tuỳ thích để xác định toàn bộ ý định của cuộc trò chuyện ngữ pháp.

Tạo ý định

Nhấp vào dấu + bên cạnh mục trong trình đơn Ý định trong Dialogflow điều hướng bên trái. Trình chỉnh sửa ý định sẽ xuất hiện để bạn có thể nhập các thông tin sau:

  • Tên ý định là tên của ý định xuất hiện trong IDE.
  • Ngữ cảnh cho phép bạn xác định phạm vi của việc kích hoạt ý định ở các trường hợp cụ thể. Đọc tài liệu về Dialogflow về Ngữ cảnh để biết thêm thông tin.
  • Sự kiện kích hoạt ý định mà không cần người dùng nói gì. Một sự kiện ví dụ là sự kiện GOOGLE_ASSISTANT_WELCOME, cho phép Google Trợ lý để gọi Hành động của bạn. Sự kiện này được dùng cho Hành động của bạn default Action (Hành động mặc định). Hãy tham khảo tài liệu của chúng tôi để biết thêm thông tin về ý định của trình trợ giúp tích hợp sẵn.
  • Cụm từ huấn luyện xác định những gì người dùng cần nói (ngữ pháp) để kích hoạt ý định. Nhập một vài cụm từ vào đây (5-10) nội dung người dùng có thể nói để kích hoạt ý định. Dialogflow tự động xử lý các biến thể tự nhiên của mẫu mà bạn cung cấp.
  • Hành động và tham số xác định dữ liệu cần chuyển đến phương thức thực hiện, nếu đã bật phương thức thực hiện cho ý định này. Dữ liệu này bao gồm dữ liệu đã phân tích cú pháp từ hoạt động đầu vào của người dùng và tên mà bạn có thể sử dụng trong phương thức thực hiện của mình để phát hiện ý định đã được kích hoạt. Sau này bạn sẽ sử dụng tên này để ánh xạ ý định của bạn đến logic phương thức thực hiện tương ứng. Xem Hành động và thông số trong tài liệu về Dialogflow để biết thêm thông tin về cách xác định Hành động.

  • Responses (Phản hồi) là Trình tạo phản hồi Dialogflow, giúp bạn có thể xác định phản hồi ý định này ngay trong Dialogflow mà không cần gọi phương thức thực hiện. Tính năng này hữu ích cho các phản hồi tĩnh không cần phương thức thực hiện. Bạn có thể dùng chế độ này để gửi thư chào mừng hoặc thư tạm biệt đơn giản. Tuy nhiên, bạn có thể sử dụng phương thức thực hiện để trả lời người dùng hầu hết các trường hợp ý định.

  • Thực hiện đơn hàng xác định xem bạn có muốn gọi phương thức thực hiện đơn hàng của mình hay không khi ý định này được kích hoạt. Bạn có nhiều khả năng sẽ bật tính năng này cho hầu hết ý định trong nhân viên hỗ trợ dự án Dialogflow của bạn. Để thấy mục này trong ý định, bạn phải đã bật phương thức thực hiện đơn hàng cho tác nhân trong trình đơn Thực hiện đơn hàng.

Tạo phản hồi trong Dialogflow

Đối với một số ý định, bạn có thể không cần yêu cầu phương thức thực hiện trả về phản hồi. Trong những trường hợp này, bạn có thể sử dụng trình tạo phản hồi trong Dialogflow để tạo phản hồi.

Trong phần Câu trả lời, hãy nhập câu trả lời dạng văn bản mà bạn muốn trả lại người dùng. Phản hồi bằng văn bản mặc định là phản hồi bằng văn bản TTS đơn giản có thể hoạt động trên nhiều công cụ tích hợp Dialogflow. Nội dung mô tả về câu trả lời cho Trợ lý Google trên trang Câu trả lời.

Xây dựng phản hồi cho phương thức thực hiện

Mã thực hiện đơn hàng được lưu trữ trong logic phương thức thực hiện webhook cho một Hành động. Ví dụ: trong mẫu silly Name Maker, bạn có thể tìm thấy logic này trong index.js đối với Cloud Function cho Firebase.

Khi một ý định được kích hoạt và sử dụng phương thức thực hiện, bạn sẽ nhận được yêu cầu từ Dialogflow chứa thông tin về ý định. Sau đó, bạn trả lời bằng cách xử lý ý định và trả về phản hồi. Yêu cầu này và phản hồi được xác định bởi webhookDialogflow.

Bạn nên sử dụng thư viện ứng dụng Node.js để xử lý các yêu cầu và trả về phản hồi. Dưới đây là quy trình chung khi sử dụng thư viện ứng dụng:

  1. Khởi chạy đối tượng Dialogflow. Đối tượng này tự động xử lý các yêu cầu và phân tích cú pháp các yêu cầu đó để để bạn có thể xử lý chúng khi thực hiện.
  2. Tạo các hàm để xử lý yêu cầu. Các hàm này xử lý hoạt động đầu vào của người dùng cũng như các thành phần khác trong ý định và tạo phản hồi để quay lại Dialogflow.

Khởi động đối tượng Dialogflow

Mã sau đây tạo thực thể cho Dialogflow và thực hiện một số mã nguyên mẫu Thiết lập Node.js cho Google Cloud Functions:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

Tạo các hàm để xử lý yêu cầu

Khi người dùng nói một cụm từ kích hoạt ý định, bạn sẽ nhận được yêu cầu từ Dialogflow mà bạn xử lý bằng một chức năng trong phương thức thực hiện. Trong phần này , bạn thường sẽ thực hiện những việc sau:

  1. Thực hiện mọi logic cần thiết để xử lý hoạt động đầu vào của người dùng.
  2. Tạo phản hồi để phản hồi các ý định kích hoạt. Xem xét nền tảng mà người dùng đang sử dụng để tạo ra phản hồi thích hợp. Xem khả năng hiển thị dành cho thêm thông tin về cách đáp ứng phản hồi cho nhiều nền tảng.
  3. Gọi hàm ask() bằng phản hồi của bạn.

Mã sau đây cho bạn biết cách tạo hai phản hồi TTS xử lý ý định gọi (input.welcome) và ý định của hộp thoại (input.number) chào mừng người dùng đến với Hành động của bạn và lặp lại một số mà người dùng đã nói một ý định Dialogflow với tên:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Số đầu vào của ý định tuỳ chỉnh, đi kèm với mã ở trên, sử dụng Thực thể @sys.number để trích xuất một số từ cách phát âm của người dùng. Sau đó, ý định gửi tham số num, chứa số của người dùng cho trong phương thức thực hiện.

Thay vì có từng trình xử lý cho từng ý định, bạn có thể thêm một hàm dự phòng. Bên trong hàm dự phòng, hãy kiểm tra xem ý định nào đã kích hoạt để hành động và xử lý cho phù hợp.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Nhắc lại không khớp

Khi Dialogflow không thể khớp với bất kỳ ngữ pháp đầu vào nào được xác định trong ý định của bạn Cụm từ huấn luyện sẽ kích hoạt ý định dự phòng. Ý định dự phòng thường nhắc người dùng cung cấp thông tin cần thiết cho Hành động của bạn. Bạn có thể đưa ra các cụm từ nhắc lại bằng cách chỉ định chúng trong phần Phản hồi của một ý định dự phòng hoặc bạn có thể sử dụng webhook để cung cấp phản hồi.

Khi câu trả lời của người dùng không khớp với các cụm từ huấn luyện trong Hành động của bạn, Google Trợ lý sẽ cố gắng xử lý dữ liệu đầu vào. Hành vi này tạo điều kiện cho người dùng thay đổi Các hành động trong cuộc trò chuyện. Ví dụ: người dùng hỏi: "Phim gì có chơi trong tuần này không?" sau đó thay đổi ngữ cảnh giữa cuộc trò chuyện: "Điều gì là thời tiết ngày mai?" Trong ví dụ này, vì "Thời tiết ngày mai thế nào?" không phải là phản hồi hợp lệ cho cuộc trò chuyện được kích hoạt bởi lời nhắc ban đầu, Trợ lý tự động tìm cách xử lý kết quả trùng khớp và chuyển người dùng sang cuộc trò chuyện thích hợp.

Nếu Trợ lý không tìm thấy Hành động thích hợp khớp với hành động nhập của người dùng, người dùng được đưa trở lại ngữ cảnh của Hành động.

Vì Trợ lý có thể làm gián đoạn Hành động của bạn để phản hồi một kết quả không khớp hợp lệ trong trường hợp không nên sử dụng ý định dự phòng để thực hiện truy vấn của người dùng. Bạn chỉ nên sử dụng ý định dự phòng để nhắc lại người dùng về thông tin nhập hợp lệ.

Cách tạo ý định dự phòng:

  1. Nhấp vào Ý định trong trình đơn điều hướng của Dialogflow.
  2. Nhấp vào ⋮ bên cạnh Create Intent (Tạo ý định) rồi chọn Tạo ý định dự phòng. (Ngoài ra, nhấp vào nút Dự phòng mặc định Có ý định chỉnh sửa nó.)
  3. Chỉ định các cụm từ nhắc lại để trả lời người dùng. Những cụm từ này phải trò chuyện và hữu ích nhất có thể với ngữ cảnh hiện tại của người dùng.

    Cách thực hiện việc này mà không cần thực hiện: Chỉ định các cụm từ trong phần Phản hồi của ý định. Dialogflow chọn ngẫu nhiên các cụm từ trong danh sách này để nói cho đến khi một ý định cụ thể hơn được kích hoạt.

    Cách thực hiện việc này với phương thức thực hiện:

    1. Bật/tắt chế độ Bật cuộc gọi webhook cho ý định này trong mục Thực hiện của ý định.
    2. Trong logic phương thức thực hiện, hãy xử lý ý định dự phòng như mọi ý định khác ý định, như mô tả trong phần Tạo hàm để xử lý yêu cầu .

    Ví dụ: hàm sau đây sử dụng đối tượng conv.data (một tải trọng dữ liệu tuỳ ý mà bạn có thể sử dụng để duy trì trạng thái) từ Thư viện ứng dụng Node.js để lưu trữ một bộ đếm theo dõi số lần một ý định dự phòng được kích hoạt. Nếu được kích hoạt nhiều lần nên Hành động sẽ thoát. Mặc dù không xuất hiện trong bạn nên làm cho các ý định khác đặt lại bộ đếm này về 0 khi một ý định không dự phòng được kích hoạt. (Xem Mẫu Number Genie để biết chi tiết về cách triển khai phương thức này.)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Sử dụng bối cảnh

Sử dụng ngữ cảnh nếu bạn chỉ muốn Dialogflow kích hoạt ý định dự phòng trong một số ngoại lệ. Điều này rất hữu ích nếu bạn muốn có các ý định dự phòng khác nhau cho các trường hợp không khớp khác nhau.

  • Nếu bạn không đặt ngữ cảnh cho ý định dự phòng, thì đó được coi là một ý định dự phòng chung mà Dialogflow kích hoạt khi không có ý định nào khác khớp. Bạn chỉ nên xác định một trong các thuộc tính này nếu bạn chọn sử dụng một trong các thuộc tính này.
  • Nếu bạn đặt bối cảnh đầu vào cho một ý định dự phòng, thì Dialogflow sẽ kích hoạt thao tác này ý định dự phòng khi những trường hợp sau đây đúng:

    • Ngữ cảnh hiện tại của người dùng là tập mẹ của ngữ cảnh được xác định trong ý định.
    • Không có ý định nào khác khớp.

    Điều này cho phép bạn sử dụng nhiều ý định dự phòng với các bối cảnh đầu vào khác nhau để tuỳ chỉnh lời nhắc lại không khớp theo các trường hợp cụ thể.

  • Nếu đặt ngữ cảnh đầu ra cho ý định dự phòng, bạn sẽ giữ người dùng trong cùng ngữ cảnh sau khi ý định dự phòng được kích hoạt và xử lý.

Xem phần Ngữ cảnhDialogflow để biết thêm thông tin.

Nhắc lại không có dữ liệu đầu vào

Xem trang Lời nhắc lại để biết thông tin chi tiết về cách thực hiện để xử lý khi người dùng không cung cấp thêm dữ liệu đầu vào trên thiết bị thoại như Google Home yêu cầu tương tác liên tục.