Xử lý thông tin do người dùng nhập

Hướng dẫn này mô tả cách nhận và đọc thông tin mà người dùng nhập vào thông báo thẻhộp thoại. Người dùng có thể nhập dữ liệu mà ứng dụng Chat nhận được, đọc và trả lời sang. Các tiện ích cho phép người dùng nhập thông tin bao gồm:

  • TextInput để nhập văn bản dạng tự do cũng hỗ trợ đề xuất.
  • SelectionInput cho các mục và trình đơn trong danh sách, chẳng hạn như hộp đánh dấu, nút chọn và trình đơn thả xuống.
  • DateTimePicker cho các mục nhập ngày và giờ.


Sử dụng Trình tạo thẻ để thiết kế và xem trước thông báo trên thẻ JSON cho các ứng dụng trong Chat:

Mở Trình tạo thẻ

Việc nhận dữ liệu nhập vào từ người dùng cho phép các ứng dụng trong Chat làm những việc như như sau:

  • Cập nhật các trường hợp dịch vụ khách hàng.
  • Tạo đơn đặt hàng công việc.
  • Xác thực bằng các dịch vụ web.

Điều kiện tiên quyết

Node.js

Một ứng dụng Google Chat đã bật các tính năng tương tác. Để tạo một ứng dụng Chat tương tác bằng dịch vụ HTTP, hãy hoàn thành phần bắt đầu nhanh này.

Apps Script

Một ứng dụng Google Chat đã bật các tính năng tương tác. Để tạo một ứng dụng Chat tương tác trong Apps Script, hãy hoàn thành phần bắt đầu nhanh này.

Python

Một ứng dụng Google Chat đã bật các tính năng tương tác. Để tạo một ứng dụng Chat tương tác bằng dịch vụ HTTP, hãy hoàn thành phần bắt đầu nhanh này.

Cách hoạt động của tính năng nhận dữ liệu

Ứng dụng Chat trình bày thông tin cho người dùng dưới dạng hoặc thông báo thẻ. Trong ví dụ này, một hộp thoại yêu cầu người dùng nhập về một người liên hệ bằng cách sử dụng TextInputSelectionInput tiện ích:

Một hộp thoại hiển thị nhiều tiện ích.

Khi hoàn tất, ứng dụng Chat sẽ nhận được dữ liệu người dùng đã nhập vào hộp thoại ở định dạng JSON và sự kiện tương tác trong đó:

Để xem dữ liệu về nội dung người dùng đã nhập, hãy sử dụng Event.common.formInputs trong tải trọng sự kiện. Trường formInputs là một bản đồ nơi các khoá là các mã nhận dạng chuỗi được gán cho từng tiện ích và các giá trị đại diện cho hoạt động đầu vào của người dùng từng tiện ích. Các đối tượng khác nhau biểu thị các kiểu dữ liệu đầu vào khác nhau. Để ví dụ: Event.common.formInputs.stringInputs biểu thị đầu vào chuỗi.

Ứng dụng của bạn có thể truy cập vào giá trị do người dùng nhập đầu tiên tại event.common.formInputs.NAME.stringInputs.value[0], trong đó NAME là trường name của Tiện ích TextInput.

Nhận dữ liệu từ các thẻ

Khi người dùng nhập dữ liệu vào thông báo trên thẻ, Ứng dụng Chat nhận được một ứng dụng Chat sự kiện tương tác, chẳng hạn như ví dụ sau:

JSON

{
  "type": enum (EventType),
  "eventTime": string,
  "threadKey": string,
  "message": {
    object (Message)
  },
  "user": {
    object (User)
  },
  "space": {
    object (Space)
  },
  "action": {
    object (FormAction)
  },
  "configCompleteRedirectUrl": string,
  "common": {

    // Represents user data entered in a card.
    "formInputs": {

      // Represents user data entered for a specific field in a card.
      "NAME": {

        // Represents string data entered in a card, like text input fields
        // and check boxes.
        "stringInputs": {

          // An array of strings entered by the user in a card.
          "value": [
            string
          ]
        }
      }
    },
    "parameters": {
      string: string,
      ...
    },
    "invokedFunction": string
  }
}

Nhận dữ liệu từ hộp thoại

Khi người dùng gửi dữ liệu trong hộp thoại, ứng dụng Chat nhận được một sự kiện tương tác khác với ứng dụng Chat, chẳng hạn như ví dụ sau:

JSON

{
  "type": enum (EventType),
  "eventTime": string,
  "threadKey": string,
  "message": {
    object (Message)
  },
  "user": {
    object (User)
  },
  "space": {
    object (Space)
  },
  "action": {
    object (FormAction)
  },
  "configCompleteRedirectUrl": string,

  // Indicates that this event is dialog-related.
  "isDialogEvent": true,

  // Indicates that a user clicked a button, and all data
  // they entered in the dialog is included in Event.common.formInputs.
  "dialogEventType": "SUBMIT_DIALOG",
  "common": {
    "userLocale": string,
    "hostApp": enum (HostApp),
    "platform": enum (Platform),
    "timeZone": {
      object (TimeZone)
    },

    // Represents user data entered in a dialog.
    "formInputs": {

      // Represents user data entered for a specific field in a dialog.
      "NAME": {

        // Represents string data entered in a dialog, like text input fields
        // and check boxes.
        "stringInputs": {

          // An array of strings entered by the user in a dialog.
          "value": [
            string
          ]
        }
      }
    },
    "parameters": {
      string: string,
      ...
    },
    "invokedFunction": string
  }
}

