Xây dựng một điều kiện khởi động

Tài liệu này giải thích cách tạo một trình khởi chạy cho phép ứng dụng hoặc dịch vụ của bạn thông báo cho Google Workspace Studio khi một sự kiện xảy ra và bắt đầu thực thi một quy trình. Trong API, trình khởi chạy được gọi là workflowTriggers.

Trình khởi chạy bắt đầu một quy trình, trong khi a bước là một nhiệm vụ duy nhất trong chuỗi nhiệm vụ bao gồm một quy trình. Bằng cách tạo trình khởi chạy, bạn cho phép người dùng thiết lập các quy trình tự động phản ứng với các sự kiện theo thời gian thực từ ứng dụng hoặc dịch vụ của bạn.

Việc tạo trình khởi chạy bao gồm khai báo trình khởi chạy trong tệp kê khai tiện ích bổ sung và triển khai phương thức gọi lại trong vòng đời trong Google Apps Script hoặc kích hoạt trình khởi chạy bằng cách đăng tải tải trọng đến điểm cuối API Google Workspace Studio.

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

  • Tài khoản Google có quyền truy cập vào Workspace Studio.
  • Dự án trên Google Cloud.

Bật API

Trong dự án trên Google Cloud, hãy bật API Google Workspace Studio:

Bật API

Chuyển sang dự án trên đám mây tiêu chuẩn của Google Cloud (chỉ Google Apps Script)

Theo mặc định, các dự án Apps Script sử dụng dự án trên đám mây mặc định không hỗ trợ việc bật API hoặc định cấu hình màn hình xin phép bằng OAuth. Nếu đang tạo trình khởi chạy bằng Apps Script, bạn phải chuyển sang dự án trên đám mây tiêu chuẩn của Google Cloud:

  1. Trong trình chỉnh sửa Apps Script, hãy nhấp vào Cài đặt dự án .
  2. Trong phần Google Cloud Platform (GCP) Project (Dự án trên Google Cloud Platform (GCP)), hãy nhấp vào Change project (Thay đổi dự án).
  3. Nhập số dự án trên đám mây tiêu chuẩn rồi nhấp vào Set project (Đặt dự án).
  4. Sau khi chuyển đổi dự án, hãy uỷ quyền lại cho tập lệnh bằng cách chạy bất kỳ hàm nào trong trình chỉnh sửa và cấp các quyền được yêu cầu.

Để biết thêm thông tin, hãy xem bài viết Chuyển sang dự án trên đám mây Google Cloud tiêu chuẩn.

Định cấu hình màn hình xin phép bằng OAuth

Để giao tiếp với điểm cuối API Workspace Studio, ứng dụng hoặc dịch vụ của bạn phải xác thực bằng OAuth 2.0. Định cấu hình màn hình xin phép bằng OAuth cho dự án và thêm phạm vi OAuth dành riêng sau đây:

https://www.googleapis.com/auth/workspace.studio.trigger

Phạm vi này cho phép ứng dụng gọi API Workspace Studio và kích hoạt các quy trình mà người dùng đã định cấu hình cho trình khởi chạy đó.

Để biết thêm thông tin, hãy xem bài viết Định cấu hình màn hình xin phép bằng OAuth và chọn phạm vi.

Xem không cần mạng và mã làm mới

Vì trình khởi chạy thông báo cho Workspace Studio một cách không đồng bộ khi một sự kiện xảy ra trong dịch vụ bên ngoài (có thể xảy ra vài giờ, vài ngày hoặc vài tháng sau khi người dùng định cấu hình một quy trình), nên dịch vụ của bạn phải cung cấp mã truy cập OAuth 2.0 hợp lệ khi gọi điểm cuối API.

