Xử lý sự cố bằng Google Chat, Vertex AI và Apps Script

Hướng dẫn này trình bày cách tạo một ứng dụng Google Chat phản hồi các sự cố theo thời gian thực. Khi phản hồi một sự cố, ứng dụng sẽ tạo và điền sẵn thông tin vào một không gian trên Chat, hỗ trợ giải quyết sự cố bằng tin nhắn, lệnh gạch chéo và hộp thoại, đồng thời sử dụng AI để tóm tắt phản hồi sự cố trong một tài liệu trên Google Tài liệu.

Hướng dẫn này sử dụng các phạm vi uỷ quyền bắt đầu bằng https://www.googleapis.com/auth/chat.app.*. Các phạm vi này có trong Bản dùng thử cho nhà phát triển. Ứng dụng Chat của bạn phải nhận được sự phê duyệt một lần của quản trị viên.

Sự cố là một sự kiện cần được một nhóm người chú ý ngay lập tức để giải quyết. Ví dụ về các sự cố:

  • Một trường hợp khẩn cấp được tạo trong nền tảng Quản lý quan hệ khách hàng (CRM), yêu cầu nhóm dịch vụ cộng tác để giải quyết.
  • Một hệ thống ngừng hoạt động, cảnh báo một nhóm kỹ sư đảm bảo độ tin cậy cho trang web (SRE) để họ có thể cùng nhau đưa hệ thống trở lại trạng thái hoạt động.
  • Động đất có cường độ cao xảy ra và nhân viên cứu hộ khẩn cấp cần phối hợp hành động.

Trong phạm vi hướng dẫn này, cảnh báo sự cố sẽ bắt đầu khi người dùng báo cáo sự cố bằng cách nhấp vào nút trên một trang web. Trang web này mô phỏng một sự cố bằng cách yêu cầu người dùng nhập thông tin cơ bản về sự cố: tiêu đề, nội dung mô tả và địa chỉ email của người phản hồi.

Xem cách hoạt động của Ứng dụng Chat để quản lý sự cố:

  • Trang web bắt đầu một sự cố.
    Hình 1. Trang web nơi người dùng có thể báo cáo sự cố.
  • Thông báo cho biết phòng Chat về sự cố đã được tạo.
    Hình 2. Thông báo cho biết không gian Chat về sự cố đã được tạo.
  • Phòng Chat phản hồi sự cố.
    Hình 3. Không gian Chat phản hồi sự cố.
  • Giải quyết sự cố bằng lệnh dấu gạch chéo.
    Hình 4. Giải quyết sự cố bằng lệnh dấu gạch chéo.
  • Hộp thoại giải quyết sự cố.
    Hình 5. Hộp thoại giải quyết sự cố.
  • Tài liệu Google Tài liệu về cách giải quyết sự cố được chia sẻ trong không gian.
    Hình 6. Tài liệu Google Tài liệu về cách giải quyết sự cố được chia sẻ trong không gian.
  • Tài liệu Google về cách giải quyết sự cố liên quan đến bản tóm tắt do AI tạo.
    Hình 7. Tài liệu Google Tài liệu về cách giải quyết sự cố liên quan đến bản tóm tắt do AI tạo.

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

Nếu bạn cần bật bất kỳ điều kiện tiên quyết nào trong số này cho tổ chức của mình, hãy yêu cầu quản trị viên Google Workspace bật các điều kiện đó:

  • Tài khoản Google Workspace Business hoặc Enterprise có quyền truy cập vào Google Chat.
  • Để bật Thư mục (chia sẻ thông tin liên hệ) cho Google Workspace. Ứng dụng sự cố sử dụng thư mục này để tra cứu thông tin liên hệ của người phản hồi sự cố, chẳng hạn như tên và địa chỉ email. Nhân viên ứng phó sự cố phải là người dùng có tài khoản Google Chat trong tổ chức Google Workspace của bạn.

Mục tiêu

  • Xây dựng một ứng dụng Chat phản hồi các sự cố.
  • Giúp người dùng phản hồi các sự cố bằng cách làm như sau:
    • Tạo không gian ứng phó sự cố.
    • Đăng tin nhắn tóm tắt các sự cố và phản hồi.
    • Hỗ trợ cộng tác bằng các tính năng của ứng dụng Chat tương tác.
  • Tóm tắt các cuộc trò chuyện và giải pháp bằng Vertex AI.

Kiến trúc

Sơ đồ sau đây cho thấy cấu trúc của Google Workspace và các tài nguyên trên Google Cloud mà ứng dụng Google Chat dùng để ứng phó sự cố.

Cấu trúc của ứng dụng Google Chat để ứng phó sự cố

Cấu trúc này cho biết cách ứng dụng Google Chat ứng phó sự cố xử lý một sự cố và giải pháp.

  1. Người dùng bắt đầu một sự cố từ một trang web bên ngoài được lưu trữ trên Apps Script.

  2. Trang web này gửi một yêu cầu HTTP không đồng bộ đến ứng dụng Google Chat (cũng được lưu trữ trên Apps Script).

  3. Ứng dụng Google Chat về ứng phó sự cố sẽ xử lý yêu cầu:

    1. Dịch vụ Apps Script Admin SDK sẽ lấy thông tin về thành viên trong nhóm, chẳng hạn như mã nhận dạng người dùng và địa chỉ email.

    2. Với một nhóm yêu cầu HTTP đến API Chat bằng cách sử dụng dịch vụ Chat nâng cao của Apps Script, ứng dụng Google Chat phản hồi sự cố sẽ tạo một không gian Chat phản hồi sự cố, điền sẵn các thành viên trong nhóm và gửi một tin nhắn đến không gian đó.

  4. Các thành viên trong nhóm thảo luận về sự cố trong không gian Chat.

  5. Một thành viên trong nhóm gọi một lệnh dấu gạch chéo để báo hiệu giải pháp cho sự cố.

    1. Một lệnh gọi HTTP đến API Chat bằng cách sử dụng dịch vụ Chat nâng cao của Apps Script sẽ liệt kê tất cả tin nhắn của không gian Chat.

    2. Vertex AI nhận các thông báo được liệt kê và tạo một bản tóm tắt.

    3. Dịch vụ DocumentApp của Apps Script tạo một tài liệu trên Docs và thêm bản tóm tắt của Vertex AI vào tài liệu đó.

    4. Ứng dụng Google Chat về ứng phó sự cố gọi Chat API để gửi thông báo chia sẻ đường liên kết đến tài liệu tóm tắt trên Google Tài liệu.

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

