สังเกตกิจกรรมการประชุมด้วย Python และ Google Meet REST API

บทแนะนำนี้จะแสดงวิธีใช้ Google Meet REST API ร่วมกับ Google Workspace Events API และ Google Cloud Pub/Sub เพื่อสังเกตและตอบสนองต่อเหตุการณ์ในพื้นที่การประชุมของ Meet แอปพลิเคชันตัวอย่างจะบันทึกเมื่อการประชุมเริ่มและสิ้นสุด เมื่อผู้เข้าร่วมเข้าร่วมหรือออกจากการประชุม และเมื่อรายการต่างๆ ที่สร้างขึ้นจากการประชุมพร้อมใช้งาน

แทนที่จะติดตามพื้นที่ทำงานการประชุมที่เฉพาะเจาะจง คุณสามารถติดตามผู้ใช้ Meet เพื่อรับกิจกรรมสำหรับพื้นที่ทำงานการประชุมที่ผู้ใช้เป็นเจ้าของหรือจัดระเบียบได้ โปรดดูรายละเอียดที่หัวข้อสมัครรับข้อมูลกิจกรรม Google Meet ในเอกสารประกอบของ Google Workspace Events API

ข้อกำหนดเบื้องต้น

หากต้องการเปิดใช้ข้อกําหนดเบื้องต้นต่อไปนี้สําหรับองค์กร โปรดขอให้ผู้ดูแลระบบ Google Workspace เปิดใช้

เตรียมสภาพแวดล้อม

ส่วนนี้จะแสดงวิธีสร้างและกําหนดค่าสภาพแวดล้อมในเครื่องและโปรเจ็กต์ 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

  1. ใน Google Cloud Console ให้ไปที่เมนู > IAM และผู้ดูแลระบบ > สร้างโปรเจ็กต์

    ไปที่สร้างโปรเจ็กต์

  2. ป้อนชื่อที่สื่อความหมายสำหรับโปรเจ็กต์ในช่องชื่อโปรเจ็กต์

    ไม่บังคับ: หากต้องการแก้ไขรหัสโปรเจ็กต์ ให้คลิกแก้ไข คุณจะเปลี่ยนรหัสโปรเจ็กต์ไม่ได้หลังจากสร้างโปรเจ็กต์แล้ว ดังนั้นโปรดเลือกรหัสที่ตรงกับความต้องการของคุณตลอดอายุการใช้งานของโปรเจ็กต์

  3. ในช่องสถานที่ ให้คลิกเรียกดูเพื่อแสดงสถานที่ที่เป็นไปได้สำหรับโปรเจ็กต์ จากนั้นคลิกเลือก
  4. คลิกสร้าง คอนโซล Google Cloud จะไปยังหน้าแดชบอร์ดและสร้างโปรเจ็กต์ภายในไม่กี่นาที

gcloud CLI

เข้าถึง Google Cloud CLI (gcloud) ในสภาพแวดล้อมการพัฒนาอย่างใดอย่างหนึ่งต่อไปนี้

  • Cloud Shell: หากต้องการใช้เทอร์มินัลออนไลน์ที่มีการตั้งค่า gcloud CLI ไว้แล้ว ให้เปิดใช้งาน Cloud Shell
    เปิดใช้งาน Cloud Shell
  • เชลล์ในเครื่อง: หากต้องการใช้สภาพแวดล้อมการพัฒนาซอฟต์แวร์ในเครื่อง ให้ติดตั้งและเริ่มต้น gcloud CLI
    หากต้องการสร้างโปรเจ็กต์ Cloud ให้ใช้คำสั่ง gcloud projects create ดังนี้
    gcloud projects create PROJECT_ID
    แทนที่ PROJECT_ID ด้วยการตั้งค่ารหัสสําหรับโปรเจ็กต์ที่ต้องการสร้าง

เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud

คอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่การเรียกเก็บเงิน คลิกเมนู > การเรียกเก็บเงิน > โปรเจ็กต์ของฉัน

    ไปที่การเรียกเก็บเงินสำหรับโปรเจ็กต์ของฉัน

  2. ในส่วนเลือกองค์กร ให้เลือกองค์กรที่เชื่อมโยงกับโปรเจ็กต์ Google Cloud
  3. ในแถวโปรเจ็กต์ ให้เปิดเมนูการดําเนินการ () คลิกเปลี่ยนการเรียกเก็บเงิน แล้วเลือกบัญชีการเรียกเก็บเงินระบบคลาวด์
  4. คลิกตั้งค่าบัญชี

