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

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

به جای عضویت در یک فضای جلسه خاص، می‌توانید در یک کاربر Meet عضویت پیدا کنید تا رویدادهای هر فضای جلسه‌ای که کاربر مالک آن است یا سازماندهی می‌کند را دریافت کنید. برای جزئیات بیشتر، به بخش عضویت در رویدادهای Google Meet در مستندات Google Workspace Events API مراجعه کنید .

پیش‌نیازها

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

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

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

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

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

لینوکس/مک او اس

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

ویندوز (پاورشل)

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

ایجاد یک پروژه گوگل کلود

کنسول گوگل کلود

  1. در کنسول گوگل کلود، به Menu > IAM & Admin > Create a Project بروید.

    به ایجاد پروژه بروید

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

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

  3. در فیلد «مکان» ، روی «مرور» کلیک کنید تا مکان‌های بالقوه برای پروژه شما نمایش داده شود. سپس، روی «انتخاب» کلیک کنید.
  4. روی ایجاد کلیک کنید. کنسول Google Cloud به صفحه داشبورد هدایت می‌شود و پروژه شما ظرف چند دقیقه ایجاد می‌شود.

رابط خط فرمان جی‌کلاود

در یکی از محیط‌های توسعه زیر، به رابط خط فرمان گوگل کلود ( gcloud ) دسترسی پیدا کنید:

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

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

کنسول گوگل کلود

  1. در کنسول گوگل کلود، به بخش صورتحساب (Billing) بروید. (Menu) > صورتحساب (Billing) > پروژه‌های من (My Projects) کلیک کنید.

    به بخش پرداخت هزینه‌های پروژه‌های من بروید

  2. در بخش «انتخاب سازمان» ، سازمانی را که با پروژه Google Cloud شما مرتبط است، انتخاب کنید.
  3. در ردیف پروژه، منوی اقدامات ( ) را باز کنید، روی تغییر صورتحساب کلیک کنید و حساب صورتحساب ابری را انتخاب کنید.
  4. روی تنظیم حساب کلیک کنید.

رابط خط فرمان جی‌کلاود

  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. در کنسول گوگل کلود، به Menu > برویدGoogle Auth platform > برندسازی .

    به بخش برندسازی بروید

  2. اگر قبلاً تنظیمات را انجام داده‌اید Google Auth platformمی‌توانید تنظیمات صفحه رضایت OAuth زیر را در Branding ، Audience و Data Access پیکربندی کنید. اگر پیامی با این مضمون مشاهده کردید Google Auth platform هنوز پیکربندی نشده است ، روی شروع کار کلیک کنید:
    1. در بخش اطلاعات برنامه ، در قسمت نام برنامه ، Meet REST API Tutorial وارد کنید.
    2. در ایمیل پشتیبانی کاربر ، یک آدرس ایمیل پشتیبانی انتخاب کنید که کاربران در صورت داشتن هرگونه سوال در مورد رضایت خود بتوانند با شما تماس بگیرند.
    3. روی بعدی کلیک کنید.
    4. در قسمت مخاطبان ، داخلی (Internal) را انتخاب کنید.
    5. روی بعدی کلیک کنید.
    6. در قسمت اطلاعات تماس ، یک آدرس ایمیل وارد کنید که از طریق آن بتوانید از هرگونه تغییر در پروژه خود مطلع شوید.
    7. روی بعدی کلیک کنید.
    8. در قسمت Finish ، سیاست داده‌های کاربر سرویس‌های API گوگل را مرور کنید و در صورت موافقت، گزینه «من با سیاست‌های داده‌های کاربر سرویس‌های API گوگل موافقم» را انتخاب کنید.
    9. روی ادامه کلیک کنید.
    10. روی ایجاد کلیک کنید.
    11. اگر نوع کاربر را External انتخاب کرده‌اید، کاربران آزمایشی را اضافه کنید:
      1. روی مخاطب کلیک کنید.
      2. در قسمت کاربران آزمایشی ، روی افزودن کاربران کلیک کنید.
      3. آدرس ایمیل خود و سایر کاربران آزمایشی مجاز را وارد کنید، سپس روی ذخیره کلیک کنید.
  3. روی دسترسی به داده‌ها > افزودن یا حذف محدوده‌ها کلیک کنید. یک پنل با لیستی از محدوده‌ها برای هر API که در پروژه Google Cloud خود فعال کرده‌اید، ظاهر می‌شود.
  4. در قسمت «افزودن دستی محدوده‌ها» ، محدوده‌های زیر را وارد کنید:
    • https://www.googleapis.com/auth/meetings.space.created
  5. روی افزودن به جدول کلیک کنید.
  6. روی به‌روزرسانی کلیک کنید.
  7. پس از انتخاب محدوده‌های مورد نیاز برنامه، روی ذخیره کلیک کنید.

