หน้านี้จะอธิบายวิธีรับเหตุการณ์ใน Google ไดรฟ์จาก Google Cloud Pub/Sub
เหตุการณ์ในไดรฟ์แสดงถึงกิจกรรมหรือการเปลี่ยนแปลงใน ทรัพยากรของไดรฟ์ เช่น ไฟล์ใหม่ในโฟลเดอร์ คุณสามารถใช้ เหตุการณ์เพื่อทําความเข้าใจสิ่งที่เกิดขึ้น แล้วดําเนินการ หรือตอบสนองใน ลักษณะที่มีความหมายสําหรับผู้ใช้
ตัวอย่างวิธีใช้เหตุการณ์มีดังนี้
สังเกตและตอบสนองต่อการเปลี่ยนแปลงในไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์ เช่น เมื่อมีการแก้ไขไฟล์หรืออัปโหลดฉบับร่างใหม่
ตรวจสอบการเปลี่ยนแปลงไฟล์เพื่อปรับปรุงประสิทธิภาพของแอป
ตรวจสอบกิจกรรมต่างๆ เช่น การแชร์ไฟล์ การย้ายไฟล์ และการลบ เพื่อช่วยตรวจหา การรั่วไหลของข้อมูลที่อาจเกิดขึ้นและการเข้าถึงที่ไม่ได้รับอนุญาต
ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่ผู้ใช้จัดการไฟล์ ซึ่งจะช่วยระบุ ส่วนที่ควรปรับปรุงการจัดการเนื้อหา
ติดตามการเปลี่ยนแปลงไฟล์เพื่อยืนยันการปฏิบัติตามข้อกำหนดด้านกฎระเบียบหรือ นโยบายความปลอดภัย
วิเคราะห์กิจกรรมในไดรฟ์โดยใช้ผลิตภัณฑ์อื่นๆ ของ Google Cloud เช่น Eventarc เวิร์กโฟลว์ และ BigQuery
วิธีการทำงานของกิจกรรม
เมื่อใดก็ตามที่มีการดำเนินการในไดรฟ์ ระบบจะสร้าง อัปเดต หรือลบทรัพยากร Google ไดรฟ์ API ไดรฟ์ใช้เหตุการณ์เพื่อส่งข้อมูลไปยังแอปเกี่ยวกับประเภทกิจกรรมที่เกิดขึ้น และทรัพยากร Drive API ที่ได้รับผลกระทบ
ไดรฟ์จัดหมวดหมู่เหตุการณ์ตามประเภท ประเภทเหตุการณ์ช่วยให้คุณกรองและ รับเฉพาะข้อมูลประเภทที่ต้องการ รวมถึงช่วยให้คุณจัดการกิจกรรมที่คล้ายกัน ในลักษณะเดียวกันได้
ตารางต่อไปนี้แสดงวิธีที่กิจกรรมตัวอย่างในไดรฟ์ ส่งผลต่อทรัพยากรที่เกี่ยวข้องของ Drive API และประเภทเหตุการณ์ที่แอปไดรฟ์ ได้รับ
| กิจกรรม | ทรัพยากรของ Drive API | ประเภทของกิจกรรม |
|---|---|---|
| ผู้ใช้สร้างข้อเสนอการเข้าถึงในไฟล์ | สร้างทรัพยากร AccessProposal |
ข้อเสนอการเข้าถึงใหม่ |
| ผู้ใช้โพสต์ความคิดเห็นในไฟล์ Google เอกสาร, ชีต หรือสไลด์ | สร้างทรัพยากร Comment |
ความคิดเห็นใหม่ |
| ผู้ใช้เพิ่มไฟล์ไปยังโฟลเดอร์หรือไดรฟ์ที่แชร์ | สร้างทรัพยากร File |
ไฟล์ใหม่ |
| ผู้ใช้ตอบกลับความคิดเห็น | สร้างทรัพยากร Reply |
คำตอบใหม่ |
รับเหตุการณ์จาก Google ไดรฟ์
โดยปกติแล้ว แอปไดรฟ์จะค้นหาเหตุการณ์ผ่าน Drive API หรือ Google Drive Activity API การเพิ่มเหตุการณ์ในไดรฟ์ใน Google Workspace Events API ทำให้ตอนนี้มีวิธีที่ 3 ในการรับเหตุการณ์ ดังนี้
รุ่นตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์: สมัครรับข้อมูลกิจกรรมโดยใช้ Google Workspace Events API เพื่อรับกิจกรรมเมื่อเกิดขึ้น ดูข้อมูลเพิ่มเติมได้ที่สมัครรับข้อมูลเหตุการณ์ใน Google ไดรฟ์
สมัครรับข้อมูลกิจกรรมโดยใช้ Drive API รับเหตุการณ์การเปลี่ยนแปลงของผู้ใช้ ด้วยเมธอด
changes.watchหรือเหตุการณ์การเปลี่ยนแปลงไฟล์โดยใช้เมธอดfiles.watchค้นหาเหตุการณ์ล่าสุดโดยเรียกใช้ Google Drive Activity API
ตารางต่อไปนี้อธิบายความแตกต่างและเหตุผลในการติดตาม เหตุการณ์เทียบกับการค้นหาเหตุการณ์
| สมัครรับข้อมูลกิจกรรมของ Google Workspace | ติดตามเหตุการณ์การดูของ Drive API | ค้นหาเหตุการณ์ Drive Activity API | |
|---|---|---|---|
| กรณีการใช้งาน |
|
|
|
| API | Google Workspace Events API | Google Drive API | Google Drive Activity API |
| แหล่งที่มาของเหตุการณ์ | ไฟล์ โฟลเดอร์ และไดรฟ์ที่แชร์ |
changes.watch และ files.watch
|
DriveActivity
|
| เหตุการณ์ที่รองรับ |
|
Channel
ดูรายการประเภทเหตุการณ์ที่รองรับได้ที่ ทำความเข้าใจเหตุการณ์การแจ้งเตือนของ Google Drive API ในเอกสารประกอบของ 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เนื้อหาการตอบกลับ
ในเอกสารอ้างอิง
|
เริ่มต้นใช้งานเหตุการณ์ในไดรฟ์
คู่มือนี้อธิบายวิธีสร้างและจัดการการสมัครรับข้อมูลเหตุการณ์ใน 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 คุณต้องเปิดใช้ API ในโปรเจ็กต์ Google Cloud คุณเปิด API อย่างน้อย 1 รายการในโปรเจ็กต์ Google Cloud เดียวได้คอนโซล Google Cloud
ใน Google Cloud Console ให้เปิดโปรเจ็กต์ Google Cloud สำหรับแอปของคุณ แล้ว เปิดใช้ Google Workspace Events API, Pub/Sub API และ Drive API โดยทำดังนี้
ยืนยันว่าคุณกำลังเปิดใช้ API ในโปรเจ็กต์ Cloud ที่ถูกต้อง แล้วคลิกถัดไป
ยืนยันว่าคุณเปิดใช้ API ที่ถูกต้อง แล้วคลิกเปิดใช้
gcloud
ลงชื่อเข้าใช้บัญชี Google ในไดเรกทอรีการทำงานโดยทำดังนี้
gcloud auth loginตั้งค่าโปรเจ็กต์เป็นโปรเจ็กต์ Cloud สำหรับแอปของคุณ
gcloud config set project PROJECT_IDแทนที่
PROJECT_IDด้วยรหัสโปรเจ็กต์ สำหรับโปรเจ็กต์ระบบคลาวด์ของแอปเปิดใช้ 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-api-event-push@system.gserviceaccount.com) สำหรับคำขอของคุณ
สร้างการสมัครใช้บริการไดรฟ์
ระบบจะส่งเหตุการณ์ Cloud เมื่อมีการเปลี่ยนแปลงเรื่องการสมัครใช้บริการ (หรือไฟล์อื่นๆ ภายใต้ลำดับชั้นของเรื่อง) เช่น หากคุณสร้างการติดตามในไดรฟ์ที่แชร์และมีการเปลี่ยนแปลงไฟล์ที่ซ้อนอยู่ใน โฟลเดอร์ย่อยหลายรายการในไดรฟ์ที่แชร์นั้น ระบบจะสร้างเหตุการณ์ ดูทรัพยากรและประเภทกิจกรรมในไดรฟ์ที่รองรับได้ที่ประเภทกิจกรรมสำหรับการสร้างการสมัครใช้บริการ
แอปพลิเคชัน Node.js ต่อไปนี้จะสร้างการสมัครรับข้อมูลเหตุการณ์ในไดรฟ์ ในไฟล์หรือโฟลเดอร์เพื่อฟังเหตุการณ์การเปลี่ยนแปลงเนื้อหา ดูข้อมูลเพิ่มเติมได้ที่สร้างการสมัครใช้บริการ Google Workspace
หากต้องการเรียกใช้ตัวอย่างนี้ โปรดตรวจสอบว่าคุณได้ติดตั้ง Node.js และ npm แล้ว นอกจากนี้ คุณยังต้องตรวจสอบว่าได้ติดตั้งการอ้างอิงที่จำเป็นเพื่อเรียกใช้ ตัวอย่างนี้แล้ว
# Install needed dependencies
$ npm install googleapis @google-cloud/local-auth axiosหากต้องการสร้างการสมัครใช้บริการไดรฟ์ คุณต้องใช้เมธอด subscriptions.create() ของ Google Workspace Events API เพื่อสร้างทรัพยากร 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 อย่างน้อย 1 รายการที่รองรับกิจกรรมแต่ละประเภทสำหรับการ สมัครใช้บริการ จัดรูปแบบเป็นอาร์เรย์ของสตริง หากต้องการแสดงขอบเขตหลายรายการ ให้คั่นด้วยคอมมา แนวทางปฏิบัติแนะนำคือคุณควรใช้ขอบเขตที่จำกัดมากที่สุด ซึ่งยังคงอนุญาตให้แอปทำงานได้ เช่น'https://www.googleapis.com/auth/drive.file'TARGET_RESOURCE: ทรัพยากร Google Workspace ที่คุณสมัครใช้บริการ ซึ่งจัดรูปแบบเป็นชื่อทรัพยากรแบบเต็ม เช่น หากต้องการติดตามไฟล์หรือโฟลเดอร์ในไดรฟ์ ให้ใช้//drive.googleapis.com/files/FileIDEVENT_TYPES: ประเภทกิจกรรมอย่างน้อย 1 รายการ ที่คุณต้องการสมัครรับข้อมูลในแหล่งข้อมูลเป้าหมาย จัดรูปแบบเป็นอาร์เรย์ของ สตริง เช่น'google.workspace.drive.file.v3.contentChanged'RESOURCE_DATA: บูลีนที่ระบุว่าการสมัครใช้บริการรวมข้อมูลทรัพยากรในเพย์โหลดของเหตุการณ์หรือไม่ พร็อพเพอร์ตี้นี้ จะส่งผลต่อระยะเวลาของการสมัครใช้บริการ ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลเหตุการณ์True: รวมข้อมูลทรัพยากรทั้งหมด หากต้องการจำกัดฟิลด์ที่จะรวม ให้ เพิ่มfieldMaskและระบุฟิลด์อย่างน้อย 1 รายการสำหรับทรัพยากรที่เปลี่ยนแปลง เฉพาะการสมัครใช้บริการ การสนับสนุนทรัพยากรของ Chat และไดรฟ์ รวมถึง ข้อมูลทรัพยากรFalse: ไม่รวมข้อมูลทรัพยากร
INCLUDE_DESCENDANTS: ฟิลด์บูลีนที่เป็นส่วนหนึ่งของDriveOptionsใช้ได้เฉพาะเมื่อtargetResourceเป็นไฟล์ในไดรฟ์หรือไดรฟ์ที่แชร์ซึ่งตั้งค่าประเภท MIME เป็นapplication/vnd.google-apps.folderตั้งค่าในโฟลเดอร์รูทของไดรฟ์ของฉันหรือไดรฟ์ที่แชร์ไม่ได้True: การสมัครใช้บริการรวมไฟล์ทั้งหมดในไดรฟ์ ที่สืบทอดมาในรายการกิจกรรมFalse: ระบบจะสร้างการติดตามสำหรับไฟล์เดียวหรือไดรฟ์ที่แชร์ ซึ่งระบุเป็นtargetResource
TOPIC_NAME: ชื่อเต็มของหัวข้อ Pub/Sub ที่คุณ สร้างในโปรเจ็กต์ Cloud หัวข้อ Pub/Sub นี้จะได้รับเหตุการณ์ สำหรับการสมัครใช้บริการ โดยมีรูปแบบเป็นprojects/PROJECT_ID/topics/TOPIC_IDฟิลด์notificationEndpointใช้เพื่อระบุหัวข้อ Pub/Sub และเป็นที่ที่การสมัครใช้บริการ ส่งเหตุการณ์
ทดสอบการสมัครใช้บริการไดรฟ์
หากต้องการทดสอบว่าคุณได้รับเหตุการณ์ในไดรฟ์หรือไม่ คุณสามารถทริกเกอร์ เหตุการณ์และดึงข้อความไปยังการสมัครใช้บริการ Pub/Sub ดูข้อมูลเพิ่มเติมได้ที่หัวข้อทดสอบการสมัครใช้บริการ Google Workspace
ประมวลผลเหตุการณ์ในไดรฟ์โดยใช้ Cloud Functions
ระบบจะส่งเหตุการณ์ในไดรฟ์ไปยังหัวข้อ 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การติดตามไดรฟ์ในไดรฟ์ที่แชร์และโฟลเดอร์ จะส่งเหตุการณ์เสมอ แม้ว่าไฟล์ที่ทริกเกอร์เหตุการณ์จะซ้อนอยู่หลายชั้นใต้ โฟลเดอร์ที่ใช้สำหรับการติดตามไดรฟ์ - แม้ว่าคุณจะสร้างการติดตามในโฟลเดอร์ แต่คุณอาจไม่ได้รับเหตุการณ์ทั้งหมด ภายในลำดับชั้นของไฟล์ เนื่องจากผู้ใช้หรือแอปพลิเคชันอาจไม่ได้รับสิทธิ์เข้าถึง ในกรณีนี้ การสมัครใช้บริการจะยังคงใช้งานได้ แต่คุณจะไม่ได้รับเหตุการณ์ใดๆ สำหรับทรัพยากรที่คุณไม่มีสิทธิ์เข้าถึง
- ระบบรองรับการติดตามกิจกรรมในไฟล์และโฟลเดอร์ทั้งหมด แต่ไม่รองรับในโฟลเดอร์รูทของ ไดรฟ์ที่แชร์ ระบบรองรับการติดตามเฉพาะไฟล์และโฟลเดอร์ภายในไดรฟ์ที่แชร์เท่านั้น การเปลี่ยนแปลงที่ทำกับโฟลเดอร์รูทของไดรฟ์ที่แชร์โดยตรงจะไม่ทริกเกอร์เหตุการณ์
- ผู้ใช้ที่ให้สิทธิ์การสมัครใช้บริการต้องมีสิทธิ์ในไฟล์ที่สอดคล้องกับ เหตุการณ์ที่สมัครใช้บริการ
- การสมัครใช้บริการจะรับเฉพาะเหตุการณ์สำหรับทรัพยากรที่ผู้ใช้มีสิทธิ์เข้าถึงผ่าน บัญชี Google Workspace หรือบัญชี Google
หัวข้อที่เกี่ยวข้อง
- ภาพรวมของ Google Workspace Events API
- สร้างการสมัครใช้บริการ Google Workspace
- ติดตามกิจกรรมใน Google ไดรฟ์