Phần này hướng dẫn cách tạo và định cấu hình một dự án trê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 Google Cloud Console, hãy chuyển đến phầ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 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ã dự án đáp ứng nhu cầu của bạn trong suốt thời gian tồn tại của dự án.

  3. Trong trường Location (Vị trí), hãy nhấp vào Browse (Duyệt xem) để hiện 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. Bảng điều khiển Google Cloud sẽ chuyển đến 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 một 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 gcloud.
    Để tạo một dự án trên 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.

Bật tính năng thanh toán cho dự án trên Google Cloud

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

  1. Trong Google Cloud Console, hãy chuyển đến phần Thanh toán. Nhấp vào Trình đơn > Thanh toán > Dự án của tôi.

    Chuyển đến phần Thanh toán cho dự án của tôi

  2. Trong phần Chọn một tổ chức, hãy chọn tổ chức được liên kết với dự án Google Cloud của bạn.
  3. Trong hàng dự án, hãy mở trình đơn Hành động (), nhấp vào Thay đổi thông tin thanh toán rồi chọn tài khoản thanh toán trên đám mây.
  4. Nhấp vào Thiết lập tài khoản.

gcloud CLI

  1. Để liệt kê các tài khoản thanh toán hiện có, hãy chạy lệnh:
    gcloud billing accounts list
  2. Liên kết tài khoản thanh toán với một dự án trên Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Thay thế nội dung sau:

    • PROJECT_IDMã dự án cho dự án trên Đám mây mà bạn muốn bật tính năng thanh toán.
    • BILLING_ACCOUNT_IDmã tài khoản thanh toán cần liên kết với dự án trên Google Cloud.

Bật các API

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

  1. Trong Google Cloud Console, hãy bật Google Chat API, Google Tài liệu API, API SDK dành cho quản trị viên, Google Workspace Marketplace SDK và Vertex AI API.

    Bật các API

  2. Xác nhận rằng bạn đang bật các API trong dự án Cloud chính xác, sau đó nhấp vào Tiếp theo.

  3. Xác nhận rằng bạn đang bật đúng API, sau đó nhấp vào Bật.

gcloud CLI

  1. Nếu cần, hãy đặt dự án hiện tại trên Cloud thành dự án mà bạn đã tạo bằng lệnh gcloud config set project:

    gcloud config set project PROJECT_ID

    Thay PROJECT_ID bằng Mã dự án của dự án trên Cloud mà bạn đã tạo.

  2. Bật API Google Chat, API Google Tài liệu, API Admin SDK, Google Workspace Marketplace SDK và API Vertex AI bằng lệnh gcloud services enable:

    gcloud services enable chat.googleapis.com docs.googleapis.com admin.googleapis.com aiplatform.googleapis.com appsmarket-component.googleapis.com

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

Ứng dụng Chat truy cập vào API Chat của Google bằng thông tin xác thực của ứng dụng Chat. Ứng dụng truy cập vào API Admin SDK và Google Tài liệu API bằng thông tin đăng nhập của người dùng.

Thiết lập quy trình xác thực và cấp quyền cho người dùng

Xác thực và uỷ quyền cho phép ứng dụng Chat truy cập vào các tài nguyên trong Google Workspace và Google Cloud để xử lý một sự cố. Cụ thể, quy trình xác thực người dùng được dùng để gọi API Google Tài liệu và API SDK dành cho quản trị viên.