gcloud CLI

  1. หากต้องการแสดงรายการบัญชีสำหรับการเรียกเก็บเงินที่ใช้ได้ ให้เรียกใช้
    gcloud billing accounts list
  2. วิธีลิงก์บัญชีสำหรับการเรียกเก็บเงินกับโปรเจ็กต์ 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 สําหรับแอปของคุณ โปรดอัปเดตข้อมูลนี้ก่อนเผยแพร่แอปสู่ภายนอก

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > API และบริการ > หน้าจอขอความยินยอม OAuth

    ไปที่หน้าจอขอความยินยอม OAuth

  2. ในส่วนประเภทผู้ใช้ ให้เลือกภายใน แล้วคลิกสร้าง
  3. ป้อน Meet REST API Tutorial ในชื่อแอป
  4. กรอกแบบฟอร์มการลงทะเบียนแอปให้สมบูรณ์ แล้วคลิกบันทึกและดำเนินการต่อ
  5. คลิกเพิ่มหรือนำขอบเขตออก แผงจะปรากฏขึ้นพร้อมรายการขอบเขตสำหรับ API แต่ละรายการที่คุณเปิดใช้ในโปรเจ็กต์ Google Cloud
  6. ในส่วนเพิ่มขอบเขตด้วยตนเอง ให้วางขอบเขตต่อไปนี้
    • https://www.googleapis.com/auth/meetings.space.created
  7. คลิกเพิ่มลงในตาราง
  8. คลิกอัปเดต
  9. หลังจากเลือกขอบเขตที่จําเป็นสําหรับแอปแล้ว ให้คลิกบันทึกและดําเนินการต่อ
  10. หากคุณเลือกภายนอกสำหรับประเภทผู้ใช้ ให้เพิ่มผู้ใช้ทดสอบโดยทำดังนี้
    1. ในส่วนผู้ใช้ทดสอบ ให้คลิกเพิ่มผู้ใช้
    2. ป้อนอีเมลของคุณและผู้ใช้ทดสอบที่ได้รับอนุญาตคนอื่นๆ แล้วคลิกบันทึกและต่อไป
  11. ตรวจสอบข้อมูลสรุปการลงทะเบียนแอป หากต้องการเปลี่ยนแปลง ให้คลิกแก้ไข หากการลงทะเบียนแอปดูเรียบร้อยดี ให้คลิกกลับไปที่แดชบอร์ด

สร้างรหัสไคลเอ็นต์

รหัสไคลเอ็นต์จะทำหน้าที่เป็นข้อมูลเข้าสู่ระบบสําหรับแอปพลิเคชันระหว่างขั้นตอนการดำเนินการ OAuth 2.0 เนื่องจากแอปทำงานในเครื่อง ให้สร้างรหัสไคลเอ็นต์สำหรับเดสก์ท็อป

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > API และบริการ > ข้อมูลเข้าสู่ระบบ

    ไปที่ข้อมูลเข้าสู่ระบบ

  2. คลิกสร้างข้อมูลเข้าสู่ระบบ > รหัสไคลเอ็นต์ OAuth
  3. คลิกประเภทแอปพลิเคชัน > แอปเดสก์ท็อป
  4. พิมพ์ชื่อของข้อมูลเข้าสู่ระบบในช่องชื่อ ชื่อนี้จะแสดงในคอนโซล Google Cloud เท่านั้น
  5. คลิกสร้าง หน้าจอ "สร้างไคลเอ็นต์ OAuth แล้ว" จะปรากฏขึ้นพร้อมแสดงรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ใหม่
  6. คลิกตกลง ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วนรหัสไคลเอ็นต์ OAuth 2.0

ติดตั้งไลบรารีการตรวจสอบสิทธิ์ของ Google

ติดตั้งไลบรารีการตรวจสอบสิทธิ์ของ Google

pip install google-auth google-auth-oauthlib

ดำเนินการให้สิทธิ์

Meet REST API ต้องใช้ข้อมูลเข้าสู่ระบบของผู้ใช้ในรูปแบบโทเค็นการเข้าถึง OAuth 2.0 ในส่วนนี้ คุณจะใช้ขั้นตอน OAuth 2.0 เพื่อขอโทเค็นการเข้าถึงและโทเค็นรีเฟรชสําหรับผู้ใช้

  1. ในไดเรกทอรีที่ทำงานอยู่ ให้สร้างไฟล์ 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()
    
  2. หากต้องการเรียกใช้โค้ด คุณต้องใช้ทั้งรหัสไคลเอ็นต์และรหัสลับที่สร้างไว้ก่อนหน้านี้ คัดลอกไฟล์ข้อมูลลับไคลเอ็นต์ที่ดาวน์โหลดไปยังไดเรกทอรีทํางานของโปรเจ็กต์ แล้วเปลี่ยนชื่อเป็น client_secret.json

  3. หากต้องการทดสอบวิธีการทํางานของการให้สิทธิ์ ให้เรียกใช้คําสั่งต่อไปนี้ แอปจะแจ้งให้ขอสิทธิ์และสร้างไฟล์ token.json ในไดเรกทอรีทํางานของโปรเจ็กต์หลังจากที่คําขอได้รับอนุมัติ

    python3 main.py

