تتبُّع أحداث الاجتماعات باستخدام Python و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 لهذا الدليل التعليمي.

إنشاء دليل عمل وبيئة افتراضية للغة 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 Console، انتقِل إلى القائمة > إدارة الهوية وإمكانية الوصول والمشرف > إنشاء مشروع.

    الانتقال إلى صفحة "إنشاء مشروع"

  2. في حقل اسم المشروع، أدخِل اسمًا وصفيًا لمشروعك.

    اختياري: لتعديل رقم تعريف المشروع، انقر على تعديل. لا يمكن تغيير رقم تعريف المشروع بعد إنشائه، لذا اختَر رقم تعريف يلبي احتياجاتك طوال مدة المشروع.

  3. في حقل الموقع الجغرافي، انقر على تصفّح لعرض المواقع الجغرافية المحتمَلة لمشروعك. بعد ذلك، انقر على اختيار.
  4. انقر على إنشاء. تنتقل وحدة التحكّم في Google Cloud إلى صفحة "لوحة البيانات" وسيتم إنشاء مشروعك في غضون بضع دقائق.

واجهة سطر الأوامر gcloud

في إحدى بيئات التطوير التالية، يمكنك الوصول إلى واجهة سطر الأوامر في Google Cloud (`gcloud`):

  • Cloud Shell: لاستخدام وحدة طرفية على الإنترنت مع إعداد واجهة CLI على gcloud، يمكنك تفعيل Cloud Shell.
    تفعيل Cloud Shell
  • Local Shell: لاستخدام بيئة تطوير محلية، عليك تثبيت initialize واجهة سطر الأوامر gcloud.
    لإنشاء مشروع على Google Cloud، استخدِم الأمر `gcloud المشروعات create`:
    gcloud projects create PROJECT_ID
    استبدِل PROJECT_ID من خلال ضبط رقم تعريف المشروع الذي تريد إنشاءه.

تفعيل الفوترة لمشروع Google Cloud

وحدة التحكّم في Google Cloud

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى الفوترة. انقر على القائمة > الفوترة > مشاريعي.

    الانتقال إلى "الفوترة لمشاريعي"

  2. في القسم اختيار مؤسسة، اختَر المؤسسة المرتبطة بمشروعك على Google Cloud.
  3. في صف المشروع، افتح قائمة الإجراءات ()، وانقر على تغيير الفوترة، واختر حساب فوترة Cloud.
  4. انقر على ضبط الحساب.

واجهة سطر الأوامر gcloud

  1. لسرد حسابات الفوترة المتاحة، شغِّل:
    gcloud billing accounts list
  2. ربط حساب فوترة بمشروع على Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    استبدِل ما يلي:

    • PROJECT_ID هو رقم تعريف المشروع للمشروع على Google Cloud الذي تريد تفعيل الفوترة له.
    • BILLING_ACCOUNT_ID هو رقم تعريف حساب الفوترة المطلوب ربطه بمشروع Google Cloud.

إعداد المصادقة والتفويض

تتيح المصادقة والتفويض للتطبيق الوصول إلى موارد واجهة برمجة تطبيقات Meet REST. يجب الحصول على إذن المستخدم لطلب واجهة برمجة تطبيقات Meet REST. يوضح هذا القسم كيفية تهيئة بيانات اعتماد المستخدم وطلب التفويض.

ضبط شاشة موافقة OAuth واختيار النطاقات

تقترح الخطوات التالية معلومات العنصر النائب لإعداد شاشة موافقة OAuth لتطبيقك. قبل نشر التطبيق خارجيًا، حدِّث هذه المعلومات.

  1. في Google Cloud Console، انتقِل إلى القائمة > واجهات برمجة التطبيقات والخدمات > شاشة موافقة OAuth.

    الانتقال إلى شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

  2. ضمن نوع المستخدم، اختَر داخلي، ثم انقر على إنشاء.
  3. في اسم التطبيق، أدخِل Meet REST API Tutorial.
  4. أكمِل نموذج تسجيل التطبيق، ثم انقر على حفظ ومتابعة.
  5. انقر على إضافة نطاقات أو إزالتها. تظهر لوحة تتضمن قائمة بالنطاقات لكل واجهة برمجة تطبيقات فعَّلتها في مشروعك على Google Cloud.
  6. ضمن إضافة النطاقات يدويًا، الصِق النطاقات التالية:
    • https://www.googleapis.com/auth/meetings.space.created
  7. انقر على إضافة إلى الجدول.
  8. انقر على تعديل.
  9. بعد اختيار النطاقات التي يتطلبها تطبيقك، انقر على حفظ ومتابعة.
  10. إذا اختَرت خارجي لنوع المستخدم، أضِف مستخدمين تجريبيين:
    1. ضمن المستخدمون التجريبيون، انقر على إضافة مستخدمين.
    2. أدخِل عنوان بريدك الإلكتروني وأي مستخدمين تجريبيين معتمَدين آخرين، ثم انقر على حفظ ومتابعة.
  11. مراجعة ملخّص تسجيل التطبيق لإجراء تغييرات، انقر على تعديل. إذا بدا تسجيل التطبيق على ما يرام، انقر على الرجوع إلى لوحة البيانات.