Trong hướng dẫn này, bạn sẽ xuất bản ứng dụng nội bộ cho miền Workspace của mình, vì vậy, bạn có thể sử dụng thông tin giữ chỗ. Trước khi xuất bản ứng dụng ra bên ngoài, hãy thay thế thông tin trình giữ chỗ bằng thông tin thực tế trong màn hình xin phép.

  1. Trong Google Cloud Console, hãy chuyển đến phần Trình đơn > > Thương hiệu.

    Chuyển đến phần Thương hiệu

  2. Nếu đã định cấu hình, bạn có thể định cấu hình các chế độ cài đặt sau đây cho Màn hình đồng ý OAuth trong Thương hiệu, Đối tượngQuyền truy cập vào dữ liệu. Nếu bạn thấy thông báo chưa được định cấu hình, hãy nhấp vào Bắt đầu:

    1. Trong phần App Information (Thông tin ứng dụng), trong phần App name (Tên ứng dụng), hãy nhập Incident Management.
    2. Trong phần Email hỗ trợ người dùng, hãy chọn địa chỉ email của bạn hoặc một nhóm thích hợp trên Google.
    3. Nhấp vào Tiếp theo.
    4. Trong phần Đối tượng người xem, hãy chọn Nội bộ. Nếu bạn không chọn được Nội bộ, hãy chọn Bên ngoài.
    5. Nhấp vào Tiếp theo.
    6. Trong phần Thông tin liên hệ, hãy nhập Địa chỉ email để bạn có thể nhận được thông báo về mọi thay đổi đối với dự án của mình.
    7. Nhấp vào Tiếp theo.
    8. Trong phần Hoàn tất, hãy xem kỹ Chính sách dữ liệu người dùng của dịch vụ API của Google. Nếu bạn đồng ý, hãy chọn Tôi đồng ý với Chính sách dữ liệu người dùng của dịch vụ API của Google.
    9. Nhấp vào Tiếp tục.
    10. Nhấp vào Tạo.
    11. Nếu bạn chọn Bên ngoài cho loại người dùng, hãy thêm người dùng thử nghiệm:
      1. Nhấp vào Đối tượng.
      2. Trong phần Người dùng kiểm thử, hãy nhấp vào Thêm người dùng.
      3. Nhập địa chỉ email của bạn và mọi người dùng kiểm thử được uỷ quyền khác, sau đó nhấp vào Lưu.
  3. Nhấp vào Quyền truy cập vào dữ liệu > Thêm hoặc xoá phạm vi. Một bảng điều khiển sẽ xuất hiện với danh sách các phạm vi cho từng API mà bạn đã bật trong dự án Google Cloud.

    1. Trong mục Thêm phạm vi theo cách thủ công, hãy dán các phạm vi sau:

      • https://www.googleapis.com/auth/documents
      • https://www.googleapis.com/auth/admin.directory.user.readonly
      • https://www.googleapis.com/auth/script.external_request
      • https://www.googleapis.com/auth/userinfo.email
      • https://www.googleapis.com/auth/cloud-platform
    2. Nhấp vào Thêm vào bảng.

    3. Nhấp vào Cập nhật.

    4. Sau khi chọn các phạm vi mà ứng dụng của bạn yêu cầu, trên trang Quyền truy cập vào dữ liệu, hãy nhấp vào Lưu.

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

Xác thực ứng dụng được dùng để gọi Google Chat API.

Tạo tài khoản dịch vụ trong bảng điều khiển Google Cloud

Để tạo tài khoản dịch vụ, hãy làm theo các bước sau:

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

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > IAM và Quản trị > Tài khoản dịch vụ.

    Chuyển đến phần Tài khoản dịch vụ

  2. Nhấp vào Tạo tài khoản dịch vụ.
  3. Điền thông tin tài khoản dịch vụ, rồi nhấp vào Tạo và tiếp tục.
  4. Không bắt buộc: Chỉ định vai trò cho tài khoản dịch vụ của bạn để cấp quyền truy cập vào các tài nguyên của dự án Google Cloud. Để biết thêm thông tin chi tiết, hãy tham khảo bài viết Cấp, thay đổi và thu hồi quyền truy cập vào tài nguyên.
  5. Nhấp vào Tiếp tục.
  6. Không bắt buộc: Nhập người dùng hoặc nhóm có thể quản lý và thực hiện các thao tác bằng tài khoản dịch vụ này. Để biết thêm thông tin, hãy tham khảo bài viết Quản lý hoạt động mạo danh tài khoản dịch vụ.
  7. Nhấp vào Xong. Ghi lại địa chỉ email của tài khoản dịch vụ.

gcloud CLI

  1. Tạo tài khoản dịch vụ:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Không bắt buộc: Chỉ định vai trò cho tài khoản dịch vụ của bạn để cấp quyền truy cập vào các tài nguyên của dự án Google Cloud. Để biết thêm thông tin chi tiết, hãy tham khảo bài viết Cấp, thay đổi và thu hồi quyền truy cập vào tài nguyên.

Tài khoản dịch vụ sẽ xuất hiện trên trang tài khoản dịch vụ. Tiếp theo, hãy tạo một khoá riêng tư cho tài khoản dịch vụ.

Tạo khoá riêng tư

Để tạo và tải khoá riêng tư xuống cho tài khoản dịch vụ, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > IAM và Quản trị > Tài khoản dịch vụ.

    Chuyển đến phần Tài khoản dịch vụ

  2. Chọn tài khoản dịch vụ của bạn.
  3. Nhấp vào Khoá > Thêm khoá > Tạo khoá mới.
  4. Chọn JSON, rồi nhấp vào Tạo.

    Cặp khoá công khai/riêng tư mới của bạn sẽ được tạo và tải xuống máy của bạn dưới dạng một tệp mới. Lưu tệp JSON đã tải xuống dưới dạng credentials.json trong thư mục đang hoạt động. Tệp này là bản sao duy nhất của khoá này. Để biết thông tin về cách lưu trữ khoá một cách an toàn, hãy xem phần Quản lý khoá tài khoản dịch vụ.

  5. Nhấp vào Close (Đóng).

Để biết thêm thông tin về tài khoản dịch vụ, hãy xem phần tài khoản dịch vụ trong tài liệu IAM của Google Cloud.

Tạo ứng dụng OAuth tương thích với Google Workspace Marketplace

Để tạo một ứng dụng OAuth tương thích với Google Workspace Marketplace, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > IAM và quản trị > Tài khoản dịch vụ.

    Chuyển đến phần Tài khoản dịch vụ

  2. Nhấp vào tài khoản dịch vụ mà bạn đã tạo cho ứng dụng Chat.

  3. Nhấp vào Cài đặt nâng cao.

  4. Nhấp vào Tạo ứng dụng khách OAuth tương thích với Google Workspace Marketplace.

  5. Nhấp vào Tiếp tục.

Một thông báo xác nhận sẽ xuất hiện cho biết bạn đã tạo một ứng dụng OAuth tương thích với Google Workspace Marketplace.

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 của mình, nên bạn không cần sao chép và dán từng tệp.

Một số hàm có dấu gạch dưới ở cuối tên, chẳng hạn như processSlashCommand_() từ ChatApp.gs. Dấu gạch dưới sẽ ẩn hàm này khỏi trang web khởi tạo sự cố khi trang này mở trong trình duyệt. Để biết thêm thông tin, hãy xem phần Hàm riêng tư.

