رویدادهای جلسه را با پایتون و Google Meet REST API مشاهده کنید

این آموزش نحوه استفاده از Google Meet REST API به همراه Google Workspace Events API و Google Cloud Pub/Sub را برای مشاهده و واکنش به رویدادهای جلسه نشان می دهد. برنامه نمونه زمان شروع و پایان کنفرانس، زمان پیوستن یا خروج شرکت کنندگان، و زمانی که مصنوعات جلسه تولید شده در دسترس است را ثبت می کند.

برای کسب اطلاعات بیشتر در مورد کار با رویدادها، به اشتراک در رویدادهای Google Meet در اسناد Google Workspace Events API مراجعه کنید.

پیش نیازها

اگر به هر یک از این پیش نیازها برای سازمانتان نیاز دارید، از سرپرست Google Workspace خود بخواهید آنها را روشن کند:

محیط خود را آماده کنید

این بخش نحوه ایجاد و پیکربندی محیط محلی و پروژه Google Cloud را برای این آموزش نشان می دهد.

یک پوشه کاری و محیط مجازی پایتون ایجاد کنید

برای ایجاد و فعال سازی یک محیط مجازی جدید، دستورات زیر را در ترمینال خود اجرا کنید.

Linux/macOS

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate

ویندوز (خط فرمان)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat

ویندوز (PowerShell)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1

یک پروژه Google Cloud ایجاد کنید

کنسول Google Cloud

  1. در کنسول Google Cloud، به منو > IAM & Admin > ایجاد پروژه بروید.

    به Create a Project بروید

  2. در قسمت Project Name یک نام توصیفی برای پروژه خود وارد کنید.

    اختیاری: برای ویرایش شناسه پروژه ، روی ویرایش کلیک کنید. شناسه پروژه پس از ایجاد پروژه قابل تغییر نیست، بنابراین شناسه ای را انتخاب کنید که نیازهای شما را برای طول عمر پروژه برآورده کند.

  3. در قسمت Location ، روی Browse کلیک کنید تا مکان های احتمالی پروژه شما نمایش داده شود. سپس، روی انتخاب کلیک کنید.
  4. روی ایجاد کلیک کنید. کنسول Google Cloud به صفحه داشبورد می رود و پروژه شما در عرض چند دقیقه ایجاد می شود.

gcloud CLI

در یکی از محیط‌های توسعه زیر، به Google Cloud CLI («gcloud») دسترسی پیدا کنید:

  • Cloud Shell : برای استفاده از ترمینال آنلاین با Gcloud CLI که قبلاً راه اندازی شده است، Cloud Shell را فعال کنید.
    Cloud Shell را فعال کنید
  • Local Shell : برای استفاده از یک محیط توسعه محلی، gcloud CLI را نصب و مقداردهی اولیه کنید .
    برای ایجاد یک پروژه Cloud، از دستور 'gcloud projects create' استفاده کنید:
    gcloud projects create PROJECT_ID
    با تنظیم ID برای پروژه ای که می خواهید ایجاد کنید PROJECT_ID جایگزین کنید.

صورتحساب پروژه Google Cloud را فعال کنید

کنسول Google Cloud

  1. در کنسول Google Cloud، به Billing بروید. منو > صورت‌حساب > پروژه‌های من کلیک کنید.

    به Billing for My Projects بروید

  2. در انتخاب سازمان ، سازمان مرتبط با پروژه Google Cloud خود را انتخاب کنید.
  3. در ردیف پروژه، منوی Actions ( ) را باز کنید، روی Change billing کلیک کنید و حساب Cloud Billing را انتخاب کنید.
  4. روی تنظیم حساب کلیک کنید.

