Thu thập và quản lý danh bạ trong Google Chat

Hướng dẫn này cho biết cách tạo ứng dụng Google Chat giúp người dùng Google Chat quản lý danh bạ cá nhân và danh bạ doanh nghiệp. Để thu thập thông tin, ứng dụng Chat sẽ nhắc người dùng hoàn tất biểu mẫu liên hệ trong tin nhắn và hộp thoại dạng thẻ.

Xem ứng dụng Chat hoạt động như thế nào:

  • Biểu mẫu liên hệ từ lệnh dấu gạch chéo.
    Hình 1. Ứng dụng Chat phản hồi lệnh gạch chéo /about bằng một tin nhắn văn bản và nút mở biểu mẫu liên hệ.
  • Biểu mẫu liên hệ trong hộp thoại.
    Hình 2. Ứng dụng Chat sẽ mở một hộp thoại để người dùng có thể nhập thông tin về một người liên hệ.
  • Hộp thoại xác nhận và xem lại.
    Hình 3. Ứng dụng Chat sẽ trả về một hộp thoại xác nhận để người dùng có thể xem lại và xác nhận thông tin trước khi gửi.
  • Một tin nhắn văn bản xác nhận người liên hệ mới.
    Hình 4. Sau khi người dùng gửi biểu mẫu, ứng dụng Chat sẽ gửi một tin nhắn văn bản riêng tư để xác nhận việc gửi.
  • Biểu mẫu liên hệ trong thư dạng thẻ.
    Hình 5. Ứng dụng Chat cũng nhắc người dùng thêm người liên hệ từ một thẻ vào tin nhắn.

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

Mục tiêu

Kiến trúc

Ứng dụng Chat được tích hợp sẵn Google Apps Script và sử dụng các sự kiện tương tác để xử lý và phản hồi người dùng Chat.

Phần sau đây cho thấy cách người dùng thường tương tác với ứng dụng Chat:

  1. Người dùng mở một tin nhắn trực tiếp bằng ứng dụng Chat hoặc thêm ứng dụng Chat vào một không gian hiện có.

  2. Ứng dụng Chat nhắc người dùng thêm một người liên hệ bằng cách tạo và hiển thị biểu mẫu liên hệ dưới dạng đối tượng card. Để hiển thị biểu mẫu liên hệ, ứng dụng Chat sẽ phản hồi người dùng theo những cách sau:

    • Phản hồi các lượt đề cập bằng @và tin nhắn trực tiếp bằng một tin nhắn dạng thẻ chứa biểu mẫu liên hệ.
    • Phản hồi lệnh dấu gạch chéo /addContact bằng cách mở một hộp thoại có biểu mẫu liên hệ.
    • Phản hồi lệnh gạch chéo /about bằng một tin nhắn văn bản có nút Thêm người liên hệ mà người dùng có thể nhấp vào để mở hộp thoại có biểu mẫu liên hệ.
  3. Khi thấy biểu mẫu liên hệ, người dùng sẽ nhập thông tin liên hệ vào các trường và tiện ích sau:

    • Họ và tên: một tiện ích textInput chấp nhận các chuỗi.
    • Birthdate (Ngày sinh): một tiện ích dateTimePicker chỉ chấp nhận ngày tháng.
    • Loại thông tin liên hệ: một tiện ích selectionInput gồm các nút chọn cho phép người dùng chọn và gửi một giá trị chuỗi duy nhất (Personal hoặc Work).
    • Nút Xem xét và gửi: một mảng buttonList có tiện ích button mà người dùng nhấp vào để gửi các giá trị mà họ nhập.
  4. Ứng dụng Google Chat xử lý sự kiện tương tác CARD_CLICKED để xử lý các giá trị mà người dùng nhập và hiển thị các giá trị đó trong thẻ xác nhận.

  5. Người dùng xem lại thẻ xác nhận rồi nhấp vào nút Gửi để hoàn tất thông tin liên hệ.

  6. Ứng dụng Google Chat sẽ gửi một tin nhắn văn bản riêng tư xác nhận việc gửi.

Chuẩn bị môi trường

Phần này trình bày cách tạo và định cấu hình dự án Google Cloud cho ứng dụng Chat.

