Google ড্রাইভ থেকে ইভেন্ট নিয়ে কাজ করুন

এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে কীভাবে গুগল ক্লাউড পাব/সাব থেকে গুগল ড্রাইভ ইভেন্ট গ্রহণ করা যায়।

একটি ড্রাইভ ইভেন্ট হলো ড্রাইভের কোনো রিসোর্সের কার্যকলাপ বা পরিবর্তন, যেমন কোনো ফোল্ডারে একটি নতুন ফাইল যুক্ত হওয়া। কী ঘটেছে তা বুঝতে এবং সেই অনুযায়ী ব্যবস্থা নিতে, অথবা আপনার ব্যবহারকারীদের জন্য অর্থপূর্ণভাবে সাড়া দিতে আপনি ইভেন্টগুলো ব্যবহার করতে পারেন।

ইভেন্ট ব্যবহারের কিছু উদাহরণ নিচে দেওয়া হলো:

  • কোনো ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভে হওয়া পরিবর্তনগুলো পর্যবেক্ষণ করুন এবং সে অনুযায়ী ব্যবস্থা নিন, যেমন যখন কোনো ফাইল সম্পাদনা করা হয় বা নতুন কোনো সংস্করণ আপলোড করা হয়।

  • আপনার অ্যাপের পারফরম্যান্স উন্নত করতে ফাইলগুলোর পরিবর্তন পর্যবেক্ষণ করুন।

  • সম্ভাব্য ডেটা ফাঁস এবং অননুমোদিত প্রবেশ শনাক্ত করতে ফাইল শেয়ারিং, ফাইল সরানো এবং মুছে ফেলার মতো কার্যকলাপ নিরীক্ষা করুন।

  • ব্যবহারকারীরা কীভাবে তাদের ফাইলগুলি পরিচালনা করছেন সে সম্পর্কে ধারণা দেয়, যা কন্টেন্ট ব্যবস্থাপনার উন্নতির ক্ষেত্রগুলি শনাক্ত করতে সাহায্য করে।

  • নিয়ন্ত্রক বিধি বা নিরাপত্তা নীতিমালার সাথে সম্মতি যাচাই করতে ফাইলের পরিবর্তনগুলো ট্র্যাক করুন।

  • Eventarc , Workflows , এবং BigQuery-এর মতো অন্যান্য Google Cloud পণ্য ব্যবহার করে Drive-এর কার্যকলাপ বিশ্লেষণ করুন।

ইভেন্টগুলো কীভাবে কাজ করে

ড্রাইভে যখনই কোনো ঘটনা ঘটে, একটি গুগল ড্রাইভ এপিআই রিসোর্স তৈরি, আপডেট বা ডিলিট করা হয়। কী ধরনের কার্যকলাপ ঘটেছে এবং কোন ড্রাইভ এপিআই রিসোর্সটি প্রভাবিত হয়েছে, সে সম্পর্কে আপনার অ্যাপে তথ্য পৌঁছে দিতে ড্রাইভ ইভেন্ট ব্যবহার করে।

ড্রাইভ ইভেন্টগুলোকে তাদের ধরন অনুযায়ী শ্রেণিবদ্ধ করে। ইভেন্টের ধরনগুলো আপনাকে শুধুমাত্র প্রয়োজনীয় তথ্য ফিল্টার করে পেতে সাহায্য করে এবং একই ধরনের কার্যকলাপগুলোকে একইভাবে পরিচালনা করার সুযোগ দেয়।

নিম্নলিখিত সারণিতে দেখানো হয়েছে, ড্রাইভের একটি উদাহরণমূলক কার্যকলাপ কীভাবে একটি সম্পর্কিত ড্রাইভ এপিআই রিসোর্সকে প্রভাবিত করে এবং আপনার ড্রাইভ অ্যাপটি কোন ধরনের ইভেন্ট গ্রহণ করে:

