Google Drive में मौजूद इवेंट पर काम करना

इस पेज पर, Google Cloud Pub/Sub से Google Drive के इवेंट पाने का तरीका बताया गया है.

Drive इवेंट, Drive के किसी संसाधन में की गई गतिविधि या बदलाव को दिखाता है. जैसे, किसी फ़ोल्डर में नई फ़ाइल. इवेंट का इस्तेमाल करके, यह समझा जा सकता है कि क्या हुआ. इसके बाद, कार्रवाई की जा सकती है या अपने उपयोगकर्ताओं को सही तरीके से जवाब दिया जा सकता है.

यहां कुछ उदाहरण दिए गए हैं, जिनसे पता चलता है कि इवेंट का इस्तेमाल कैसे किया जा सकता है:

  • किसी फ़ाइल, फ़ोल्डर या शेयर की गई ड्राइव में होने वाले बदलावों पर नज़र रखना और उनके हिसाब से कार्रवाई करना. जैसे, जब किसी फ़ाइल में बदलाव किया जाता है या उसका नया वर्शन अपलोड किया जाता है.

  • अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, फ़ाइलों में होने वाले बदलावों पर नज़र रखें.

  • फ़ाइल शेयर करने, फ़ाइलें ट्रांसफ़र करने, और उन्हें मिटाने जैसी गतिविधियों का ऑडिट करें. इससे डेटा लीक होने और बिना अनुमति के डेटा ऐक्सेस किए जाने का पता लगाने में मदद मिलती है.

  • इससे यह अहम जानकारी मिलती है कि उपयोगकर्ता अपनी फ़ाइलें कैसे मैनेज कर रहे हैं. इससे उन जगहों की पहचान करने में मदद मिलती है जहां कॉन्टेंट मैनेजमेंट को बेहतर बनाया जा सकता है.

  • फ़ाइल में किए गए बदलावों को ट्रैक करें, ताकि यह पुष्टि की जा सके कि वे नियमों और शर्तों या सुरक्षा नीतियों के मुताबिक हैं.

  • Google Cloud के अन्य प्रॉडक्ट, जैसे कि Eventarc, Workflows, और BigQuery का इस्तेमाल करके, Drive में होने वाली गतिविधि का विश्लेषण करें.

इवेंट कैसे काम करते हैं

जब भी Drive में कोई गतिविधि होती है, तो Google Drive API का कोई संसाधन बनाया जाता है, अपडेट किया जाता है या मिटाया जाता है. Drive, इवेंट का इस्तेमाल करके आपके ऐप्लिकेशन को यह जानकारी देता है कि किस तरह की गतिविधि हुई और Drive API के किस संसाधन पर असर पड़ा.

Drive, इवेंट को उनके टाइप के हिसाब से कैटगरी में बांटता है. इवेंट टाइप की मदद से, आपको सिर्फ़ अपनी ज़रूरत के हिसाब से जानकारी फ़िल्टर करने और पाने में मदद मिलती है. साथ ही, एक जैसी गतिविधियों को एक ही तरीके से मैनेज किया जा सकता है.

यहां दी गई टेबल में बताया गया है कि Drive में की गई कोई गतिविधि, Drive API के किसी संसाधन पर कैसे असर डालती है. साथ ही, इसमें यह भी बताया गया है कि आपके Drive ऐप्लिकेशन को किस तरह का इवेंट मिलता है:

गतिविधि Drive API संसाधन इवेंट किस तरह का है
कोई उपयोगकर्ता किसी फ़ाइल का ऐक्सेस पाने के लिए अनुरोध करता है. AccessProposal संसाधन बनाया जाता है. ऐक्सेस करने का नया अनुरोध

कोई उपयोगकर्ता किसी फ़ाइल के लिए अनुमति का अनुरोध करता है.

Approval संसाधन बनाया जाता है. अनुमति का नया अनुरोध
कोई उपयोगकर्ता, Google Docs, Sheets या Slides की किसी फ़ाइल में टिप्पणी पोस्ट करता है. Comment संसाधन बनाया जाता है. नई टिप्पणी
कोई उपयोगकर्ता किसी फ़ोल्डर या शेयर की गई ड्राइव में कोई फ़ाइल जोड़ता है. File संसाधन बनाया जाता है. नई फ़ाइल
कोई उपयोगकर्ता किसी फ़ाइल के लिए अनुमतियां सेट करता है. Permission संसाधन बनाया जाता है. नई अनुमति
जब कोई उपयोगकर्ता किसी टिप्पणी का जवाब देता है. Reply संसाधन बनाया जाता है. नया जवाब

Google Drive से इवेंट पाना