Tạo một dự án trên Google Cloud

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > IAM và Quản trị viên > Tạo dự án.

    Chuyển đến trang Create a Project (Tạo dự án)

  2. Trong trường Project Name (Tên dự án), hãy nhập tên mô tả cho dự án của bạn.

    Không bắt buộc: Để chỉnh sửa Mã dự án, hãy nhấp vào Chỉnh sửa. Bạn không thể thay đổi mã dự án sau khi tạo dự án, vì vậy, hãy chọn một mã đáp ứng nhu cầu của bạn trong suốt thời gian hoạt động của dự án.

  3. Trong trường Vị trí, hãy nhấp vào Duyệt xem để hiển thị các vị trí tiềm năng cho dự án của bạn. Sau đó, hãy nhấp vào Chọn.
  4. Nhấp vào Tạo. Google Cloud Console sẽ chuyển đến trang Trang tổng quan và dự án của bạn sẽ được tạo trong vòng vài phút.

gcloud CLI

Trong một trong các môi trường phát triển sau, hãy truy cập vào Google Cloud CLI (gcloud):

  • Cloud Shell: Để sử dụng thiết bị đầu cuối trực tuyến đã thiết lập gcloud CLI, hãy kích hoạt Cloud Shell.
    Kích hoạt Cloud Shell
  • Local Shell: Để sử dụng môi trường phát triển cục bộ, hãy cài đặtkhởi động CLI của gcloud.
    Để tạo một dự án trên Google Cloud, hãy dùng lệnh gcloud projects create:
    gcloud projects create PROJECT_ID
    Thay thế PROJECT_ID bằng cách đặt mã nhận dạng cho dự án bạn muốn tạo.

Thiết lập tính năng xác thực và uỷ quyền

Các ứng dụng Google Chat yêu cầu bạn định cấu hình màn hình xin phép bằng OAuth để người dùng có thể uỷ quyền cho ứng dụng của bạn trong các ứng dụng của Google Workspace, bao gồm cả Google Chat.

Trong hướng dẫn này, bạn triển khai một ứng dụng Chat chỉ dành cho việc kiểm thử và sử dụng nội bộ, vì vậy, bạn có thể sử dụng thông tin phần giữ chỗ cho màn hình yêu cầu đồng ý. Trước khi phát hành ứng dụng Chat, hãy thay thế mọi thông tin phần giữ chỗ bằng thông tin thực.

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > API và dịch vụ > Màn hình xin phép bằng OAuth.

    Chuyển đến màn hình xin phép bằng OAuth

  2. Trong mục Loại người dùng, hãy chọn Nội bộ, rồi nhấp vào Tạo.

  3. Trong Tên ứng dụng, hãy nhập Contact Manager.

  4. Trong mục Email hỗ trợ người dùng, hãy chọn địa chỉ email của bạn hoặc một nhóm Google thích hợp.

  5. Trong phần Thông tin liên hệ của nhà phát triển, hãy nhập địa chỉ email của bạn.

  6. Nhấp vào Lưu và tiếp tục.

  7. Trên trang Phạm vi, hãy nhấp vào Lưu và tiếp tục. (Ứng dụng Chat không yêu cầu bất kỳ phạm vi OAuth nào.)

  8. Xem lại thông tin tóm tắt, rồi nhấp vào Quay lại trang tổng quan.

Tạo và triển khai ứng dụng Chat

Trong phần sau, bạn sẽ sao chép và cập nhật toàn bộ dự án Apps Script chứa tất cả mã ứng dụng bắt buộc cho ứng dụng Chat, vì vậy, bạn không cần phải sao chép và dán từng tệp.

Bạn có thể xem toàn bộ dự án trên GitHub (không bắt buộc).

Xem trên GitHub

Dưới đây là thông tin tổng quan về từng tệp:

main.gs

Xử lý tất cả logic ứng dụng, bao gồm cả các sự kiện tương tác về thời điểm người dùng gửi tin nhắn đến ứng dụng Chat, nhấp vào các nút trong tin nhắn của ứng dụng Chat hoặc mở và đóng hộp thoại.

Xem mã main.gs

apps-script/contact-form-app/main.gs
/**
 * Copyright 2024 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Responds to a MESSAGE interaction event in Google Chat.
 *
 * @param {Object} event the MESSAGE interaction event from Chat API.
 * @return {Object} message response that opens a dialog or sends private
 *                          message with text and card.
 */
