স্টার্টার তৈরি করা

এই ডকুমেন্ট ব্যাখ্যা করে যে কীভাবে এমন একটি স্টার্টার তৈরি করতে হয় যা কোনও ইভেন্ট ঘটলে আপনার অ্যাপ বা পরিষেবাকে Google Workspace Studio-কে বিজ্ঞপ্তি পাঠাতে এবং ফ্লো এক্সিকিউশন শুরু করতে দেয়। API-তে, স্টার্টারদের workflowTriggers বলা হয়।

স্টার্টার একটি ফ্লো শুরু করে, যেখানে স্টেপ হল ফ্লোতে থাকা টাস্কের ক্রমের মধ্যে একটি একক টাস্ক। স্টার্টার তৈরি করার মাধ্যমে, আপনি ব্যবহারকারীদের অটোমেটেড ফ্লো সেট-আপ করার সুবিধা দেন যা আপনার অ্যাপ বা পরিষেবা থেকে রিয়েল-টাইম ইভেন্টে প্রতিক্রিয়া জানায়।

স্টার্টার তৈরি করার মধ্যে রয়েছে অ্যাড-অন ম্যানিফেস্ট ফাইলে স্টার্টার ঘোষণা করা এবং Google Apps Script-এ লাইফসাইকেল কলব্যাক প্রয়োগ করা অথবা Google Workspace Studio API এন্ডপয়েন্টে পে-লোড পোস্ট করে স্টার্টার ফায়ার করা।

পূর্বশর্ত

API চালু করুন

আপনার Google Cloud প্রোজেক্টে, Google Workspace Studio API চালু করুন:

API চালু করুন

স্ট্যান্ডার্ড Google Cloud প্রোজেক্টে পরিবর্তন করুন (শুধুমাত্র Google Apps স্ক্রিপ্ট)

ডিফল্ট হিসেবে, Apps Script প্রোজেক্ট একটি ডিফল্ট Cloud প্রোজেক্ট ব্যবহার করে যা API চালু করা বা OAuth সম্মতি স্ক্রিন কনফিগার করাকে সমর্থন করে না। আপনি যদি Apps স্ক্রিপ্ট দিয়ে আপনার স্টার্টার তৈরি করেন, তাহলে আপনাকে অবশ্যই একটি স্ট্যান্ডার্ড Google Cloud প্রোজেক্টে পরিবর্তন করতে হবে:

  1. Apps Script এডিটরে, প্রোজেক্ট সেটিংস বিকল্পে ক্লিক করুন।
  2. Google Cloud Platform (GCP) প্রোজেক্ট বিকল্পের অধীনে, প্রোজেক্ট পরিবর্তন করুন বিকল্পে ক্লিক করুন।
  3. আপনার স্ট্যান্ডার্ড ক্লাউড প্রোজেক্ট নম্বর লিখুন এবং প্রোজেক্ট সেট করুন বিকল্পে ক্লিক করুন।
  4. প্রোজেক্ট পরিবর্তন করার পরে, এডিটরে কোনও ফাংশন চালিয়ে এবং অনুরোধ করা অনুমতি দিয়ে আপনার স্ক্রিপ্ট আবার অনুমোদন করুন।

আরও তথ্যের জন্য, স্ট্যান্ডার্ড Google Cloud প্রোজেক্টে পাল্টে নিন দেখুন।

OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন কনফিগার করা

Workspace Studio API এন্ডপয়েন্টের সাথে যোগাযোগ করতে, আপনার অ্যাপ বা পরিষেবাকে অবশ্যই OAuth 2.0 ব্যবহার করে যাচাই করতে হবে। আপনার প্রোজেক্টের OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন কনফিগার করুন এবং নিম্নলিখিত নির্দিষ্ট OAuth স্কোপ যোগ করুন:

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

এই স্কোপ অ্যাপকে Workspace Studio API কল করার এবং সেই স্টার্টারের জন্য ব্যবহারকারী কনফিগার করেছেন এমন ফ্লো ফায়ার করার অনুমতি দেয়।

আরও তথ্যের জন্য, OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন কনফিগার করুন এবং স্কোপ বেছে নিন দেখুন।

অফলাইন অ্যাক্সেস ও রিফ্রেশ টোকেন