gcloud CLI

  1. برای فهرست کردن حساب‌های صورت‌حساب موجود، اجرا کنید:
    gcloud billing accounts list
  2. پیوند یک حساب صورت‌حساب با پروژه Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    موارد زیر را جایگزین کنید:

    • PROJECT_ID شناسه پروژه برای پروژه Cloud است که می‌خواهید صورت‌حساب را برای آن فعال کنید.
    • BILLING_ACCOUNT_ID شناسه حساب صورت‌حساب برای پیوند با پروژه Google Cloud است.

احراز هویت و مجوز را تنظیم کنید

احراز هویت و مجوز به برنامه اجازه می‌دهد به منابع Meet REST API دسترسی پیدا کند. مجوز کاربر برای تماس با Meet REST API مورد نیاز است. این بخش نحوه پیکربندی اطلاعات کاربری و درخواست مجوز را به شما آموزش می‌دهد.

صفحه رضایت OAuth را پیکربندی کنید و دامنه ها را انتخاب کنید

مراحل زیر اطلاعات مکان‌نما را برای پیکربندی صفحه رضایت OAuth برای برنامه شما پیشنهاد می‌کند. قبل از انتشار برنامه به صورت خارجی، این اطلاعات را به روز کنید.

  1. در کنسول Google Cloud، به منو > APIs & Services > صفحه رضایت OAuth بروید.

    به صفحه رضایت OAuth بروید

  2. در قسمت User type ، Internal را انتخاب کنید، سپس روی Create کلیک کنید.
  3. در نام برنامه ، Meet REST API Tutorial وارد کنید.
  4. فرم ثبت نام برنامه را تکمیل کنید، سپس روی ذخیره و ادامه کلیک کنید.
  5. روی Add or Remove Scopes کلیک کنید. یک پانل با لیستی از محدوده‌ها برای هر API که در پروژه Google Cloud خود فعال کرده‌اید ظاهر می‌شود.
  6. در بخش افزودن دستی دامنه‌ها ، دامنه‌های زیر را جای‌گذاری کنید:
    • https://www.googleapis.com/auth/meetings.space.created
  7. روی افزودن به جدول کلیک کنید.
  8. روی Update کلیک کنید.
  9. پس از انتخاب محدوده های مورد نیاز برنامه خود، روی ذخیره و ادامه کلیک کنید.
  10. اگر خارجی را برای نوع کاربر انتخاب کرده اید، کاربران آزمایشی را اضافه کنید:
    1. در بخش تست کاربران ، روی افزودن کاربران کلیک کنید.
    2. آدرس ایمیل خود و سایر کاربران آزمایشی مجاز را وارد کنید، سپس روی ذخیره و ادامه کلیک کنید.
  11. خلاصه ثبت برنامه خود را مرور کنید. برای ایجاد تغییرات، روی ویرایش کلیک کنید. اگر ثبت برنامه خوب به نظر می رسد، روی بازگشت به داشبورد کلیک کنید.

یک شناسه مشتری ایجاد کنید

شناسه مشتری به عنوان اعتبارنامه برای برنامه شما در جریان OAuth 2.0 عمل می کند. از آنجایی که برنامه به صورت محلی اجرا می شود، یک شناسه مشتری دسکتاپ ایجاد کنید.

  1. در کنسول Google Cloud، به منو > APIs & Services > Credentials بروید.

    به Credentials بروید

  2. روی ایجاد اعتبارنامه > شناسه مشتری OAuth کلیک کنید.
  3. روی نوع برنامه > برنامه دسکتاپ کلیک کنید.
  4. در قسمت نام ، نامی را برای اعتبارنامه تایپ کنید. این نام فقط در کنسول Google Cloud نشان داده می شود.
  5. روی ایجاد کلیک کنید. صفحه ایجاد شده توسط سرویس گیرنده OAuth ظاهر می شود که شناسه مشتری و راز مشتری جدید شما را نشان می دهد.
  6. روی OK کلیک کنید. اعتبار جدید ایجاد شده در شناسه های مشتری 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 را اضافه کنید