function onMessage(event) {
  if (event.message.slashCommand) {
    switch (event.message.slashCommand.commandId) {
      case 1:
        // If the slash command is "/about", responds with a text message and button
        // that opens a dialog.
        return {
          text: "Manage your personal and business contacts 📇. To add a " +
                  "contact, use the slash command `/addContact`.",
          accessoryWidgets: [{
            buttonList: { buttons: [{
              text: "Add Contact",
              onClick: { action: {
                function: "openInitialDialog",
                interaction: "OPEN_DIALOG"
              }}
            }]}
          }]
        }
      case 2:
        // If the slash command is "/addContact", opens a dialog.
        return openInitialDialog();
    }
  }

  // If user sends the Chat app a message without a slash command, the app responds
  // privately with a text and card to add a contact.
  return {
    privateMessageViewer: event.user,
    text: "To add a contact, try `/addContact` or complete the form below:",
    cardsV2: [{
      cardId: "addContactForm",
      card: {
        header: { title: "Add a contact" },
        sections:[{ widgets: CONTACT_FORM_WIDGETS.concat([{
          buttonList: { buttons: [{
            text: "Review and submit",
            onClick: { action: { function : "openConfirmation" }}
          }]}
        }])}]
      }
    }]
  };
}

/**
 * Responds to CARD_CLICKED interaction events in Google Chat.
 *
 * @param {Object} event the CARD_CLICKED interaction event from Google Chat.
 * @return {Object} message responses specific to the dialog handling.
 */
function onCardClick(event) {
  // Initial dialog form page
  if (event.common.invokedFunction === "openInitialDialog") {
    return openInitialDialog();
  // Confirmation dialog form page
  } else if (event.common.invokedFunction === "openConfirmation") {
    return openConfirmation(event);
  // Submission dialog form page
  } else if (event.common.invokedFunction === "submitForm") {
    return submitForm(event);
  }
}

/**
 * Opens the initial step of the dialog that lets users add contact details.
 *
 * @return {Object} a message with an action response to open a dialog.
 */
function openInitialDialog() {
  return { actionResponse: {
    type: "DIALOG",
    dialogAction: { dialog: { body: { sections: [{
      header: "Add new contact",
      widgets: CONTACT_FORM_WIDGETS.concat([{
        buttonList: { buttons: [{
          text: "Review and submit",
          onClick: { action: { function: "openConfirmation" }}
        }]}
      }])
    }]}}}
  }};
}

/**
 * Returns the second step as a dialog or card message that lets users confirm details.
 *
 * @param {Object} event the interactive event with form inputs.
 * @return {Object} returns a dialog or private card message.
 */
function openConfirmation(event) {
  const name = fetchFormValue(event, "contactName") ?? "";
  const birthdate = fetchFormValue(event, "contactBirthdate") ?? "";
  const type = fetchFormValue(event, "contactType") ?? "";
  const cardConfirmation = {
    header: "Your contact",
    widgets: [{
      textParagraph: { text: "Confirm contact information and submit:" }}, {
      textParagraph: { text: "<b>Name:</b> " + name }}, {
      textParagraph: {
        text: "<b>Birthday:</b> " + convertMillisToDateString(birthdate)
      }}, {
      textParagraph: { text: "<b>Type:</b> " + type }}, {
      buttonList: { buttons: [{
        text: "Submit",
        onClick: { action: {
          function: "submitForm",
          parameters: [{
            key: "contactName", value: name }, {
            key: "contactBirthdate", value: birthdate }, {
            key: "contactType", value: type
          }]
        }}
      }]}
    }]
  };

  // Returns a dialog with contact information that the user input.
  if (event.isDialogEvent) {
    return { action_response: {
      type: "DIALOG",
      dialogAction: { dialog: { body: { sections: [ cardConfirmation ]}}}
    }};
  }

  // Updates existing card message with contact information that the user input.
  return {
    actionResponse: { type: "UPDATE_MESSAGE" },
    privateMessageViewer: event.user,
    cardsV2: [{
      card: { sections: [cardConfirmation]}
    }]
  }
}