आम तौर पर, आपका Drive ऐप्लिकेशन, Drive API या Google Drive Activity API की मदद से इवेंट का पता लगा सकता था. Google Workspace Events API में Drive के इवेंट जोड़ने के बाद, अब इवेंट पाने का तीसरा तरीका भी उपलब्ध है:

  • इवेंट होते ही उनकी सूचनाएं पाने के लिए, Google Workspace Events API का इस्तेमाल करके इवेंट की सदस्यता लें. ज़्यादा जानकारी के लिए, Google Drive के इवेंट की सदस्यता लेना लेख पढ़ें.

  • Drive API का इस्तेमाल करके, इवेंट की सूचनाएं पाने की सुविधा चालू करें. changes.watch तरीके का इस्तेमाल करके, उपयोगकर्ता के बदलाव से जुड़े इवेंट पाएं या files.watch तरीके का इस्तेमाल करके, फ़ाइल में बदलाव से जुड़े इवेंट पाएं.

  • Google Drive Activity API को कॉल करके, हाल ही के इवेंट के बारे में क्वेरी करें.

यहां दी गई टेबल में, इवेंट की सदस्यता लेने और उनके लिए क्वेरी करने के बीच का अंतर और वजहें बताई गई हैं:

Google Workspace के इवेंट की सदस्यता लेना Drive API के वॉच इवेंट की सदस्यता लें Drive Activity API के इवेंट के लिए क्वेरी करना
उपयोग के उदाहरण
  • रीयल टाइम में इवेंट को प्रोसेस करना या उनका जवाब देना.
  • अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, संसाधनों में होने वाले बदलावों पर नज़र रखें.
  • Pub/Sub की मदद से, स्ट्रक्चर्ड इवेंट डेटा पाना और Cloud Run जैसे Google Cloud प्रॉडक्ट इस्तेमाल करना.
  • फ़ाइल के मेटाडेटा में हुए बदलावों का पता लगाएं. साथ ही, रीयल-टाइम सूचनाओं की मदद से, चुनिंदा आइटम में हुए बदलावों पर नज़र रखें.
  • यह एपीआई एंडपॉइंट को बार-बार पोल करने से बचने के लिए, वेबहुक कॉलबैक यूआरएल के साथ काम करता है.
  • सभी गतिविधियों का पूरा इतिहास फ़ेच करें. इसमें हर इवेंट की पूरी जानकारी शामिल होती है.
  • ऑडिट जैसे खास कामों के लिए, ActionDetail, Actor, और Target की जानकारी वाली सटीक गतिविधियों को वापस पाना.
एपीआई Google Workspace Events API Google Drive API Google Drive पर गतिविधि के बारे में बताने वाला एपीआई
इवेंट का सोर्स फ़ाइलें, फ़ोल्डर, और शेयर की गई ड्राइव changes.watch और files.watch DriveActivity
इस्तेमाल किए जा सकने वाले इवेंट
  • AccessProposal
  • Approval
  • Comment
  • File
  • Permission
  • Reply
सदस्यता लेने के लिए, Google Workspace Events API के दस्तावेज़ में इवेंट के टाइप देखें.
Channel

इस्तेमाल किए जा सकने वाले इवेंट टाइप की सूची देखने के लिए, Drive API के दस्तावेज़ में Google Drive API से मिलने वाली सूचनाओं के इवेंट को समझना लेख पढ़ें.
Action

इस्तेमाल किए जा सकने वाले फ़ील्ड की सूची देखने के लिए, Drive Activity API के रेफ़रंस दस्तावेज़ में Action संसाधन देखें.
इवेंट का फ़ॉर्मैट Pub/Sub मैसेज, जिसे CloudEvent की खास जानकारी के मुताबिक फ़ॉर्मैट किया गया है. ज़्यादा जानकारी के लिए, Google Workspace इवेंट का स्ट्रक्चर देखें. Drive API का संसाधन (Channel) Drive Activity API का संसाधन (Action)
इवेंट का डेटा Base64-एन्कोडेड स्ट्रिंग, जिसमें संसाधन का डेटा शामिल हो या न हो. पेलोड के उदाहरणों के लिए, इवेंट डेटा देखें. JSON पेलोड, जिसमें संसाधन का डेटा शामिल होता है. पेलोड का उदाहरण देखने के लिए, रेफ़रंस दस्तावेज़ में Channel संसाधन देखें. JSON पेलोड, जिसमें संसाधन का डेटा शामिल होता है. पेलोड का उदाहरण देखने के लिए, रेफ़रंस दस्तावेज़ में activity.query रिस्पॉन्स बॉडी देखें.

Drive इवेंट का इस्तेमाल शुरू करना

इस गाइड में, Drive के किसी संसाधन पर Google Workspace इवेंट की सदस्यता बनाने और उसे मैनेज करने का तरीका बताया गया है. इससे आपके ऐप्लिकेशन को Google Cloud Pub/Sub पर इवेंट की सूचनाएं मिलती हैं.