Mã truy cập do Google cung cấp trong đối tượng sự kiện tiện ích bổ sung (chẳng hạn như trong quá trình định cấu hình trình khởi chạy hoặc yêu cầu phương thức gọi lại trong vòng đời) có thời hạn ngắn và chỉ hợp lệ trong 1 giờ. Mã này không đủ để kích hoạt các sự kiện trình khởi chạy một cách không đồng bộ trong tương lai. Để gọi API Workspace Studio theo thời gian, dịch vụ của bạn cần có mã làm mới ngoại tuyến để tạo mã truy cập mới theo yêu cầu.

Cách bạn xử lý việc uỷ quyền và lấy mã làm mới phụ thuộc vào thời gian chạy tiện ích bổ sung:

  • Tiện ích bổ sung HTTP (thời gian chạy thay thế): Đối với tiện ích bổ sung HTTP, dịch vụ phụ trợ của bạn phải triển khai một quy trình uỷ quyền OAuth 2.0 riêng biệt, độc lập với quy trình uỷ quyền tiện ích bổ sung tích hợp để yêu cầu quyền truy cập ngoại tuyến (access_type=offline) và nhận mã làm mới.

    Bạn có thể nhắc người dùng uỷ quyền cho kết nối này bằng cách hiển thị thẻ đăng nhập hoặc uỷ quyền khi người dùng định cấu hình trình khởi chạy trong Workspace Studio. Để biết thêm thông tin về cách trả về thẻ uỷ quyền và xử lý quy trình OAuth, hãy xem bài viết Kết nối tiện ích bổ sung Google Workspace với dịch vụ bên thứ ba (xem Google Workspace là dịch vụ bên thứ ba mà bạn kết nối).

    Dịch vụ phụ trợ của bạn phải lưu trữ mã làm mới một cách an toàn (ví dụ: trong cơ sở dữ liệu của dịch vụ cùng với triggerId) và sử dụng mã này để truy xuất mã truy cập mới bất cứ khi nào một sự kiện xảy ra trước khi gửi yêu cầu đến điểm cuối API notifyUri hoặc triggers.fire của trình khởi chạy.

  • Tiện ích bổ sung Google Apps Script: Các tiện ích bổ sung dựa trên Google Apps Script sử dụng điều kiện kích hoạt theo lịch (dựa trên thời gian) để thăm dò các sự kiện có thể bỏ qua việc triển khai quy trình OAuth độc lập. Vì các điều kiện kích hoạt theo lịch chạy trực tiếp trong môi trường thời gian chạy Google Apps Script, nên Google Apps Script sẽ tự động quản lý và làm mới các mã thông báo OAuth bằng các phạm vi được khai báo trong tệp kê khai. Bạn có thể truy xuất mã truy cập OAuth bằng ScriptApp.getOAuthToken().

Xác định trình khởi chạy trong tệp kê khai

Để xác định trình khởi chạy, hãy thêm trình khởi chạy đó vào tệp kê khai tiện ích bổ sung (appsscript.json) trong khối addOns.studio.flows.workflowElements. Bạn phải định cấu hình này cho cả thời gian chạy Apps Script và HTTP (thời gian chạy thay thế). Định cấu hình phần tử này dưới dạng workflowTrigger thay vì workflowAction (được dùng khi xác định một bước). Để biết thêm thông tin, hãy xem bài viết Cấu trúc tệp kê khai cho tiện ích bổ sung Google Workspace.

Trong khối workflowTrigger, hãy chỉ định:

  • inputs: Các biến mà người dùng định cấu hình trên thẻ cấu hình (chẳng hạn như tên dự án, bộ lọc tài nguyên, v.v.).
  • outputs: Các biến mà trình khởi chạy có thể trả về cho các bước ở hạ nguồn trong quy trình.
  • onConfigFunction: Tên của hàm callback hiển thị giao diện cấu hình người dùng.
  • onManageFunction: Tên của hàm callback do Google gọi để xử lý việc tạo và xoá gói thuê bao trình khởi chạy.

Mã mẫu sau đây cho thấy ví dụ về định nghĩa tệp kê khai cho trình khởi chạy sự kiện:

JSON