اکنون که کد مجوز کامل شده است، زمان فعال کردن و فراخوانی 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ها را در پروژه Cloud صحیح فعال می‌کنید، سپس روی Next کلیک کنید.

  3. تأیید کنید که API های صحیح را فعال می کنید، سپس روی فعال کردن کلیک کنید.

gcloud CLI

  1. در صورت لزوم، پروژه فعلی Cloud را روی پروژه ای که با دستور gcloud config set project ایجاد کرده اید، تنظیم کنید:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID با Project ID پروژه 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. روی Create موضوع کلیک کنید و کارهای زیر را انجام دهید:
    1. workspace-events به عنوان نام موضوع وارد کنید.
    2. افزودن اشتراک پیش‌فرض را انتخاب کنید.
    3. روی ایجاد کلیک کنید. نام کامل موضوع شما به صورت projects/{project}/topics/{topic} قالب‌بندی شده است. این نام را برای استفاده در مراحل بعدی یادداشت کنید.
  3. اجازه دسترسی به انتشار پیام‌های Pub/Sub به موضوع خود را بدهید:
    1. در پانل کناری، تب Permissions را باز کنید.
    2. روی Add Principal کلیک کنید.
    3. در New Principals ، meet-api-event-push@system.gserviceaccount.com را وارد کنید.
    4. در Assign roles ، Pub/Sub Publisher را انتخاب کنید.
    5. روی ذخیره کلیک کنید.

    ممکن است چند دقیقه طول بکشد تا مجوزهای موضوع شما به روز شود.

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'

    ممکن است چند دقیقه طول بکشد تا مجوزهای موضوع شما به روز شود.

  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 & Admin > حساب‌های سرویس بروید.

    به حساب های خدماتی بروید

  2. روی ایجاد حساب سرویس کلیک کنید.
  3. جزئیات حساب سرویس را پر کنید، سپس روی ایجاد و ادامه کلیک کنید.
  4. اختیاری: نقش هایی را به حساب سرویس خود اختصاص دهید تا به منابع پروژه Google Cloud خود دسترسی داشته باشید. برای جزئیات بیشتر، به اعطای، تغییر، و لغو دسترسی به منابع مراجعه کنید.
  5. روی Continue کلیک کنید.
  6. اختیاری: کاربران یا گروه‌هایی را وارد کنید که می‌توانند عملکردها را با این حساب سرویس مدیریت و انجام دهند. برای جزئیات بیشتر، به مدیریت جعل هویت حساب سرویس مراجعه کنید.
  7. روی Done کلیک کنید. آدرس ایمیل حساب سرویس را یادداشت کنید.

gcloud CLI

  1. حساب سرویس را ایجاد کنید:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. اختیاری: نقش هایی را به حساب سرویس خود اختصاص دهید تا به منابع پروژه Google Cloud خود دسترسی داشته باشید. برای جزئیات بیشتر، به اعطای، تغییر، و لغو دسترسی به منابع مراجعه کنید.

از حساب سرویس استفاده کنید

پس از ایجاد حساب سرویس، به خودتان اجازه دهید جعل هویت حساب سرویس را جعل کنید.

کنسول Google Cloud

  1. در ستون اقدامات برای حساب سرویس جدید ایجاد شده، روی > مدیریت مجوزها کلیک کنید.
  2. روی افزودن کلید > اجازه دسترسی کلیک کنید.
  3. آدرس ایمیل خود را در قسمت Add principals وارد کنید.
  4. حساب‌های خدمات > ایجاد کننده رمز حساب حساب سرویس را به عنوان نقش انتخاب کنید.
  5. روی ذخیره کلیک کنید.

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 وارد شوید تا اعتبار پیش فرض برنامه را روی حساب سرویس سرویس تنظیم کنید. هنگامی که از شما برای مجوز درخواست شد، با استفاده از همان حسابی که در مراحل قبلی استفاده شده بود وارد شوید.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