/**
  * Validates and submits information from a dialog or card message
  * and notifies status.
  *
  * @param {Object} event the interactive event with parameters.
  * @return {Object} a message response that opens a dialog or posts a private
  *                  message.
  */
function submitForm(event) {
  const contactName = event.common.parameters["contactName"];
  // Checks to make sure the user entered a contact name.
  // If no name value detected, returns an error message.
  if (!contactName) {
    const errorMessage = "Don't forget to name your new contact!";
    if (event.dialogEventType === "SUBMIT_DIALOG") {
      return { actionResponse: {
        type: "DIALOG",
        dialogAction: { actionStatus: {
          statusCode: "INVALID_ARGUMENT",
          userFacingMessage: errorMessage
        }}
      }};
    } else {
      return {
        privateMessageViewer: event.user,
        text: errorMessage
      };
    }
  }

  // The Chat app indicates that it received form data from the dialog or card.
  // Sends private text message that confirms submission.
  const confirmationMessage = "✅ " + contactName + " has been added to your contacts.";
  if (event.dialogEventType === "SUBMIT_DIALOG") {
    return {
      actionResponse: {
        type: "DIALOG",
        dialogAction: { actionStatus: {
          statusCode: "OK",
          userFacingMessage: "Success " + contactName
        }}
      }
    }
  } else {
    return {
      actionResponse: { type: "NEW_MESSAGE" },
      privateMessageViewer: event.user,
      text: confirmationMessage
    };
  }
}

/**
 * Extracts form input value for a given widget.
 *
 * @param {Object} event the CARD_CLICKED interaction event from Google Chat.
 * @param {String} widgetName a unique ID for the widget, specified in the widget's name field.
 * @returns the value inputted by the user, null if no value can be found.
 */
function fetchFormValue(event, widgetName) {
  const formItem = event.common.formInputs[widgetName][""];
  // For widgets that receive StringInputs data, the value input by the user.
  if (formItem.hasOwnProperty("stringInputs")) {
    const stringInput = event.common.formInputs[widgetName][""].stringInputs.value[0];
    if (stringInput != null) {
      return stringInput;
    }
  // For widgets that receive dateInput data, the value input by the user.
  } else if (formItem.hasOwnProperty("dateInput")) {
    const dateInput = event.common.formInputs[widgetName][""].dateInput.msSinceEpoch;
     if (dateInput != null) {
       return dateInput;
     }
  }

  return null;
}

/**
 * Converts date in milliseconds since epoch to user-friendly string.
 *
 * @param {Object} millis the milliseconds since epoch time.
 * @return {string} Display-friend date (English US).
 */
function convertMillisToDateString(millis) {
  const date = new Date(millis);
  const options = { year: 'numeric', month: 'long', day: 'numeric' };
  return date.toLocaleDateString('en-US', options);
}
contactForm.gs

Chứa các tiện ích nhận dữ liệu biểu mẫu từ người dùng. Các tiện ích nhập dữ liệu vào biểu mẫu này sẽ hiển thị trong các thẻ xuất hiện trong tin nhắn và hộp thoại.

Xem mã contactForm.gs

apps-script/contact-form-app/contactForm.gs
/**
 * Copyright 2024 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * The section of the contact card that contains the form input widgets. Used in a dialog and card message.
 * To add and preview widgets, use the Card Builder: https://addons.gsuite.google.com/uikit/builder
 */
const CONTACT_FORM_WIDGETS = [
  {
    "textInput": {
      "name": "contactName",
      "label": "First and last name",
      "type": "SINGLE_LINE"
    }
  },
  {
    "dateTimePicker": {
      "name": "contactBirthdate",
      "label": "Birthdate",
      "type": "DATE_ONLY"
    }
  },
  {
    "selectionInput": {
      "name": "contactType",
      "label": "Contact type",
      "type": "RADIO_BUTTON",
      "items": [
        {
          "text": "Work",
          "value": "Work",
          "selected": false
        },
        {
          "text": "Personal",
          "value": "Personal",
          "selected": false
        }
      ]
    }
  }
];
appsscript.json

Tệp kê khai Apps Script xác định và định cấu hình dự án Apps Script cho ứng dụng Chat.

Xem mã appsscript.json

apps-script/contact-form-app/appsscript.json
{
  "timeZone": "America/Los_Angeles",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {}
}

