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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 डिस्क API Drive Activity API
इवेंट का सोर्स फ़ाइलें, फ़ोल्डर, और शेयर की गई ड्राइव changes.watch और files.watch DriveActivity
इस्तेमाल किए जा सकने वाले इवेंट
  • File
  • AccessProposal
साथ काम करने वाले इवेंट टाइप की सूची देखने के लिए, Google Workspace Events API के दस्तावेज़ में, सदस्यताएं बनाने के लिए इवेंट टाइप देखें.
Channel

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

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

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

इस गाइड में, Drive संसाधन पर Google Workspace Events की सदस्यता बनाने और उसे मैनेज करने का तरीका बताया गया है. इससे आपका ऐप्लिकेशन, 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 Cloud प्रोजेक्ट में, एक या उससे ज़्यादा एपीआई चालू किए जा सकते हैं.

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. अपने प्रोजेक्ट को अपने ऐप्लिकेशन के Cloud प्रोजेक्ट पर सेट करें:

    gcloud config set project PROJECT_ID

    PROJECT_ID की जगह, अपने ऐप्लिकेशन के Cloud प्रोजेक्ट का प्रोजेक्ट आईडी डालें.

  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/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 की किसी फ़ाइल या फ़ोल्डर की सूचनाएं पाने के लिए, //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 फ़ाइल हो या शेयर की गई कोई ऐसी ड्राइव हो जिसका MIME टाइप targetResource पर सेट हो.application/vnd.google-apps.folder इसे 'मेरी ड्राइव' या शेयर की गई ड्राइव के रूट फ़ोल्डर पर सेट नहीं किया जा सकता.

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

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

  • TOPIC_NAME: Pub/Sub विषय का पूरा नाम. यह नाम, Cloud प्रोजेक्ट में बनाया गया विषय है. इस 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 खाते से ऐक्सेस कर सकता है.