কারণ এক্সটার্নাল পরিষেবায় কোনও ইভেন্ট ঘটলে স্টার্টার অ্যাসিঙ্ক্রোনাসভাবে Workspace Studio-কে বিজ্ঞপ্তি দেয়—যা ব্যবহারকারী কোনও ফ্লো কনফিগার করার কয়েক ঘণ্টা, দিন বা মাস পরে ঘটতে পারে—তাই API এন্ডপয়েন্ট কল করার সময় আপনার পরিষেবাকে অবশ্যই একটি সঠিক OAuth 2.0 অ্যাক্সেস টোকেন প্রদান করতে হবে।

অ্যাড-অন ইভেন্ট অবজেক্টে (যেমন, স্টার্টার কনফিগারেশন বা লাইফসাইকেল কলব্যাক অনুরোধের সময়) Google-এর দেওয়া অ্যাক্সেস টোকেন স্বল্পমেয়াদী হয় এবং সেটি শুধুমাত্র ১ ঘণ্টার জন্য বৈধ থাকে। ভবিষ্যতে অ্যাসিঙ্ক্রোনাসভাবে স্টার্টার ইভেন্ট ফায়ার করার জন্য এটি যথেষ্ট নয়। সময়ের সাথে সাথে Workspace Studio API কল করার জন্য, আপনার পরিষেবার একটি অফলাইন রিফ্রেশ টোকেন প্রয়োজন যাতে চাহিদা অনুযায়ী নতুন অ্যাক্সেস টোকেন জেনারেট করা যায়।

আপনি কীভাবে অনুমোদন ম্যানেজ করেন এবং রিফ্রেশ টোকেন পান তা আপনার অ্যাড-অন রানটাইমের উপর নির্ভর করে:

  • HTTP অ্যাড-অন (বিকল্প রানটাইম): HTTP অ্যাড-অনের জন্য, আপনার ব্যাকএন্ড পরিষেবাকে অবশ্যই অফলাইন অ্যাক্সেসের (access_type=offline) অনুরোধ করতে এবং রিফ্রেশ টোকেন পেতে, বিল্ট-ইন অ্যাড-অন অনুমোদন থেকে স্বাধীন একটি পৃথক OAuth 2.0 অনুমোদন ফ্লো প্রয়োগ করতে হবে।

    ব্যবহারকারী Workspace Studio-তে স্টার্টার কনফিগার করার সময়, আপনি সাইন-ইন বা অনুমোদনের কার্ড দেখিয়ে এই কানেকশন অনুমোদন করার জন্য ব্যবহারকারীকে প্রম্পট করতে পারেন। অনুমোদন কার্ড ফেরত দেওয়া এবং OAuth ফ্লো ম্যানেজ করা সম্পর্কে আরও জানতে, থার্ড-পার্টি পরিষেবার সাথে আপনার Google Workspace অ্যাড-অন কানেক্ট করুন (Google Workspace-কে থার্ড-পার্টি পরিষেবা হিসেবে বিবেচনা করে যার সাথে আপনি কানেক্ট করেন) দেখুন।

    আপনার ব্যাকএন্ড পরিষেবাকে অবশ্যই রিফ্রেশ টোকেন নিরাপদে স্টোর করতে হবে (যেমন, আপনার পরিষেবার ডেটাবেসে triggerId-এর পাশাপাশি) এবং স্টার্টারের notifyUri বা triggers.fire API এন্ডপয়েন্টে অনুরোধ পাঠানোর আগে যখনই কোনও ইভেন্ট ঘটবে তখনই একটি নতুন অ্যাক্সেস টোকেন পেতে এটি ব্যবহার করতে হবে।

  • Google Apps স্ক্রিপ্ট অ্যাড-অন: ইভেন্ট পোল করার জন্য শিডিউল করা (সময়-নির্ভর) ট্রিগার ব্যবহার করে এমন Google Apps স্ক্রিপ্ট-ভিত্তিক অ্যাড-অন স্বতন্ত্র OAuth ফ্লো প্রয়োগ করা এড়িয়ে যেতে পারে। শিডিউল করা ট্রিগার সরাসরি Google Apps Script রানটাইম এনভায়রনমেন্টের মধ্যে রান করে বলে, Google Apps Script অটোমেটিক OAuth টোকেন ম্যানেজ ও রিফ্রেশ করে। এর জন্য ম্যানিফেস্টে ঘোষিত স্কোপ ব্যবহার করা হয়। আপনি ScriptApp.getOAuthToken() ব্যবহার করে OAuth অ্যাক্সেস টোকেন পেতে পারেন।

