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

এই পৃষ্ঠাটি ব্যাখ্যা করে যে কীভাবে Google Cloud Pub/Sub থেকে Google Drive ইভেন্টগুলি গ্রহণ করবেন।

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

ইভেন্টগুলি কীভাবে ব্যবহার করবেন তার কিছু উদাহরণ এখানে দেওয়া হল:

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

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

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

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

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

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

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

যখনই ড্রাইভে কিছু ঘটে, তখন একটি Google ড্রাইভ API রিসোর্স তৈরি, আপডেট বা মুছে ফেলা হয়। ড্রাইভ ইভেন্ট ব্যবহার করে আপনার অ্যাপে ঘটে যাওয়া কার্যকলাপের ধরণ এবং প্রভাবিত ড্রাইভ API রিসোর্স সম্পর্কে তথ্য সরবরাহ করে।

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

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

কার্যকলাপ ড্রাইভ এপিআই রিসোর্স ইভেন্টের ধরণ
একজন ব্যবহারকারী একটি ফাইলে একটি অ্যাক্সেস প্রস্তাব তৈরি করেন। একটি AccessProposal রিসোর্স তৈরি করা হয়েছে। নতুন অ্যাক্সেস প্রস্তাব
একজন ব্যবহারকারী Google Docs, Sheets, অথবা Slides ফাইলে একটি মন্তব্য পোস্ট করেন। একটি Comment সংস্থান তৈরি করা হয়েছে। নতুন মন্তব্য
একজন ব্যবহারকারী একটি ফোল্ডার বা শেয়ার্ড ড্রাইভে একটি ফাইল যোগ করেন। একটি File রিসোর্স তৈরি করা হয়েছে। নতুন ফাইল
একজন ব্যবহারকারী একটি মন্তব্যের উত্তর দিচ্ছেন। একটি Reply রিসোর্স তৈরি করা হয়েছে। নতুন উত্তর

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

ঐতিহ্যগতভাবে, আপনার ড্রাইভ অ্যাপটি ড্রাইভ API অথবা গুগল ড্রাইভ অ্যাক্টিভিটি API এর মাধ্যমে ইভেন্টগুলি সনাক্ত করতে পারে। গুগল ওয়ার্কস্পেস ইভেন্টস API তে ড্রাইভ ইভেন্টগুলি যুক্ত করার সাথে সাথে, এখন ইভেন্টগুলি গ্রহণের তৃতীয় পদ্ধতি রয়েছে:

  • ডেভেলপার প্রিভিউ : ইভেন্টগুলি ঘটলে তা গ্রহণ করতে Google Workspace Events API ব্যবহার করে ইভেন্টগুলিতে সাবস্ক্রাইব করুন। আরও তথ্যের জন্য, Google Drive ইভেন্টগুলিতে সাবস্ক্রাইব করুন দেখুন।

  • ড্রাইভ API ব্যবহার করে ইভেন্টগুলিতে সাবস্ক্রাইব করুন। changes.watch পদ্ধতি ব্যবহার করে ব্যবহারকারীর পরিবর্তন ইভেন্টগুলি পান অথবা files.watch পদ্ধতি ব্যবহার করে ফাইল পরিবর্তন ইভেন্টগুলি পান।

  • Google Drive Activity API-এ কল করে সাম্প্রতিক ইভেন্টগুলির জন্য অনুসন্ধান করুন।

নিম্নলিখিত সারণীতে ইভেন্টগুলিতে সাবস্ক্রাইব করা এবং তাদের জন্য অনুসন্ধান করার পার্থক্য এবং কারণগুলি ব্যাখ্যা করা হয়েছে:

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

সমর্থিত ইভেন্টের ধরণের তালিকার জন্য, Drive API ডকুমেন্টেশনে "Google Drive API বিজ্ঞপ্তি ইভেন্টগুলি বুঝুন" দেখুন।
Action

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

ড্রাইভ ইভেন্ট দিয়ে শুরু করুন

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

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

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

Google Workspace Events API, Google Cloud Pub/Sub API, এবং Google Drive API সক্ষম করুন

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

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

  1. গুগল ক্লাউড কনসোলে, আপনার অ্যাপের জন্য গুগল ক্লাউড প্রজেক্টটি খুলুন এবং গুগল ওয়ার্কস্পেস ইভেন্টস এপিআই, পাব/সাব এপিআই এবং ড্রাইভ এপিআই সক্ষম করুন:

    API গুলি সক্ষম করুন

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

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

জিক্লাউড

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

    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 ক্লায়েন্ট আইডি তৈরি করতে, OAuth ক্লায়েন্ট আইডি শংসাপত্র তৈরি করুন দেখুন।

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

সাবস্ক্রিপশন তৈরি করার আগে, আপনাকে অবশ্যই একটি Google ক্লাউড পাব/সাব বিষয় তৈরি করতে হবে যা আপনার অ্যাপ্লিকেশনের আগ্রহের প্রাসঙ্গিক ইভেন্টগুলি গ্রহণ করে। পাব/সাব বিষয় তৈরি করতে, একটি পাব/সাব বিষয় তৈরি করুন এবং সাবস্ক্রাইব করুন দেখুন।

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

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

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

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

এই উদাহরণটি চালানোর জন্য, নিশ্চিত করুন যে আপনার 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/v1beta/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 : আপনি যে Google Workspace রিসোর্সে সাবস্ক্রাইব করছেন, সেটির সম্পূর্ণ রিসোর্সের নাম হিসেবে ফর্ম্যাট করা হয়েছে। উদাহরণস্বরূপ, একটি ড্রাইভ ফাইল বা ফোল্ডারে সাবস্ক্রাইব করতে, //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 : আপনার ক্লাউড প্রোজেক্টে তৈরি করা Pub/Sub টপিকের পুরো নাম। এই Pub/Sub টপিকটি সাবস্ক্রিপশনের জন্য ইভেন্টগুলি গ্রহণ করে। projects/ PROJECT_ID /topics/ TOPIC_ID হিসাবে ফর্ম্যাট করা হয়েছে। notificationEndpoint ফিল্ডটি Pub/Sub টপিক নির্দিষ্ট করতে ব্যবহৃত হয় এবং এটিই সেই জায়গা যেখানে সাবস্ক্রিপশন ইভেন্টগুলি সরবরাহ করে।

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

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

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

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

ফাংশনটি তৈরি করার আগে, নির্ভরতার জন্য 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);
  }
});

সীমাবদ্ধতা

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