কার্যকলাপ ড্রাইভ এপিআই রিসোর্স ইভেন্টের ধরণ
একজন ব্যবহারকারী একটি ফাইলের জন্য অ্যাক্সেস প্রস্তাব তৈরি করেন। একটি AccessProposal রিসোর্স তৈরি করা হয়। নতুন প্রবেশাধিকার প্রস্তাব

একজন ব্যবহারকারী একটি ফাইলে অনুমোদন তৈরি করেন।

একটি Approval রিসোর্স তৈরি করা হয়। নতুন অনুমোদন
একজন ব্যবহারকারী গুগল ডক্স, শিটস বা স্লাইডস ফাইলে একটি মন্তব্য পোস্ট করেন। একটি Comment রিসোর্স তৈরি করা হয়েছে। নতুন মন্তব্য
একজন ব্যবহারকারী কোনো ফোল্ডার বা শেয়ার্ড ড্রাইভে একটি ফাইল যোগ করেন। একটি File রিসোর্স তৈরি করা হয়েছে। নতুন ফাইল
একজন ব্যবহারকারী একটি ফাইলের জন্য অনুমতি তৈরি করেন। একটি Permission রিসোর্স তৈরি করা হয়। নতুন অনুমতি
একজন ব্যবহারকারী একটি মন্তব্যের উত্তর দেন। একটি Reply রিসোর্স তৈরি করা হয়। নতুন উত্তর

গুগল ড্রাইভ থেকে ইভেন্ট গ্রহণ করুন

ঐতিহ্যগতভাবে, আপনার ড্রাইভ অ্যাপ ড্রাইভ এপিআই (Drive API) অথবা গুগল ড্রাইভ অ্যাক্টিভিটি এপিআই (Google Drive Activity API) এর মাধ্যমে ইভেন্টগুলো খুঁজে পেত। গুগল ওয়ার্কস্পেস ইভেন্টস এপিআই (Google Workspace Events API)-তে ড্রাইভ ইভেন্ট যুক্ত হওয়ায়, এখন ইভেন্ট গ্রহণ করার তৃতীয় একটি পদ্ধতি রয়েছে:

নিম্নলিখিত সারণিতে ইভেন্ট সাবস্ক্রাইব করা এবং কোয়েরি করার মধ্যে পার্থক্য ও কারণ ব্যাখ্যা করা হয়েছে:

গুগল ওয়ার্কস্পেস ইভেন্টগুলিতে সাবস্ক্রাইব করুন ড্রাইভ এপিআই ওয়াচ ইভেন্টগুলিতে সাবস্ক্রাইব করুন ড্রাইভ অ্যাক্টিভিটি এপিআই ইভেন্টগুলির জন্য কোয়েরি করুন
ব্যবহারের ক্ষেত্র
  • রিয়েল টাইমে ঘটনাগুলো প্রক্রিয়া করুন বা সেগুলোর প্রতিক্রিয়া জানান।
  • আপনার অ্যাপের পারফরম্যান্স উন্নত করতে রিসোর্সের পরিবর্তনগুলো পর্যবেক্ষণ করুন।
  • Pub/Sub-এর মাধ্যমে কাঠামোগত ইভেন্ট ডেটা গ্রহণ করুন এবং Cloud Run-এর মতো Google Cloud পণ্য ব্যবহার করুন।
  • ফাইলের মেটাডেটার পরিবর্তন শনাক্ত করুন এবং রিয়েল-টাইম নোটিফিকেশনের মাধ্যমে নির্দিষ্ট আইটেমের পরিবর্তন দক্ষতার সাথে পর্যবেক্ষণ করুন।
  • এপিআই এন্ডপয়েন্টগুলোতে বারবার পোলিং এড়ানোর জন্য একটি ওয়েবহুক কলব্যাক ইউআরএল সমর্থন করে।
  • প্রতিটি ঘটনা সম্পর্কে পুঙ্খানুপুঙ্খ তথ্যসহ সমস্ত কার্যকলাপের একটি বিশদ ইতিহাস সংগ্রহ করুন।
  • অডিটের মতো নির্দিষ্ট কাজের জন্য ActionDetail , Actor , এবং Target তথ্যসহ সুনির্দিষ্ট কার্যকলাপগুলো পুনরুদ্ধার করুন।