Apps Script hỗ trợ hai loại tệp, đó là tập lệnh .gs và tệp .html. Để tuân thủ chế độ hỗ trợ này, JavaScript phía máy khách của ứng dụng sẽ được đưa vào bên trong thẻ <script /> và CSS của ứng dụng sẽ được đưa vào bên trong thẻ <style /> trong tệp HTML.

Bạn có thể xem toàn bộ dự án trên GitHub (nếu muốn).

Xem trên GitHub

Sau đây là thông tin tổng quan về từng tệp:

Consts.gs

Xác định các hằng số mà các tệp mã khác tham chiếu, bao gồm cả mã dự án Cloud, mã vị trí Vertex AI, thông tin đăng nhập ứng dụng cho tài khoản dịch vụ và mã lệnh gạch chéo để đóng một sự cố.

Xem mã Consts.gs

apps-script/incident-response-app-auth/Consts.gs
const PROJECT_ID = 'replace-with-your-project-id';
const CLOSE_INCIDENT_COMMAND_ID = 1;
const APP_CREDENTIALS = 'replace-with-your-app-credentials';
const APP_CREDENTIALS_SCOPES = 'https://www.googleapis.com/auth/chat.bot https://www.googleapis.com/auth/chat.app.memberships https://www.googleapis.com/auth/chat.app.spaces.create';
const VERTEX_AI_LOCATION_ID = 'us-central1';
const MODEL_ID = 'gemini-1.5-flash-002';
ChatApp.gs

Xử lý các sự kiện tương tác trên Chat, bao gồm cả tin nhắn, lượt nhấp vào thẻ, lệnh gạch chéo và hộp thoại. Phản hồi lệnh dấu gạch chéo /closeIncident bằng cách mở một hộp thoại để thu thập thông tin chi tiết về cách giải quyết sự cố. Đọc tin nhắn trong không gian bằng cách gọi phương thức spaces.messages.list trong API Chat. Lấy mã nhận dạng người dùng bằng dịch vụ Thư mục Admin SDK trong Apps Script.

Xem mã ChatApp.gs

apps-script/incident-response-app-auth/ChatApp.gs
/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident").
 * It will respond to any other message with a simple "Hello" text message.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  if (event.message.slashCommand) {
    return processSlashCommand_(event);
  }
  return { "text": "Hello from Incident Response app!" };
}

/**
 * Responds to a CARD_CLICKED event in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 *
 * @param {Object} event the event object from Google Chat
 */
function onCardClick(event) {
  if (event.isDialogEvent) {
    if (event.dialogEventType == 'SUBMIT_DIALOG') {
      return processSubmitDialog_(event);
    }
    return {
      actionResponse: {
        type: "DIALOG",
        dialogAction: {
          actionStatus: "OK"
        }
      }
    };
  }
}

/**
 * Responds to a MESSAGE event with a Slash command in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident")
 * by returning a Dialog.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSlashCommand_(event) {
  if (event.message.slashCommand.commandId != CLOSE_INCIDENT_COMMAND_ID) {
    return {
      "text": "Command not recognized. Use the command `/closeIncident` to close the incident managed by this space."
    };
  }
  const sections = [
    {
      header: "Close Incident",
      widgets: [
        {
          textInput: {
            label: "Please describe the incident resolution",
            type: "MULTIPLE_LINE",
            name: "description"
          }
        },
        {
          buttonList: {
            buttons: [
              {
                text: "Close Incident",
                onClick: {
                  action: {
                    function: "closeIncident"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ];
  return {
    actionResponse: {
      type: "DIALOG",
      dialogAction: {
        dialog: {
          body: {
            sections,
          }
        }
      }
    }
  };
}

/**
 * Responds to a CARD_CLICKED event with a Dialog submission in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 * It creates a Doc with a summary of the incident information and posts a message
 * to the space with a link to the Doc.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSubmitDialog_(event) {
  const resolution = event.common.formInputs.description[""].stringInputs.value[0];
  const chatHistory = concatenateAllSpaceMessages_(event.space.name);
  const chatSummary = summarizeChatHistory_(chatHistory);
  const docUrl = createDoc_(event.space.displayName, resolution, chatHistory, chatSummary);
  return {
    actionResponse: {
      type: "NEW_MESSAGE",
    },
    text: `Incident closed with the following resolution: ${resolution}\n\nHere is the automatically generated post-mortem:\n${docUrl}`
  };
}

/**
 * Lists all the messages in the Chat space, then concatenate all of them into
 * a single text containing the full Chat history.
 *
 * For simplicity for this demo, it only fetches the first 100 messages.
 *
 * Messages with slash commands are filtered out, so the returned history will
 * contain only the conversations between users and not app command invocations.
 *
 * @return {string} a text containing all the messages in the space in the format:
 *          Sender's name: Message
 */
function concatenateAllSpaceMessages_(spaceName) {
  // Call Chat API method spaces.messages.list
  const response = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 });
  const messages = response.messages;
  // Fetch the display names of the message senders and returns a text
  // concatenating all the messages.
  let userMap = new Map();
  return messages
    .filter(message => message.slashCommand === undefined)
    .map(message => `${getUserDisplayName_(userMap, message.sender.name)}: ${message.text}`)
    .join('\n');
}

/**
 * Obtains the display name of a user by using the Admin Directory API.
 *
 * The fetched display name is cached in the provided map, so we only call the API
 * once per user.
 *
 * If the user does not have a display name, then the full name is used.
 *
 * @param {Map} userMap a map containing the display names previously fetched
 * @param {string} userName the resource name of the user
 * @return {string} the user's display name
 */