کتابخانه Pub/Sub Client را نصب کنید

  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 : شناسه پروژه منحصر به فرد Cloud برای برنامه شما، مانند my-sample-project-191923 .

    • TOPIC_ID : نام موضوع Pub/Sub که در پروژه Cloud خود ایجاد کردید.

    • 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 Drive، آنها را با استفاده از روش‌های رونوشت ساختاریافته در Meet REST API بازیابی کنید.

اختیاری: تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب کنسول Google Cloud خود برای منابع استفاده شده در این آموزش، توصیه می کنیم منابع و پروژه های ایجاد شده را پاکسازی کنید.

برای حذف اشتراک:

کنسول

  1. در کنسول Google Cloud، به منو > Pub/Sub > اشتراک ها بروید

    به اشتراک ها بروید

  2. اشتراک را انتخاب کنید و روی More actions کلیک کنید.

  3. روی Delete کلیک کنید. پنجره حذف اشتراک ظاهر می شود.

  4. روی Delete کلیک کنید.

gcloud CLI

  1. حذف اشتراک:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

برای حذف تاپیک:

کنسول

  1. در کنسول Google Cloud، به منو > Pub/Sub > Topics بروید

    به موضوعات بروید

  2. موضوع را انتخاب کنید و اقدامات بیشتر را کلیک کنید.

  3. روی Delete کلیک کنید. پنجره حذف موضوع ظاهر می شود.

  4. delete وارد کرده و سپس روی Delete کلیک کنید.

gcloud CLI

  1. حذف تاپیک:

    gcloud pubsub topics delete TOPIC_NAME
    

برای حذف پروژه:

کنسول

  1. در کنسول Google Cloud، به صفحه مدیریت منابع بروید. روی > IAM & Admin > Manage Resources کلیک کنید.

    به Resource Manager بروید

  2. در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی حذف کلیک کنید.
  3. در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.

gcloud CLI

  1. برای حذف یک پروژه، از دستور delete پروژه های gcloud استفاده کنید:

    gcloud projects delete PROJECT_ID
    
،

این آموزش نحوه استفاده از Google Meet REST API به همراه Google Workspace Events API و Google Cloud Pub/Sub را برای مشاهده و واکنش به رویدادهای جلسه نشان می دهد. برنامه نمونه زمان شروع و پایان کنفرانس، زمان پیوستن یا خروج شرکت کنندگان، و زمانی که مصنوعات جلسه تولید شده در دسترس است را ثبت می کند.

برای کسب اطلاعات بیشتر در مورد کار با رویدادها، به اشتراک در رویدادهای Google Meet در اسناد Google Workspace Events API مراجعه کنید.

پیش نیازها

اگر به هر یک از این پیش نیازها برای سازمانتان نیاز دارید، از سرپرست Google Workspace خود بخواهید آنها را روشن کند:

محیط خود را آماده کنید

این بخش نحوه ایجاد و پیکربندی محیط محلی و پروژه Google Cloud را برای این آموزش نشان می دهد.

یک پوشه کاری و محیط مجازی پایتون ایجاد کنید

برای ایجاد و فعال سازی یک محیط مجازی جدید، دستورات زیر را در ترمینال خود اجرا کنید.

Linux/macOS

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate

ویندوز (خط فرمان)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat

ویندوز (PowerShell)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1

یک پروژه Google Cloud ایجاد کنید

کنسول Google Cloud

  1. در کنسول Google Cloud، به منو > IAM & Admin > ایجاد پروژه بروید.

    به Create a Project بروید

  2. در قسمت Project Name یک نام توصیفی برای پروژه خود وارد کنید.

    اختیاری: برای ویرایش شناسه پروژه ، روی ویرایش کلیک کنید. شناسه پروژه پس از ایجاد پروژه قابل تغییر نیست، بنابراین شناسه ای را انتخاب کنید که نیازهای شما را برای طول عمر پروژه برآورده کند.

  3. در قسمت Location ، روی Browse کلیک کنید تا مکان های احتمالی پروژه شما نمایش داده شود. سپس، روی انتخاب کلیک کنید.
  4. روی ایجاد کلیک کنید. کنسول Google Cloud به صفحه داشبورد می رود و پروژه شما در عرض چند دقیقه ایجاد می شود.