إنشاء معرِّف عميل

يعمل معرِّف العميل كبيانات اعتماد لتطبيقك أثناء مسارات OAuth 2.0. بما أنّ التطبيق يعمل محليًا، عليك إنشاء معرِّف عميل على الكمبيوتر المكتبي.

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > تطبيق الكمبيوتر المكتبي.
  4. في حقل الاسم، اكتب اسمًا لبيانات الاعتماد. ولا يظهر هذا الاسم إلا في وحدة تحكُّم Google Cloud.
  5. انقر على إنشاء. تظهر الشاشة التي تم إنشاؤها من خلال عميل OAuth، وتعرض معرِّف العميل الجديد وسر العميل.
  6. انقر على موافق. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرّفات عميل OAuth 2.0.

تثبيت مكتبات المصادقة من Google

ثبِّت مكتبات المصادقة من Google:

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 وطلبها.

تفعيل واجهات برمجة التطبيقات

على الرغم من أنّ هذا القسم يركّز على واجهة برمجة تطبيقات Meet REST، يستخدم هذا الدليل التوجيهي أيضًا Google Cloud Pub/Sub وGoogle Workspace Events API.

وحدة التحكّم في Google Cloud

  1. في وحدة التحكّم في Google Cloud، فعِّل واجهة برمجة التطبيقات Google Meet REST وGoogle Workspace Events API وGoogle Cloud Pub/Sub.

    تفعيل واجهات برمجة التطبيقات

  2. تأكَّد من تفعيل واجهات برمجة التطبيقات في مشروع Cloud الصحيح، ثمّ انقر على التالي.

  3. تأكَّد من تفعيل واجهات برمجة التطبيقات الصحيحة، ثم انقر على تفعيل.

واجهة سطر الأوامر gcloud

  1. إذا لزم الأمر، اضبط المشروع الحالي على Cloud على المشروع الذي أنشأته باستخدام الأمر gcloud config set project:

    gcloud config set project PROJECT_ID
    

    استبدِل PROJECT_ID برقم تعريف المشروع الخاص بالمشروع الذي أنشأته على السحابة الإلكترونية.

  2. يمكنك تفعيل واجهة برمجة التطبيقات Google Meet REST و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

اتّبِع الخطوات التالية لتثبيت مكتبة برامج واجهة برمجة التطبيقات 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

لإنشاء موضوع نشر/اشتراك أو الاشتراك فيه:

وحدة التحكّم في Google Cloud

  1. في Google Cloud Console، انتقِل إلى القائمة > النشر/الاشتراك.

    الانتقال إلى نشر/اشتراك

    تأكَّد من اختيار مشروع تطبيقك على السحابة الإلكترونية.

  2. انقر على إنشاء موضوع ونفِّذ ما يلي:
    1. أدخِل "workspace-events" كاسم الموضوع.
    2. اترك خيار إضافة اشتراك تلقائي محدّدًا.
    3. انقر على إنشاء. تم تنسيق اسم الموضوع بالكامل على النحو التالي projects/{project}/topics/{topic}. دوِّن هذا الاسم لاستخدامه في الخطوات اللاحقة.
  3. امنح الإذن بنشر رسائل النشر/الاشتراك في الموضوع:
    1. افتح علامة التبويب الأذونات في اللوحة الجانبية.
    2. انقر على إضافة مدير رئيسي.
    3. في العناصر الرئيسية الجديدة، أدخِل meet-api-event-push@system.gserviceaccount.com.
    4. في تعيين الأدوار، اختَر Pub/Sub Publisher.
    5. انقر على حفظ.

    يمكن أن يستغرق تعديل الأذونات لموضوعك بضع دقائق.

واجهة سطر الأوامر gcloud

  1. في مشروعك على Google 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. إنشاء اشتراك في نشر/اشتراك للموضوع:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    استبدِل ما يلي:

    • TOPIC_NAME: اسم الموضوع الذي أنشأته في الخطوة السابقة

دوِّن اسم الموضوع وتأكَّد من أن قيمة {project} هي رقم تعريف مشروع Cloud لتطبيقك. ستستخدم اسم الموضوع لإنشاء اشتراك Google Workspace لاحقًا.

إنشاء حساب خدمة

وحدة التحكّم في Google Cloud

  1. في Google Cloud Console، انتقِل إلى القائمة > إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة.

    الانتقال إلى حسابات الخدمة

  2. انقر على إنشاء حساب خدمة.
  3. أدخِل تفاصيل حساب الخدمة، ثم انقر على إنشاء ومتابعة.
  4. اختياري: يمكنك تعيين أدوار لحساب الخدمة لمنح الإذن بالوصول إلى موارد مشروعك على Google Cloud. لمزيد من التفاصيل، يُرجى الرجوع إلى مقالة منح إمكانية الوصول إلى الموارد وتغييرها وإبطالها.
  5. انقر على متابعة.
  6. اختياري: أدخِل المستخدمين أو المجموعات التي يمكنها إدارة الإجراءات وتنفيذها باستخدام حساب الخدمة هذا. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة إدارة انتحال هوية حساب الخدمة.
  7. انقر على تم. دوِّن عنوان البريد الإلكتروني لحساب الخدمة.