ম্যানিফেস্ট ফাইলে স্টার্টার নির্ধারণ করুন

স্টার্টার নির্ধারণ করতে, addOns.studio.flows.workflowElements ব্লকের মধ্যে আপনার অ্যাড-অন ম্যানিফেস্ট ফাইলে (appsscript.json) এটি যোগ করুন। Apps Script এবং HTTP রানটাইম (বিকল্প রানটাইম) উভয়ের জন্যই এই কনফিগারেশন প্রয়োজন। এলিমেন্টকে workflowAction-এর পরিবর্তে workflowTrigger হিসেবে কনফিগার করুন (যা কোনও ধাপ সংজ্ঞায়িত করার সময় ব্যবহার করা হয়)। আরও তথ্যের জন্য, Google Workspace অ্যাড-অনের জন্য ম্যানিফেস্ট স্ট্রাকচার দেখুন।

workflowTrigger ব্লকের মধ্যে, এগুলি নির্দিষ্ট করুন:

  • inputs: কনফিগারেশন কার্ডে ব্যবহারকারীর কনফিগার করা ভেরিয়েবল (যেমন প্রজেক্টের নাম, রিসোর্স ফিল্টার ইত্যাদি)।
  • outputs: ফ্লোতে ডাউনস্ট্রিম ধাপে স্টার্টার দ্বারা রিটার্ন করা ভেরিয়েবল।
  • onConfigFunction: কলব্যাক ফাংশনের নাম যা ব্যবহারকারীর কনফিগারেশন ইন্টারফেস দেখায়।
  • onManageFunction: স্টার্টার সাবস্ক্রিপশন তৈরি ও মুছে দেওয়ার বিষয়টি ম্যানেজ করার জন্য Google-এর মাধ্যমে কল করা কলব্যাক ফাংশনের নাম।

নিচের কোড স্যাম্পেল থেকে ইভেন্ট স্টার্টারের জন্য ম্যানিফেস্ট ডেফিনিশনের একটি উদাহরণ দেখতে পাবেন:

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"
            }
          }
        ]
      }
    }
  }
}

স্টার্টার সাবস্ক্রিপশন লাইফসাইকেল ম্যানেজ করা

কোনও ব্যবহারকারী আপনার স্টার্টার সহ ফ্লো কনফিগার ও চালু করলে অথবা ফ্লো বন্ধ বা মুছে দিলে, Google ম্যানিফেস্টে ঘোষিত onManageFunction কলব্যাক ফাংশন ব্যবহার করে আপনার অ্যাড-অন কল করে।

লাইফসাইকেল ইভেন্ট অবজেক্ট