function getUserDisplayName_(userMap, userName) {
  if (userMap.has(userName)) {
    return userMap.get(userName);
  }
  let displayName = 'Unknown User';
  try {
    const user = AdminDirectory.Users.get(
      userName.replace("users/", ""),
      { projection: 'BASIC', viewType: 'domain_public' });
    displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
  } catch (e) {
    // Ignore error if the API call fails (for example, because it's an
    // out-of-domain user or Chat app)) and just use 'Unknown User'.
  }
  userMap.set(userName, displayName);
  return displayName;
}
ChatSpaceCreator.gs

Nhận dữ liệu biểu mẫu mà người dùng nhập trên trang web khởi tạo sự cố và sử dụng dữ liệu đó để thiết lập một không gian trò chuyện bằng cách tạo và điền sẵn dữ liệu, sau đó đăng một thông báo về sự cố.

Xem mã ChatSpaceCreator.gs

apps-script/incident-response-app-auth/ChatSpaceCreator.gs
/**
 * Handles an incident by creating a chat space, adding members, and posting a message.
 * All the actions are done using application credentials.
 *
 * @param {Object} formData - The data submitted by the user. It should contain the fields:
 *                           - title: The display name of the chat space.
 *                           - description: The description of the incident.
 *                           - users: A comma-separated string of user emails to be added to the space.
 * @return {string} The resource name of the new space.
 */
function handleIncident(formData) {
  const users = formData.users.trim().length > 0 ? formData.users.split(',') : [];
  const service = getService_();
  if (!service.hasAccess()) {
    console.error(service.getLastError());
    return;
   }
  const spaceName = createChatSpace_(formData.title, service);
  createHumanMembership_(spaceName, getUserEmail(), service);
  for (const user of users ){
    createHumanMembership_(spaceName, user, service);
  }
  createMessage_(spaceName, formData.description, service);
  return spaceName;
}
/**
 * Creates a chat space with application credentials.
 *
 * @param {string} displayName - The name of the chat space.
 * @param {object} service - The credentials of the service account.
 * @returns {string} The resource name of the new space.
*/
function createChatSpace_(displayName, service) {
  try {
    // For private apps, the alias can be used
    const my_customer_alias = "customers/my_customer";
    // Specify the space to create.
    const space = {
        displayName: displayName,
        spaceType: 'SPACE',                
        customer: my_customer_alias
    };
    // Call Chat API with a service account to create a message.
    const createdSpace = Chat.Spaces.create(
        space,
        {},
        // Authenticate with the service account token.
        {'Authorization': 'Bearer ' + service.getAccessToken()});
    return createdSpace.name;
  } catch (err) {
    // TODO (developer) - Handle exception.
    console.log('Failed to create space with error %s', err.message);
  }
}
/*
 * Creates a chat message with application credentials.
 *
 * @param {string} spaceName - The resource name of the space.
 * @param {string} message - The text to be posted.
 * @param {object} service - The credentials of the service account.
 * @return {string} the resource name of the new space.
 */
function createMessage_(spaceName, message, service) {
  try {
    // Call Chat API with a service account to create a message.
    const result = Chat.Spaces.Messages.create(
        {'text': message},
        spaceName,
        {},
        // Authenticate with the service account token.
        {'Authorization': 'Bearer ' + service.getAccessToken()});

  } catch (err) {
    // TODO (developer) - Handle exception.
    console.log('Failed to create message with error %s', err.message);
  }
}
/**
 * Creates a human membership in a chat space with application credentials.
 *
 * @param {string} spaceName - The resource name of the space.
 * @param {string} email - The email of the user to be added.
 * @param {object} service - The credentials of the service account.
 */
function createHumanMembership_(spaceName, email, service){
  try{
    const membership = {
      member: {
        name: 'users/'+email,
        // User type for the membership
        type: 'HUMAN'
      }
    };
    const result = Chat.Spaces.Members.create(
      membership,
      spaceName,
      {},
      {'Authorization': 'Bearer ' + service.getAccessToken()}
    );
  } catch (err){
    console.log('Failed to create membership with error %s', err.message)
  }

}

 /*
 * Creates a service for the service account.
 * @return {object}  - The credentials of the service account.
 */
function getService_() {
  return OAuth2.createService(APP_CREDENTIALS.client_email)
      .setTokenUrl('https://oauth2.googleapis.com/token')
      .setPrivateKey(APP_CREDENTIALS.private_key)
      .setIssuer(APP_CREDENTIALS.client_email)
      .setSubject(APP_CREDENTIALS.client_email)
      .setScope(APP_CREDENTIALS_SCOPES)
      .setPropertyStore(PropertiesService.getScriptProperties());
}
DocsApi.gs

Gọi API Google Tài liệu để tạo một tài liệu Google Tài liệu trong Google Drive của người dùng và ghi nội dung tóm tắt thông tin về sự cố (được tạo trong VertexAiApi.gs) vào tài liệu đó.

Xem mã DocsApi.gs

apps-script/incident-response-app-auth/DocsApi.gs
/**
 * Creates a Doc in the user's Google Drive and writes a summary of the incident information to it.
 *
 * @param {string} title The title of the incident
 * @param {string} resolution Incident resolution described by the user
 * @param {string} chatHistory The whole Chat history be included in the document
 * @param {string} chatSummary A summary of the Chat conversation to be included in the document
 * @return {string} the URL of the created Doc
 */
function createDoc_(title, resolution, chatHistory, chatSummary) {
  let doc = DocumentApp.create(title);
  let body = doc.getBody();
  body.appendParagraph(`Post-Mortem: ${title}`).setHeading(DocumentApp.ParagraphHeading.TITLE);
  body.appendParagraph("Resolution").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(resolution);
  body.appendParagraph("Summary of the conversation").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatSummary);
  body.appendParagraph("Full Chat history").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatHistory);
  return doc.getUrl();
}
VertexAiApi.gs

