इस पेज पर, 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 संसाधन | इवेंट किस तरह का है |
|---|---|---|
| कोई उपयोगकर्ता किसी फ़ाइल पर ऐक्सेस का प्रस्ताव बनाता है. | AccessProposal संसाधन बनाया जाता है. |
ऐक्सेस करने का नया अनुरोध |
| कोई उपयोगकर्ता, Google Docs, Sheets या Slides की फ़ाइल में टिप्पणी पोस्ट करता है. | Comment संसाधन बनाया जाता है. |
नई टिप्पणी |
| जब कोई उपयोगकर्ता किसी फ़ोल्डर या शेयर की गई ड्राइव में कोई फ़ाइल जोड़ता है. | File संसाधन बनाया जाता है. |
नई फ़ाइल |
| जब कोई उपयोगकर्ता किसी टिप्पणी का जवाब देता है. | 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 इवेंट के लिए क्वेरी करना | |
|---|---|---|---|
| उपयोग के उदाहरण |
|
|
|
| एपीआई | Google Workspace Events API | Google Drive API | Google Drive पर गतिविधि के बारे में बताने वाला एपीआई |
| इवेंट का सोर्स | फ़ाइलें, फ़ोल्डर, और शेयर की गई ड्राइव |
changes.watch और files.watch
|
DriveActivity
|
| इस्तेमाल किए जा सकने वाले इवेंट |
|
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 इवेंट की सदस्यता बनाने और उसे मैनेज करने का तरीका बताया गया है. इससे आपका ऐप्लिकेशन, 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 कंसोल
Google Cloud Console में, अपने ऐप्लिकेशन के लिए Google Cloud प्रोजेक्ट खोलें. इसके बाद, Google Workspace Events API, Pub/Sub API, और Drive API चालू करें:
पुष्टि करें कि आपने सही Cloud प्रोजेक्ट में एपीआई चालू किए हैं. इसके बाद, आगे बढ़ें पर क्लिक करें.
पुष्टि करें कि आपने सही एपीआई चालू किए हैं. इसके बाद, चालू करें पर क्लिक करें.
gcloud
अपनी वर्किंग डायरेक्ट्री में, अपने Google खाते में साइन इन करें:
gcloud auth loginअपने प्रोजेक्ट को अपने ऐप्लिकेशन के Cloud प्रोजेक्ट पर सेट करें:
gcloud config set project PROJECT_IDPROJECT_IDकी जगह, अपने ऐप्लिकेशन के Cloud प्रोजेक्ट का प्रोजेक्ट आईडी डालें.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 axiosDrive की सदस्यता बनाने के लिए, 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);
}
});
सीमाएं
- जब
includeDescendantsबूलियन फ़ील्ड मेंDriveOptionsकी वैल्यूtrueहोती है, तब शेयर की गई ड्राइव और फ़ोल्डर में Drive की सदस्यताएं हमेशा एक इवेंट भेजती हैं. भले ही, इवेंट को ट्रिगर करने वाली फ़ाइल, Drive की सदस्यता के लिए इस्तेमाल किए गए फ़ोल्डर के कई लेयर नीचे नेस्ट की गई हो. - ऐसा हो सकता है कि आपने किसी फ़ोल्डर की सदस्यता ली हो, लेकिन आपको फ़ाइल हैरारकी में मौजूद सभी इवेंट न मिलें. ऐसा इसलिए हो सकता है, क्योंकि उपयोगकर्ता या ऐप्लिकेशन को उनका ऐक्सेस न दिया गया हो. ऐसे में, सदस्यता चालू रहती है. हालांकि, आपको उन संसाधनों के लिए कोई इवेंट नहीं मिलेगा जिनका आपके पास ऐक्सेस नहीं है.
- सूचनाएं पाने की सुविधा, सभी फ़ाइलों और फ़ोल्डर में मौजूद इवेंट के लिए उपलब्ध है. हालांकि, यह सुविधा शेयर की गई ड्राइव के रूट फ़ोल्डर के लिए उपलब्ध नहीं है. सदस्यता लेने की सुविधा, सिर्फ़ शेयर की गई ड्राइव में मौजूद फ़ाइलों और फ़ोल्डर के लिए उपलब्ध है. शेयर की गई ड्राइव के रूट फ़ोल्डर में सीधे तौर पर किए गए बदलावों से इवेंट ट्रिगर नहीं होंगे.
- सदस्यता को अनुमति देने वाले उपयोगकर्ता के पास, उन इवेंट से जुड़ी फ़ाइल की अनुमति होनी चाहिए जिनकी सदस्यता ली गई है.
- सदस्यता को सिर्फ़ उन संसाधनों के इवेंट मिलते हैं जिन्हें उपयोगकर्ता अपने Google Workspace खाते या Google खाते से ऐक्सेस कर सकता है.
मिलते-जुलते विषय
- Google Workspace Events API के बारे में खास जानकारी
- Google Workspace की सदस्यता बनाना
- Google Drive के इवेंट की सूचना पाने के लिए सदस्यता लेना