কলব্যাক ফাংশন একটি WorkflowEventObject পায়, এতে অ্যাকশন কনটেক্সট থাকে। শুরু করার জন্য, এর মধ্যে আছে:

  • ট্রিগার তৈরি করা (event.workflow.triggerCreation): ফ্লো প্রকাশ বা চালু করা হলে এটি ফায়ার হয়।

    • triggerId: এই স্টার্টার রেজিস্ট্রেশন ইনস্ট্যান্সকে শনাক্তকারী অনন্য UUID স্ট্রিং।

    • notifyUri: এই স্টার্টার রেজিস্ট্রেশনের সাথে যুক্ত অনন্য REST API এন্ডপয়েন্ট URL (যেমন, https://workspacestudio.googleapis.com/v1/triggers/YOUR_TRIGGER_ID:fire)। ইভেন্ট পেলোড থেকে notifyUri বাদ দেওয়া হলে, triggerId ব্যবহার করে সরাসরি এন্ডপয়েন্ট URL তৈরি করুন: https://workspacestudio.googleapis.com/v1/triggers/{triggerId}:fire।

    • inputs: কার্ড থেকে ব্যবহারকারীর কনফিগার করা ভেরিয়েবল ইনপুট।

  • ট্রিগার মুছে ফেলা (event.workflow.triggerDeletion): ফ্লো থেকে স্টার্টার সরিয়ে দেওয়া হলে অথবা সম্পূর্ণ ফ্লো বন্ধ বা মুছে দেওয়া হলে এটি ফায়ার হয়।

    • triggerId: পরিষ্কার করার জন্য সাবস্ক্রিপশন ইনস্ট্যান্সের অনন্য UUID স্ট্রিং।

Alternate Runtimes (HTTP API) সাবস্ক্রিপশন লাইফসাইকেল

বিকল্প রানটাইম ব্যবহার করে তৈরি করা অ্যাড-অনের জন্য, সাবস্ক্রিপশন লাইফসাইকেল বিজ্ঞপ্তি অ্যাড-অনের কনফিগার করা HTTP এন্ডপয়েন্ট URL-এ HTTP POST অনুরোধ ব্যবহার করে ডেলিভার করা হয়, যেখানে onManageFunction কলব্যাক ফাংশন দ্বারা অ্যাকশনের নাম নির্দিষ্ট করা থাকে। পেলোডটি WorkflowEventObject-এর JSON উপস্থাপনার সাথে ম্যাচ করে।

বিকল্প রানটাইম সম্পর্কে আরও তথ্যের জন্য, HTTP এন্ডপয়েন্ট ব্যবহার করে Google Workspace অ্যাড-অন তৈরি করুন দেখুন।

Apps স্ক্রিপ্টে লাইফসাইকেল কলব্যাক প্রয়োগ করা

নিম্নলিখিত Apps Script উদাহরণটি দেখায় যে কীভাবে ইউজার ইন্টারফেস কার্ড কনফিগার করতে হয়, onManageTrigger ব্যবহার করে সাবস্ক্রিপশন লাইফসাইকেল ইভেন্ট ম্যানেজ করতে হয় এবং কোনও ইভেন্ট ঘটলে Google-এ স্টার্টার অনুরোধ পাঠাতে হয়।

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());
  }
}

Workspace Studio API ব্যবহার করা

আপনি Workspace Studio API (workspacestudio.googleapis.com) ব্যবহার করে প্রোগ্রাম্যাটিকভাবে Google-কে স্টার্টার ইভেন্ট সম্পর্কে জানাতে পারেন।

এন্ডপয়েন্টগুলি বেস পাথের অধীনে থাকে: https://workspacestudio.googleapis.com/v1.

স্টার্টার ইভেন্ট সম্পর্কে বিজ্ঞপ্তি দেয়

triggers.fire পদ্ধতি ব্যবহার করে স্টার্টার ফায়ার করে ফ্লো এক্সিকিউট করা শুরু করে।

  • HTTP পদ্ধতি: POST
  • পাথ: /v1/triggers/{triggerId}:fire (যেখানে {triggerId} হল অনন্য আইডেন্টিফায়ার যা ট্রিগার সাবস্ক্রিপশন তৈরি করার সময় পাওয়া গেছে)
  • OAuth স্কোপ: https://www.googleapis.com/auth/workspace.studio.trigger

অনুরোধে কীভাবে স্টার্টার ফায়ার করতে হয় তা নিম্নলিখিত কোড স্যাম্পেল থেকে জানতে পারবেন।

অনুরোধ