{
  "timeZone": "America/Los_Angeles",
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/workspace.studio.trigger"
  ],
  "urlFetchWhitelist": [
    "https://workspacestudio.googleapis.com/"
  ],
  "addOns": {
    "common": {
      "name": "Trigger App",
      "logoUrl": "https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/start/default/24px.svg",
      "useLocaleFromApp": true
    },
    "studio": {
      "flows": {
        "workflowElements": [
          {
            "id": "triggerDemo",
            "state": "ACTIVE",
            "name": "Event Trigger",
            "description": "Fires when a event occurs in the app.",
            "workflowTrigger": {
              "inputs": [
                {
                  "id": "projectId",
                  "description": "The project identifier to watch.",
                  "cardinality": "SINGLE",
                  "dataType": {
                    "basicType": "STRING"
                  }
                }
              ],
              "outputs": [
                {
                  "id": "eventName",
                  "description": "The name of the triggered event.",
                  "cardinality": "SINGLE",
                  "dataType": {
                    "basicType": "STRING"
                  }
                },
                {
                  "id": "eventMessage",
                  "description": "Detailed event message description.",
                  "cardinality": "SINGLE",
                  "dataType": {
                    "basicType": "STRING"
                  }
                }
              ],
              "onConfigFunction": "onConfigTrigger",
              "onManageFunction": "onManageTrigger"
            }
          }
        ]
      }
    }
  }
}

Xử lý vòng đời của gói thuê bao trình khởi chạy

Khi người dùng định cấu hình và bật một flow chứa trình khởi chạy của bạn hoặc nếu flow bị tắt hoặc bị xoá, Google sẽ gọi tiện ích bổ sung của bạn bằng hàm callback onManageFunction được khai báo trong tệp kê khai.

Đối tượng sự kiện trong vòng đời