برای اطلاعات بیشتر در مورد پیکربندی رضایت OAuth، به بخش «شروع به کار با» مراجعه کنید. Google Auth platform .

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

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

  1. در کنسول گوگل کلود، به Menu > برویدGoogle Auth platform > مشتریان .

    به بخش مشتریان بروید

  2. روی ایجاد کلاینت کلیک کنید.
  3. روی نوع برنامه > برنامه دسکتاپ کلیک کنید.
  4. در فیلد نام ، نامی برای اعتبارنامه تایپ کنید. این نام فقط در کنسول Google Cloud نمایش داده می‌شود.
  5. روی ایجاد کلیک کنید.

    اعتبارنامه‌ی تازه ایجاد شده در زیر «OAuth 2.0 Client IDs» ظاهر می‌شود.

کتابخانه‌های احراز هویت گوگل را نصب کنید

کتابخانه‌های احراز هویت گوگل را نصب کنید:

pip install google-auth google-auth-oauthlib

اجرای مجوز

رابط برنامه‌نویسی کاربردی Meet REST به اعتبارنامه‌های کاربر در قالب یک توکن دسترسی 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 نیز استفاده می‌کند.

کنسول گوگل کلود

  1. در کنسول Google Cloud، رابط برنامه‌نویسی کاربردی REST گوگل میت، رابط برنامه‌نویسی کاربردی رویدادهای گوگل ورک‌اسپیس و Google Cloud Pub/Sub را فعال کنید.

    فعال کردن APIها

  2. تأیید کنید که APIها را در پروژه Cloud صحیح فعال می‌کنید، سپس روی Next کلیک کنید.

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

رابط خط فرمان جی‌کلاود

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

    gcloud config set project PROJECT_ID

    به جای PROJECT_ID ، شناسه پروژه ابری که ایجاد کرده‌اید را قرار دهید.

  2. با استفاده از دستور gcloud services enable ، رابط برنامه‌نویسی کاربردی REST گوگل میت، رابط برنامه‌نویسی کاربردی رویدادهای گوگل ورک‌اسپیس و Google Cloud Pub/Sub را فعال کنید:

    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)

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

برای دریافت رویدادهای مربوط به یک فضای جلسه، شما با استفاده از API رویدادهای Google Workspace یک اشتراک ایجاد می‌کنید. همچنین باید یک موضوع Google Cloud Pub/Sub ایجاد کرده و در آن مشترک شوید که به عنوان نقطه پایانی اعلان عمل می‌کند و برنامه شما رویدادها را از آنجا دریافت می‌کند.

پیکربندی Google Cloud Pub/Sub

برای ایجاد و عضویت در یک موضوع Pub/Sub:

کنسول گوگل کلود

  1. در کنسول گوگل کلود، به Menu > Pub/Sub بروید.

    به میخانه/مشترک بروید

    مطمئن شوید که پروژه ابری برای برنامه شما انتخاب شده است.

  2. روی کلیک کنید و موضوع را ایجاد کنید و موارد زیر را انجام دهید:
    1. به عنوان نام موضوع، workspace-events را وارد کنید.
    2. گزینه «افزودن اشتراک پیش‌فرض» را انتخاب‌شده باقی بگذارید.
    3. روی ایجاد کلیک کنید. نام کامل موضوع شما به صورت projects/{project}/topics/{topic} قالب‌بندی می‌شود. این نام را برای استفاده در مراحل بعدی یادداشت کنید.
  3. دسترسی انتشار پیام‌های Pub/Sub را به موضوع خود اعطا کنید:
    1. در پنل کناری، برگه مجوزها (Permissions) را باز کنید.
    2. روی افزودن مدیر اصلی کلیک کنید.
    3. در بخش New principals ، meet-api-event-push@system.gserviceaccount.com وارد کنید.
    4. در بخش «اختصاص نقش‌ها» ، Pub/Sub Publisher انتخاب کنید.
    5. روی ذخیره کلیک کنید.

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

رابط خط فرمان جی‌کلاود

  1. در پروژه ابری خود، با اجرای دستور زیر یک تاپیک ایجاد کنید:
    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} شناسه پروژه ابری برنامه شما باشد. بعداً از نام موضوع برای ایجاد اشتراک Google Workspace استفاده خواهید کرد.

ایجاد حساب کاربری سرویس