เพิ่ม REST API ของ Meet

เมื่อสร้างรหัสการให้สิทธิ์เสร็จแล้ว ก็ถึงเวลาเปิดใช้และเรียกใช้ Meet REST API

เปิดใช้ API

แม้ว่าส่วนนี้จะมุ่งเน้นที่ Meet REST API แต่บทแนะนำนี้ยังใช้ Google Cloud Pub/Sub และ Google Workspace Events API ด้วย

คอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้เปิดใช้ Google Meet REST API, Google Workspace Events API และ Google Cloud Pub/Sub

    เปิดใช้ API

  2. ยืนยันว่าคุณเปิดใช้ API ในโปรเจ็กต์ Google Cloud ที่ถูกต้อง แล้วคลิกถัดไป

  3. ตรวจสอบว่าคุณเปิดใช้ API ที่ถูกต้อง แล้วคลิกเปิดใช้

gcloud CLI

  1. หากจำเป็น ให้ตั้งค่าโปรเจ็กต์ Cloud ในปัจจุบันเป็นโปรเจ็กต์ที่คุณสร้างขึ้นด้วยคำสั่ง gcloud config set project ดังนี้

    gcloud config set project PROJECT_ID

    แทนที่ PROJECT_ID ด้วยรหัสโปรเจ็กต์ของโปรเจ็กต์ Google Cloud ที่คุณสร้างขึ้น

  2. เปิดใช้ 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

  1. เรียกใช้คําสั่งต่อไปนี้

    pip install google-apps-meet
  2. แก้ไขไฟล์ 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

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub

    ไปที่ Pub/Sub

    ตรวจสอบว่าได้เลือกโปรเจ็กต์ Cloud สำหรับแอปแล้ว

  2. คลิก สร้างหัวข้อ แล้วทำดังนี้
    1. ป้อน workspace-events เป็นชื่อหัวข้อ
    2. เลือกเพิ่มการสมัครใช้บริการเริ่มต้นไว้
    3. คลิกสร้าง ชื่อหัวข้อแบบเต็มของคุณจะมีรูปแบบเป็น projects/{project}/topics/{topic} จดชื่อนี้ไว้เพื่อใช้ในขั้นตอนถัดไป
  3. ให้สิทธิ์เข้าถึงเพื่อเผยแพร่ข้อความ Pub/Sub ไปยังหัวข้อของคุณ โดยทำดังนี้
    1. เปิดแท็บสิทธิ์ในแผงด้านข้าง
    2. คลิกเพิ่มผู้ใช้หลัก
    3. ป้อน meet-api-event-push@system.gserviceaccount.com ในผู้ใช้หลักรายใหม่
    4. เลือก Pub/Sub Publisher ในมอบหมายบทบาท
    5. คลิกบันทึก

    การอัปเดตสิทธิ์สำหรับหัวข้ออาจใช้เวลา 2-3 นาที

gcloud CLI

  1. สร้างหัวข้อในโปรเจ็กต์ Cloud โดยเรียกใช้คำสั่งต่อไปนี้
    gcloud pubsub topics create workspace-events

    เอาต์พุตจะแสดงชื่อหัวข้อแบบเต็มโดยมีรูปแบบเป็น projects/{project}/topics/{topic} จดชื่อนี้ไว้เพื่อใช้ในขั้นตอนถัดไป

  2. มอบสิทธิ์เข้าถึงเพื่อเผยแพร่ข้อความไปยังหัวข้อของคุณ
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    การอัปเดตสิทธิ์สำหรับหัวข้ออาจใช้เวลา 2-3 นาที

  3. สร้างการสมัครใช้บริการ Pub/Sub สําหรับหัวข้อ
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    แทนที่ค่าต่อไปนี้

    • TOPIC_NAME: ชื่อหัวข้อที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า

จดชื่อหัวข้อไว้และตรวจสอบว่าค่าสำหรับ {project} คือรหัสโปรเจ็กต์ Cloud ของแอป คุณจะใช้ชื่อหัวข้อเพื่อสร้างการสมัครใช้บริการ Google Workspace ในภายหลัง

สร้างบัญชีบริการ

คอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > IAM และผู้ดูแลระบบ > บัญชีบริการ

    ไปที่บัญชีบริการ

  2. คลิกสร้างบัญชีบริการ
  3. กรอกรายละเอียดบัญชีบริการ แล้วคลิกสร้างและดำเนินการต่อ
  4. ไม่บังคับ: มอบหมายบทบาทให้กับบัญชีบริการเพื่อมอบสิทธิ์เข้าถึงทรัพยากรของโปรเจ็กต์ Google Cloud ดูรายละเอียดเพิ่มเติมได้ที่การให้ เปลี่ยน และเพิกถอนสิทธิ์เข้าถึงทรัพยากร
  5. คลิกต่อไป
  6. ไม่บังคับ: ป้อนผู้ใช้หรือกลุ่มที่จัดการและดําเนินการกับบัญชีบริการนี้ได้ โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการจัดการการแอบอ้างเป็นบัญชีบริการ
  7. คลิกเสร็จสิ้น จดบันทึกอีเมลของบัญชีบริการไว้

gcloud CLI

  1. สร้างบัญชีบริการโดยทำดังนี้
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. ไม่บังคับ: มอบหมายบทบาทให้กับบัญชีบริการเพื่อมอบสิทธิ์เข้าถึงทรัพยากรของโปรเจ็กต์ Google Cloud ดูรายละเอียดเพิ่มเติมได้ที่การให้ เปลี่ยน และเพิกถอนสิทธิ์เข้าถึงทรัพยากร

ใช้บัญชีบริการ

หลังจากสร้างบัญชีบริการแล้ว ให้สิทธิ์เข้าถึงแก่ตนเองเพื่อแอบอ้างเป็นบัญชีบริการ

คอนโซล Google Cloud

  1. ในคอลัมน์การดําเนินการสําหรับบัญชีบริการที่สร้างขึ้นใหม่ ให้คลิก > จัดการสิทธิ์
  2. คลิกเพิ่มคีย์ > ให้สิทธิ์เข้าถึง
  3. ป้อนอีเมลในส่วนเพิ่มผู้ใช้หลัก
  4. เลือกบัญชีบริการ > ผู้สร้างโทเค็นบัญชีบริการเป็นบทบาท
  5. คลิกบันทึก
  6. กลับไปที่เทอร์มินัลและลงชื่อเข้าใช้ด้วย gcloud เพื่อตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเป็นบัญชีบริการ เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ ให้ลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่ใช้ในขั้นตอนก่อนหน้า
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

gcloud CLI

  1. หากต้องการเพิ่มสิทธิ์ ให้เรียกใช้ 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"
  2. ลงชื่อเข้าใช้เพื่อตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเป็นบัญชีบริการ เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ ให้ลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่ใช้ในขั้นตอนก่อนหน้า
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

ติดตั้งไลบรารีไคลเอ็นต์ Pub/Sub

  1. ใช้ pip เพื่อติดตั้งไลบรารีของไคลเอ็นต์สําหรับ Pub/Sub

    pip install google-cloud-pubsub
  2. จากนั้นแก้ไข 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 ด้วยหัวข้อและชื่อการติดตามของคุณเองซึ่งสร้างขึ้นก่อนหน้านี้

  1. เพิ่มรหัสลงใน 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

  2. เรียกใช้โปรแกรม

    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 สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

วิธีลบการสมัครใช้บริการ

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub > การสมัครใช้บริการ

    ไปที่การสมัครใช้บริการ

  2. เลือกการสมัครใช้บริการ แล้วคลิก การดำเนินการเพิ่มเติม

  3. คลิกลบ หน้าต่างลบการสมัครใช้บริการจะปรากฏขึ้น

  4. คลิกลบ

gcloud CLI

  1. ลบการสมัครใช้บริการ

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME

วิธีลบหัวข้อ

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > Pub/Sub > Topics

    ไปที่หัวข้อ

  2. เลือกหัวข้อแล้วคลิก การดำเนินการเพิ่มเติม

  3. คลิกลบ หน้าต่างลบหัวข้อจะปรากฏขึ้น

  4. ป้อน delete แล้วคลิกลบ

gcloud CLI

  1. วิธีลบหัวข้อ

    gcloud pubsub topics delete TOPIC_NAME

วิธีลบโปรเจ็กต์

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร คลิก เมนู > IAM และผู้ดูแลระบบ > จัดการทรัพยากร

    ไปที่เครื่องมือจัดการทรัพยากร

  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์

gcloud CLI

  1. หากต้องการลบโปรเจ็กต์ ให้ใช้คำสั่ง gcloud projects delete ดังนี้

    gcloud projects delete PROJECT_ID