Tóm tắt cuộc trò chuyện trong không gian Chat bằng Vertex AI API. Bản tóm tắt này được đăng trong một tài liệu được tạo riêng trong DocsAPI.gs.

Xem mã VertexAiApi.gs

apps-script/incident-response-app-auth/VertexAiApi.gs
/**
 * Summarizes a Chat conversation using the Vertex AI text prediction API.
 *
 * @param {string} chatHistory The Chat history that will be summarized.
 * @return {string} The content from the text prediction response.
 */


function summarizeChatHistory_(chatHistory) {

  const API_ENDPOINT = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}/publishers/google/models/${MODEL_ID}:generateContent`;
  const prompt = "Summarize the following conversation between Engineers resolving an incident"
      + " in a few sentences. Use only the information from the conversation.\n\n" + chatHistory;
  // Get the access token.
  const accessToken = ScriptApp.getOAuthToken();

  const headers = {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json',
  };
  const payload = {
    'contents': {
      'role': 'user',
      'parts' : [
        {
          'text': prompt
        }
      ]
    }
  }
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true,
  };
  try {
    const response = UrlFetchApp.fetch(API_ENDPOINT, options);
    const responseCode = response.getResponseCode();
    const responseText = response.getContentText();

    if (responseCode === 200) {
      const jsonResponse = JSON.parse(responseText);
      console.log(jsonResponse)
      if (jsonResponse.candidates && jsonResponse.candidates.length > 0) {
        return jsonResponse.candidates[0].content.parts[0].text; // Access the summarized text
      } else {
        return "No summary found in response.";
      }

    } else {
      console.error("Vertex AI API Error:", responseCode, responseText);
      return `Error: ${responseCode} - ${responseText}`;
    }
  } catch (e) {
    console.error("UrlFetchApp Error:", e);
    return "Error: " + e.toString();
  }
}
WebController.gs

Phục vụ trang web khởi tạo sự cố.

Xem mã WebController.gs

apps-script/incident-response-app-auth/WebController.gs
/**
 * Serves the web page from Index.html.
 */
function doGet() {
  return HtmlService
    .createTemplateFromFile('Index')
    .evaluate();
}

/**
 * Serves the web content from the specified filename.
 */
function include(filename) {
  return HtmlService
    .createHtmlOutputFromFile(filename)
    .getContent();
}

/**
 * Returns the email address of the user running the script.
 */
function getUserEmail() {
  return Session.getActiveUser().getEmail();
}
Index.html

HTML bao gồm trang web khởi tạo sự cố.

Xem mã Index.html

apps-script/incident-response-app-auth/Index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
    <?!= include('Stylesheet'); ?>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <h1>Incident Manager</h1>
        <form id="incident-form" onsubmit="handleFormSubmit(this)">
          <div id="form">
            <p>
              <label for="title">Incident title</label><br/>
              <input type="text" name="title" id="title" />
            </p>
            <p>
              <label for="users">Incident responders</label><br/>
              <small>
                Please enter a comma-separated list of email addresses of the users
                that should be added to the space.
                Do not include <?= getUserEmail() ?> as it will be added automatically.
              </small><br/>
              <input type="text" name="users" id="users" />
            </p>
            <p>
              <label for="description">Initial message</label></br>
              <small>This message will be posted after the space is created.</small><br/>
              <textarea name="description" id="description"></textarea>
            </p>
            <p class="text-center">
              <input type="submit" value="CREATE CHAT SPACE" />
            </p>
          </div>
          <div id="output" class="hidden"></div>
          <div id="clear" class="hidden">
            <input type="reset" value="CREATE ANOTHER INCIDENT" onclick="onReset()" />
          </div>
        </form>
      </div>
    </div>
    <?!= include('JavaScript'); ?>
  </body>
</html>
JavaScript.html

Xử lý hành vi của biểu mẫu, bao gồm cả việc gửi, lỗi và xoá, cho trang web khởi tạo sự cố. Hàm này được đưa vào Index.html bằng hàm include tuỳ chỉnh trong WebController.gs.

Xem mã JavaScript.html

apps-script/incident-response-app-auth/JavaScript.html
<script>
  var formDiv = document.getElementById('form');
  var outputDiv = document.getElementById('output');
  var clearDiv = document.getElementById('clear');

  function handleFormSubmit(formObject) {
    event.preventDefault();
    outputDiv.innerHTML = 'Please wait while we create the space...';
    hide(formDiv);
    show(outputDiv);
    google.script.run
      .withSuccessHandler(updateOutput)
      .withFailureHandler(onFailure)
      .handleIncident(formObject);
  }

  function updateOutput(response) {
    var spaceId = response.replace('spaces/', '');
    outputDiv.innerHTML =
      '<p>Space created!</p><p><a href="https://mail.google.com/chat/#chat/space/'
        + spaceId
        + '" target="_blank">Open space</a></p>';
    show(outputDiv);
    show(clearDiv);
  }

  function onFailure(error) {
    outputDiv.innerHTML = 'ERROR: ' + error.message;
    outputDiv.classList.add('error');
    show(outputDiv);
    show(clearDiv);
  }

  function onReset() {
    outputDiv.innerHTML = '';
    outputDiv.classList.remove('error');
    show(formDiv);
    hide(outputDiv);
    hide(clearDiv);
  }

  function hide(element) {
    element.classList.add('hidden');
  }

  function show(element) {
    element.classList.remove('hidden');
  }
</script>
Stylesheet.html

CSS cho trang web khởi tạo sự cố. Nó được đưa vào Index.html bằng hàm include tuỳ chỉnh trong WebController.gs.

Xem mã Stylesheet.html

apps-script/incident-response-app-auth/Stylesheet.html
<style>
  * {
    box-sizing: border-box;
  }
  body {
    font-family: Roboto, Arial, Helvetica, sans-serif;
  }
  div.container {
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
  }
  div.content {
    width: 80%;
    max-width: 1000px;
    padding: 1rem;
    border: 1px solid #999;
    border-radius: 0.25rem;
    box-shadow: 0 2px 2px 0 rgba(66, 66, 66, 0.08), 0 2px 4px 2px rgba(66, 66, 66, 0.16);
  }
  h1 {
    text-align: center;
    padding-bottom: 1rem;
    margin: 0 -1rem 1rem -1rem;
    border-bottom: 1px solid #999;
  }
 #output {
    text-align: center;
    min-height: 250px;
  }
  div#clear {
    text-align: center;
    padding-top: 1rem;
    margin: 1rem -1rem 0 -1rem;
    border-top: 1px solid #999;
  }
  input[type=text], textarea {
    width: 100%;
    padding: 1rem 0.5rem;
    margin: 0.5rem 0;
    border: 0;
    border-bottom: 1px solid #999;
    background-color: #f0f0f0;
  }
  textarea {
    height: 5rem;
  }
  small {
    color: #999;
  }
  input[type=submit], input[type=reset] {
    padding: 1rem;
    border: none;
    background-color: #6200ee;
    color: #fff;
    border-radius: 0.25rem;
    width: 25%;
  }
  .hidden {
    display: none;
  }
  .text-center {
    text-align: center;
  }
  .error {
    color: red;
  }
</style>

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

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

    Chuyển đến 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 biến 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 trên Cloud:

  1. Nhấp vào nút sau để mở dự án Phản hồi sự cố bằng Google Chat Apps Script.
    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 Biểu tượng tạo bản sao Tạo bản sao.
  4. Đặt tên cho bản sao của dự án Apps Script:

    1. Nhấp vào Bản sao của bài viết Phản hồi sự cố bằng Google Chat.

    2. Trong phần Tiêu đề dự án, hãy nhập Incident Management Chat app.

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

  5. Trong bản sao dự án Apps Script, hãy chuyển đến tệp Consts.gs rồi thay thế YOUR_PROJECT_ID bằng mã nhận dạng của dự án trên Cloud.

Đặt dự án Cloud cho dự án Apps Script

  1. Trong dự án Apps Script, hãy nhấp vào Biểu tượng cho chế độ cài đặt dự án Cài đặt dự án.
  2. Trong mục Dự án trê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 một bản triển khai Apps Script

Giờ đây, khi tất cả mã đã được đặt đúng vị trí, 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 phản hồi sự cố.

    Chuyển đến Apps Script

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

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

  4. Trong phần 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ư Complete version of incident management app.

  5. Trong phần Thực thi dưới dạng, hãy chọn Người dùng truy cập vào ứng dụng web

  6. Trong phần Ai có quyền truy cập, hãy chọn Bất kỳ ai trong tổ chức Workspace của bạn, trong đó "tổ chức Workspace của bạn" là tên của tổ chức Google Workspace của bạn.

  7. Nhấp vào Triển khai. Apps Script báo cáo việc triển khai thành công và cung cấp mã nhận dạng triển khai cũng như URL cho trang web khởi tạo sự cố.

  8. Ghi lại URL của Ứng dụng web để truy cập sau khi bạn bắt đầu một sự cố. Sao chép Mã hoạt động triển khai. Bạn sử dụng mã nhận dạng này khi định cấu hình ứng dụng Chat trong Google Cloud Console.

  9. Nhấp vào Xong.

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

Phần này hướng dẫn cách định cấu hình Google Chat API trong bảng điều khiển Google Cloud bằng thông tin về ứng dụng Chat của bạn, 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 > Các sản phẩm khác > Google Workspace > Thư viện sản phẩm > Google Chat API > Quản lý > Cấu hình.

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

  2. Trong phần Tên ứng dụng, hãy nhập Incident Management.

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

  4. Trong phần Nội dung mô tả, hãy nhập Responds to incidents..

  5. Nhấp vào nút bật/tắt Bật các 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 Tham 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.

  8. Trong Mã nhận dạng lượt triển khai, hãy dán Mã nhận dạng lượt triển khai Apps Script mà bạn đã sao chép trước đó từ lượt triển khai dự án Apps Script.

  9. Đăng ký một lệnh dấu gạch chéo mà ứng dụng Chat đã triển khai đầy đủ sử dụng:

    1. Trong phần Lệnh, hãy nhấp vào Thêm lệnh.

    2. Trong Command ID (Mã lệnh), hãy nhập 1.

    3. Trong phần Mô tả, hãy nhập Closes the incident being discussed in the space.

    4. Trong mục Loại lệnh, hãy chọn Lệnh dấu gạch chéo.

    5. Trong Slash command name (Tên lệnh dấu gạch chéo), hãy nhập /closeIncident.

    6. Chọn Mở hộp thoại.

    7. Nhấp vào Xong. Lệnh gạch chéo đã được đăng ký và liệt kê.

  10. Trong phần Chế độ hiển thị, hãy chọn Cung cấp ứng dụng Chat này cho một số người và nhóm cụ thể trong Miền Workspace của bạn 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. Thông báo cấu hình đã lưu sẽ xuất hiện, tức là ứng dụng đã sẵn sàng để kiểm thử.

Nhận được sự phê duyệt của quản trị viên

Để nhận được sự phê duyệt của quản trị viên, bạn phải định cấu hình ứng dụng Chat trong Google Workspace Marketplace SDK.

Định cấu hình ứng dụng Chat trong Google Workspace Marketplace SDK

Để định cấu hình ứng dụng Chat trong Bộ công cụ phát triển phần mềm Google Workspace Marketplace, hãy làm theo các bước sau:

  1. Trong Bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > API và Dịch vụ > API và dịch vụ đã bật > Google Workspace Marketplace SDK > Cấu hình ứng dụng.

    Chuyển đến phần Cấu hình ứng dụng

  2. Hoàn tất trang Cấu hình ứng dụng. Cách bạn định cấu hình ứng dụng Chat phụ thuộc vào đối tượng mục tiêu và các yếu tố khác. Để được trợ giúp hoàn tất trang cấu hình ứng dụng, hãy xem phần Định cấu hình ứng dụng trong Bộ công cụ phát triển phần mềm Google Workspace Marketplace. Để phục vụ mục đích của hướng dẫn này, hãy nhập thông tin sau:

    1. Trong phần Chế độ hiển thị của ứng dụng, hãy chọn Riêng tư.
    2. Trong phần Cài đặt khi cài đặt, hãy chọn Cài đặt cho quản trị viên.
    3. Trong phần Tích hợp ứng dụng, hãy chọn Ứng dụng Chat.
    4. Trong phần Phạm vi OAuth, hãy nhập các phạm vi sau:
      • https://www.googleapis.com/auth/chat.app.spaces
      • https://www.googleapis.com/auth/chat.app.memberships
    5. Trong phần Thông tin về nhà phát triển, hãy nhập Tên nhà phát triển, URL trang web của nhà phát triểnEmail của nhà phát triển.
    6. Nhấp vào Lưu bản nháp.

Sau khi định cấu hình ứng dụng, hãy cập nhật trang thông tin trên Cửa hàng Play:

  1. Trong Google Cloud Console, hãy chuyển đến Trình đơn > API và Dịch vụ > API và dịch vụ đã bật > Google Workspace Marketplace SDK > Trang thông tin trên Cửa hàng Play.
  2. Trong phần Thông tin chi tiết về ứng dụng, hãy chọn Phát triển web làm Danh mục.
  3. Trong phần Thành phần đồ hoạ, hãy tải biểu tượng ứng dụng lên ở định dạng được yêu cầu.
  4. Trong phần Ảnh chụp màn hình, hãy tải ảnh chụp màn hình của ứng dụng lên.
  5. Trong phần Đường liên kết hỗ trợ, hãy điền URL Điều khoản dịch vụ, URL Quyền riêng tư và URL Hỗ trợ.
  6. Trong phần Phân phối, hãy chọn những khu vực mà ứng dụng này sẽ có mặt.
  7. Nhấp vào Xuất bản.

Xin phê duyệt của quản trị viên

Giờ đây, khi tài khoản dịch vụ của bạn được định cấu hình để nhận được sự phê duyệt của quản trị viên, hãy lấy sự phê duyệt đó từ một quản trị viên Google Workspace có thể cấp quyền phê duyệt bằng cách làm theo các bước trong phần Thiết lập quyền uỷ quyền cho các ứng dụng Chat.

Kiểm thử ứng dụng Chat

Để kiểm thử ứng dụng Chat quản lý sự cố, hãy bắt đầu một sự cố từ trang web và xác minh rằng ứng dụng Chat hoạt động như mong đợi:

  1. Chuyển đến URL của ứng dụng web triển khai Apps Script.

  2. Khi Apps Script yêu cầu quyền truy cập vào dữ liệu của bạn, hãy nhấp vào Xem xét các quyền, đăng nhập bằng một Tài khoản Google phù hợp trong miền Google Workspace của bạn rồi nhấp vào Cho phép.

  3. Trang web khởi tạo sự cố sẽ mở ra. Nhập thông tin xét nghiệm:

    1. Trong phần Tiêu đề sự cố, hãy nhập The First Incident.
    2. Bạn có thể nhập địa chỉ email của những người phản hồi sự cố khác trong mục Người phản hồi sự cố. Họ phải là người dùng có tài khoản Google Chat trong tổ chức Google Workspace của bạn, nếu không, bạn sẽ không tạo được không gian. Đừng nhập địa chỉ email của chính bạn vì địa chỉ này sẽ được thêm tự động.
    3. Trong phần Tin nhắn ban đầu, hãy nhập Testing the incident management Chat app.
  4. Nhấp vào Tạo không gian trò chuyện. Thông báo creating space sẽ xuất hiện.

  5. Sau khi không gian được tạo, một thông báo Space created! sẽ xuất hiện. Nhấp vào Mở không gian để mở không gian đó trong Chat ở một thẻ mới.

  6. Bạn và những người ứng phó sự cố khác có thể gửi tin nhắn trong không gian (không bắt buộc). Ứng dụng này tóm tắt các tin nhắn này bằng Vertex AI và chia sẻ một tài liệu hồi tưởng.

  7. Để kết thúc quy trình xử lý sự cố và bắt đầu quy trình giải quyết, trong không gian trò chuyện, hãy nhập /closeIncident. Hộp thoại quản lý sự cố sẽ mở ra.

  8. Trong phần Đóng sự cố, hãy nhập nội dung mô tả về cách giải quyết sự cố, chẳng hạn như Test complete.

  9. Nhấp vào Đóng sự cố.

Ứng dụng Quản lý sự cố liệt kê các tin nhắn trong không gian, tóm tắt các tin nhắn đó bằng Vertex AI, dán bản tóm tắt vào một tài liệu trên Google Tài liệu và chia sẻ tài liệu đó trong không gian.

Dọn dẹp

Để tránh phát sinh phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được 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 Trình đơn > IAM và Quản trị viên > Quản lý tài nguyên.

    Chuyển đến Resource Manager

  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.