Google Cloud प्रोजेक्ट बनाना

Google Cloud प्रोजेक्ट जनरेट करने के लिए, Google Cloud प्रोजेक्ट बनाना लेख पढ़ें.

Google Workspace Events API, Google Cloud Pub/Sub API, और Google Drive API को चालू करना

Google API का इस्तेमाल करने से पहले, आपको उन्हें Google Cloud प्रोजेक्ट में चालू करना होगा. एक Google क्लाउड प्रोजेक्ट में, एक या इससे ज़्यादा एपीआई चालू किए जा सकते हैं.

Google Cloud कंसोल

  1. Google Cloud console में, अपने ऐप्लिकेशन के लिए Google Cloud प्रोजेक्ट खोलें. इसके बाद, Google Workspace Events API, Pub/Sub API, और Drive API को चालू करें:

    एपीआई चालू करना

  2. पुष्टि करें कि आपने सही Cloud प्रोजेक्ट में एपीआई चालू किए हैं. इसके बाद, आगे बढ़ें पर क्लिक करें.

  3. पुष्टि करें कि सही एपीआई चालू किए जा रहे हैं. इसके बाद, चालू करें पर क्लिक करें.

gcloud

  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 क्लाइंट आईडी क्रेडेंशियल बनाना लेख पढ़ें.

Pub/Sub विषय बनाना

सदस्यता लेने से पहले, आपको Google Cloud Pub/Sub का एक विषय बनाना होगा. इससे आपको अपने ऐप्लिकेशन के लिए ज़रूरी इवेंट की जानकारी मिलेगी. Pub/Sub विषय बनाने के लिए, Pub/Sub विषय बनाना और उसकी सदस्यता लेना लेख पढ़ें.

अपने अनुरोधों के लिए, Drive सेवा खाते (drive-api-event-push@system.gserviceaccount.com) का रेफ़रंस देना न भूलें.

Drive की सदस्यता लेना

सदस्यता के विषय (या विषय की हैरारकी में मौजूद किसी अन्य फ़ाइल) में बदलाव होने पर, क्लाउड इवेंट भेजे जाते हैं. उदाहरण के लिए, अगर आपने 'शेयर की गई ड्राइव' पर सदस्यता बनाई है और उस ड्राइव में मौजूद कई सब-फ़ोल्डर में नेस्ट की गई किसी फ़ाइल में बदलाव होता है, तो इससे एक इवेंट जनरेट होता है. इस्तेमाल किए जा सकने वाले संसाधनों और Drive के इवेंट टाइप के बारे में जानने के लिए, सदस्यताएं बनाने के लिए इवेंट टाइप देखें.

यहां दिया गया Node.js ऐप्लिकेशन, किसी फ़ाइल या फ़ोल्डर पर Drive इवेंट की सदस्यता बनाता है, ताकि कॉन्टेंट में होने वाले बदलावों के इवेंट को सुना जा सके. ज़्यादा जानकारी के लिए, Google Workspace की सदस्यता लेना लेख पढ़ें.

इस उदाहरण को चलाने के लिए, पक्का करें कि आपके पास Node.js और npm, दोनों इंस्टॉल हों. आपको यह भी पक्का करना होगा कि इस उदाहरण को चलाने के लिए, ज़रूरी डिपेंडेंसी इंस्टॉल की गई हों.

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