এপিআই গুগল ওয়ার্কস্পেস ইভেন্টস এপিআই গুগল ড্রাইভ এপিআই গুগল ড্রাইভ অ্যাক্টিভিটি এপিআই
ঘটনাগুলির উৎস ফাইল, ফোল্ডার এবং শেয়ার করা ড্রাইভ changes.watch এবং files.watch DriveActivity
সমর্থিত ইভেন্টগুলি
  • AccessProposal
  • Approval
  • Comment
  • File
  • Permission
  • Reply
সমর্থিত ইভেন্টের প্রকারগুলির তালিকার জন্য, Google Workspace Events API ডকুমেন্টেশনে ‘সাবস্ক্রিপশন তৈরির জন্য ইভেন্টের প্রকার’ দেখুন।
Channel

সমর্থিত ইভেন্টের প্রকারগুলির তালিকার জন্য, Drive API ডকুমেন্টেশনের "Understand Google Drive API notification events" অংশটি দেখুন।
Action

সমর্থিত ফিল্ডগুলির তালিকার জন্য, ড্রাইভ অ্যাক্টিভিটি এপিআই রেফারেন্স ডকুমেন্টেশনে থাকা Action রিসোর্সটি দেখুন।
ইভেন্টের বিন্যাস CloudEvent স্পেসিফিকেশন অনুযায়ী ফরম্যাট করা একটি পাব/সাব মেসেজ। বিস্তারিত জানতে, Google Workspace ইভেন্টের কাঠামো দেখুন। একটি ড্রাইভ এপিআই রিসোর্স ( Channel ) একটি ড্রাইভ অ্যাক্টিভিটি এপিআই রিসোর্স ( Action )
ইভেন্টের ডেটা রিসোর্স ডেটা সহ বা ছাড়া Base64-এনকোডেড স্ট্রিং। উদাহরণ পেলোডের জন্য, ইভেন্ট ডেটা দেখুন। JSON পেলোড যা রিসোর্স ডেটা ধারণ করে। একটি উদাহরণ পেলোডের জন্য, রেফারেন্স ডকুমেন্টেশনে Channel রিসোর্সটি দেখুন। JSON পেলোড যাতে রিসোর্স ডেটা থাকে। একটি উদাহরণ পেলোডের জন্য, রেফারেন্স ডকুমেন্টেশনে activity.query রেসপন্স বডি দেখুন।

ড্রাইভ ইভেন্টগুলির সাথে শুরু করুন

এই নির্দেশিকায় একটি Drive রিসোর্সে কীভাবে Google Workspace ইভেন্ট সাবস্ক্রিপশন তৈরি ও পরিচালনা করতে হয়, তা ব্যাখ্যা করা হয়েছে। এর মাধ্যমে আপনার অ্যাপ Google Cloud Pub/Sub-এর মাধ্যমে ইভেন্ট গ্রহণ করতে পারবে।

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করতে, "একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন" দেখুন।

Google Workspace Events API, Google Cloud Pub/Sub API, এবং Google Drive API সক্রিয় করুন

গুগল এপিআই ব্যবহার করার আগে, আপনাকে একটি গুগল ক্লাউড প্রজেক্টে সেগুলি চালু করতে হবে। আপনি একটি একক গুগল ক্লাউড প্রজেক্টে এক বা একাধিক এপিআই চালু করতে পারেন।

গুগল ক্লাউড কনসোল

  1. Google Cloud কনসোলে, আপনার অ্যাপের জন্য Google Cloud প্রজেক্টটি খুলুন এবং Google Workspace Events API, Pub/Sub API, ও Drive API সক্রিয় করুন:

    এপিআইগুলি সক্রিয় করুন

  2. আপনি সঠিক ক্লাউড প্রজেক্টে এপিআইগুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Next' বাটনে ক্লিক করুন।

  3. আপনি সঠিক API-গুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Enable'-এ ক্লিক করুন।

