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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการทํางานกับกิจกรรมได้ที่หัวข้อสมัครใช้บริการ 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 (พรอมต์คำสั่ง)

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 ให้ไปที่เมนู > IAM และ ผู้ดูแลระบบ > สร้างโครงการ

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

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

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

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

gcloud CLI

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

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

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

คอนโซล Google Cloud

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

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

  2. ในส่วนเลือกองค์กร ให้เลือกองค์กรที่เชื่อมโยงกับ โปรเจ็กต์ Google Cloud ของคุณ
  3. ในแถวโปรเจ็กต์ ให้เปิดเมนูการดำเนินการ (), คลิกเปลี่ยนแปลงการเรียกเก็บเงิน และเลือก บัญชีสำหรับการเรียกเก็บเงินใน Cloud
  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

ตั้งค่าการตรวจสอบสิทธิ์และการให้สิทธิ์

การตรวจสอบสิทธิ์และการให้สิทธิ์อนุญาตให้แอปเข้าถึง Meet REST API ที่ไม่ซับซ้อน การเรียกใช้ 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
    

เพิ่ม Meet REST API

เมื่อรหัสการให้สิทธิ์เสร็จสมบูรณ์แล้ว ก็ถึงเวลาที่จะเปิดใช้งานและเรียกใช้ พบกับ 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 ใน โปรเจ็กต์ที่อยู่ในระบบคลาวด์ จากนั้นคลิกถัดไป

  3. ยืนยันว่าคุณเปิดใช้ API ที่ถูกต้อง แล้วคลิกเปิดใช้

gcloud CLI

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

    gcloud config set project PROJECT_ID
    

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

  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

    ตรวจสอบว่าได้เลือกโปรเจ็กต์ที่อยู่ในระบบคลาวด์สำหรับแอปแล้ว

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

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

gcloud CLI

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

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

  2. วิธีให้สิทธิ์เพื่อเผยแพร่ข้อความในหัวข้อของคุณ
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:[email protected]' --role='roles/pubsub.publisher'

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

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

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

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

จดชื่อหัวข้อและตรวจสอบว่าค่าของ {project} มีค่าเป็น รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของแอป คุณจะใช้ชื่อหัวข้อในการสร้าง การสมัครใช้บริการ 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 เพื่อขัดจังหวะโปรแกรมเมื่อทำงานเสร็จแล้ว

ไม่บังคับ: ขั้นตอนเพิ่มเติมที่ให้ลองใช้

แอปจะบันทึกรายละเอียดพื้นฐานเกี่ยวกับเหตุการณ์ หากต้องการสำรวจต่อไป ขอแนะนำ 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 > หัวข้อ

    ไปที่หัวข้อ

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

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

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

gcloud CLI

  1. ลบหัวข้อ

    gcloud pubsub topics delete TOPIC_NAME
    

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

คอนโซล

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

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

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

gcloud CLI

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

    gcloud projects delete PROJECT_ID