במדריך הזה מוסבר איך להשתמש ב-Google Meet REST API יחד עם Google Workspace Events API ו-Google Cloud Pub/Sub כדי לצפות באירועים במרחב פגישות ב-Meet ולהגיב להם. האפליקציה לדוגמה מתעדת מתי מתחילות ומסתיימות שיחות ועידה, מתי משתתפים מצטרפים או עוזבים ומתי פריטי מידע שנוצרו בפגישה זמינים.
במקום להירשם לחלל פגישה ספציפי, אפשר להירשם למשתמש ב-Meet כדי לקבל אירועים מכל חלל פגישה שהמשתמש הוא הבעלים שלו או שהוא מארגן בו פגישה. פרטים נוספים מופיעים במאמר בנושא הרשמה לאירועים ב-Google Meet במסמכי העזרה של Google Workspace Events API.
דרישות מוקדמות
אם אתם צריכים להפעיל בארגון שלכם את אחת מהדרישות המוקדמות האלה, אתם צריכים לבקש מהאדמין שלכם ב-Google Workspace להפעיל אותן:
- חשבון Google Workspace עם גישה ל-Google Meet.
- גישה ליצירת פרויקט ב-Google Cloud.
- Python 3 מותקן.
- ה-CLI של gcloud מותקן.
הכנת הסביבה
בקטע הזה מוסבר איך ליצור ולהגדיר את הסביבה המקומית ואת הפרויקט ב-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
- במסוף Google Cloud, עוברים אל תפריט > IAM & Admin > Create a Project (יצירת פרויקט).
-
בשדה Project Name (שם הפרויקט), מזינים שם תיאורי לפרויקט.
אופציונלי: כדי לערוך את מזהה הפרויקט, לוחצים על עריכה. אי אפשר לשנות את מזהה הפרויקט אחרי שהוא נוצר, לכן חשוב לבחור מזהה שיענה על הצרכים שלכם למשך חיי הפרויקט.
- בשדה Location, לוחצים על Browse כדי להציג מיקומים אפשריים לפרויקט. אחר כך לוחצים על בחירה.
- לוחצים על יצירה. מערכת Google Cloud מעבירה אתכם לדף Dashboard והפרויקט נוצר תוך כמה דקות.
CLI של gcloud
באחת מסביבות הפיתוח הבאות, ניגשים אל Google Cloud CLI (gcloud
):
-
Cloud Shell: כדי להשתמש בטרמינל אונליין שבו כבר מוגדר ה-CLI של gcloud, צריך להפעיל את Cloud Shell.
הפעלת Cloud Shell -
מעטפת מקומית: כדי להשתמש בסביבת פיתוח מקומית צריך להתקין ולהפעיל את ה-CLI של gcloud.
כדי ליצור פרויקט ב-Cloud, משתמשים בפקודהgcloud projects create
: מחליפים את PROJECT_ID במזהה של הפרויקט שרוצים ליצור.gcloud projects create PROJECT_ID
הפעלת החיוב בפרויקט ב-Google Cloud
מסוף Google Cloud
- במסוף Google Cloud, עוברים אל Billing. לוחצים על תפריט > חיוב > הפרויקטים שלי.
- בקטע Select an organization (בחירת ארגון), בוחרים את הארגון שמשויך לפרויקט Google Cloud.
- בשורת הפרויקט, פותחים את התפריט Actions ( ), לוחצים על Change billing ובוחרים את החשבון לחיוב ב-Cloud.
- לוחצים על Set account.
CLI של gcloud
- כדי להציג רשימה של החשבונות לחיוב שזמינים לכם, מריצים את הפקודה:
gcloud billing accounts list
- קישור חשבון לחיוב לפרויקט ב-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 ובחירת היקפי הרשאות
השלבים הבאים מציעים מידע של placeholder להגדרת מסך ההסכמה של OAuth עבור האפליקציה. לפני שמפרסמים את האפליקציה באופן חיצוני, צריך לעדכן את המידע הזה.
- במסוף Google Cloud, עוברים אל תפריט > Google Auth platform > Branding.
- אם כבר הגדרתם את Google Auth platform, אתם יכולים לקבוע את ההגדרות הבאות של מסך ההסכמה ל-OAuth בקטעים Branding, Audience וData Access. אם מופיעה ההודעה Google Auth platform not configured yet, לוחצים על Get Started:
- בקטע App Information בשדה App name, מזינים
Meet REST API Tutorial
. - בקטע User support email, בוחרים כתובת אימייל לתמיכה שאליה משתמשים יפנו אם יש להם שאלות לגבי ההסכמה שלהם.
- לוחצים על Next.
- בקטע Audience, לוחצים על Internal.
- לוחצים על הבא.
- בקטע Contact Information, מזינים כתובת אימייל שאליה אפשר לשלוח התראות על שינויים בפרויקט.
- לוחצים על Next.
- בקטע Finish, קוראים את המדיניות של Google בנושא נתוני משתמשים בשירותי API. אם אתם מסכימים, מסמנים את התיבה I agree to the Google API Services: User Data Policy.
- לוחצים על Continue.
- לוחצים על יצירה.
- אם בחרתם באפשרות חיצוני לסוג המשתמש, מוסיפים משתמשי בדיקה:
- לוחצים על קהל.
- בקטע משתמשי בדיקה, לוחצים על הוספת משתמשים.
- מזינים את כתובת האימייל שלכם ושל משתמשים מורשים אחרים לבדיקה, ואז לוחצים על שמירה.
- לוחצים על גישה לנתונים > הוספה או הסרה של היקפי הרשאה. מופיעה חלונית עם רשימה של היקפי גישה לכל API שהפעלתם בפרויקט שלכם ב-Google Cloud.
- בקטע הוספת היקפים באופן ידני, מדביקים את ההיקפים הבאים:
https://www.googleapis.com/auth/meetings.space.created
- לוחצים על הוספה לטבלה.
- לוחצים על עדכון.
- אחרי שבוחרים את ההיקפים הנדרשים לאפליקציה, לוחצים על שמירה.
מידע נוסף על הגדרת הסכמה ל-OAuth זמין במאמר תחילת העבודה עם Google Auth platform.
יצירת מזהה לקוח
מזהה הלקוח משמש כפרטי כניסה לאפליקציה במהלך תהליכי OAuth 2.0. מכיוון שהאפליקציה פועלת באופן מקומי, צריך ליצור מזהה לקוח למחשב.
- במסוף Google Cloud, עוברים אל תפריט > Google Auth platform > Clients.
- לוחצים על Create Client.
- לוחצים על Application type > Desktop app.
- בשדה Name, מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
- לוחצים על Create.
פרטי הכניסה החדשים שנוצרו מופיעים בקטע OAuth 2.0 Client IDs.
התקנה של ספריות האימות של Google
מתקינים את ספריות האימות של Google:
pip install google-auth google-auth-oauthlib
ביצוע הרשאה
כדי להשתמש ב-Meet REST API, צריך פרטי כניסה של משתמש בצורה של אסימון גישה מסוג OAuth 2.0. בקטע הזה מטמיעים את תהליך ההרשאה באמצעות OAuth 2.0 כדי לבקש אסימון גישה ואסימון רענון עבור המשתמש.
בספריית העבודה, יוצרים את הקובץ
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()
כדי להריץ את הקוד, צריך את מזהה הלקוח ואת הסוד שנוצרו קודם. מעתיקים את קובץ הסוד של הלקוח שהורד לספריית העבודה של הפרויקט ומשנים את השם שלו ל-
client_secret.json
.כדי לבדוק איך עובד האישור, מריצים את הפקודה הבאה. אחרי שהבקשה מאושרת, האפליקציה מבקשת הרשאה ויוצרת קובץ
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
במסוף Google Cloud, מפעילים את Google Meet REST API, את Google Workspace Events API ואת Google Cloud Pub/Sub.
מוודאים שמפעילים את ממשקי ה-API בפרויקט הנכון ב-Cloud ולוחצים על הבא.
מוודאים שמפעילים את ממשקי ה-API הנכונים ולוחצים על הפעלה.
CLI של gcloud
אם צריך, מגדירים את פרויקט Cloud הנוכחי לפרויקט שיצרתם באמצעות הפקודה
gcloud config set project
:gcloud config set project PROJECT_ID
מחליפים את PROJECT_ID במזהה הפרויקט של פרויקט Cloud שיצרתם.
מפעילים את 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:
מריצים את הפקודה:
pip install google-apps-meet
עורכים את הקובץ
main.py
כדי לייבא את הלקוח:from google.apps import meet_v2 as meet
יצירת מרחב
עכשיו, כש-API ל-REST של Meet זמין, מגדירים פונקציה ליצירת מרחב לפגישה שאפשר להירשם אליו.
עריכה של 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
- במסוף Google Cloud, עוברים לתפריט > Pub/Sub.
מוודאים שהפרויקט ב-Cloud של האפליקציה נבחר.
- לוחצים על
- מזינים את
workspace-events
כשם הנושא. - משאירים את האפשרות הוספת מינוי ברירת מחדל מסומנת.
- לוחצים על יצירה. הפורמט של שם הנושא המלא הוא
projects/{project}/topics/{topic}
. חשוב לזכור את השם הזה כי תצטרכו להשתמש בו בשלבים הבאים.
Create topic ומבצעים את הפעולות הבאות:
- מזינים את
- נותנים גישה לפרסום הודעות ב-Pub/Sub בנושא:
- בחלונית הצדדית, פותחים את הכרטיסייה הרשאות.
- לוחצים על Add Principal (הוספת גורם ראשי).
- בשדה New principals, מזינים
meet-api-event-push@system.gserviceaccount.com
. - בקטע הקצאת תפקידים, בוחרים באפשרות
Pub/Sub Publisher
. - לוחצים על שמירה.
יכול להיות שיחלפו כמה דקות עד שההרשאות בנושא יתעדכנו.
CLI של gcloud
- בפרויקט Cloud, יוצרים נושא על ידי הפעלת הפקודה הבאה:
gcloud pubsub topics create workspace-events
בפלט מוצג השם המלא של הנושא, בתבנית
projects/{project}/topics/{topic}
. חשוב לזכור את השם הזה כי תצטרכו להשתמש בו בשלבים הבאים. - נותנים גישה לפרסום הודעות בנושא:
gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'
יכול להיות שיחלפו כמה דקות עד שההרשאות בנושא יתעדכנו.
- יוצרים מינוי Pub/Sub לנושא:
gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
TOPIC_NAME
: השם של הנושא שיצרתם בשלב הקודם.
-
רשמו את שם הנושא וודאו שהערך של {project}
הוא מזהה פרויקט Cloud של האפליקציה. תשתמשו בשם הנושא כדי ליצור את המינוי ל-Google Workspace בהמשך.
יצירה של חשבון שירות
מסוף Google Cloud
- במסוף Google Cloud, לוחצים על סמל התפריט > IAM & Admin > Service Accounts (חשבונות שירות).
- לוחצים על יצירת חשבון שירות.
- ממלאים את פרטי חשבון השירות ולוחצים על יצירה והמשך.
- בקטע Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקידים הבאים:
roles/pubsub.subscriber
- לוחצים על המשך.
- אופציונלי: מזינים משתמשים או קבוצות שיכולים לנהל את חשבון השירות הזה ולבצע בו פעולות. פרטים נוספים זמינים במאמר ניהול התחזות לחשבון שירות.
- לוחצים על סיום. רושמים את כתובת האימייל של חשבון השירות.
CLI של gcloud
- יוצרים את חשבון השירות:
gcloud iam service-accounts create meet-event-listener \ --display-name="meet-event-listener"
- מקצים לחשבון השירות את התפקידים הנדרשים:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:meet-event-listener@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/pubsub.subscriber"
מחליפים את
PROJECT_ID
במזהה הפרויקט ב-Google Cloud.
שימוש בחשבון השירות
אחרי שיוצרים את חשבון השירות, מעניקים לעצמכם גישה להתחזות לחשבון השירות.
מסוף Google Cloud
- בעמודה Actions (פעולות) של חשבון השירות החדש שנוצר, לוחצים על הסמל > Manage permissions (ניהול הרשאות).
- לוחצים על הוספת מפתח > הענקת גישה.
- מזינים את כתובת האימייל שלכם בקטע Add principals (הוספת חשבונות משתמש).
- בוחרים בתפקיד Service Account Token Creator (יצירת אסימונים בחשבון שירות) > Service accounts (חשבונות שירות).
- לוחצים על שמירה.
- חוזרים למסוף ונכנסים באמצעות
gcloud
כדי להגדיר את פרטי ברירת המחדל של האפליקציה לחשבון השירות. כשמוצגת בקשה לאישור, נכנסים לאותו חשבון שבו השתמשתם בשלבים הקודמים.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
CLI של gcloud
- כדי להוסיף את ההרשאה, מריצים את הפקודה
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"
- נכנסים לחשבון כדי להגדיר את פרטי הכניסה שמוגדרים כברירת מחדל באפליקציה לחשבון השירות. כשמוצגת בקשה לאישור, נכנסים לאותו חשבון שבו השתמשתם בשלבים הקודמים.
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
התקנה של ספריית הלקוח של Pub/Sub
משתמשים ב-
pip
כדי להתקין את ספריית הלקוח של Pub/Sub:pip install google-cloud-pubsub
לאחר מכן, עורכים את
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 כדי לשלוף אירועים כשהם זמינים. השיטות השונות של ה-handler מדפיסות מידע על האירועים התואמים.
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
עם שמות הנושא והמינוי שיצרתם קודם.
מוסיפים את הקוד אל
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
: מזהה הפרויקט הייחודי ב-Cloud של האפליקציה, לדוגמהmy-sample-project-191923
.
TOPIC_ID
: השם של נושא ה-Pub/Sub שיצרתם בפרויקט שלכם ב-Cloud.
SUBSCRIPTION_ID
: השם של המינוי, למשלworkspace-events-sub
.
מריצים את התוכנית:
python3 main.py
אם לא הפעלתם את התוכנית בעבר, תתבקשו לאשר אותה בפעם הראשונה. נותנים לאפליקציה גישה לקריאה ל-API ל-REST של Meet. אחרי שהתוכנית תפעל בהצלחה, הפלט אמור להיראות כך:
Join the meeting at https://meet.google.com/abc-mnop-xyz
הצטרפות לשיחת הוועידה
כדי ליצור אירועים לאפליקציה, מצטרפים לוועידה באמצעות כתובת ה-URL שמוצגת באפליקציה. אחרי ההצטרפות, אפשר לנסות את הפעולות הבאות כדי להפעיל אירועים:
- לעזוב את הפגישה ולהצטרף אליה מחדש.
- להזמין אנשים אחרים או להתקשר באמצעות הטלפון.
- הפעלת הקלטות ותמלילים.
כל אחת מהפעילויות האלה יוצרת אירוע שהאפליקציה מקבלת ומתעדת במסוף Google Cloud.
בסיום, משתמשים ב-ctrl-c
כדי להפסיק את התוכנית.
אופציונלי: שלבים נוספים שאפשר לנסות
האפליקציה מתעדת פרטים בסיסיים על האירועים. כדי להמשיך לחקור את Meet REST API, נסו לשנות את האפליקציה כדי לבצע את הפעולות הנוספות האלה.
אפשר להשתמש ב-People 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" אל שיטת ההרשאה בדוגמאות של פרטי הכניסה שמופיעות למעלה.
משתמשים ב-Google Drive API כדי להוריד הקלטות ותמלילים.
במקום להוריד תמלילים מ-Google Drive, אפשר לאחזר אותם באמצעות השיטות של התמליל המובנה ב-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 אל שיטת ההרשאה בדוגמאות של פרטי הכניסה שמופיעות למעלה.
אופציונלי: ניקוי
כדי להימנע מחיובים בחשבון במסוף Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, מומלץ למחוק את כל המשאבים והפרויקטים שיצרתם.
כדי למחוק את המינוי:
המסוף
במסוף Google Cloud, לוחצים על סמל התפריט > Pub/Sub > Subscriptions.
בוחרים את המינוי ולוחצים על
פעולות נוספות.לוחצים על מחיקה. יופיע החלון Delete subscription (מחיקת מינוי).
לוחצים על מחיקה.
CLI של gcloud
מחיקת המינוי:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
כדי למחוק את הנושא:
המסוף
במסוף Google Cloud, עוברים אל תפריט > Pub/Sub > נושאים.
בוחרים את הנושא ולוחצים על
פעולות נוספות.לוחצים על מחיקה. מופיע החלון מחיקת נושא.
מזינים
delete
ולוחצים על מחיקה.
CLI של gcloud
מחיקת הנושא:
gcloud pubsub topics delete TOPIC_NAME
כדי למחוק את הפרויקט:
המסוף
- במסוף Google Cloud, עוברים לדף Manage resources. לוחצים על תפריט > IAM & Admin > Manage Resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete .
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
CLI של gcloud
כדי למחוק פרויקט, משתמשים בפקודה gcloud projects delete:
gcloud projects delete PROJECT_ID
נושאים קשורים
- מידע על סוגי האירועים ב-Meet שאפשר להירשם אליהם
- מידע נוסף על האפשרויות של Google Meet REST API ומאמרי עזרה
- יוצרים מינוי ל-Google Workspace כדי להשתמש במרחבים לפגישות או במשתמשים ב-Google Meet באמצעות Google Workspace Events API.
- מידע נוסף על אימות זמין במאמר הגדרת מסך הסכמה ל-OAuth ובחירת היקפי גישה.