জিক্লাউড

  1. আপনার ওয়ার্কিং ডিরেক্টরিতে, আপনার গুগল অ্যাকাউন্টে সাইন ইন করুন:

    gcloud auth login
  2. আপনার অ্যাপের জন্য প্রজেক্টটিকে ক্লাউড প্রজেক্ট হিসেবে সেট করুন:

    gcloud config set project PROJECT_ID

    PROJECT_ID জায়গায় আপনার অ্যাপের ক্লাউড প্রজেক্টের প্রজেক্ট আইডিটি বসান।

  3. Google Workspace Events API, Pub/Sub API, এবং Drive API সক্রিয় করুন:

    gcloud services enable workspaceevents.googleapis.com \
    pubsub.googleapis.com \
    drive.googleapis.com

একটি ক্লায়েন্ট আইডি সেট আপ করুন

OAuth 2.0 ক্লায়েন্ট আইডি তৈরি করতে, "Create OAuth client ID credentials " দেখুন।

একটি পাব/সাব টপিক তৈরি করুন

সাবস্ক্রিপশন তৈরি করার আগে, আপনাকে অবশ্যই একটি Google Cloud Pub/Sub টপিক তৈরি করতে হবে, যা আপনার অ্যাপ্লিকেশনের জন্য প্রাসঙ্গিক ইভেন্টগুলো গ্রহণ করবে। Pub/Sub টপিকটি তৈরি করতে, “Create and subscribe to a Pub/Sub topic” দেখুন।

আপনার অনুরোধগুলির জন্য অবশ্যই ড্রাইভ সার্ভিস অ্যাকাউন্ট ( drive-api-event-push@system.gserviceaccount.com ) উল্লেখ করবেন।

একটি ড্রাইভ সাবস্ক্রিপশন তৈরি করুন

যখন সাবস্ক্রিপশনের বিষয়বস্তু (বা এর হায়ারার্কির অধীনে থাকা অন্য কোনো ফাইল) পরিবর্তিত হয়, তখন ক্লাউড ইভেন্ট পাঠানো হয়। উদাহরণস্বরূপ, আপনি যদি একটি শেয়ার্ড ড্রাইভে একটি সাবস্ক্রিপশন তৈরি করেন এবং সেই শেয়ার্ড ড্রাইভের একাধিক সাবফোল্ডারের মধ্যে থাকা কোনো ফাইল পরিবর্তিত হয়, তাহলে এটি একটি ইভেন্ট তৈরি করে। সমর্থিত রিসোর্স এবং ড্রাইভ ইভেন্টের প্রকারভেদ সম্পর্কে জানতে, ‘সাবস্ক্রিপশন তৈরির জন্য ইভেন্টের প্রকারভেদ’ দেখুন।

নিম্নলিখিত Node.js অ্যাপ্লিকেশনটি কোনো ফাইল বা ফোল্ডারের বিষয়বস্তু পরিবর্তনের ইভেন্ট শোনার জন্য একটি Drive ইভেন্ট সাবস্ক্রিপশন তৈরি করে। আরও তথ্যের জন্য, "Create a Google Workspace subscription" দেখুন।

এই উদাহরণটি চালানোর জন্য, নিশ্চিত করুন যে আপনার Node.js এবং npm উভয়ই ইনস্টল করা আছে। এছাড়াও, এই উদাহরণটি চালানোর জন্য প্রয়োজনীয় ডিপেন্ডেন্সিগুলোও ইনস্টল করা আছে কিনা, তা আপনাকে নিশ্চিত করতে হবে।

# Install needed dependencies
$ npm install googleapis @google-cloud/local-auth axios

একটি ড্রাইভ সাবস্ক্রিপশন তৈরি করতে, আপনি Google Workspace Events API-এর subscriptions.create মেথড ব্যবহার করে একটি Subscription রিসোর্স তৈরি করেন:

// app.js

const fs = require('fs').promises;
const {authenticate} = require('@google-cloud/local-auth');
const {google} = require('googleapis');
const axios = require('axios');