Hàm callback nhận một WorkflowEventObject chứa ngữ cảnh hành động. Đối với trình khởi chạy, đối tượng này bao gồm:

  • Tạo điều kiện kích hoạt (event.workflow.triggerCreation): Kích hoạt khi quy trình được xuất bản hoặc bật.

    • triggerId: Chuỗi UUID duy nhất xác định thực thể đăng ký trình khởi chạy này.

    • notifyUri: URL điểm cuối API REST duy nhất được liên kết với đăng ký trình khởi chạy này (ví dụ: https://workspacestudio.googleapis.com/v1/triggers/YOUR_TRIGGER_ID:fire). Nếu bạn bỏ qua notifyUri trong tải trọng sự kiện, hãy trực tiếp tạo URL điểm cuối bằng triggerId: https://workspacestudio.googleapis.com/v1/triggers/{triggerId}:fire.

    • inputs: Các đầu vào biến do người dùng định cấu hình từ thẻ.

  • Xoá điều kiện kích hoạt (event.workflow.triggerDeletion): Kích hoạt khi trình khởi chạy bị xoá khỏi quy trình hoặc khi toàn bộ quy trình bị tắt hoặc bị xoá.

    • triggerId: Chuỗi UUID duy nhất của thực thể đăng ký cần dọn dẹp.

Vòng đời của gói thuê bao Thời gian chạy thay thế (API HTTP)

Đối với các tiện ích bổ sung được tạo bằng thời gian chạy thay thế, thông báo về vòng đời của gói thuê bao được gửi bằng các yêu cầu POST qua HTTP đến URL điểm cuối HTTP đã định cấu hình của tiện ích bổ sung có tên hành động do hàm callback onManageFunction chỉ định. Tải trọng khớp với biểu diễn JSON của WorkflowEventObject.

Để biết thêm thông tin về thời gian chạy thay thế, hãy xem bài viết Tạo tiện ích bổ sung Google Workspace bằng các điểm cuối HTTP.

Triển khai phương thức gọi lại trong vòng đời trong Apps Script

Ví dụ sau đây về Apps Script cho thấy cách định cấu hình thẻ giao diện người dùng, xử lý các sự kiện trong vòng đời của gói thuê bao bằng onManageTrigger và kích hoạt yêu cầu trình khởi chạy gửi lại cho Google khi một sự kiện xảy ra.

Apps Script

/**
 * Generates and returns the user configuration card to collect inputs.
 */
function onConfigTrigger() {
  const projectInput = CardService.newTextInput()
    .setFieldName("projectId")
    .setTitle("Project ID")
    .setHint("Enter the project identifier to watch");

  const section = CardService.newCardSection()
    .setHeader("Configure Event Trigger")
    .addWidget(projectInput);

  const card = CardService.newCardBuilder()
    .addSection(section)
    .build();

  return card;
}

/**
 * Handles subscription lifecycle events sent from Google Workspace Studio.
 *
 * @param {Object} event The Workspace Studio event object.
 */
function onManageTrigger(event) {
  const triggerCreation = event.workflow.triggerCreation;
  const triggerDeletion = event.workflow.triggerDeletion;

  if (triggerCreation) {
    const triggerId = triggerCreation.triggerId;
    // Fall back to constructing the endpoint URL if notifyUri is omitted.
    const notifyUri = triggerCreation.notifyUri ||
        ("https://workspacestudio.googleapis.com/v1/triggers/" +
         triggerId + ":fire");
    const inputs = triggerCreation.inputs;

    // Extract input values configured by the user.
    const projectId = inputs["projectId"].stringValues[0];

    // Tip: In Apps Script, use PropertiesService to persist triggerId and notifyUri:
    // const props = PropertiesService.getUserProperties();
    // props.setProperty("notifyUri", notifyUri);
    // props.setProperty("triggerId", triggerId);
    //
    // TODO: Save triggerId, notifyUri, and projectId in your database/service.
    // Your backend service listens for events related to 'projectId'
    // and calls notifyUri when those events occur.
    console.log("Trigger subscription created: " + triggerId +
                ", Notify URI: " + notifyUri +
                ", Match Project: " + projectId);

  } else if (triggerDeletion) {
    const triggerId = triggerDeletion.triggerId;

    // In Apps Script, clean up stored properties:
    // PropertiesService.getUserProperties().deleteProperty("notifyUri");
    // PropertiesService.getUserProperties().deleteProperty("triggerId");
    //
    // TODO: Remove references to triggerId from your database and stop
    // sending future event notifications to the associated notifyUri.
    console.log("Trigger subscription deleted: " + triggerId);
  }
}

/**
 * Mock function showing how your backend service fires the trigger.
 * This logic runs on your service when a watched event occurs.
 *
 * @param {string} notifyUri The stored notifyUri associated with the trigger.
 * @param {string} triggerId The stored triggerId.
 * @param {string} [userAccessToken] The OAuth 2.0 access token for the user.
 *     In Apps Script, defaults to ScriptApp.getOAuthToken().
 */
function simulateEventFire(notifyUri, triggerId, userAccessToken) {
  // In Apps Script, obtain the OAuth token using ScriptApp.getOAuthToken().
  const token = userAccessToken || ScriptApp.getOAuthToken();
  // A unique UUID version 4 is recommended as the requestId for idempotency.
  const requestId = Utilities.getUuid();

  const payload = {
    "name": "triggers/" + triggerId,
    "outputs": {
      "eventName": { "stringValues": ["EventOccurred"] },
      "eventMessage": { "stringValues": ["Hello from the service!"] }
    },
    "requestId": requestId
  };

  const options = {
    "method": "POST",
    "contentType": "application/json",
    "headers": {
      "Authorization": "Bearer " + token
    },
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true
  };

  const response = UrlFetchApp.fetch(notifyUri, options);
  const responseCode = response.getResponseCode();

  if (responseCode === 200) {
    console.log("Trigger successfully fired!");
  } else if (responseCode === 404) {
    // 404 means the trigger registration is invalid or deleted.
    console.log("Trigger not found. Stop sending events for this trigger.");
    // TODO: Clean up the trigger from your backend database.
  } else if (responseCode === 429 || responseCode >= 500) {
    console.log("Temporary error (" + responseCode + "). Retry using exponential backoff.");
  } else {
    console.log("Failed to fire trigger. HTTP Code: " + responseCode + " - " + response.getContentText());
  }
}

Sử dụng API Workspace Studio

Bạn có thể sử dụng API Workspace Studio (workspacestudio.googleapis.com) để thông báo cho Google về các sự kiện trình khởi chạy theo phương thức lập trình.

Các điểm cuối nằm trong đường dẫn cơ sở: https://workspacestudio.googleapis.com/v1.

Thông báo sự kiện trình khởi chạy

Kích hoạt trình khởi chạy bằng phương thức triggers.fire để bắt đầu thực thi một quy trình.

  • Phương thức HTTP: POST
  • Đường dẫn: /v1/triggers/{triggerId}:fire (trong đó {triggerId} là giá trị nhận dạng duy nhất được truy xuất trong quá trình tạo gói thuê bao điều kiện kích hoạt)
  • Phạm vi OAuth: https://www.googleapis.com/auth/workspace.studio.trigger

Mã mẫu sau đây cho thấy cách kích hoạt trình khởi chạy trong yêu cầu.

Yêu cầu

{
  "name": "triggers/TRIGGER_ID",
  "outputs": {
    "eventName": {
      "stringValues": [
        "EventOccurred"
      ]
    },
    "eventMessage": {
      "stringValues": [
        "Hello from the service!"
      ]
    }
  },
  "log": {
    "textFormatElements": [
      {
        "text": "An event occurred in the app."
      }
    ]
  },
  "requestId": "UNIQUE_REQUEST_ID"
}
  • name (chuỗi, bắt buộc): Tên tài nguyên của trình khởi chạy, được định dạng là triggers/{triggerId}.
  • outputs (bản đồ, không bắt buộc): Bản đồ các biến đầu ra của trình khởi chạy đại diện cho dữ liệu sự kiện. Mỗi giá trị là một đối tượng VariableData hỗ trợ danh sách được nhập (chẳng hạn như stringValues, booleanValues, integerValues).
  • log (đối tượng, không bắt buộc): Biểu diễn đánh dấu TextFormat xuất hiện trong nhật ký hoạt động thực thi Workspace Studio.
  • requestId (chuỗi, không bắt buộc): Giá trị nhận dạng riêng biệt (nên dùng UUID v4) có tối đa 36 ký tự ASCII để đảm bảo tính lũy đẳng của API khi thử lại.

Đáp

Phản hồi trả về một đối tượng JSON trống {} khi thành công.

Hạn mức API Workspace Studio

Lưu lượng truy cập được gửi đến dịch vụ workspacestudio.googleapis.com bị hạn chế để ngăn hệ thống quá tải, khuyến khích sử dụng tài nguyên một cách hợp lý và bảo vệ hiệu suất tổng thể của Google Workspace.

Các hạn mức sau đây được thực thi:

Loại hạn mức Quota
Mỗi phút trên mỗi dự án 1.000 yêu cầu trình khởi chạy
Mỗi phút trên mỗi người dùng 100 yêu cầu trình khởi chạy

Các loại hạn mức là:

  • Mỗi phút trên mỗi dự án: Giới hạn số lượng sự kiện trình khởi chạy tích luỹ được kích hoạt từ dự án trên đám mây của một nhà phát triển duy nhất là 1.000 yêu cầu mỗi phút trên tất cả người dùng chạy trình khởi chạy của dự án đó.
  • Mỗi phút trên mỗi người dùng: Giới hạn số lần gọi điều kiện khởi động tích luỹ của bất kỳ người dùng cuối nào trong một dự án trên đám mây nhất định là 100 yêu cầu mỗi phút.

Xử lý lỗi hạn mức dựa trên thời gian

Nếu bạn vượt quá các hạn mức này, API sẽ trả về mã lỗi HTTP 429 Too Many Requests (hoặc 429 Resource Exhausted) cho biết rằng bạn đã vượt quá hạn mức tốc độ.

Để giải quyết các lỗi này, mã của bạn phải bắt lỗi ngoại lệ và sử dụng chiến lược khoảng thời gian đợi tăng theo cấp luỹ thừa bị cắt ngắn. Chiến lược khoảng thời gian đợi tăng theo cấp luỹ thừa sẽ thử lại các yêu cầu không thành công bằng cách sử dụng độ trễ ngày càng dài giữa các lần thử, bao gồm cả độ trễ ngẫu nhiên (tính toán lại độ trễ ngẫu nhiên trên mỗi lần lặp) để ngăn nhiều ứng dụng đồng bộ hoá và thử lại cùng lúc:

  1. Tạo một yêu cầu đối với API Workspace Studio.
  2. Nếu yêu cầu không thành công với lỗi 429, hãy đợi 1 second + random_number_milliseconds rồi thử lại.
  3. Nếu yêu cầu không thành công một lần nữa, hãy đợi 2 seconds + random_number_milliseconds rồi thử lại.
  4. Nếu yêu cầu không thành công một lần nữa, hãy đợi 4 seconds + random_number_milliseconds rồi thử lại.
  5. Tiếp tục vòng lặp này, tăng gấp đôi độ trễ lên đến ngưỡng maximum_backoff (thường là 32 hoặc 64 giây).
  6. Sau khi đạt đến thời gian đợi tối đa, hãy thử lại bằng độ trễ không đổi đó cho đến khi đạt đến giới hạn thử lại tối đa, sau đó dừng và ghi lại lỗi.

Các phương pháp hay nhất

Khi thiết kế và triển khai trình khởi chạy, hãy cân nhắc các phương pháp hay nhất sau đây:

Phát ra các sự kiện riêng lẻ thay vì danh sách hàng loạt

Thiết kế trình khởi chạy để phát ra một sự kiện riêng lẻ cho mỗi lần xuất hiện riêng biệt (chẳng hạn như một bản ghi được cập nhật, một tin nhắn mới được đăng hoặc một nhiệm vụ được chỉ định) thay vì phát ra một sự kiện duy nhất chứa một lô hoặc danh sách các mục:

  • Tính nhất quán với trình khởi chạy tích hợp: Trong Workspace Studio, các trình khởi chạy Google Workspace tích hợp (chẳng hạn như nhận email trong Gmail hoặc người dùng tham gia một không gian trong Google Chat) kích hoạt trên một sự kiện duy nhất. Việc phát ra các sự kiện một mục phù hợp với hành vi này và mang lại trải nghiệm nhất quán, có thể dự đoán cho người dùng trên tất cả các trình khởi chạy.
  • Định cấu hình quy trình đơn giản hơn: Các bước ở hạ nguồn trong một quy trình thường xử lý từng mục một. Việc phát ra các sự kiện một mục cho phép người dùng liên kết trực tiếp các biến mà không cần thêm các bước phức tạp để lặp lại các mảng hoặc phân tích cú pháp danh sách.
  • Xử lý riêng lẻ các thay đổi thăm dò và hàng loạt: Nếu dịch vụ phụ trợ của bạn thăm dò một API bên ngoài và phát hiện nhiều mục đã thay đổi trong một khoảng thời gian thăm dò duy nhất, hãy kích hoạt một sự kiện trình khởi chạy riêng lẻ cho từng mục thay vì gộp chúng vào một sự kiện hàng loạt.
  • Quản lý hạn mức và tốc độ sự kiện: Vì việc kích hoạt các sự kiện riêng lẻ cho nhiều mục đã thay đổi có thể gây ra sự bùng nổ đột ngột về số lượng yêu cầu, hãy đảm bảo dịch vụ của bạn nằm trong hạn mức API Workspace Studio (chẳng hạn như giới hạn 100 yêu cầu mỗi phút trên mỗi người dùng). Nếu một chu kỳ thăm dò mang lại số lượng lớn các mục (ví dụ: hơn 100 bản ghi đã thay đổi), hãy điều chỉnh tốc độ hoặc điều tiết việc gửi sự kiện theo thời gian để tránh lỗi 429 Too Many Requests.

Các hành vi cốt lõi và trường hợp đặc biệt

Khi tích hợp trình khởi chạy, nhà phát triển phải xử lý các hành vi lỗi cụ thể và các tính năng thời gian chạy:

  • Không hỗ trợ chạy thử: Workspace Studio không hỗ trợ chạy thử cho trình khởi chạy.
  • Tính lũy đẳng và ngăn phát lại: Mặc dù không bắt buộc, nhưng bạn nên đưa requestId duy nhất (chẳng hạn như UUID) vào tải trọng HTTP hoặc Apps Script. Việc cung cấp requestId đảm bảo tính lũy đẳng bằng cách cho phép API phát hiện và bỏ qua các thông báo trùng lặp, ngăn quy trình chạy nhiều lần cho một sự kiện duy nhất.
  • Quy trình bị tắt và bật lại: Khi một quy trình chứa trình khởi chạy của bạn bị tắt trong Workspace Studio, Google sẽ gửi sự kiện trong vòng đời triggerDeletion đến lệnh gọi lại onManageFunction của bạn. Ngoài ra, mọi lệnh gọi đến phương thức FireTrigger được liên kết đều trả về mã trả về lỗi 404 Not Found (Requested entity was not found.). Dịch vụ của bạn phải phản ứng với lỗi 404 bằng cách dừng việc gửi thông báo sự kiện trong tương lai cho mã thực thể trình khởi chạy đó.

    Nếu sau đó người dùng bật lại quy trình, Google sẽ bắt đầu một vòng đời gói thuê bao mới bằng cách gọi lệnh gọi lại onManageFunction với sự kiện triggerCreation mới chứa triggerId và notifyUri mới. triggerId trước đó sẽ bị ngừng hoạt động vĩnh viễn và không được kích hoạt lại, vì vậy, dịch vụ của bạn không nên thăm dò hoặc kiểm tra xem thực thể điều kiện kích hoạt cũ đã được bật lại hay chưa. Để biết thêm thông tin, hãy xem bài viết Xử lý vòng đời của gói thuê bao trình khởi chạy.

  • Xoá gói thuê bao lũy đẳng: Hàm gọi lại onManageFunction của bạn phải xử lý các yêu cầu xoá trình khởi chạy từ Google một cách lũy đẳng. Nếu Google gọi hook xoá nhiều lần cho cùng một triggerId (ví dụ: trong quá trình thử lại do mất kết nối tạm thời), thì hàm này sẽ trả về thành công.

  • Hạn mức quy trình: Ngoài hạn mức API Workspace Studio, các quy trình của người dùng phải tuân theo các quy tắc kiểm soát hạn mức nội bộ bổ sung. Các vòng lặp tần suất cao hoặc số lượng sự kiện quá mức có thể vượt quá ngưỡng an toàn, dẫn đến việc tự động tắt quy trình.

  • Quyền bị từ chối (403) khi kích hoạt điều kiện kích hoạt: Nếu các lệnh gọi đến điểm cuối triggers.fire trả về 403 PERMISSION_DENIED với trạng thái lỗi SERVICE_DISABLED, hãy xác minh rằng:

    • API Google Workspace Studio được bật trong dự án Google Cloud của bạn.
    • Nếu bạn sử dụng Google Apps Script, dự án của bạn sẽ được liên kết với dự án trên đám mây tiêu chuẩn thay vì dự án trên đám mây Apps Script mặc định.
    • Mã truy cập OAuth bao gồm phạm vi https://www.googleapis.com/auth/workspace.studio.trigger.