Drive की सदस्यता बनाने के लिए, 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: {
        {
          'RESOURCE_DATA'
        }
      }
    },
    drive_options: {
      include_descendants: {
        {
          'INCLUDE_DESCENDANTS'
        }
      }
    },
    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 की किसी फ़ाइल या फ़ोल्डर की सदस्यता लेने के लिए, //drive.googleapis.com/files/FileID का इस्तेमाल करें.

  • EVENT_TYPES: एक या उससे ज़्यादा इवेंट टाइप , जिनकी सदस्यता आपको टारगेट रिसॉर्स में लेनी है. स्ट्रिंग की कलेक्शन के तौर पर फ़ॉर्मैट करें, जैसे कि 'google.workspace.drive.file.v3.contentChanged'.

  • RESOURCE_DATA: यह बूलियन वैल्यू है. इससे पता चलता है कि सदस्यता में, इवेंट पेलोड में मौजूद संसाधन का डेटा शामिल है या नहीं. इस प्रॉपर्टी से, आपकी सदस्यता की अवधि पर असर पड़ता है. ज़्यादा जानने के लिए, इवेंट डेटा लेख पढ़ें.

    • True: इसमें सभी रिसॉर्स का डेटा शामिल होता है. कौनसे फ़ील्ड शामिल किए जाएं, यह तय करने के लिए fieldMask जोड़ें. साथ ही, बदले गए संसाधन के लिए कम से कम एक फ़ील्ड तय करें. सिर्फ़ Chat और Drive के संसाधनों की सदस्यताओं में, संसाधन का डेटा शामिल किया जा सकता है.

    • False: इसमें संसाधन का डेटा शामिल नहीं है.

  • INCLUDE_DESCENDANTS: यह बूलियन फ़ील्ड, DriveOptions का हिस्सा है. यह सिर्फ़ तब उपलब्ध होता है, जब targetResource, Drive की कोई फ़ाइल हो या शेयर की गई ऐसी ड्राइव हो जिसका एमआईएमई टाइप application/vnd.google-apps.folder पर सेट हो. इसे 'मेरी ड्राइव' या शेयर की गई ड्राइव के रूट फ़ोल्डर पर सेट नहीं किया जा सकता.

    • True: सदस्यता में, इवेंट की सूची में मौजूद Drive की सभी चाइल्ड फ़ाइलें शामिल होती हैं.

    • False: सदस्यता, किसी एक फ़ाइल या 'शेयर की गई ड्राइव' के लिए बनाई जाती है. इसे targetResource के तौर पर तय किया जाता है.

  • TOPIC_NAME: आपके क्लाउड प्रोजेक्ट में बनाए गए Pub/Sub विषय का पूरा नाम. इस Pub/Sub विषय को सदस्यता के लिए इवेंट मिलते हैं. projects/PROJECT_ID/topics/TOPIC_ID के तौर पर फ़ॉर्मैट किया गया. notificationEndpoint फ़ील्ड का इस्तेमाल, Pub/Sub विषय की जानकारी देने के लिए किया जाता है. सदस्यता से जुड़े इवेंट इसी फ़ील्ड में डिलीवर किए जाते हैं.

Drive की सदस्यता को टेस्ट करना

यह जांचने के लिए कि आपको Drive के इवेंट मिल रहे हैं या नहीं, किसी इवेंट को ट्रिगर किया जा सकता है. साथ ही, Pub/Sub सदस्यता के लिए मैसेज पुल किए जा सकते हैं. ज़्यादा जानकारी के लिए, Google Workspace की सदस्यता को आज़माना लेख पढ़ें.

Cloud Functions का इस्तेमाल करके, Drive के इवेंट प्रोसेस करना

Drive के इवेंट, आपकी बनाई गई सदस्यता में 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);
  }
});

सीमाएं

  • जब DriveOptions में includeDescendants बूलियन फ़ील्ड true होता है, तब शेयर की गई ड्राइव और फ़ोल्डर पर Drive की सदस्यताएं हमेशा एक इवेंट भेजती हैं. भले ही, इवेंट को ट्रिगर करने वाली फ़ाइल, Drive की सदस्यता के लिए इस्तेमाल किए गए फ़ोल्डर के नीचे कई लेयर में नेस्ट की गई हो.
  • भले ही, आपने किसी फ़ोल्डर पर सदस्यता बनाई हो, लेकिन हो सकता है कि आपको फ़ाइल की हैरारकी में मौजूद सभी इवेंट न मिलें. ऐसा इसलिए, क्योंकि हो सकता है कि उपयोगकर्ता या ऐप्लिकेशन को उनका ऐक्सेस न दिया गया हो. इस मामले में, सदस्यता चालू रहती है. हालांकि, आपको उन संसाधनों के लिए कोई इवेंट नहीं मिलेगा जिनका आपके पास ऐक्सेस नहीं है.
  • सभी फ़ाइलों और फ़ोल्डर के इवेंट के लिए, सदस्यताएं ली जा सकती हैं. हालांकि, शेयर की गई ड्राइव के रूट फ़ोल्डर के लिए सदस्यताएं नहीं ली जा सकतीं. सदस्यताएं सिर्फ़ शेयर की गई ड्राइव में मौजूद फ़ाइलों और फ़ोल्डर के लिए उपलब्ध हैं. शेयर की गई ड्राइव के रूट फ़ोल्डर में सीधे तौर पर किए गए बदलावों से, इवेंट ट्रिगर नहीं होंगे.
  • सदस्यता को अनुमति देने वाले उपयोगकर्ता के पास, उन इवेंट से जुड़ी फ़ाइल की अनुमति होनी चाहिए जिनकी सदस्यता ली गई है.
  • सदस्यता को सिर्फ़ उन संसाधनों के इवेंट मिलते हैं जिन्हें उपयोगकर्ता अपने Google Workspace खाते या Google खाते से ऐक्सेस कर सकता है.

सदस्यता के कोटे और अनुरोध संख्या सीमित करने के बारे में जानकारी के लिए, Google Workspace Events API के इस्तेमाल की सीमाएं देखें.