واجهة سطر الأوامر gcloud

  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

  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

تثبيت مكتبة برامج النشر/الاشتراك

  1. استخدِم pip لتثبيت مكتبة البرامج للنشر/الاشتراك:

    pip install google-cloud-pubsub
    
  2. بعد ذلك، عدِّل main.py لاستيراد البرنامج:

    from google.cloud import pubsub_v1
    

إنشاء اشتراك Google Workspace

أضِف الرمز التالي إلى main.py لتحديد طريقة للاشتراك في أحداث Meet. يشترك هذا الرمز في جميع الأحداث لمساحة الاجتماع. عند الاشتراك، يتم نشر الأحداث في موضوع النشر/الاشتراك.

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: اسم موضوع النشر/الاشتراك الذي أنشأته في مشروعك على Google Cloud

    • SUBSCRIPTION_ID: اسم اشتراكك، مثل workspace-events-sub

  2. شغِّل البرنامج:

    python3 main.py
    

إذا لم تكن قد قمت بتشغيل البرنامج من قبل، فسوف يطلب إذنًا للمرة الأولى. امنح التطبيق الإذن بالوصول إلى واجهة برمجة تطبيقات Meet REST. بعد تشغيل البرنامج بنجاح، من المفترض أن تظهر لك نتيجة مشابهة لما يلي:

Join the meeting at https://meet.google.com/abc-mnop-xyz

الانضمام إلى المؤتمر

لإنشاء أحداث للتطبيق، انضم إلى المؤتمر باستخدام عنوان URL الذي يعرضه التطبيق. بعد الانضمام، يمكنك تجربة الإجراءات التالية لتشغيل الأحداث:

  • المغادرة وإعادة الانضمام إلى الاجتماع.
  • ادعُ الآخرين أو اتصل باستخدام هاتفك.
  • تفعيل التسجيلات وتحويل الصوت إلى نص

ينشئ كل نشاط من هذه الأنشطة حدثًا يتلقاه التطبيق ويسجله في وحدة تحكم Google Cloud.

يمكنك استخدام "ctrl-c" لإيقاف البرنامج عند الانتهاء.

اختياري: خطوات إضافية يمكن تجربتها

يسجِّل التطبيق التفاصيل الأساسية حول الأحداث. لمواصلة استكشاف واجهة برمجة تطبيقات Meet REST، يُرجى محاولة تعديل التطبيق لتنفيذ هذه الإجراءات الإضافية.

  • استخدِم People API لاسترداد معلومات إضافية عن المشاركين الذين سجّلوا دخولهم.
  • استخدِم Google Drive API لتنزيل التسجيلات والنصوص.
  • بدلاً من تنزيل النصوص من Google Drive، يمكنك استردادها باستخدام طرق النص المنظم في Meet REST API.

اختياري: إخلاء مساحة تخزين

لتجنُّب تحمُّل أي رسوم من حسابك على Google Cloud Console مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، ننصحك بحذف أي موارد ومشاريع تم إنشاؤها.

لحذف الاشتراك، اتّبِع الخطوات التالية:

وحدة التحكّم

  1. في Google Cloud Console، انتقِل إلى القائمة > النشر/الاشتراك > الاشتراكات

    الانتقال إلى الاشتراكات

  2. اختَر الاشتراك وانقر على مزيد من الإجراءات.

  3. انقر على حذف. ستظهر نافذة حذف الاشتراك.

  4. انقر على حذف.

واجهة سطر الأوامر gcloud

  1. حذف الاشتراك:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

لحذف الموضوع:

وحدة التحكّم

  1. في Google Cloud Console، انتقِل إلى القائمة > نشر/اشتراك > المواضيع

    الانتقال إلى "المواضيع"

  2. اختَر الموضوع وانقر على مزيد من الإجراءات.

  3. انقر على حذف. ستظهر نافذة حذف الموضوع.

  4. أدخِل delete، ثم انقر على حذف.

واجهة سطر الأوامر gcloud

  1. حذف الموضوع:

    gcloud pubsub topics delete TOPIC_NAME
    

لحذف المشروع:

وحدة التحكّم

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى صفحة إدارة الموارد. انقر على القائمة > إدارة الهوية وإمكانية الوصول والمشرف > إدارة الموارد.

    الانتقال إلى Resource Manager

  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف .
  3. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف التشغيل لحذف المشروع.

واجهة سطر الأوامر gcloud

  1. لحذف مشروع، استخدِم الأمر gcloud projects delete:

    gcloud projects delete PROJECT_ID