کنسول گوگل کلود

  1. در کنسول گوگل کلود، به > IAM & Admin > Service Accounts بروید.

    به حساب‌های سرویس بروید

  2. روی ایجاد حساب سرویس کلیک کنید.
  3. جزئیات حساب سرویس را پر کنید، سپس روی ایجاد و ادامه کلیک کنید.
  4. در بخش «اعطای دسترسی به حساب کاربری این سرویس برای پروژه» ، نقش‌های زیر را اضافه کنید:
    • roles/pubsub.subscriber
  5. روی ادامه کلیک کنید.
  6. اختیاری: کاربران یا گروه‌هایی را که می‌توانند با این حساب سرویس، اقدامات را مدیریت و انجام دهند، وارد کنید. برای جزئیات بیشتر، به مدیریت جعل هویت حساب سرویس مراجعه کنید.
  7. روی «انجام شد» کلیک کنید. آدرس ایمیل حساب سرویس را یادداشت کنید.

رابط خط فرمان جی‌کلاود

  1. ایجاد حساب کاربری سرویس:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. نقش‌های لازم را به حساب سرویس اعطا کنید:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:meet-event-listener@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/pubsub.subscriber"

    به جای PROJECT_ID ، شناسه پروژه گوگل کلود خود را وارد کنید.

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

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

کنسول گوگل کلود

  1. در ستون «اقدامات» برای حساب سرویس تازه ایجاد شده، روی > «مدیریت مجوزها» کلیک کنید.
  2. روی افزودن کلید > اعطای دسترسی کلیک کنید.
  3. آدرس ایمیل خود را در قسمت «افزودن مدیران» وارد کنید.
  4. به عنوان نقش، گزینه Service accounts > Service Account Token Creator را انتخاب کنید.
  5. روی ذخیره کلیک کنید.
  6. به ترمینال خود برگردید و با gcloud وارد شوید تا اعتبارنامه‌های پیش‌فرض برنامه را روی حساب سرویس تنظیم کنید. وقتی از شما درخواست مجوز شد، با همان حسابی که در مراحل قبلی استفاده کرده‌اید، وارد شوید.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

رابط خط فرمان جی‌کلاود

  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. برای نصب کتابخانه کلاینت برای Pub/Sub از pip استفاده کنید:

    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)
    if (subscription.status_code) == 200:
        listen_for_events(subscription_name=SUBSCRIPTION_NAME)
    else:
        print(f"Subscription to Meet events failed, response data: {subscription.content}")
    

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

    • PROJECT_ID : شناسه منحصر به فرد پروژه ابری برای برنامه شما، مانند 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، برنامه را برای انجام این اقدامات اضافی تغییر دهید.

  • از API افراد برای بازیابی اطلاعات بیشتر در مورد شرکت‌کنندگان وارد شده استفاده کنید.

    def subscribe_to_user(user_name: str = None, topic_name: str = None) -> requests_lib.Response:
        """Subscribe to events for a user."""
        session = requests.AuthorizedSession(USER_CREDENTIALS)
        body = {
            "targetResource": f"//cloudidentity.googleapis.com/users/{user_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
    
    service = build("people", "v1", credentials=USER_CREDENTIALS)
    response = (
        service.people()
        .get(resourceName="people/me", personFields="names,emailAddresses")
        .execute()
    )
    resource_name = response.get("resourceName")
    if resource_name.startswith("people/"):
        resource_name = resource_name[len("people/") :]
    
    subscription = subscribe_to_user(topic_name=TOPIC_NAME, user_name=resource_name)
    

    مطمئن شوید که عبارت "https://www.googleapis.com/auth/userinfo.profile" را در متد authorize در نمونه‌های اعتبارنامه بالا اضافه کنید.

  • از API گوگل درایو برای دانلود فایل‌های ضبط‌شده و رونوشت‌ها استفاده کنید.

  • به جای دانلود رونوشت‌ها از گوگل درایو، آن‌ها را با استفاده از روش‌های رونوشت ساختاریافته در Meet REST API بازیابی کنید.

  • به جای ایجاد فضا، فضا را به دست آورید

    def get_space(meeting_code: str) -> meet.Space:
        """Get a meeting space."""
        client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
        return client.get_space(name="spaces/" + meeting_code)
    

    مطمئن شوید که عبارت "https://www.googleapis.com/auth/meetings.space.readonly" را در متد authorize در نمونه‌های اعتبارنامه بالا اضافه کنید.

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

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

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

کنسول

  1. در کنسول گوگل کلود، به > انتشار/اشتراک > اشتراک‌ها بروید

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

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

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

  4. روی حذف کلیک کنید.

رابط خط فرمان جی‌کلاود

  1. اشتراک را حذف کنید:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME

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

کنسول

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

    برو به مباحث

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

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

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

رابط خط فرمان جی‌کلاود

  1. تاپیک رو حذف کن:

    gcloud pubsub topics delete TOPIC_NAME

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

کنسول

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

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

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

رابط خط فرمان جی‌کلاود

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

    gcloud projects delete PROJECT_ID