หน้านี้อธิบายวิธีรับเหตุการณ์ Google ไดรฟ์จาก Google Cloud Pub/Sub
เหตุการณ์ในไดรฟ์แสดงถึงกิจกรรมหรือการเปลี่ยนแปลงทรัพยากรในไดรฟ์ เช่น ไฟล์ใหม่ในโฟลเดอร์ คุณสามารถใช้เหตุการณ์เพื่อทำความเข้าใจสิ่งที่เกิดขึ้น แล้วดำเนินการหรือตอบกลับผู้ใช้ในทางที่มีความหมาย
ตัวอย่างวิธีใช้เหตุการณ์มีดังนี้
สังเกตและตอบสนองต่อการเปลี่ยนแปลงในไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์ เช่น เมื่อมีการแก้ไขไฟล์หรือมีการอัปโหลดฉบับแก้ไขใหม่
ตรวจสอบการเปลี่ยนแปลงไฟล์เพื่อปรับปรุงประสิทธิภาพของแอป
ตรวจสอบกิจกรรมต่างๆ เช่น การแชร์ไฟล์ การย้ายไฟล์ และการลบไฟล์ เพื่อช่วยตรวจหาการรั่วไหลของข้อมูลที่อาจเกิดขึ้นและการเข้าถึงที่ไม่ได้รับอนุญาต
ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่ผู้ใช้จัดการไฟล์ ซึ่งช่วยระบุส่วนที่อาจปรับปรุงการจัดการเนื้อหาได้
ติดตามการเปลี่ยนแปลงไฟล์เพื่อยืนยันการปฏิบัติตามข้อกำหนดด้านกฎระเบียบหรือนโยบายด้านความปลอดภัย
วิเคราะห์กิจกรรมในไดรฟ์โดยใช้ผลิตภัณฑ์อื่นๆ ของ Google Cloud เช่น Eventarc, Workflows, และ BigQuery
วิธีทำงานของเหตุการณ์
เมื่อใดก็ตามที่มีสิ่งใดเกิดขึ้นในไดรฟ์ ระบบจะสร้าง อัปเดต หรือลบทรัพยากร Google Drive API ไดรฟ์ใช้เหตุการณ์เพื่อส่งข้อมูลไปยังแอปของคุณเกี่ยวกับประเภทกิจกรรมที่เกิดขึ้นและทรัพยากร Drive API ที่ได้รับผลกระทบ
ไดรฟ์จัดหมวดหมู่เหตุการณ์ตามประเภท ประเภทเหตุการณ์ช่วยให้คุณกรองและรับเฉพาะข้อมูลประเภทที่ต้องการ รวมถึงจัดการกิจกรรมที่คล้ายกันในลักษณะเดียวกันได้
ตารางต่อไปนี้แสดงวิธีที่กิจกรรมตัวอย่างในไดรฟ์ส่งผลต่อทรัพยากร Drive API ที่เกี่ยวข้อง และประเภทเหตุการณ์ที่แอปไดรฟ์ได้รับ
| กิจกรรม | ทรัพยากร Drive API | ประเภทเหตุการณ์ |
|---|---|---|
| ผู้ใช้สร้างข้อเสนอการเข้าถึงในไฟล์ | ระบบจะสร้างทรัพยากร AccessProposal |
ข้อเสนอการเข้าถึงใหม่ |
ผู้ใช้สร้างการอนุมัติในไฟล์ |
ระบบจะสร้างทรัพยากร Approval |
การอนุมัติใหม่ |
| ผู้ใช้โพสต์ความคิดเห็นในไฟล์ Google เอกสาร, ชีต หรือสไลด์ | ระบบจะสร้างทรัพยากร Comment |
ความคิดเห็นใหม่ |
| ผู้ใช้เพิ่มไฟล์ลงในโฟลเดอร์หรือไดรฟ์ที่แชร์ | ระบบจะสร้างทรัพยากร File |
ไฟล์ใหม่ |
| ผู้ใช้สร้างสิทธิ์ในไฟล์ | ระบบจะสร้างทรัพยากร Permission |
สิทธิ์ใหม่ |
| ผู้ใช้ตอบกลับความคิดเห็น | ระบบจะสร้างทรัพยากร Reply |
คำตอบใหม่ |
รับเหตุการณ์จาก Google ไดรฟ์
โดยปกติแล้ว แอปไดรฟ์จะค้นหาเหตุการณ์ผ่าน Drive API หรือ Google Drive Activity API แต่ตอนนี้มีวิธีที่ 3 ในการรับเหตุการณ์แล้ว นั่นคือการเพิ่มเหตุการณ์ในไดรฟ์ใน Google Workspace Events API
สมัครรับข้อมูลเหตุการณ์โดยใช้ 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
ดูรายการช่องที่รองรับได้ที่ Action ทรัพยากร ในเอกสารอ้างอิง Drive Activity API
|
| รูปแบบเหตุการณ์ | ข้อความ 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 คุณสามารถเปิด API อย่างน้อย 1 รายการในโปรเจ็กต์ Google Cloud เดียวได้คอนโซล Google Cloud
ในคอนโซล Google Cloud ให้เปิดโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google Cloud สำหรับแอป แล้วเปิดใช้ Google Workspace Events API, Pub/Sub API และ Drive API โดยทำดังนี้
ยืนยันว่าคุณกำลังเปิดใช้ API ในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่ถูกต้อง แล้วคลิกถัดไป
ยืนยันว่าคุณกำลังเปิดใช้ API ที่ถูกต้อง แล้วคลิกเปิดใช้
gcloud
ลงชื่อเข้าใช้บัญชี Google ในไดเรกทอรีงานโดยทำดังนี้
gcloud auth loginตั้งค่าโปรเจ็กต์เป็นโปรเจ็กต์ที่อยู่ในระบบคลาวด์สำหรับแอปโดยทำดังนี้
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 แล้ว นอกจากนี้ คุณยังต้องตรวจสอบว่าได้ติดตั้งทรัพยากร Dependency ที่จำเป็นเพื่อเรียกใช้ตัวอย่างนี้แล้ว
# 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/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 อย่างน้อย 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 ที่คุณสร้างในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ หัวข้อ Pub/Sub นี้จะรับเหตุการณ์สำหรับการสมัครรับข้อมูล จัดรูปแบบเป็นprojects/PROJECT_ID/topics/TOPIC_IDThenotificationEndpointช่องใช้เพื่อระบุหัวข้อ Pub/Sub และเป็นที่ที่การสมัครรับข้อมูล ส่งเหตุการณ์
ทดสอบการสมัครรับข้อมูลไดรฟ์
หากต้องการทดสอบว่าคุณได้รับเหตุการณ์ในไดรฟ์หรือไม่ คุณสามารถทริกเกอร์เหตุการณ์และดึงข้อความไปยังการสมัครรับข้อมูล Pub/Sub ดูข้อมูลเพิ่มเติมได้ที่ ทดสอบการสมัครรับข้อมูล Google Workspace
ประมวลผลเหตุการณ์ในไดรฟ์โดยใช้ Cloud Functions
ระบบจะส่งเหตุการณ์ในไดรฟ์ไปยังหัวข้อ Pub/Sub ในการสมัครรับข้อมูลที่คุณสร้าง โปรดตรวจสอบว่าเมื่อสร้างทริกเกอร์ หัวข้อ Pub/Sub สำหรับทริกเกอร์ตรงกับหัวข้อ Pub/Sub ในการสมัครรับข้อมูลเหตุการณ์ จากนั้นคุณสามารถ ติดตั้งใช้งานฟังก์ชัน Cloud Run และทำการแก้ไขไฟล์เพื่อดูการเปลี่ยนแปลงเหตุการณ์ในบันทึก
ก่อนสร้างฟังก์ชัน ให้อัปเดต package.json สำหรับทรัพยากร Dependency โดยทำดังนี้
{
"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 ไดรฟ์