{
  "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 (স্ট্রিং, প্রয়োজন): স্টার্টারের রিসোর্স নাম, triggers/{triggerId} হিসেবে ফর্ম্যাট করা।
  • outputs (ম্যাপ, ঐচ্ছিক): ইভেন্ট ডেটা উপস্থাপনকারী স্টার্টার আউটপুট ভেরিয়েবলের একটি ম্যাপ। প্রতিটি ভ্যালু হল একটি VariableData অবজেক্ট যা টাইপ করা তালিকা সমর্থন করে (যেমন, stringValues, booleanValues, integerValues)।
  • log (অবজেক্ট, ঐচ্ছিক): Workspace Studio এক্সিকিউশন অ্যাক্টিভিটি লগে দেখানো TextFormat মার্ক-আপের উপস্থাপনা।
  • requestId (স্ট্রিং, ঐচ্ছিক): আবার চেষ্টা করার সময় API আইডেমপোটেন্সি নিশ্চিত করতে সর্বাধিক ৩৬টি ASCII অক্ষরের অনন্য শনাক্তকারী (UUID v4 সাজেস্ট করা হয়)।

প্রতিক্রিয়া

সফল হলে, উত্তরে একটি খালি JSON অবজেক্ট {} দেখানো হয়।

Workspace Studio API কোটা

সিস্টেম ওভারলোড প্রতিরোধ করতে, রিসোর্সের ন্যায্য ব্যবহারকে উৎসাহিত করতে এবং সামগ্রিক Google Workspace পারফর্ম্যান্সকে সুরক্ষিত করতে workspacestudio.googleapis.com পরিষেবায় পাঠানো ট্রাফিক সীমিত করা হয়েছে।

নিম্নলিখিত কোটা এনফোর্স করা হয়:

কোটার ধরন কোটা
প্রতি প্রোজেক্টে প্রতি মিনিটে ১,০০০টি স্টার্টার অনুরোধ
ব্যবহারকারী পিছু প্রতি মিনিট ১০০টি স্টার্টার অনুরোধ

কোটার ধরনগুলি হল:

  • প্রতি মিনিটে প্রতি প্রোজেক্ট: একজন ডেভেলপারের Google Cloud প্রোজেক্ট থেকে শুরু হওয়া ইভেন্টের মোট সংখ্যাকে প্রতি মিনিটে ১,০০০টি অনুরোধে সীমাবদ্ধ করে, যা তার স্টার্টার চালানো সমস্ত ব্যবহারকারীর মধ্যে প্রযোজ্য।
  • প্রতি ব্যবহারকারী প্রতি মিনিট: কোনও নির্দিষ্ট Cloud প্রোজেক্টে যেকোনও একজন ব্যবহারকারীর মোট স্টার্টার ইনভোকেশনকে প্রতি মিনিটে ১০০টি অনুরোধে সীমিত করে।

সময়-ভিত্তিক কোটা সংক্রান্ত সমস্যার সমাধান করা

আপনি এই কোটা ছাড়িয়ে গেলে, API একটি HTTP 429 Too Many Requests (বা 429 Resource Exhausted) সমস্যার কোড রিটার্ন করে যা ইঙ্গিত করে যে রেট কোটা ছাড়িয়ে গেছে।

এইসব সমস্যার সমাধান করতে, আপনার কোডকে ব্যতিক্রমটি ধরতে হবে এবং ট্রাঙ্কেট করা এক্সপোনেনশিয়াল ব্যাকঅফ স্ট্র্যাটেজি ব্যবহার করতে হবে। এক্সপোনেনশিয়াল ব্যাকঅফ রিট্রাই ব্যর্থ হয়েছে অনুরোধগুলি প্রচেষ্টার মধ্যে ক্রমবর্ধমান দীর্ঘ বিলম্ব ব্যবহার করে, যার মধ্যে রয়েছে এলোমেলো জিটার (প্রতিটি পুনরাবৃত্তিতে একটি এলোমেলো বিলম্ব পুনরায় গণনা করা) একাধিক ক্লায়েন্টকে একই সময়ে সিঙ্ক্রোনাইজ করা এবং পুনরায় চেষ্টা করা থেকে বিরত রাখুন:

  1. Workspace Studio API-তে অনুরোধ করুন।
  2. অনুরোধটি 429 সমস্যা সহ ব্যর্থ হলে, 1 second + random_number_milliseconds অপেক্ষা করুন এবং আবার চেষ্টা করুন।
  3. আবার ব্যর্থ হলে, 2 seconds + random_number_milliseconds অপেক্ষা করে আবার চেষ্টা করুন।
  4. আবার ব্যর্থ হলে, 4 seconds + random_number_milliseconds অপেক্ষা করে আবার চেষ্টা করুন।
  5. এই লুপটি চালিয়ে যান, বিলম্ব দ্বিগুণ করে maximum_backoff থ্রেশহোল্ড পর্যন্ত (সাধারণত ৩২ বা ৬৪ সেকেন্ড)।
  6. আপনি ব্যাকঅফের সর্বাধিক সময়সীমায় পৌঁছে গেলে, সর্বাধিক যতবার আবার চেষ্টা করা যায় সেই সীমায় না পৌঁছানো পর্যন্ত সেই নির্দিষ্ট বিলম্ব ব্যবহার করে আবার চেষ্টা করুন, তারপর থামুন এবং সমস্যার লগ তৈরি করুন।

পেশাদার পদ্ধতি

স্টার্টার ডিজাইন ও প্রয়োগ করার সময়, নিম্নলিখিত পেশাদার পদ্ধতিগুলি বিবেচনা করুন:

ব্যাচ তালিকার পরিবর্তে একটি ইভেন্ট নির্গত করুন

আপনার স্টার্টারকে এমনভাবে ডিজাইন করুন যাতে প্রতিটি আলাদা আলাদা ঘটনার জন্য একটি করে স্বতন্ত্র ইভেন্ট এমিট করে (যেমন, একটি রেকর্ড আপডেট করা, নতুন মেসেজ পোস্ট করা বা কোনও টাস্ক অ্যাসাইন করা) বরং আইটেমের ব্যাচ বা তালিকা সহ একটি ইভেন্ট এমিট করার পরিবর্তে:

  • বিল্ট-ইন স্টার্টারের সাথে সামঞ্জস্য: Workspace Studio-তে, বিল্ট-ইন Google Workspace স্টার্টার (যেমন, Gmail-এ ইমেল পাওয়া বা Google Chat-এ কোনও ব্যবহারকারীর স্পেসে যোগ দেওয়া) একটি ইভেন্টে ট্রিগার করে। সিঙ্গেল-আইটেম ইভেন্ট এমিট করা এই আচরণের সাথে সামঞ্জস্যপূর্ণ এবং সব স্টার্টার জুড়ে ব্যবহারকারীদের জন্য একটি সামঞ্জস্যপূর্ণ, অনুমানযোগ্য অভিজ্ঞতা প্রদান করে।
  • সহজ ফ্লো কনফিগারেশন: ফ্লোতে ডাউনস্ট্রিম ধাপগুলি সাধারণত একবারে একটি আইটেম প্রসেস করে। সিঙ্গেল-আইটেম ইভেন্ট এমিট করার মাধ্যমে ব্যবহারকারীরা সরাসরি ভেরিয়েবল ম্যাপ করতে পারেন, এর জন্য অ্যারে বা পার্স লিস্টের উপর ইটারেট করার জটিল ধাপ যোগ করতে হয় না।
  • পোলিং এবং ব্যাচ পরিবর্তন আলাদাভাবে ম্যানেজ করুন: আপনার ব্যাকএন্ড পরিষেবা কোনও এক্সটার্নাল API পোল করলে এবং একটি পোলিং ইন্টারভ্যালে একাধিক পরিবর্তিত আইটেম শনাক্ত করলে, সেগুলিকে একটি ব্যাচ ইভেন্টে বান্ডিল করার পরিবর্তে প্রতিটি আইটেমের জন্য আলাদা স্টার্টার ইভেন্ট ট্রিগার করুন।
  • ইভেন্ট রেট ও কোটা ম্যানেজ করা: একাধিক পরিবর্তিত আইটেমের জন্য আলাদা আলাদা ইভেন্ট ফায়ার করলে হঠাৎ করে অনেক অনুরোধ আসতে পারে। তাই Workspace Studio API কোটা-এর মধ্যে আপনার সার্ভিস আছে কিনা তা নিশ্চিত করুন (যেমন, প্রতি ব্যবহারকারীর জন্য প্রতি মিনিটে ১০০টি অনুরোধের সীমা)। কোনও পোলিং সাইকেল থেকে প্রচুর আইটেম পাওয়া গেলে (যেমন, ১০০টির বেশি পরিবর্তিত রেকর্ড), 429 Too Many Requests ভুল এড়াতে, সময়ের সাথে সাথে ইভেন্ট ডিসপ্যাচ করার গতি বা থ্রটল করুন।

মূল আচরণ ও এজ কেস

স্টার্টার ইন্টিগ্রেট করার সময়, ডেভেলপারদের নির্দিষ্ট সমস্যার আচরণ এবং রানটাইম ফিচার ম্যানেজ করতে হবে:

  • টেস্ট রান কাজ করে না: Workspace Studio-তে স্টার্টারের জন্য টেস্ট রান কাজ করে না।
  • আইডেমপোটেন্সি ও রিপ্লে প্রতিরোধ: কঠোরভাবে প্রয়োজন না হলেও, আপনার HTTP বা Apps Script পেলোডে একটি অনন্য requestId (যেমন UUID) অন্তর্ভুক্ত করা উচিত। requestId প্রদান করলে, API-কে ডুপ্লিকেট বিজ্ঞপ্তি শনাক্ত ও উপেক্ষা করার অনুমতি দিয়ে আইডেম্পোটেন্সি নিশ্চিত করা হয়, যার ফলে একটি ইভেন্টের জন্য একাধিকবার ফ্লো রান করা আটকানো যায়।
  • বন্ধ ও আবার চালু করা ফ্লো: Workspace Studio-তে আপনার স্টার্টার সহ ফ্লো বন্ধ করা হলে, Google আপনার onManageFunction কলব্যাকে triggerDeletion লাইফসাইকেল ইভেন্ট পাঠায়। এছাড়াও, সংশ্লিষ্ট FireTrigger পদ্ধতিতে করা যেকোনও কল 404 Not Found এরর রিটার্ন কোড (Requested entity was not found.) রিটার্ন করে। আপনার পরিষেবা, সেই স্টার্টার ইনস্ট্যান্স আইডির জন্য ভবিষ্যতের ইভেন্ট বিজ্ঞপ্তি ডেলিভারি বন্ধ করে দিয়ে 404 এররের প্রতিক্রিয়া জানানো উচিত।

    ব্যবহারকারী পরে ফ্লো আবার চালু করলে, Google নতুন triggerId ও notifyUri সহ নতুন triggerCreation ইভেন্ট সহ আপনার onManageFunction কলব্যাক চালু করে নতুন সাবস্ক্রিপশন লাইফসাইকেল শুরু করে। আগের triggerId স্থায়ীভাবে বন্ধ করে দেওয়া হয়েছে এবং এটি আবার অ্যাক্টিভেট করা হয়নি, তাই আপনার পরিষেবার পোল করা বা পুরনো ট্রিগার ইনস্ট্যান্স আবার চালু করা হয়েছে কিনা তা চেক করা উচিত নয়। আরও তথ্যের জন্য, স্টার্টার সাবস্ক্রিপশনের লাইফসাইকেল ম্যানেজ করা দেখুন।

  • আইডেমপোটেন্ট সাবস্ক্রিপশন মুছে ফেলা: আপনার onManageFunction কলব্যাক ফাংশন অবশ্যই Google থেকে স্টার্টার মুছে ফেলার অনুরোধ আইডেমপোটেন্টভাবে ম্যানেজ করবে। যদি Google একই triggerId-এর জন্য একাধিকবার মুছে ফেলার হুক কল করে (যেমন, অস্থায়ী কানেকশন হারানোর কারণে আবার চেষ্টা করার সময়), ফাংশনটি সফলভাবে রিটার্ন করা উচিত।

  • Flow কোটা: Workspace Studio API কোটা ছাড়াও, ব্যবহারকারীর ফ্লো অতিরিক্ত ইন্টার্নাল কোটা কন্ট্রোলের উপর নির্ভর করে। হাই-ফ্রিকোয়েন্সি লুপ বা অত্যধিক ইভেন্ট ভলিউম নিরাপত্তা থ্রেশহোল্ড ছাড়িয়ে যেতে পারে, যার ফলে ফ্লো অটোমেটিক বন্ধ হয়ে যায়।

  • ট্রিগার ফায়ারে অনুমতি প্রত্যাখ্যান করা হয়েছে (৪০৩): triggers.fire এন্ডপয়েন্টে কল করার ফলে SERVICE_DISABLED স্ট্যাটাস সহ 403 PERMISSION_DENIED রিটার্ন করলে, এগুলি যাচাই করুন:

    • আপনার Google Cloud প্রোজেক্টে Google Workspace Studio API চালু করা আছে।
    • Google Apps Script ব্যবহার করলে, আপনার প্রোজেক্ট ডিফল্ট Apps Script Cloud প্রোজেক্টের পরিবর্তে একটি স্ট্যান্ডার্ড Cloud প্রোজেক্টের সাথে লিঙ্ক করা হয়।
    • OAuth অ্যাক্সেস টোকেনে https://www.googleapis.com/auth/workspace.studio.trigger স্কোপ অন্তর্ভুক্ত থাকে।