// Scopes for Google Drive API access.
const SCOPES = ['SCOPES'];

/**
 * Authenticates the user running the script.
 * @return {Promise<OAuth2Client>} The authorized client.
 */
async function authorize() {
  const client = await authenticate({
    scopes: SCOPES,
    keyfilePath: 'credentials.json',
  });
  if (client.credentials) {
    const content = await fs.readFile('credentials.json');
    const keys = JSON.parse(content);
    const {client_id, client_secret} = keys.installed || keys.web;
    const payload = JSON.stringify({
      type: 'authorized_user',
      client_id,
      client_secret,
      refresh_token: client.credentials.refresh_token,
    });
    await fs.writeFile('token.json', payload);
    return client;
  } else {
    throw new Exception(
        'credentials.json did not have the Oauth client secret or it was not properly formatted');
  }
  }

/**
 * Creates a subscription to Google Drive events.
 * @param {OAuth2Client} authClient An authorized OAuth2 client.
 */
async function createSubscription(authClient) {
  const url = 'https://workspaceevents.googleapis.com/v1/subscriptions';
  const data = {
    targetResource: 'TARGET_RESOURCE',
    eventTypes: ['EVENT_TYPES'],
    payload_options: {
      include_resource: {
        {
          '<var>RESOURCE_DATA</var>'
        }
      }
    },
    drive_options: {
      include_descendants: {
        {
          '<var>INCLUDE_DESCENDANTS</var>'
        }
      }
    },
    notification_endpoint: {pubsub_topic: 'TOPIC_NAME'}
  };
  try {
    const {token} = await authClient.getAccessToken();
    const response = await axios.post(
        url, data, {headers: {'Authorization': `Bearer ${token}`}});
    console.log('Subscription created:', response.data);
  } catch (error) {
    const message = error.response ? error.response.data : error.message;
    console.error('Error creating subscription:', message);
  }
}

authorize().then(createSubscription).catch(console.error);

নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • SCOPES : এক বা একাধিক OAuth স্কোপ যা সাবস্ক্রিপশনের প্রতিটি ইভেন্ট টাইপকে সমর্থন করে। এটি স্ট্রিং-এর একটি অ্যারে হিসাবে বিন্যস্ত থাকে। একাধিক স্কোপ তালিকাভুক্ত করতে, কমা দিয়ে আলাদা করুন। উত্তম অনুশীলন হিসাবে, আপনার এমন সবচেয়ে সীমাবদ্ধ স্কোপ ব্যবহার করা উচিত যা আপনার অ্যাপকে সচল রাখে। উদাহরণস্বরূপ, 'https://www.googleapis.com/auth/drive.file'

  • TARGET_RESOURCE : আপনি যে গুগল ওয়ার্কস্পেস রিসোর্সটি সাবস্ক্রাইব করছেন, তার সম্পূর্ণ রিসোর্স নামটি এখানে উল্লেখ করুন। উদাহরণস্বরূপ, একটি ড্রাইভ ফাইল বা ফোল্ডার সাবস্ক্রাইব করতে, //drive.googleapis.com/files/FileID ব্যবহার করুন।

  • EVENT_TYPES : এক বা একাধিক ইভেন্টের ধরণ যেগুলোতে আপনি টার্গেট রিসোর্সে সাবস্ক্রাইব করতে চান। স্ট্রিং-এর একটি অ্যারে হিসাবে ফরম্যাট করুন, যেমন 'google.workspace.drive.file.v3.contentChanged'

  • RESOURCE_DATA : একটি বুলিয়ান যা নির্দিষ্ট করে যে সাবস্ক্রিপশনটি ইভেন্ট পেলোডে রিসোর্স ডেটা অন্তর্ভুক্ত করবে কিনা। এই প্রপার্টিটি আপনার সাবস্ক্রিপশনের সময়কালকে প্রভাবিত করে। আরও জানতে, ইভেন্ট ডেটা দেখুন।

    • True : সমস্ত রিসোর্স ডেটা অন্তর্ভুক্ত করে। কোন কোন ফিল্ড অন্তর্ভুক্ত হবে তা সীমিত করতে, fieldMask যোগ করুন এবং পরিবর্তিত রিসোর্সের জন্য অন্তত একটি ফিল্ড নির্দিষ্ট করুন। শুধুমাত্র চ্যাট এবং ড্রাইভ রিসোর্সের সাবস্ক্রিপশনেই রিসোর্স ডেটা অন্তর্ভুক্ত করা যায়।

    • False : রিসোর্স ডেটা বাদ দেয়।

  • INCLUDE_DESCENDANTS : একটি বুলিয়ান ফিল্ড যা DriveOptions এর অংশ। এটি শুধুমাত্র তখনই উপলব্ধ হয় যখন targetResource একটি Drive ফাইল অথবা এমন একটি শেয়ার্ড ড্রাইভ হয় যার MIME টাইপ application/vnd.google-apps.folder এ সেট করা আছে। এটি My Drive-এর রুট ফোল্ডার বা শেয়ার্ড ড্রাইভগুলিতে সেট করা যায় না।

    • True : সাবস্ক্রিপশনটি ইভেন্টের তালিকায় ড্রাইভের সমস্ত অধীনস্থ ফাইল অন্তর্ভুক্ত করে।

    • False : সাবস্ক্রিপশনটি সেই একক ফাইল বা শেয়ার্ড ড্রাইভের জন্য তৈরি করা হয় যা targetResource হিসাবে নির্দিষ্ট করা হয়েছে।

  • TOPIC_NAME : আপনার ক্লাউড প্রজেক্টে তৈরি করা পাব/সাব টপিকের সম্পূর্ণ নাম। এই পাব/সাব টপিকটি সাবস্ক্রিপশনের জন্য ইভেন্ট গ্রহণ করে। এর ফরম্যাট হলো projects/ PROJECT_ID /topics/ TOPIC_IDnotificationEndpoint ফিল্ডটি পাব/সাব টপিক নির্দিষ্ট করতে ব্যবহৃত হয় এবং এখানেই সাবস্ক্রিপশনটি ইভেন্ট সরবরাহ করে।

আপনার ড্রাইভ সাবস্ক্রিপশন পরীক্ষা করুন

আপনি ড্রাইভ ইভেন্ট পাচ্ছেন কিনা তা পরীক্ষা করতে, আপনি একটি ইভেন্ট ট্রিগার করে পাব/সাব সাবস্ক্রিপশনে মেসেজগুলো পুল করতে পারেন। আরও তথ্যের জন্য, আপনার গুগল ওয়ার্কস্পেস সাবস্ক্রিপশন পরীক্ষা করুন দেখুন।

ক্লাউড ফাংশন ব্যবহার করে ড্রাইভ ইভেন্টগুলি প্রক্রিয়া করুন

ড্রাইভ ইভেন্টগুলো আপনার তৈরি করা সাবস্ক্রিপশনের পাব/সাব টপিকে পাঠানো হয়। ট্রিগার তৈরি করার সময় নিশ্চিত করুন যে, ট্রিগারের জন্য ব্যবহৃত পাব/সাব টপিকটি আপনার ইভেন্ট সাবস্ক্রিপশনের পাব/সাব টপিকের সাথে মেলে। এরপর আপনি আপনার ক্লাউড রান ফাংশনটি ডিপ্লয় করতে পারেন এবং লগগুলিতে ইভেন্টের পরিবর্তন দেখতে ফাইলটিতে সম্পাদনা করতে পারেন।

ফাংশনটি তৈরি করার আগে, ডিপেন্ডেন্সিগুলোর জন্য package.json আপডেট করুন:

{
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0",
    "cloudevents": "^8.0.0"
  }
}

এরপরে, ফাংশনটির জন্য সোর্স কোড তৈরি করুন:

const functions = require('@google-cloud/functions-framework');
const { HTTP } = require("cloudevents");