gcloud CLI

در یکی از محیط‌های توسعه زیر، به Google Cloud CLI («gcloud») دسترسی پیدا کنید:

  • Cloud Shell : برای استفاده از ترمینال آنلاین با Gcloud CLI که قبلاً راه اندازی شده است، Cloud Shell را فعال کنید.
    Cloud Shell را فعال کنید
  • Local Shell : برای استفاده از یک محیط توسعه محلی، gcloud CLI را نصب و مقداردهی اولیه کنید .
    برای ایجاد یک پروژه Cloud، از دستور 'gcloud projects create' استفاده کنید:
    gcloud projects create PROJECT_ID
    با تنظیم ID برای پروژه ای که می خواهید ایجاد کنید PROJECT_ID جایگزین کنید.

صورتحساب پروژه Google Cloud را فعال کنید

کنسول Google Cloud

  1. در کنسول Google Cloud، به Billing بروید. منو > صورت‌حساب > پروژه‌های من کلیک کنید.

    به Billing for My Projects بروید

  2. در انتخاب سازمان ، سازمان مرتبط با پروژه Google Cloud خود را انتخاب کنید.
  3. در ردیف پروژه، منوی Actions ( ) را باز کنید، روی Change billing کلیک کنید و حساب Cloud Billing را انتخاب کنید.
  4. روی تنظیم حساب کلیک کنید.

gcloud CLI

  1. برای فهرست کردن حساب‌های صورت‌حساب موجود، اجرا کنید:
    gcloud billing accounts list
  2. پیوند یک حساب صورت‌حساب با پروژه Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    موارد زیر را جایگزین کنید:

    • PROJECT_ID شناسه پروژه برای پروژه Cloud است که می‌خواهید صورت‌حساب را برای آن فعال کنید.
    • BILLING_ACCOUNT_ID شناسه حساب صورت‌حساب برای پیوند با پروژه Google Cloud است.

احراز هویت و مجوز را تنظیم کنید

احراز هویت و مجوز به برنامه اجازه می‌دهد به منابع Meet REST API دسترسی پیدا کند. مجوز کاربر برای تماس با Meet REST API مورد نیاز است. این بخش نحوه پیکربندی اطلاعات کاربری و درخواست مجوز را به شما آموزش می‌دهد.

صفحه رضایت OAuth را پیکربندی کنید و دامنه ها را انتخاب کنید

مراحل زیر اطلاعات مکان‌نما را برای پیکربندی صفحه رضایت OAuth برای برنامه شما پیشنهاد می‌کند. قبل از انتشار برنامه به صورت خارجی، این اطلاعات را به روز کنید.

  1. در کنسول Google Cloud، به منو > APIs & Services > صفحه رضایت OAuth بروید.

    به صفحه رضایت OAuth بروید

  2. در قسمت User type ، Internal را انتخاب کنید، سپس روی Create کلیک کنید.
  3. در نام برنامه ، Meet REST API Tutorial وارد کنید.
  4. فرم ثبت نام برنامه را تکمیل کنید، سپس روی ذخیره و ادامه کلیک کنید.
  5. روی Add or Remove Scopes کلیک کنید. یک پانل با لیستی از محدوده‌ها برای هر API که در پروژه Google Cloud خود فعال کرده‌اید ظاهر می‌شود.
  6. در بخش افزودن دستی دامنه‌ها ، دامنه‌های زیر را جای‌گذاری کنید:
    • https://www.googleapis.com/auth/meetings.space.created
  7. روی افزودن به جدول کلیک کنید.
  8. روی Update کلیک کنید.
  9. پس از انتخاب محدوده های مورد نیاز برنامه خود، روی ذخیره و ادامه کلیک کنید.
  10. اگر خارجی را برای نوع کاربر انتخاب کرده اید، کاربران آزمایشی را اضافه کنید:
    1. در بخش تست کاربران ، روی افزودن کاربران کلیک کنید.
    2. آدرس ایمیل خود و سایر کاربران آزمایشی مجاز را وارد کنید، سپس روی ذخیره و ادامه کلیک کنید.
  11. خلاصه ثبت برنامه خود را مرور کنید. برای ایجاد تغییرات، روی ویرایش کلیک کنید. اگر ثبت برنامه خوب به نظر می رسد، روی بازگشت به داشبورد کلیک کنید.

