บทแนะนำนี้จะแสดงวิธีใช้ Google Meet REST API ร่วมกับ Google Workspace Events API และ Google Cloud Pub/Sub เพื่อสังเกตและตอบสนองต่อเหตุการณ์ในพื้นที่การประชุมของ Meet แอปพลิเคชันตัวอย่างจะบันทึกเมื่อการประชุมเริ่มต้นและสิ้นสุด เมื่อผู้เข้าร่วมเข้าร่วมหรือออกจากการประชุม และเมื่อรายการต่างๆ ที่สร้างขึ้นจากการประชุมพร้อมใช้งาน
แทนที่จะติดตามพื้นที่ทำงานการประชุมที่เฉพาะเจาะจง คุณสามารถติดตามผู้ใช้ Meet เพื่อรับกิจกรรมสำหรับพื้นที่ทำงานการประชุมที่ผู้ใช้เป็นเจ้าของหรือจัดระเบียบได้ โปรดดูรายละเอียดที่หัวข้อสมัครรับข้อมูลกิจกรรม Google Meet ในเอกสารประกอบของ Google Workspace Events API
ข้อกำหนดเบื้องต้น
หากต้องการเปิดใช้ข้อกําหนดเบื้องต้นต่อไปนี้สําหรับองค์กร โปรดขอให้ผู้ดูแลระบบ Google Workspace เปิดใช้
- บัญชี Google Workspace ที่มีสิทธิ์เข้าถึง Google Meet
- สิทธิ์เข้าถึงในการสร้างโปรเจ็กต์ Google Cloud
- ติดตั้ง Python 3 แล้ว
- ติดตั้ง gcloud CLI แล้ว
เตรียมสภาพแวดล้อม
ส่วนนี้จะแสดงวิธีสร้างและกําหนดค่าสภาพแวดล้อมในเครื่องและโปรเจ็กต์ Google Cloud สําหรับบทแนะนํานี้
สร้างไดเรกทอรีทํางานและสภาพแวดล้อมเสมือนของ Python
หากต้องการสร้างและเปิดใช้งานสภาพแวดล้อมเสมือนใหม่ ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
Linux/macOS
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate
Windows (Command Prompt)
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat
Windows (PowerShell)
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1
สร้างโปรเจ็กต์ Google Cloud
คอนโซล Google Cloud
- ใน Google Cloud Console ให้ไปที่เมนู > IAM และผู้ดูแลระบบ > สร้างโปรเจ็กต์
-
ป้อนชื่อที่สื่อความหมายสำหรับโปรเจ็กต์ในช่องชื่อโปรเจ็กต์
ไม่บังคับ: หากต้องการแก้ไขรหัสโปรเจ็กต์ ให้คลิกแก้ไข คุณจะเปลี่ยนรหัสโปรเจ็กต์ไม่ได้หลังจากสร้างโปรเจ็กต์แล้ว ดังนั้นโปรดเลือกรหัสที่ตรงกับความต้องการของคุณตลอดอายุการใช้งานของโปรเจ็กต์
- ในช่องสถานที่ ให้คลิกเรียกดูเพื่อแสดงสถานที่ที่เป็นไปได้สำหรับโปรเจ็กต์ จากนั้นคลิกเลือก
- คลิกสร้าง คอนโซล Google Cloud จะไปยังหน้าแดชบอร์ดและสร้างโปรเจ็กต์ภายในไม่กี่นาที
gcloud CLI
เข้าถึง Google Cloud CLI (gcloud
) ในสภาพแวดล้อมการพัฒนาอย่างใดอย่างหนึ่งต่อไปนี้
-
Cloud Shell: หากต้องการใช้เทอร์มินัลออนไลน์ที่มีการตั้งค่า gcloud CLI ไว้แล้ว ให้เปิดใช้งาน Cloud Shell
เปิดใช้งาน Cloud Shell -
เชลล์ในเครื่อง: หากต้องการใช้สภาพแวดล้อมการพัฒนาซอฟต์แวร์ในเครื่อง ให้ติดตั้งและเริ่มต้น gcloud CLI
หากต้องการสร้างโปรเจ็กต์ Cloud ให้ใช้คำสั่งgcloud projects create
ดังนี้ แทนที่ PROJECT_ID ด้วยการตั้งรหัสสำหรับโปรเจ็กต์ที่ต้องการสร้างgcloud projects create PROJECT_ID
เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud
คอนโซล Google Cloud
- ในคอนโซล Google Cloud ให้ไปที่การเรียกเก็บเงิน คลิกเมนู > การเรียกเก็บเงิน > โปรเจ็กต์ของฉัน
- ในเลือกองค์กร ให้เลือกองค์กรที่เชื่อมโยงกับโปรเจ็กต์ Google Cloud
- ในแถวโปรเจ็กต์ ให้เปิดเมนูการดําเนินการ ( ) คลิกเปลี่ยนการเรียกเก็บเงิน แล้วเลือกบัญชีการเรียกเก็บเงินระบบคลาวด์
- คลิกตั้งค่าบัญชี
gcloud CLI
- หากต้องการแสดงรายการบัญชีสำหรับการเรียกเก็บเงินที่ใช้ได้ ให้เรียกใช้คำสั่งต่อไปนี้
gcloud billing accounts list
- วิธีลิงก์บัญชีสำหรับการเรียกเก็บเงินกับโปรเจ็กต์ Google Cloud
gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID
แทนที่ค่าต่อไปนี้
PROJECT_ID
คือรหัสโปรเจ็กต์ของโปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่คุณต้องการเปิดใช้การเรียกเก็บเงินBILLING_ACCOUNT_ID
คือรหัสบัญชีสำหรับการเรียกเก็บเงินที่จะลิงก์กับโปรเจ็กต์ Google Cloud
ตั้งค่าการตรวจสอบสิทธิ์และการให้สิทธิ์
การตรวจสอบสิทธิ์และการให้สิทธิ์ช่วยให้แอปเข้าถึงแหล่งข้อมูล REST API ของ Meet ได้ คุณต้องให้สิทธิ์ผู้ใช้เพื่อเรียกใช้ Meet REST API ส่วนนี้จะแสดงวิธีกำหนดค่าข้อมูลเข้าสู่ระบบของผู้ใช้และขอการให้สิทธิ์
กำหนดค่าหน้าจอขอความยินยอม OAuth และเลือกขอบเขต
ขั้นตอนต่อไปนี้จะแนะนำข้อมูลตัวยึดตําแหน่งเพื่อกําหนดค่าหน้าจอขอความยินยอม OAuth สําหรับแอปของคุณ โปรดอัปเดตข้อมูลนี้ก่อนเผยแพร่แอปสู่ภายนอก
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และบริการ > หน้าจอขอความยินยอม OAuth
- ในส่วนประเภทผู้ใช้ ให้เลือกภายใน แล้วคลิกสร้าง
- ป้อน
Meet REST API Tutorial
ในชื่อแอป - กรอกแบบฟอร์มการลงทะเบียนแอปให้สมบูรณ์ แล้วคลิกบันทึกและดำเนินการต่อ
- คลิกเพิ่มหรือนำขอบเขตออก แผงจะปรากฏขึ้นพร้อมรายการขอบเขตสำหรับ API แต่ละรายการที่คุณเปิดใช้ในโปรเจ็กต์ Google Cloud
- ในส่วนเพิ่มขอบเขตด้วยตนเอง ให้วางขอบเขตต่อไปนี้
https://www.googleapis.com/auth/meetings.space.created
- คลิกเพิ่มลงในตาราง
- คลิกอัปเดต
- หลังจากเลือกขอบเขตที่จําเป็นสําหรับแอปแล้ว ให้คลิกบันทึกและดําเนินการต่อ
- หากคุณเลือกภายนอกสำหรับประเภทผู้ใช้ ให้เพิ่มผู้ใช้ทดสอบโดยทำดังนี้
- ในส่วนผู้ใช้ทดสอบ ให้คลิกเพิ่มผู้ใช้
- ป้อนอีเมลของคุณและผู้ใช้ทดสอบที่ได้รับอนุญาตคนอื่นๆ แล้วคลิกบันทึกและต่อไป
- ตรวจสอบข้อมูลสรุปการลงทะเบียนแอป หากต้องการเปลี่ยนแปลง ให้คลิกแก้ไข หากการลงทะเบียนแอปดูเรียบร้อยดี ให้คลิกกลับไปที่แดชบอร์ด
สร้างรหัสไคลเอ็นต์
รหัสไคลเอ็นต์จะทำหน้าที่เป็นข้อมูลเข้าสู่ระบบสําหรับแอปพลิเคชันระหว่างขั้นตอนการดำเนินการ OAuth 2.0 เนื่องจากแอปทำงานในเครื่อง ให้สร้างรหัสไคลเอ็นต์สำหรับเดสก์ท็อป
- ในคอนโซล Google Cloud ให้ไปที่เมนู > API และบริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
- คลิกประเภทแอปพลิเคชัน > แอปเดสก์ท็อป
- พิมพ์ชื่อของข้อมูลเข้าสู่ระบบในช่องชื่อ ชื่อนี้จะแสดงในคอนโซล Google Cloud เท่านั้น
- คลิกสร้าง หน้าจอ "สร้างไคลเอ็นต์ OAuth แล้ว" จะปรากฏขึ้นพร้อมแสดงรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ใหม่
- คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วนรหัสไคลเอ็นต์ OAuth 2.0
ติดตั้งไลบรารีการตรวจสอบสิทธิ์ของ Google
ติดตั้งไลบรารีการตรวจสอบสิทธิ์ของ Google
pip install google-auth google-auth-oauthlib
ดำเนินการให้สิทธิ์
Meet REST API ต้องใช้ข้อมูลเข้าสู่ระบบของผู้ใช้ในรูปแบบโทเค็นการเข้าถึง OAuth 2.0 ในส่วนนี้ คุณจะใช้ขั้นตอนการขอโทเค็นการเข้าถึงและโทเค็นรีเฟรชสำหรับผู้ใช้ตาม OAuth 2.0
ในไดเรกทอรีที่ทำงานอยู่ ให้สร้างไฟล์
main.py
และเพิ่มเนื้อหาต่อไปนี้import os import json from google.auth.transport import requests from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow def authorize() -> Credentials: """Ensure valid credentials for calling the Meet REST API.""" CLIENT_SECRET_FILE = "./client_secret.json" credentials = None if os.path.exists('token.json'): credentials = Credentials.from_authorized_user_file('token.json') if credentials is None: flow = InstalledAppFlow.from_client_secrets_file( CLIENT_SECRET_FILE, scopes=[ 'https://www.googleapis.com/auth/meetings.space.created', ]) flow.run_local_server(port=0) credentials = flow.credentials if credentials and credentials.expired: credentials.refresh(requests.Request()) if credentials is not None: with open("token.json", "w") as f: f.write(credentials.to_json()) return credentials USER_CREDENTIALS = authorize()
หากต้องการเรียกใช้โค้ด คุณต้องใช้ทั้งรหัสไคลเอ็นต์และรหัสลับที่สร้างไว้ก่อนหน้านี้ คัดลอกไฟล์ข้อมูลลับไคลเอ็นต์ที่ดาวน์โหลดไปยังไดเรกทอรีทํางานของโปรเจ็กต์ แล้วเปลี่ยนชื่อเป็น
client_secret.json
หากต้องการทดสอบวิธีการทํางานของการให้สิทธิ์ ให้เรียกใช้คําสั่งต่อไปนี้ แอปจะแจ้งให้ขอสิทธิ์และสร้างไฟล์
token.json
ในไดเรกทอรีทํางานของโปรเจ็กต์หลังจากที่คําขอได้รับอนุมัติpython3 main.py
เพิ่ม Meet REST API
เมื่อสร้างรหัสการให้สิทธิ์เสร็จแล้ว ก็ถึงเวลาเปิดใช้และเรียกใช้ Meet REST API
เปิดใช้ API
แม้ว่าส่วนนี้จะมุ่งเน้นที่ Meet REST API แต่บทแนะนำนี้ยังใช้ Google Cloud Pub/Sub และ Google Workspace Events API ด้วย
คอนโซล Google Cloud
ในคอนโซล Google Cloud ให้เปิดใช้ Google Meet REST API, Google Workspace Events API และ Google Cloud Pub/Sub
ยืนยันว่าคุณเปิดใช้ API ในโปรเจ็กต์ Google Cloud ที่ถูกต้อง แล้วคลิกถัดไป
ตรวจสอบว่าคุณเปิดใช้ API ที่ถูกต้อง แล้วคลิกเปิดใช้
gcloud CLI
หากจำเป็น ให้ตั้งค่าโปรเจ็กต์ Cloud ในปัจจุบันเป็นโปรเจ็กต์ที่คุณสร้างขึ้นด้วยคำสั่ง
gcloud config set project
ดังนี้gcloud config set project PROJECT_ID
แทนที่ PROJECT_ID ด้วยรหัสโปรเจ็กต์ของโปรเจ็กต์ Google Cloud ที่คุณสร้างขึ้น
เปิดใช้ Google Meet REST API, Google Workspace Events API และ Google Cloud Pub/Sub ด้วยคำสั่ง
gcloud services enable
ดังนี้gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com
ติดตั้งไลบรารีของไคลเอ็นต์ Meet REST API
ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้งไลบรารีของไคลเอ็นต์ Meet REST API
เรียกใช้คําสั่งต่อไปนี้
pip install google-apps-meet
แก้ไขไฟล์
main.py
เพื่อนำเข้าไคลเอ็นต์ โดยทำดังนี้from google.apps import meet_v2 as meet
สร้างพื้นที่ทำงาน
เมื่อ Meet REST API พร้อมใช้งานแล้ว ให้กําหนดฟังก์ชันเพื่อสร้างพื้นที่การประชุมที่สมัครใช้บริการได้
แก้ไข main.py
และเพิ่มข้อมูลต่อไปนี้
def create_space() -> meet.Space:
"""Create a meeting space."""
client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
request = meet.CreateSpaceRequest()
return client.create_space(request=request)
สมัครรับข้อมูลเหตุการณ์
หากต้องการรับเหตุการณ์เกี่ยวกับพื้นที่การประชุม ให้สร้างการสมัครใช้บริการโดยใช้ Google Workspace Events API นอกจากนี้ คุณยังต้องสร้างและสมัครใช้บริการหัวข้อ Google Cloud Pub/Sub ซึ่งทำหน้าที่เป็นปลายทางการแจ้งเตือนที่แอปของคุณจะได้รับเหตุการณ์
กำหนดค่า Google Cloud Pub/Sub
วิธีสร้างและสมัครรับหัวข้อ Pub/Sub
คอนโซล Google Cloud
- ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub
ตรวจสอบว่าได้เลือกโปรเจ็กต์ Cloud สำหรับแอปแล้ว
- คลิก
- ป้อน
workspace-events
เป็นชื่อหัวข้อ - เลือกเพิ่มการสมัครใช้บริการเริ่มต้นไว้
- คลิกสร้าง ชื่อหัวข้อแบบเต็มของคุณจะมีรูปแบบเป็น
projects/{project}/topics/{topic}
จดชื่อนี้ไว้เพื่อใช้ในขั้นตอนถัดไป
สร้างหัวข้อ แล้วทําดังนี้
- ป้อน
- ให้สิทธิ์เข้าถึงเพื่อเผยแพร่ข้อความ Pub/Sub ไปยังหัวข้อของคุณ โดยทำดังนี้
- เปิดแท็บสิทธิ์ในแผงด้านข้าง
- คลิกเพิ่มผู้ใช้หลัก
- ป้อน
meet-api-event-push@system.gserviceaccount.com
ในผู้ใช้หลักรายใหม่ - เลือก
Pub/Sub Publisher
ในมอบหมายบทบาท - คลิกบันทึก
การอัปเดตสิทธิ์สำหรับหัวข้ออาจใช้เวลา 2-3 นาที
gcloud CLI
- ในโปรเจ็กต์ Cloud ให้สร้างหัวข้อโดยเรียกใช้คำสั่งต่อไปนี้
gcloud pubsub topics create workspace-events
เอาต์พุตจะแสดงชื่อหัวข้อแบบเต็มโดยมีรูปแบบเป็น
projects/{project}/topics/{topic}
จดชื่อนี้ไว้เพื่อใช้ในขั้นตอนถัดไป - มอบสิทธิ์เข้าถึงเพื่อเผยแพร่ข้อความไปยังหัวข้อของคุณ
gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'
การอัปเดตสิทธิ์สำหรับหัวข้ออาจใช้เวลา 2-3 นาที
- สร้างการสมัครใช้บริการ Pub/Sub สําหรับหัวข้อ
gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME
แทนที่ค่าต่อไปนี้
TOPIC_NAME
: ชื่อหัวข้อที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า
จดชื่อหัวข้อไว้และตรวจสอบว่าค่าสำหรับ {project}
คือรหัสโปรเจ็กต์ Cloud ของแอป คุณจะใช้ชื่อหัวข้อเพื่อสร้างการสมัครใช้บริการ Google Workspace ในภายหลัง
สร้างบัญชีบริการ
คอนโซล Google Cloud
- ในคอนโซล Google Cloud ให้ไปที่เมนู > IAM และผู้ดูแลระบบ > บัญชีบริการ
- คลิกสร้างบัญชีบริการ
- กรอกรายละเอียดบัญชีบริการ แล้วคลิกสร้างและดำเนินการต่อ
- ไม่บังคับ: มอบหมายบทบาทให้กับบัญชีบริการเพื่อมอบสิทธิ์เข้าถึงทรัพยากรของโปรเจ็กต์ Google Cloud ดูรายละเอียดเพิ่มเติมได้ที่การให้ เปลี่ยน และเพิกถอนสิทธิ์เข้าถึงทรัพยากร
- คลิกต่อไป
- ไม่บังคับ: ป้อนผู้ใช้หรือกลุ่มที่จัดการและดําเนินการกับบัญชีบริการนี้ได้ โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการจัดการการแอบอ้างเป็นบัญชีบริการ
- คลิกเสร็จสิ้น จดบันทึกอีเมลของบัญชีบริการไว้
gcloud CLI
- สร้างบัญชีบริการโดยทำดังนี้
gcloud iam service-accounts create meet-event-listener \ --display-name="meet-event-listener"
- ไม่บังคับ: มอบหมายบทบาทให้กับบัญชีบริการเพื่อมอบสิทธิ์เข้าถึงทรัพยากรของโปรเจ็กต์ Google Cloud ดูรายละเอียดเพิ่มเติมได้ที่การให้ เปลี่ยน และเพิกถอนสิทธิ์เข้าถึงทรัพยากร
ใช้บัญชีบริการ
หลังจากสร้างบัญชีบริการแล้ว ให้สิทธิ์เข้าถึงแก่ตนเองเพื่อแอบอ้างเป็นบัญชีบริการ
คอนโซล Google Cloud
- ในคอลัมน์การดําเนินการสําหรับบัญชีบริการที่สร้างขึ้นใหม่ ให้คลิก > จัดการสิทธิ์
- คลิกเพิ่มคีย์ > ให้สิทธิ์เข้าถึง
- ป้อนอีเมลในส่วนเพิ่มผู้ใช้หลัก
- เลือกบัญชีบริการ > ผู้สร้างโทเค็นบัญชีบริการเป็นบทบาท
- คลิกบันทึก
- กลับไปที่เทอร์มินัลและลงชื่อเข้าใช้ด้วย
gcloud
เพื่อตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเป็นบัญชีบริการ เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ ให้ลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่ใช้ในขั้นตอนก่อนหน้าgcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
gcloud CLI
- หากต้องการเพิ่มสิทธิ์ ให้เรียกใช้
gcloud iam service-accounts add-iam-policy-binding
โดยใช้อีเมลของบัญชีบริการและผู้ใช้gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --member="user:YOUR_EMAIL \ --role="roles/iam.serviceAccountTokenCreator"
- ลงชื่อเข้าใช้เพื่อตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเป็นบัญชีบริการ เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ ให้ลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่ใช้ในขั้นตอนก่อนหน้า
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
ติดตั้งไลบรารีไคลเอ็นต์ Pub/Sub
ใช้
pip
เพื่อติดตั้งไลบรารีของไคลเอ็นต์สําหรับ Pub/Subpip install google-cloud-pubsub
จากนั้นแก้ไข
main.py
เพื่อนำเข้าไคลเอ็นต์ โดยทำดังนี้from google.cloud import pubsub_v1
สร้างการสมัครใช้บริการ Google Workspace
เพิ่มโค้ดต่อไปนี้ลงใน main.py
เพื่อกำหนดวิธีการสมัครรับอีเมลเกี่ยวกับกิจกรรมใน Meet โค้ดนี้จะสมัครรับข้อมูลเหตุการณ์ทั้งหมดสำหรับพื้นที่ทำงานของการประชุม เมื่อสมัครใช้บริการ ระบบจะโพสต์เหตุการณ์ไปยังหัวข้อ Pub/Sub
def subscribe_to_space(space_name: str = None, topic_name: str = None):
"""Subscribe to events for a meeting space."""
session = requests.AuthorizedSession(USER_CREDENTIALS)
body = {
'targetResource': f"//meet.googleapis.com/{space_name}",
"eventTypes": [
"google.workspace.meet.conference.v2.started",
"google.workspace.meet.conference.v2.ended",
"google.workspace.meet.participant.v2.joined",
"google.workspace.meet.participant.v2.left",
"google.workspace.meet.recording.v2.fileGenerated",
"google.workspace.meet.transcript.v2.fileGenerated",
],
"payloadOptions": {
"includeResource": False,
},
"notificationEndpoint": {
"pubsubTopic": topic_name
},
"ttl": "86400s",
}
response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
return response
จากนั้นเพิ่มโค้ดที่เกี่ยวข้องเพื่อดึงข้อมูลและประมวลผลเหตุการณ์
รอรับและจัดการเหตุการณ์
ดำเนินการแก้ไข main.py
ต่อและเพิ่มตัวอย่างโค้ดต่อไปนี้ โค้ดนี้ใช้ฝั่งที่รับและใช้ Google Cloud Pub/Sub API เพื่อดึงเหตุการณ์เมื่อพร้อมใช้งาน วิธีการแฮนเดิลต่างๆ จะพิมพ์ข้อมูลเกี่ยวกับเหตุการณ์ที่เกี่ยวข้อง
def format_participant(participant: meet.Participant) -> str:
"""Formats a participant for display on the console."""
if participant.anonymous_user:
return f"{participant.anonymous_user.display_name} (Anonymous)"
if participant.signedin_user:
return f"{participant.signedin_user.display_name} (ID: {participant.signedin_user.user})"
if participant.phone_user:
return f"{participant.phone_user.display_name} (Phone)"
return "Unknown participant"
def fetch_participant_from_session(session_name: str) -> meet.Participant:
"""Fetches the participant for a session."""
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
# Use the parent path of the session to fetch the participant details
parsed_session_path = client.parse_participant_session_path(session_name)
participant_resource_name = client.participant_path(
parsed_session_path["conference_record"],
parsed_session_path["participant"])
return client.get_participant(name=participant_resource_name)
def on_conference_started(message: pubsub_v1.subscriber.message.Message):
"""Display information about a conference when started."""
payload = json.loads(message.data)
resource_name = payload.get("conferenceRecord").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
conference = client.get_conference_record(name=resource_name)
print(f"Conference (ID {conference.name}) started at {conference.start_time.rfc3339()}")
def on_conference_ended(message: pubsub_v1.subscriber.message.Message):
"""Display information about a conference when ended."""
payload = json.loads(message.data)
resource_name = payload.get("conferenceRecord").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
conference = client.get_conference_record(name=resource_name)
print(f"Conference (ID {conference.name}) ended at {conference.end_time.rfc3339()}")
def on_participant_joined(message: pubsub_v1.subscriber.message.Message):
"""Display information about a participant when they join a meeting."""
payload = json.loads(message.data)
resource_name = payload.get("participantSession").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
session = client.get_participant_session(name=resource_name)
participant = fetch_participant_from_session(resource_name)
display_name = format_participant(participant)
print(f"{display_name} joined at {session.start_time.rfc3339()}")
def on_participant_left(message: pubsub_v1.subscriber.message.Message):
"""Display information about a participant when they leave a meeting."""
payload = json.loads(message.data)
resource_name = payload.get("participantSession").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
session = client.get_participant_session(name=resource_name)
participant = fetch_participant_from_session(resource_name)
display_name = format_participant(participant)
print(f"{display_name} left at {session.end_time.rfc3339()}")
def on_recording_ready(message: pubsub_v1.subscriber.message.Message):
"""Display information about a recorded meeting when artifact is ready."""
payload = json.loads(message.data)
resource_name = payload.get("recording").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
recording = client.get_recording(name=resource_name)
print(f"Recording available at {recording.drive_destination.export_uri}")
def on_transcript_ready(message: pubsub_v1.subscriber.message.Message):
"""Display information about a meeting transcript when artifact is ready."""
payload = json.loads(message.data)
resource_name = payload.get("transcript").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
transcript = client.get_transcript(name=resource_name)
print(f"Transcript available at {transcript.docs_destination.export_uri}")
def on_message(message: pubsub_v1.subscriber.message.Message) -> None:
"""Handles an incoming event from the Google Cloud Pub/Sub API."""
event_type = message.attributes.get("ce-type")
handler = {
"google.workspace.meet.conference.v2.started": on_conference_started,
"google.workspace.meet.conference.v2.ended": on_conference_ended,
"google.workspace.meet.participant.v2.joined": on_participant_joined,
"google.workspace.meet.participant.v2.left": on_participant_left,
"google.workspace.meet.recording.v2.fileGenerated": on_recording_ready,
"google.workspace.meet.transcript.v2.fileGenerated": on_transcript_ready,
}.get(event_type)
try:
if handler is not None:
handler(message)
message.ack()
except Exception as error:
print("Unable to process event")
print(error)
def listen_for_events(subscription_name: str = None):
"""Subscribe to events on the subscription."""
subscriber = pubsub_v1.SubscriberClient()
with subscriber:
future = subscriber.subscribe(subscription_name, callback=on_message)
print("Listening for events")
try:
future.result()
except KeyboardInterrupt:
future.cancel()
print("Done")
เขียนโค้ดให้เสร็จสมบูรณ์
เพิ่มโค้ดต่อไปนี้ลงใน main.py
เพื่อเรียกใช้เมธอดในการสร้างพื้นที่ทำงาน สมัครรับเหตุการณ์ และฟัง อัปเดตค่าคงที่ TOPIC_NAME
และ SUBSCRIPTION_NAME
ด้วยหัวข้อและชื่อการติดตามของคุณเองซึ่งสร้างขึ้นก่อนหน้านี้
เพิ่มรหัสลงใน
main.py
space = create_space() print(f"Join the meeting at {space.meeting_uri}") TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID" SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID" subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name) listen_for_events(subscription_name=SUBSCRIPTION_NAME)
แทนที่ค่าต่อไปนี้
PROJECT_ID
: รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่ไม่ซ้ำกันสำหรับแอปของคุณ เช่นmy-sample-project-191923
TOPIC_ID
: ชื่อหัวข้อ Pub/Sub ที่คุณสร้างขึ้นในโปรเจ็กต์ที่อยู่ในระบบคลาวด์SUBSCRIPTION_ID
: ชื่อการสมัครใช้บริการ เช่นworkspace-events-sub
เรียกใช้โปรแกรม
python3 main.py
หากคุณไม่เคยเรียกใช้โปรแกรมมาก่อน ระบบจะแจ้งให้อนุญาตเป็นครั้งแรก ให้สิทธิ์เข้าถึงแอปพลิเคชันเพื่อเรียกใช้ Meet REST API หลังจากโปรแกรมทํางานสําเร็จ คุณควรเห็นเอาต์พุตที่คล้ายกับตัวอย่างต่อไปนี้
Join the meeting at https://meet.google.com/abc-mnop-xyz
เข้าร่วมการประชุม
หากต้องการสร้างเหตุการณ์สําหรับแอปพลิเคชัน ให้เข้าร่วมการประชุมโดยใช้ URL ที่แสดงโดยแอปพลิเคชัน หลังจากเข้าร่วมแล้ว ให้ลองดำเนินการต่อไปนี้เพื่อทริกเกอร์เหตุการณ์
- ออกจากการประชุมและเข้าร่วมอีกครั้ง
- เชิญผู้อื่นหรือโทรเข้าด้วยโทรศัพท์
- เปิดใช้การบันทึกและข้อความถอดเสียง
กิจกรรมแต่ละรายการเหล่านี้จะสร้างเหตุการณ์ที่แอปพลิเคชันได้รับและบันทึกลงในคอนโซล Google Cloud
ใช้ ctrl-c
เพื่อขัดจังหวะโปรแกรมเมื่อดำเนินการเสร็จแล้ว
ไม่บังคับ: ขั้นตอนเพิ่มเติมที่ลองทำได้
แอปจะบันทึกรายละเอียดพื้นฐานเกี่ยวกับเหตุการณ์ หากต้องการสำรวจ Meet REST API ต่อไป ให้ลองแก้ไขแอปพลิเคชันเพื่อดำเนินการเพิ่มเติมเหล่านี้
- ใช้ People API เพื่อดึงข้อมูลเพิ่มเติมเกี่ยวกับผู้เข้าร่วมที่ลงชื่อเข้าใช้
- ใช้ Google Drive API เพื่อดาวน์โหลดไฟล์บันทึกเสียงและข้อความถอดเสียง
- แทนที่จะดาวน์โหลดข้อความถอดเสียงจาก Google ไดรฟ์ ให้เรียกข้อมูลโดยใช้วิธีการถอดเสียงแบบมีโครงสร้างใน Meet REST API
ไม่บังคับ: ล้าง
เราขอแนะนำให้คุณล้างทรัพยากรและโปรเจ็กต์ที่สร้างขึ้นเพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Console สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
วิธีลบการสมัครใช้บริการ
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub > การสมัครใช้บริการ
เลือกการสมัครใช้บริการ แล้วคลิก
การดำเนินการเพิ่มเติมคลิกลบ หน้าต่างลบการสมัครใช้บริการจะปรากฏขึ้น
คลิกลบ
gcloud CLI
ลบการสมัครใช้บริการ
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
วิธีลบหัวข้อ
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub > Topics
เลือกหัวข้อแล้วคลิก
การดำเนินการเพิ่มเติมคลิกลบ หน้าต่างลบหัวข้อจะปรากฏขึ้น
ป้อน
delete
แล้วคลิกลบ
gcloud CLI
วิธีลบหัวข้อ
gcloud pubsub topics delete TOPIC_NAME
วิธีลบโปรเจ็กต์
คอนโซล
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร คลิก เมนู > IAM และผู้ดูแลระบบ > จัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
gcloud CLI
หากต้องการลบโปรเจ็กต์ ให้ใช้คำสั่ง gcloud projects delete ดังนี้
gcloud projects delete PROJECT_ID
หัวข้อที่เกี่ยวข้อง
- ดูข้อมูลเกี่ยวกับประเภทกิจกรรมใน Meet ที่คุณสมัครรับข้อมูลได้
- ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ Google Meet REST API ทำได้ และอ่านเอกสารอ้างอิง
- สร้างการสมัครใช้บริการ Google Workspace เพื่อเข้าถึงพื้นที่ทำงานหรือผู้ใช้การประชุม Meet โดยใช้ Google Workspace Events API
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ได้ที่หัวข้อกำหนดค่าหน้าจอขอความยินยอม OAuth และเลือกขอบเขต