/**
 * A Cloud Function triggered by Pub/Sub messages containing Google Drive activity events.
 * This function processes different types of Drive events.
 *
 * @param {object} cloudEvent The CloudEvent object.
 * @param {object} cloudEvent.data The data payload from the event source.
 */
functions.cloudEvent('helloFromDrive', async (cloudEvent) => {
  try {
    // Verify the Pub/Sub message exists
    if (!cloudEvent.data || !cloudEvent.data.message) {
      console.warn("Event is missing the Pub/Sub message payload.");
      return;
    }

    // Extract the Pub/Sub message details
    const { message } = cloudEvent.data;
    const { attributes, data } = message;

    // The original Drive CloudEvent is reconstructed from the Pub/Sub message attributes
    const driveEvent = HTTP.toEvent({ headers: attributes });
    const { type } = driveEvent;

    // The Drive event's payload is a base64 encoded JSON string
    const payload = JSON.parse(Buffer.from(data, "base64").toString());

    console.log(`Processing Drive event type: ${type}`);

    // Use a switch statement to handle different event types
    switch (type) {
      case 'google.workspace.drive.file.v3.contentChanged':
        console.log('File Content Changed:', payload);
        break;
      case 'google.workspace.drive.accessproposal.v3.created':
        console.log('Access Proposal Created:', payload);
        break;
      default:
        console.log(`Received unhandled event type: ${type}`);
        break;
    }
  } catch (error) {
    console.error("An error occurred while processing the Drive event:", error);
  }
});

সীমাবদ্ধতা

  • DriveOptions এর includeDescendants বুলিয়ান ফিল্ডটির true হলে, শেয়ার করা ড্রাইভ ও ফোল্ডারের Drive সাবস্ক্রিপশনগুলো সর্বদা একটি ইভেন্ট প্রেরণ করে, এমনকি যদি ইভেন্টটি ট্রিগার করা ফাইলটি Drive সাবস্ক্রিপশনের জন্য ব্যবহৃত ফোল্ডারের অনেক স্তর নিচে নেস্টেড থাকে।
  • যদিও আপনি কোনো ফোল্ডারে সাবস্ক্রিপশন তৈরি করে থাকতে পারেন, তবুও আপনি ফাইল হায়ারার্কির মধ্যে থাকা সমস্ত ইভেন্ট নাও পেতে পারেন, কারণ ব্যবহারকারী বা অ্যাপ্লিকেশনটিকে সেগুলিতে অ্যাক্সেস দেওয়া নাও হতে পারে। এই ক্ষেত্রে, সাবস্ক্রিপশনটি সক্রিয় থাকে, কিন্তু যে রিসোর্সগুলিতে আপনার অ্যাক্সেস নেই, সেগুলির জন্য আপনি কোনো ইভেন্ট পাবেন না।
  • সমস্ত ফাইল এবং ফোল্ডারের ইভেন্টের জন্য সাবস্ক্রিপশন সমর্থিত, কিন্তু শেয়ার্ড ড্রাইভের রুট ফোল্ডারের জন্য নয়। সাবস্ক্রিপশন শুধুমাত্র শেয়ার্ড ড্রাইভের ভেতরের ফাইল এবং ফোল্ডারগুলোর জন্য সমর্থিত। কোনো শেয়ার্ড ড্রাইভের রুট ফোল্ডারে সরাসরি করা পরিবর্তন ইভেন্ট ট্রিগার করবে না।
  • যে ব্যবহারকারী সাবস্ক্রিপশন অনুমোদন করেন, তিনি যে ইভেন্টগুলোতে সাবস্ক্রাইব করছেন সেগুলোর সাথে সম্পর্কিত ফাইলটিতে তার অনুমতি থাকতে হবে।
  • সাবস্ক্রিপশনটি শুধুমাত্র সেইসব রিসোর্সের ইভেন্ট গ্রহণ করে, যেগুলিতে ব্যবহারকারীর তার গুগল ওয়ার্কস্পেস অ্যাকাউন্ট বা গুগল অ্যাকাউন্টের মাধ্যমে অ্যাক্সেস রয়েছে।