یک شناسه مشتری ایجاد کنید

شناسه مشتری به عنوان اعتبارنامه برای برنامه شما در جریان OAuth 2.0 عمل می کند. از آنجایی که برنامه به صورت محلی اجرا می شود، یک شناسه مشتری دسکتاپ ایجاد کنید.

  1. در کنسول Google Cloud، به منو > APIs & Services > Credentials بروید.

    به Credentials بروید

  2. روی ایجاد اعتبارنامه > شناسه مشتری OAuth کلیک کنید.
  3. روی نوع برنامه > برنامه دسکتاپ کلیک کنید.
  4. در قسمت نام ، نامی را برای اعتبارنامه تایپ کنید. این نام فقط در کنسول Google Cloud نشان داده می شود.
  5. روی ایجاد کلیک کنید. صفحه ایجاد شده توسط سرویس گیرنده OAuth ظاهر می شود که شناسه مشتری و راز مشتری جدید شما را نشان می دهد.
  6. روی OK کلیک کنید. اعتبار جدید ایجاد شده در شناسه های مشتری 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 را اضافه کنید

اکنون که کد مجوز کامل شده است، زمان فعال کردن و فراخوانی 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ها را در پروژه Cloud صحیح فعال می‌کنید، سپس روی Next کلیک کنید.

  3. تأیید کنید که API های صحیح را فعال می کنید، سپس روی فعال کردن کلیک کنید.

gcloud CLI

  1. در صورت لزوم، پروژه فعلی Cloud را روی پروژه ای که با دستور gcloud config set project ایجاد کرده اید، تنظیم کنید:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID با Project ID پروژه 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. روی Create موضوع کلیک کنید و کارهای زیر را انجام دهید:
    1. workspace-events به عنوان نام موضوع وارد کنید.
    2. افزودن اشتراک پیش‌فرض را انتخاب کنید.
    3. روی ایجاد کلیک کنید. نام کامل موضوع شما به صورت projects/{project}/topics/{topic} قالب‌بندی شده است. این نام را برای استفاده در مراحل بعدی یادداشت کنید.
  3. اجازه دسترسی به انتشار پیام‌های Pub/Sub به موضوع خود را بدهید:
    1. در پانل کناری، تب Permissions را باز کنید.
    2. روی Add Principal کلیک کنید.
    3. در New Principals ، meet-api-event-push@system.gserviceaccount.com را وارد کنید.
    4. در Assign roles ، Pub/Sub Publisher را انتخاب کنید.
    5. روی ذخیره کلیک کنید.

    ممکن است چند دقیقه طول بکشد تا مجوزهای موضوع شما به روز شود.

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'

    ممکن است چند دقیقه طول بکشد تا مجوزهای موضوع شما به روز شود.

  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 & Admin > حساب‌های سرویس بروید.

    به حساب های خدماتی بروید

  2. روی ایجاد حساب سرویس کلیک کنید.
  3. جزئیات حساب سرویس را پر کنید، سپس روی ایجاد و ادامه کلیک کنید.
  4. اختیاری: نقش هایی را به حساب سرویس خود اختصاص دهید تا به منابع پروژه Google Cloud خود دسترسی داشته باشید. برای جزئیات بیشتر، به اعطای، تغییر، و لغو دسترسی به منابع مراجعه کنید.
  5. روی Continue کلیک کنید.
  6. اختیاری: کاربران یا گروه‌هایی را وارد کنید که می‌توانند عملکردها را با این حساب سرویس مدیریت و انجام دهند. برای جزئیات بیشتر، به مدیریت جعل هویت حساب سرویس مراجعه کنید.
  7. روی Done کلیک کنید. آدرس ایمیل حساب سرویس را یادداشت کنید.