Tìm số và mã dự án trên Cloud

  1. Trong Google Cloud Console, hãy chuyển đến dự án trên Google Cloud.

    Truy cập vào bảng điều khiển Google Cloud

  2. Nhấp vào biểu tượng Cài đặt và tiện ích > Cài đặt dự án.

  3. Ghi lại các giá trị trong trường Số dự ánMã dự án. Bạn sẽ sử dụng các lớp này trong các phần sau.

Tạo dự án Apps Script

Cách tạo một dự án Apps Script và kết nối dự án đó với dự án Cloud của bạn:

  1. Nhấp vào nút sau để mở dự án Apps Script Quản lý danh bạ trong Google Chat.
    Mở dự án
  2. Nhấp vào Tổng quan.
  3. Trên trang tổng quan, hãy nhấp vào Biểu tượng để tạo bản sao Tạo bản sao.
  4. Đặt tên cho bản sao dự án Apps Script:

    1. Nhấp vào Bản sao của mục Quản lý người liên hệ trong Google Chat.

    2. Trong Tên dự án, hãy nhập Contact Manager - Google Chat app

    3. Nhấp vào Đổi tên.

Đặt dự án trên đám mây của dự án Apps Script

  1. Trong dự án Apps Script, hãy nhấp vào Biểu tượng cài đặt dự án Project Settings (Cài đặt dự án).
  2. Trong mục Dự án Google Cloud Platform (GCP), hãy nhấp vào Thay đổi dự án.
  3. Trong mục Số dự án trên GCP, hãy dán số dự án của dự án trên Cloud.
  4. Nhấp vào Đặt dự án. Dự án trên đám mây và dự án Apps Script hiện đã được kết nối.

Tạo quy trình triển khai Apps Script

Giờ đây, khi tất cả mã đã được triển khai, hãy triển khai dự án Apps Script. Bạn sử dụng mã nhận dạng triển khai khi định cấu hình ứng dụng Chat trong Google Cloud.

  1. Trong Apps Script, hãy mở dự án của ứng dụng Chat.

    Chuyển đến Apps Script

  2. Nhấp vào Triển khai > Triển khai mới.

  3. Nếu bạn chưa chọn Tiện ích bổ sung, bên cạnh phần Chọn loại, hãy nhấp vào loại triển khai Biểu tượng cài đặt dự án rồi chọn Tiện ích bổ sung.

  4. Trong phần Description (Nội dung mô tả), hãy nhập nội dung mô tả cho phiên bản này, chẳng hạn như Test of Contact Manager.

  5. Nhấp vào Triển khai. Apps Script báo cáo về việc triển khai thành công và cung cấp một mã triển khai.

  6. Nhấp vào biểu tượng Sao chép để sao chép mã hoạt động triển khai, sau đó nhấp vào Xong.

Định cấu hình ứng dụng Chat trong bảng điều khiển Google Cloud