Phản hồi dữ liệu đã thu thập từ tin nhắn thẻ hoặc hộp thoại

Sau khi nhận được dữ liệu từ thông báo thẻ hoặc hộp thoại, Ứng dụng Chat sẽ phản hồi bằng cách xác nhận đã nhận được thông tin hoặc bằng cách trả về một lỗi, cả hai đều được thực hiện bằng cách trả về một ActionResponse:

  • Để xác nhận đã nhận thành công, hãy trả lời bằng ActionResponse"actionStatus": "OK".
  • Để trả về lỗi, hãy phản hồi bằng ActionResponse"actionStatus": "ERROR MESSAGE".

Ví dụ:

Ví dụ sau đây sẽ kiểm tra sự hiện diện của giá trị name. Nếu không có, ứng dụng trả về một lỗi. Nếu có, ứng dụng sẽ xác nhận đã nhận được dữ liệu biểu mẫu và đóng hộp thoại này.

Node.js

/**
 * Checks for a form input error, the absence of
 * a "name" value, and returns an error if absent.
 * Otherwise, confirms successful receipt of a dialog.
 *
 * Confirms successful receipt of a dialog.
 *
 * @param {Object} event the event object from Chat API.
 *
 * @return {object} open a Dialog in Google Chat.
 */
function receiveDialog(event) {

  // Checks to make sure the user entered a name
  // in a dialog. If no name value detected, returns
  // an error message.
  if (event.common.formInputs.WIDGET_NAME.stringInputs.value[0] == "") {
    res.json({
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "Don't forget to name your new contact!"
        }
      }
    });

  // Otherwise the app indicates that it received
  // form data from the dialog. Any value other than "OK"
  // gets returned as an error. "OK" is interpreted as
  // code 200, and the dialog closes.
  } else {
    res.json({
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "OK"
        }
      }
    });
  }
}

Apps Script

Ví dụ này gửi thông báo thẻ bằng cách quay lại tệp JSON của thẻ. Bạn cũng có thể sử dụng Dịch vụ thẻ Apps Script.

/**
 * Checks for a form input error, the absence of
 * a "name" value, and returns an error if absent.
 * Otherwise, confirms successful receipt of a dialog.
 *
 * Confirms successful receipt of a dialog.
 *
 * @param {Object} event the event object from Chat API.
 *
 * @return {object} open a Dialog in Google Chat.
 */
function receiveDialog(event) {

  // Checks to make sure the user entered a name
  // in a dialog. If no name value detected, returns
  // an error message.
  if (event.common.formInputs.WIDGET_NAME[""].stringInputs.value[0] == "") {
    return {
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "Don't forget to name your new contact!"
        }
      }
    };

  // Otherwise the app indicates that it received
  // form data from the dialog. Any value other than "OK"
  // gets returned as an error. "OK" is interpreted as
  // code 200, and the dialog closes.
  } else {
    return {
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "OK"
        }
      }
    };
  }
}

Python

def receive_dialog(event: Mapping[str, Any]) -> Mapping[str, Any]:
  """Checks for a form input error, the absence of a "name" value, and returns
     an error if absent. Otherwise, confirms successful receipt of a dialog.

  Args:
      event (Mapping[str, Any]): the event object from Chat API.

  Returns:
      Mapping[str, Any]: the response.
  """

  if common := event.get('common'):
    if form_inputs := common.get('formInputs'):
      if contact_name := form_inputs.get('WIDGET_NAME'):
        if string_inputs := contact_name.get('stringInputs'):
          if name := string_inputs.get('value')[0]:
            return {
              'actionResponse': {
                'type': 'DIALOG',
                'dialogAction': {
                  'actionStatus': 'OK'
                }
              }
            }
          else:
            return {
              'actionResponse': {
                'type': 'DIALOG',
                'dialogAction': {
                  'actionStatus': 'Don\'t forget to name your new contact!'
                }
              }
            }

Khắc phục sự cố

Khi một ứng dụng Google Chat hoặc card trả về một lỗi, thì phương thức Giao diện Chat hiển thị một thông báo với nội dung "Đã xảy ra lỗi". hoặc "Không thể xử lý yêu cầu của bạn". Đôi khi, giao diện người dùng của Chat không hiện thông báo lỗi nào ngoài ứng dụng Chat hoặc thẻ tạo ra kết quả không mong muốn; ví dụ: thông báo thẻ có thể không xuất hiện.

Mặc dù thông báo lỗi có thể không xuất hiện trong giao diện người dùng Chat, thông báo lỗi mô tả và dữ liệu nhật ký luôn có sẵn để giúp bạn sửa lỗi khi tính năng ghi nhật ký lỗi cho các ứng dụng trong Chat được bật. Để được trợ giúp xem, gỡ lỗi và sửa lỗi, hãy xem Khắc phục lỗi và khắc phục lỗi của Google Chat.