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

Hướng dẫn này trình bày cách xây dựng một ứng dụng Google Chat giúp Người dùng Google Chat quản lý danh bạ cá nhân và công việc của họ. Cần thu thập thông tin, ứng dụng Chat sẽ nhắc người dùng hoàn tất một biểu mẫu liên hệ trong thông báo và hộp thoại trên thẻ.

Xem cách hoạt động của ứng dụng Chat:

  • Biểu mẫu liên hệ từ lệnh dấu gạch chéo.
    Hình 1. Chiến lược phát hành đĩa đơn Ứng dụng Chat phản hồi lại lệnh dấu gạch chéo /about với một tin nhắn văn bản và nút mở một biểu mẫu liên hệ.
  • Biểu mẫu liên hệ trong hộp thoại.
    Hình 2. Chiến lược phát hành đĩa đơn Ứng dụng Chat sẽ mở ra 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. Chiến lược phát hành đĩa đơn Ứng dụng Chat trả về hộp thoại xác nhận để mà người dùng có thể xem và xác nhận thông tin trước khi đang 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 tệp tin nhắn văn bản để xác nhận việc gửi.
  • Biểu mẫu liên hệ từ tin nhắn trên thẻ.
    Hình 5. Chiến lược phát hành đĩa đơn Ứng dụng Chat cũng nhắc người dùng thêm người liên hệ từ một thẻ trong thông báo.

Đ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à các công cụ sử dụng sự kiện tương tác để xử lý và trả lời người dùng Chat.

Phần sau đây cho thấy cách người dùng thường có thể 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 phản hồi người dùng theo các 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ở hộp thoại có biểu mẫu liên hệ.
    • Phản hồi lệnh dấu 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 biểu mẫu liên hệ xuất hiện, người dùng nhập thông tin liên hệ vào các trường và tiện ích sau:

    • Họ và tên: a textInput tiện ích chấp nhận chuỗi.
    • Ngày sinh: một tiện ích dateTimePicker chỉ chấp nhận ngày.
    • 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ý một sự kiện tương tác CARD_CLICKED để xử lý các giá trị mà người dùng nhập vào, đồng thời hiển thị các giá trị đó 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 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ị > Tạo dự án.

    Chuyển đến phần 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. 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 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.

Giao diện dòng lệnh (CLI) của gcloud

Truy cập vào Google Cloud ở một trong các môi trường phát triển sau đây CLI (gcloud):

  • Cloud Shell: Để sử dụng thiết bị đầu cuối trực tuyến với gcloud CLI đã thiết lập, 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ộ, cài đặtkhởi động giao diện dòng lệnh (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 mà 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ột Màn hình xin phép bằng OAuth để người dùng có thể cấp quyền cho ứng dụng của bạn trong các ứng dụng của Google Workspace, bao gồm Google Chat.

Trong hướng dẫn này, bạn triển khai một ứng dụng Chat chỉ dành cho thử nghiệm và sử dụng nội bộ, vì vậy bạn có thể dùng thông tin giữ chỗ cho màn hình xin phép. Trước khi xuất bản ứng dụng Chat, hãy thay thế mọi thông tin giữ chỗ có thông tin thực.

  1. Trong Google Cloud Console, hãy chuyển đến Trình đơn > API và dịch vụ > Màn hình đồ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 Email hỗ trợ người dùng, hãy chọn địa chỉ email của bạn hoặc một nhóm trên Google Groups.

  5. Trong mục 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. (Các Ứng dụng Chat không yêu cầu bất kỳ phạm vi OAuth nào.)

  8. Xem lại tóm tắt, sau đó 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 sao chép và cập nhật toàn bộ Dự án Apps Script chứa tất cả ứng dụng cần thiết mã cho ứng dụng Chat, nên bạn không cần sao chép và hãy 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 của ứ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 từ một tin nhắn trong ứng dụng Chat hoặc mở rồi đóng các 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: "openDialog",
              interaction: "OPEN_DIALOG"
            }}
          }]}}]
        }
      case 2:
        // If the slash command is "/addContact", opens a dialog.
        return openDialog(event);
    }
  }

  // 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 : "openNextCard" }}
          }]}
        }])}]
      }
    }]
  };
}

/**
 * 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 === "openDialog") {
    return openDialog(event);
  // Second dialog form page
  } else if (event.common.invokedFunction === "openNextCard") {
    return openNextCard(
      event.user,
      fetchFormValue(event, "contactName"),
      fetchFormValue(event, "contactBirthdate"),
      fetchFormValue(event, "contactType"),
      event.isDialogEvent
    );
  // Dialog form submission
  } else if (event.common.invokedFunction === "submitForm") {
    const userInputs = event.common.parameters;
    return submitForm(event.user, userInputs, event.dialogEventType);
  }
}

/**
 * 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;
}

/**
 * Opens a dialog that prompts users to add details about a contact.
 *
 * @return {Object} a message with an action response to open a dialog.
 */
function openDialog() {
  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: "openNextCard" }}
        }]}
      }])
    }]}}}
  }};
}