Phần này cho biết cách định cấu hình API Google Chat trong Google Cloud Console bằng thông tin về ứng dụng Chat, bao gồm cả mã nhận dạng của bản triển khai mà bạn vừa tạo từ dự án Apps Script.

  1. Trong bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn &gt; Sản phẩm khác &gt; Google Workspace &gt; Thư viện sản phẩm &gt; API Google Chat &gt; Quản lý &gt; Cấu hình.

    Chuyển đến phần cấu hình Chat API

  2. Trong App name (Tên ứng dụng), hãy nhập Contact Manager.

  3. Trong URL hình đại diện, hãy nhập https://developers.google.com/chat/images/contact-icon.png.

  4. Trong mục Mô tả, hãy nhập Manage your personal and business contacts.

  5. Nhấp vào nút bật/tắt Bật tính năng tương tác để chuyển sang vị trí bật.

  6. Trong phần Chức năng, hãy chọn các hộp đánh dấu Nhận tin nhắn 1:1Tham gia không gian và cuộc trò chuyện nhóm.

  7. Trong phần Cài đặt kết nối, hãy chọn Apps Script (Tập lệnh ứng dụng).

  8. Trong Mã triển khai, hãy dán Mã triển khai Apps Script mà bạn đã sao chép trong phần trước khi tạo bản triển khai Apps Script.

  9. Trong phần Lệnh dấu gạch chéo, hãy thiết lập các lệnh dấu gạch chéo /about/addContact:

    1. Nhấp vào Thêm lệnh dấu gạch chéo để thiết lập lệnh dấu gạch chéo đầu tiên.
    2. Trong Name (Tên), hãy nhập /about.
    3. Trong Command ID, nhập 1.
    4. Trong mục Mô tả, hãy nhập Learn how to use this Chat app to manage your contacts.
    5. Chọn Mở hộp thoại.
    6. Nhấp vào Xong.
    7. Nhấp vào Thêm lệnh dấu gạch chéo để thiết lập một lệnh dấu gạch chéo khác.
    8. Trong Name (Tên), hãy nhập /addContact
    9. Trong Mã lệnh, hãy nhập 2.
    10. Trong mục Mô tả, hãy nhập Submit information about a contact.
    11. Chọn Mở hộp thoại.
    12. Nhấp vào Xong.
  10. Trong phần Chế độ hiển thị, hãy chọn hộp đánh dấu Cung cấp ứng dụng Chat này cho một số người và nhóm trong YOUR DOMAIN rồi nhập địa chỉ email của bạn.

  11. Trong mục Nhật ký, hãy chọn Ghi lỗi vào nhật ký.

  12. Nhấp vào Lưu. Một thông báo đã lưu cấu hình sẽ xuất hiện.

Ứng dụng Chat đã sẵn sàng để cài đặt và kiểm thử trong Chat.

Kiểm thử ứng dụng Chat

Để kiểm thử ứng dụng Chat, hãy mở một không gian tin nhắn trực tiếp bằng ứng dụng Chat và gửi tin nhắn:

  1. Mở Google Chat bằng tài khoản Google Workspace mà bạn đã cung cấp khi thêm chính mình làm người kiểm thử đáng tin cậy.

    Chuyển đến Google Chat

  2. Nhấp vào Cuộc trò chuyện mới.
  3. Trong trường Thêm 1 người trở lên, hãy nhập tên của ứng dụng Chat.
  4. Chọn ứng dụng Chat trong kết quả. Một tin nhắn trực tiếp sẽ mở ra.

  1. Trong tin nhắn trực tiếp mới với ứng dụng Chat, hãy nhập /addContact rồi nhấn enter.

  2. Trong hộp thoại mở ra, hãy nhập thông tin liên hệ:

    1. Trong trường văn bản Họ và tên, hãy nhập tên.
    2. Trong bộ chọn ngày Ngày sinh, hãy chọn một ngày.
    3. Trong phần Loại người liên hệ, hãy chọn nút chọn Nơi làm việc hoặc Cá nhân.
  3. Nhấp vào Xem xét và gửi.

  4. Trong hộp thoại xác nhận, hãy xem lại thông tin bạn đã gửi rồi nhấp vào Submit (Gửi). Ứng dụng Chat trả lời bằng một tin nhắn văn bản có nội dung là CONTACT NAME has been added to your contacts..

  5. Nếu muốn, bạn cũng có thể kiểm thử và gửi biểu mẫu liên hệ theo các cách sau:

    • Sử dụng lệnh dấu gạch chéo /about. Ứng dụng trò chuyện trả lời bằng một tin nhắn văn bản và một nút tiện ích phụ có nội dung Add a contact. Bạn có thể nhấp vào nút này để mở hộp thoại có biểu mẫu liên hệ.
    • Gửi tin nhắn trực tiếp cho ứng dụng Chat mà không cần lệnh dấu gạch chéo, chẳng hạn như Hello. Ứng dụng Chat sẽ trả lời bằng văn bản và thẻ chứa biểu mẫu liên hệ.

Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong hướng dẫn này, bạn nên xoá dự án trên Cloud.

  1. Trong Google Cloud Console, hãy chuyển đến trang Quản lý tài nguyên. Nhấp vào biểu tượng Trình đơn > IAM và quản trị > Quản lý tài nguyên.

    Chuyển đến Trình quản lý tài nguyên

  2. Trong danh sách dự án, hãy chọn dự án bạn muốn xoá rồi nhấp vào biểu tượng Xoá .
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Shut down (Tắt) để xoá dự án.