gcloud CLI

  1. حساب سرویس را ایجاد کنید:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. اختیاری: نقش هایی را به حساب سرویس خود اختصاص دهید تا به منابع پروژه Google Cloud خود دسترسی داشته باشید. برای جزئیات بیشتر، به اعطای، تغییر، و لغو دسترسی به منابع مراجعه کنید.

از حساب سرویس استفاده کنید

پس از ایجاد حساب سرویس، به خودتان اجازه دهید جعل هویت حساب سرویس را جعل کنید.

کنسول Google Cloud

  1. در ستون اقدامات برای حساب سرویس جدید ایجاد شده، روی > مدیریت مجوزها کلیک کنید.
  2. روی افزودن کلید > اجازه دسترسی کلیک کنید.
  3. آدرس ایمیل خود را در قسمت Add principals وارد کنید.
  4. حساب‌های خدمات > ایجاد کننده رمز حساب حساب سرویس را به عنوان نقش انتخاب کنید.
  5. روی ذخیره کلیک کنید.

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 وارد شوید تا اعتبار پیش فرض برنامه را روی حساب سرویس سرویس تنظیم کنید. هنگامی که از شما برای مجوز درخواست شد، با استفاده از همان حسابی که در مراحل قبلی استفاده شده بود وارد شوید.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

کتابخانه Pub/Sub Client را نصب کنید

  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 : شناسه پروژه منحصر به فرد Cloud برای برنامه شما، مانند my-sample-project-191923 .

    • TOPIC_ID : نام موضوع Pub/Sub که در پروژه Cloud خود ایجاد کردید.

    • 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 Drive، آنها را با استفاده از روش‌های رونوشت ساختاریافته در Meet REST API بازیابی کنید.

اختیاری: تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب کنسول Google Cloud خود برای منابع استفاده شده در این آموزش، توصیه می کنیم منابع و پروژه های ایجاد شده را پاکسازی کنید.

برای حذف اشتراک:

کنسول

  1. در کنسول Google Cloud، به منو > Pub/Sub > اشتراک ها بروید

    به اشتراک ها بروید

  2. اشتراک را انتخاب کنید و روی More actions کلیک کنید.

  3. روی Delete کلیک کنید. پنجره حذف اشتراک ظاهر می شود.

  4. روی Delete کلیک کنید.

gcloud CLI

  1. حذف اشتراک:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

برای حذف تاپیک:

کنسول

  1. در کنسول Google Cloud، به منو > Pub/Sub > Topics بروید

    به موضوعات بروید

  2. موضوع را انتخاب کنید و اقدامات بیشتر را کلیک کنید.

  3. روی Delete کلیک کنید. پنجره حذف موضوع ظاهر می شود.

  4. delete وارد کنید و سپس روی Delete کلیک کنید.

gcloud CLI

  1. حذف تاپیک:

    gcloud pubsub topics delete TOPIC_NAME
    

برای حذف پروژه:

کنسول

  1. در کنسول Google Cloud، به صفحه مدیریت منابع بروید. روی > IAM & Admin > Manage Resources کلیک کنید.

    به Resource Manager بروید

  2. در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی حذف کلیک کنید.
  3. در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.

gcloud CLI

  1. برای حذف یک پروژه، از دستور delete پروژه های gcloud استفاده کنید:

    gcloud projects delete PROJECT_ID