/**
 * Returns a dialog or card message that displays a confirmation of contact
 * details before users submit.
 *
 * @param {String} user the user who submitted the information.
 * @param {String} contactName the contact name from the previous dialog or card.
 * @param {String} contactBirthdate the birthdate from the previous dialog or card.
 * @param {String} contactType the contact type from the previous dialog or card.
 * @param {boolean} fromDialog whether the information was submitted from a dialog.
 *
 * @return {Object} returns a dialog or private card message.
 */
function openNextCard(user, contactName, contactBirthdate, contactType, fromDialog) {
  const name = contactName ?? "<i>Not provided</i>";
  const birthdate = contactBirthdate ?? "<i>Not provided</i>";
  const type = contactType ?? "<i>Not provided</i>";
  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 (fromDialog) {
    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: user,
    cardsV2: [{
      card: { sections: [cardConfirmation]}
    }]
  }
}

/**
  * Submits information from a dialog or card message.
  *
  * @param {Object} user the person who submitted the information.
  * @param {Object} userInputs the form input values from event parameters.
  * @param {boolean} dialogEventType "SUBMIT_DIALOG" if from a dialog.
  * @return {Object} a message response that opens a dialog or posts a private
  *                  message.
  */
function submitForm(user, userInputs, dialogEventType) {
  const contactName = userInputs["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 (dialogEventType === "SUBMIT_DIALOG") {
      return { actionResponse: {
        type: "DIALOG",
        dialogAction: { actionStatus: {
          statusCode: "INVALID_ARGUMENT",
          userFacingMessage: errorMessage
        }}
      }};
    } else {
      return {
        privateMessageViewer: 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 (dialogEventType === "SUBMIT_DIALOG") {
    return {
      actionResponse: {
        type: "NEW_MESSAGE",
        dialogAction: { actionStatus: {
          statusCode: "OK",
          userFacingMessage: "Success " + JSON.stringify(contactName)
        }}
      },
      privateMessageViewer: user,
      text: confirmationMessage
    }
  } else {
    return {
      actionResponse: { type: "NEW_MESSAGE" },
      privateMessageViewer: user,
      text: confirmationMessage
    };
  }
}

/**
 * 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. Thông tin nhập vào biểu mẫu này các tiện ích được hiển thị trong thẻ xuất hiện trong thông báo 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

Chiến lược phát hành đĩa đơn Tệp kê khai Apps Script giúp 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 bảng điều khiển Google Cloud, hãy chuyển đến dự án của bạn trên Cloud.

    Chuyển đến Google Cloud Console

  2. Nhấp vào Cài đặt và tiện ích &gt; 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 dự án Apps Script và kết nối dự án đó với dự án trên Cloud:

  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 Project title (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, nhấp vào Biểu tượng cho phần cài đặt dự án 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 GCP, hãy dán số dự án của dự án trên Google Cloud.
  4. Nhấp vào Đặt dự án. Dự án Cloud và Apps Script dự án hiện đã được kết nối.

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

Giờ đây, khi tất cả mã đã sẵn sàng, hãy triển khai dự án Apps Script. Bạn sử dụng mã 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.

    Truy cập Apps Script

  2. Nhấp vào Triển khai > Quá trình 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 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. Đã báo cáo thành công Apps Script triển khai và cung cấp mã triển khai.

  6. Nhấp vào Sao chép để sao chép mã triển khai, sau đó nhấp vào Xong.

Định cấu hình ứng dụng Chat trong Google Cloud Console

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 API Chat

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

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

  4. Trong Description (Nội dung 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 hộp đánh dấu Nhận tin nhắn 1:1Tham gia các không gian và cuộc trò chuyện nhóm.

  7. Trong phần Connection settings (Cài đặt kết nối), hãy chọn Apps Script.

  8. Trong mục Deployment ID (Mã triển khai), hãy dán ID triển khai Apps Script mà bạn đã sao chép ở phần trước. 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 Mã lệnh, hãy nhập 1.
    4. Trong phần 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 Command ID, nhập 2.
    10. Trong phần 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 Chia sẻ ứng dụng nhắn tin này với những người và nhóm cụ thể 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à thử nghiệm trong Trò chuyện.

Kiểm thử ứng dụng Chat

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

  1. Mở Google Chat bằng tài khoản Google Workspace mà bạn khi bạn tự thêm chính mình làm người kiểm tra đá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 hoặc nhiều người, nhập tên của Ứng dụng Chat.
  4. Chọn ứng dụng Chat của bạn trong kết quả. Người trực tiếp tin nhắn sẽ mở ra.

  1. Trong tin nhắn trực tiếp mới bằng ứng dụng Chat, nhập /addContact rồi nhấn phím 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 một tên.
    2. Trong bộ chọn ngày Ngày sinh, hãy chọn một ngày.
    3. Trong mục Loại liên hệ, hãy chọn nút chọn Công 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 và nhấp vào 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. Phản hồi của ứng dụng Chat với một tin nhắn văn bản và một nút trên tiện ích phụ kiện cho biết 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 đến ứ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 trả lời bằng một 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 Google Cloud.

  1. Trong bảng điều khiển Google Cloud, 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 Tắt để xoá dự án.