В этом руководстве показано, как использовать REST API Google Meet вместе с API событий Google Workspace и Google Cloud Pub/Sub для наблюдения за событиями в конференц-пространстве Meet и реагирования на них. Пример приложения регистрирует начало и завершение конференций, присоединение и выход участников, а также доступность любых сгенерированных артефактов встречи.
Вместо подписки на конкретное пространство для встреч вы можете подписаться на пользователя Meet, чтобы получать события для любого пространства, которым он владеет или которое организует. Подробнее см. в разделе «Подписка на события Google Meet» в документации API событий Google Workspace.
Предпосылки
Если вам необходимо включить какие-либо из этих предварительных условий для вашей организации, попросите администратора Google Workspace включить их:
- Учетная запись Google Workspace с доступом к Google Meet .
- Доступ для создания проекта Google Cloud .
- Установлен Python 3 .
- Установлен интерфейс командной строки gcloud .
Подготовьте свою среду
В этом разделе показано, как создать и настроить локальную среду и проект Google Cloud для этого руководства.
Создайте рабочий каталог и виртуальную среду Python
Чтобы создать и активировать новую виртуальную среду , выполните следующие команды в терминале.
Linux/macOS
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envsource env/bin/activate
Windows (командная строка)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.bat
Windows (PowerShell)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.ps1
Создайте проект Google Cloud
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Создать проект .
- В поле «Название проекта» введите описательное название вашего проекта.
Необязательно: чтобы изменить идентификатор проекта , нажмите «Изменить» . Идентификатор проекта нельзя изменить после его создания, поэтому выберите идентификатор, который будет соответствовать вашим потребностям на протяжении всего жизненного цикла проекта.
- В поле «Местоположение» нажмите «Обзор» , чтобы отобразить возможные местоположения для вашего проекта. Затем нажмите «Выбрать» .
- Нажмите «Создать» . Консоль Google Cloud перейдет на страницу панели управления, и ваш проект будет создан в течение нескольких минут.
gcloud CLI
В одной из следующих сред разработки получите доступ к Google Cloud CLI ( gcloud ):
- Cloud Shell : чтобы использовать онлайн-терминал с уже настроенным интерфейсом командной строки gcloud, активируйте Cloud Shell.
Активировать Cloud Shell - Локальная оболочка : чтобы использовать локальную среду разработки, установите и инициализируйте gcloud CLI.
Чтобы создать облачный проект, используйте командуgcloud projects create: Замените PROJECT_ID , указав идентификатор проекта, который вы хотите создать.gcloud projects create PROJECT_ID
Включить выставление счетов для проекта Google Cloud
Консоль Google Cloud
- В консоли Google Cloud перейдите в раздел «Оплата» . Нажмите « » > «Оплата» > «Мои проекты» .
- В разделе Выберите организацию выберите организацию, связанную с вашим проектом Google Cloud.
- В строке проекта откройте меню Действия ( ), нажмите Изменить выставление счетов и выберите учетную запись Cloud Billing.
- Нажмите «Настроить учетную запись» .
gcloud CLI
- Чтобы вывести список доступных платежных аккаунтов, выполните:
gcloud billing accounts list - Свяжите платежный аккаунт с проектом Google Cloud:
gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_IDЗаменить следующее:
-
PROJECT_ID— это идентификатор облачного проекта, для которого вы хотите включить выставление счетов. -
BILLING_ACCOUNT_ID— идентификатор платежного аккаунта для связи с проектом Google Cloud.
-
Настройте аутентификацию и авторизацию
Аутентификация и авторизация позволяют приложению получать доступ к ресурсам REST API Meet. Для вызова REST API Meet требуется авторизация пользователя. В этом разделе описано, как настроить учётные данные пользователя и запросить авторизацию.
Настройте экран согласия OAuth и выберите области действия
Ниже приведены инструкции по заполнению информации для настройки экрана согласия OAuth для вашего приложения. Перед публикацией приложения на внешнем носителе обновите эту информацию.
- В консоли Google Cloud перейдите в >Google Auth platform > Брендинг .
- Если вы уже настроили Google Auth platform, вы можете настроить следующие параметры экрана согласия OAuth в разделах «Брендинг» , «Аудитория» и «Доступ к данным» . Если вы видите сообщение: Google Auth platform пока не настроено , нажмите «Начать» :
- В разделе «Информация о приложении» в поле «Имя приложения» введите
Meet REST API Tutorial. - В поле Адрес электронной почты службы поддержки пользователей выберите адрес электронной почты службы поддержки, по которому пользователи смогут связаться с вами, если у них возникнут вопросы относительно их согласия.
- Нажмите кнопку «Далее» .
- В разделе Аудитория выберите Внутренняя .
- Нажмите кнопку «Далее» .
- В разделе «Контактная информация» введите адрес электронной почты , на который вы можете получать уведомления о любых изменениях в вашем проекте.
- Нажмите кнопку «Далее» .
- В разделе Готово ознакомьтесь с Политикой обработки данных пользователей API служб Google и, если вы согласны, выберите Я согласен с Политикой обработки данных пользователей API служб Google .
- Нажмите «Продолжить» .
- Нажмите «Создать» .
- Если вы выбрали тип пользователя «Внешний» , добавьте тестовых пользователей:
- Нажмите Аудитория .
- В разделе Тестовые пользователи нажмите Добавить пользователей .
- Введите свой адрес электронной почты и адрес других авторизованных тестовых пользователей, затем нажмите кнопку «Сохранить» .
- Нажмите «Доступ к данным» > «Добавить или удалить области действия» . Появится панель со списком областей действия для каждого API, которые вы включили в своем проекте Google Cloud.
- В разделе «Добавить области вручную» вставьте следующие области:
-
https://www.googleapis.com/auth/meetings.space.created
-
- Нажмите Добавить в таблицу .
- Нажмите Обновить .
- После выбора областей, необходимых вашему приложению, нажмите кнопку Сохранить .
Для получения дополнительной информации о настройке согласия OAuth см. раздел Начало работы с Google Auth platform .
Создать идентификатор клиента
Идентификатор клиента используется в качестве учётных данных для вашего приложения во время аутентификации OAuth 2.0. Поскольку приложение работает локально, создайте идентификатор клиента для десктопа.
- В консоли Google Cloud перейдите в >Google Auth platform > Клиенты .
- Нажмите «Создать клиента» .
- Нажмите Тип приложения > Приложение для ПК .
- В поле «Имя» введите имя учётной записи. Оно отображается только в консоли Google Cloud.
- Нажмите «Создать» .
Новые учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Установите библиотеки аутентификации Google
Установите библиотеки аутентификации Google:
pip install google-auth google-auth-oauthlibВыполнить авторизацию
Для использования REST API Meet требуются учётные данные пользователя в виде токена доступа 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
Добавьте API Meet REST
Теперь, когда код авторизации готов, пришло время включить и вызвать API REST Meet.
Включить API
Хотя этот раздел посвящен API Meet REST, в этом руководстве также используются API Google Cloud Pub/Sub и Google Workspace Events.
Консоль Google Cloud
В консоли Google Cloud включите API Google Meet REST, API Google Workspace Events и Google Cloud Pub/Sub.
Подтвердите, что вы включаете API в правильном облачном проекте, затем нажмите Далее .
Подтвердите, что вы включаете правильные API, затем нажмите Включить .
gcloud CLI
При необходимости установите текущий проект Cloud на тот, который вы создали с помощью команды
gcloud config set project:gcloud config set project PROJECT_IDЗамените PROJECT_ID на идентификатор созданного вами облачного проекта.
Включите API Google Meet REST, API Google Workspace Events и 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)
Подписаться на события
Чтобы получать события, связанные с конференц-залом, необходимо создать подписку с помощью API событий Google Workspace. Также необходимо создать тему Google Cloud Pub/Sub, которая будет служить конечной точкой уведомлений, куда ваше приложение будет получать события, и подписаться на неё.
Настройте Google Cloud Pub/Sub
Чтобы создать тему Pub/Sub и подписаться на нее:
Консоль Google Cloud
- В консоли Google Cloud перейдите в > Публикация/Подписка .
Убедитесь, что для вашего приложения выбран проект Cloud.
- Нажмите Создать тему и выполните следующие действия:
- Введите
workspace-eventsв качестве названия темы. - Оставьте выбранным опцию Добавить подписку по умолчанию .
- Нажмите «Создать» . Полное название темы будет выглядеть так:
projects/{project}/topics/{topic}. Запишите это название для дальнейшего использования.
- Введите
- Предоставьте доступ для публикации сообщений Pub/Sub в вашей теме:
- На боковой панели откройте вкладку Разрешения .
- Нажмите Добавить принципала .
- В поле Новые участники введите
meet-api-event-push@system.gserviceaccount.com. - В разделе Назначить роли выберите
Pub/Sub Publisher. - Нажмите « Сохранить ».
Обновление разрешений для вашей темы может занять несколько минут.
gcloud CLI
- В своем облачном проекте создайте тему, выполнив следующее:
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} соответствует идентификатору облачного проекта вашего приложения. Название темы понадобится вам позже для создания подписки Google Workspace.
Создать учетную запись службы
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
- Нажмите Создать учетную запись службы .
- Заполните данные учетной записи службы, затем нажмите «Создать» и продолжите .
- В разделе Предоставить этой учетной записи службы доступ к проекту добавьте следующие роли:
-
roles/pubsub.subscriber
-
- Нажмите «Продолжить» .
- Необязательно: введите пользователей или группы, которые смогут управлять этой учётной записью службы и выполнять с ней действия. Подробнее см. в разделе Управление олицетворением учётной записи службы .
- Нажмите «Готово» . Запишите адрес электронной почты для учётной записи сервиса.
gcloud CLI
- Создайте учетную запись службы:
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
- В столбце Действия для вновь созданной учетной записи службы нажмите > Управление разрешениями .
- Нажмите Добавить ключ > Предоставить доступ .
- Введите свой адрес электронной почты в поле Добавить участников .
- В качестве роли выберите Учетные записи служб > Создатель токенов учетной записи службы .
- Нажмите « Сохранить ».
- Вернитесь к терминалу и войдите в систему, используя
gcloud, чтобы установить учётную запись сервиса в качестве учётных данных приложения по умолчанию. При появлении запроса на авторизацию войдите в систему, используя ту же учётную запись, которая использовалась на предыдущих шагах.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
gcloud CLI
- Чтобы добавить разрешение, запустите
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 и добавьте следующий пример кода. Этот код реализует принимающую сторону и использует API Google Cloud Pub/Sub для извлечения событий по мере их появления. Различные методы-обработчики выводят информацию о соответствующих событиях.
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: уникальный идентификатор облачного проекта для вашего приложения, напримерmy-sample-project-191923.TOPIC_ID: Имя темы Pub/Sub, созданной вами в вашем облачном проекте.SUBSCRIPTION_ID: Название вашей подписки, например,workspace-events-sub.
Запустите программу:
python3 main.py
Если вы ранее не запускали программу, при первом запуске она запросит авторизацию. Предоставьте приложению доступ для вызова REST API Meet. После успешного запуска программы вы увидите примерно такой вывод:
Join the meeting at https://meet.google.com/abc-mnop-xyz
Присоединяйтесь к конференции
Чтобы создать события для приложения, присоединитесь к конференции, используя URL-адрес, отображаемый приложением. После присоединения вы можете попробовать следующие действия для запуска событий:
- Выйдите из встречи и снова присоединитесь к ней.
- Пригласите других или подключитесь с помощью телефона.
- Включить записи и расшифровки.
Каждое из этих действий генерирует событие, которое приложение получает и регистрирует в консоли Google Cloud.
После завершения работы программы используйте сочетание ctrl-c , чтобы прервать ее.
Необязательно: попробуйте выполнить дополнительные шаги
Приложение регистрирует основную информацию о событиях. Чтобы продолжить изучение API Meet REST, попробуйте изменить приложение для выполнения этих дополнительных действий.
Используйте API People для получения дополнительной информации о вошедших в систему участниках.
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» в метод авторизации в примерах учетных данных выше.
Используйте API Google Drive для загрузки записей и расшифровок.
Вместо загрузки расшифровок с Google Диска извлекайте их с помощью методов структурированной расшифровки в API REST Meet.
получить пространство вместо того, чтобы создавать его
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 перейдите в > Публикация/Подписка > Подписки.
Выберите подписку и нажмите Дополнительные действия .
Нажмите «Удалить» . Появится окно «Удалить подписку» .
Нажмите «Удалить» .
gcloud CLI
Удалить подписку:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
Чтобы удалить тему:
Консоль
В консоли Google Cloud перейдите в > Pub/Sub > Темы.
Выберите тему и нажмите Дополнительные действия .
Нажмите «Удалить» . Появится окно «Удалить тему» .
Введите
deleteи нажмите «Удалить» .
gcloud CLI
Удалить тему:
gcloud pubsub topics delete TOPIC_NAME
Чтобы удалить проект:
Консоль
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» . Выберите « » > «IAM и администрирование» > «Управление ресурсами» .
- В списке проектов выберите проект, вы хотите удалить, а затем нажмите Удалить .
- В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить» , чтобы удалить проект.
gcloud CLI
Чтобы удалить проект, используйте команду gcloud projects delete :
gcloud projects delete PROJECT_ID
Похожие темы
- Узнайте о типах мероприятий Meet, на которые вы можете подписаться .
- Узнайте больше о возможностях API REST Google Meet и ознакомьтесь со справочной документацией .
- Создайте подписку Google Workspace для встреч с помещениями или пользователями Meet с помощью API Google Workspace Events.
- Дополнительную информацию об аутентификации см. в разделе Настройка экрана согласия OAuth и выбор областей действия .
В этом руководстве показано, как использовать REST API Google Meet вместе с API событий Google Workspace и Google Cloud Pub/Sub для наблюдения за событиями в конференц-пространстве Meet и реагирования на них. Пример приложения регистрирует начало и завершение конференций, присоединение и выход участников, а также доступность любых сгенерированных артефактов встречи.
Вместо подписки на конкретное пространство для встреч вы можете подписаться на пользователя Meet, чтобы получать события для любого пространства, которым он владеет или которое организует. Подробнее см. в разделе «Подписка на события Google Meet» в документации API событий Google Workspace.
Предпосылки
Если вам необходимо включить какие-либо из этих предварительных условий для вашей организации, попросите администратора Google Workspace включить их:
- Учетная запись Google Workspace с доступом к Google Meet .
- Доступ для создания проекта Google Cloud .
- Установлен Python 3 .
- Установлен интерфейс командной строки gcloud .
Подготовьте свою среду
В этом разделе показано, как создать и настроить локальную среду и проект Google Cloud для этого руководства.
Создайте рабочий каталог и виртуальную среду Python
Чтобы создать и активировать новую виртуальную среду , выполните следующие команды в терминале.
Linux/macOS
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envsource env/bin/activate
Windows (командная строка)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.bat
Windows (PowerShell)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.ps1
Создайте проект Google Cloud
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Создать проект .
- В поле «Название проекта» введите описательное название вашего проекта.
Необязательно: чтобы изменить идентификатор проекта , нажмите «Изменить» . Идентификатор проекта нельзя изменить после его создания, поэтому выберите идентификатор, который будет соответствовать вашим потребностям на протяжении всего жизненного цикла проекта.
- В поле «Местоположение» нажмите «Обзор» , чтобы отобразить возможные местоположения для вашего проекта. Затем нажмите «Выбрать» .
- Нажмите «Создать» . Консоль Google Cloud перейдет на страницу панели управления, и ваш проект будет создан в течение нескольких минут.
gcloud CLI
В одной из следующих сред разработки получите доступ к Google Cloud CLI ( gcloud ):
- Cloud Shell : чтобы использовать онлайн-терминал с уже настроенным интерфейсом командной строки gcloud, активируйте Cloud Shell.
Активировать Cloud Shell - Локальная оболочка : чтобы использовать локальную среду разработки, установите и инициализируйте gcloud CLI.
Чтобы создать облачный проект, используйте командуgcloud projects create: Замените PROJECT_ID , указав идентификатор проекта, который вы хотите создать.gcloud projects create PROJECT_ID
Включить выставление счетов для проекта Google Cloud
Консоль Google Cloud
- В консоли Google Cloud перейдите в раздел «Оплата» . Нажмите « » > «Оплата» > «Мои проекты» .
- В разделе Выберите организацию выберите организацию, связанную с вашим проектом Google Cloud.
- В строке проекта откройте меню Действия ( ), нажмите Изменить выставление счетов и выберите учетную запись Cloud Billing.
- Нажмите «Настроить учетную запись» .
gcloud CLI
- Чтобы вывести список доступных платежных аккаунтов, выполните:
gcloud billing accounts list - Свяжите платежный аккаунт с проектом Google Cloud:
gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_IDЗаменить следующее:
-
PROJECT_ID— это идентификатор облачного проекта, для которого вы хотите включить выставление счетов. -
BILLING_ACCOUNT_ID— идентификатор платежного аккаунта для связи с проектом Google Cloud.
-
Настройте аутентификацию и авторизацию
Аутентификация и авторизация позволяют приложению получать доступ к ресурсам REST API Meet. Для вызова REST API Meet требуется авторизация пользователя. В этом разделе описано, как настроить учётные данные пользователя и запросить авторизацию.
Настройте экран согласия OAuth и выберите области действия
Ниже приведены инструкции по заполнению информации для настройки экрана согласия OAuth для вашего приложения. Перед публикацией приложения на внешнем носителе обновите эту информацию.
- В консоли Google Cloud перейдите в >Google Auth platform > Брендинг .
- Если вы уже настроили Google Auth platform, вы можете настроить следующие параметры экрана согласия OAuth в разделах «Брендинг» , «Аудитория» и «Доступ к данным» . Если вы видите сообщение: Google Auth platform пока не настроено , нажмите «Начать» :
- В разделе «Информация о приложении» в поле «Имя приложения» введите
Meet REST API Tutorial. - В поле Адрес электронной почты службы поддержки пользователей выберите адрес электронной почты службы поддержки, по которому пользователи смогут связаться с вами, если у них возникнут вопросы относительно их согласия.
- Нажмите кнопку «Далее» .
- В разделе Аудитория выберите Внутренняя .
- Нажмите кнопку «Далее» .
- В разделе «Контактная информация» введите адрес электронной почты , на который вы можете получать уведомления о любых изменениях в вашем проекте.
- Нажмите кнопку «Далее» .
- В разделе Готово ознакомьтесь с Политикой обработки данных пользователей API служб Google и, если вы согласны, выберите Я согласен с Политикой обработки данных пользователей API служб Google .
- Нажмите «Продолжить» .
- Нажмите «Создать» .
- Если вы выбрали тип пользователя «Внешний» , добавьте тестовых пользователей:
- Нажмите Аудитория .
- В разделе Тестовые пользователи нажмите Добавить пользователей .
- Введите свой адрес электронной почты и адрес других авторизованных тестовых пользователей, затем нажмите кнопку «Сохранить» .
- Нажмите «Доступ к данным» > «Добавить или удалить области действия» . Появится панель со списком областей действия для каждого API, которые вы включили в своем проекте Google Cloud.
- В разделе «Добавить области вручную» вставьте следующие области:
-
https://www.googleapis.com/auth/meetings.space.created
-
- Нажмите Добавить в таблицу .
- Нажмите Обновить .
- После выбора областей, необходимых вашему приложению, нажмите кнопку Сохранить .
Для получения дополнительной информации о настройке согласия OAuth см. раздел Начало работы с Google Auth platform .
Создать идентификатор клиента
Идентификатор клиента используется в качестве учётных данных для вашего приложения во время аутентификации OAuth 2.0. Поскольку приложение работает локально, создайте идентификатор клиента для десктопа.
- В консоли Google Cloud перейдите в >Google Auth platform > Клиенты .
- Нажмите «Создать клиента» .
- Нажмите Тип приложения > Приложение для ПК .
- В поле «Имя» введите имя учётной записи. Оно отображается только в консоли Google Cloud.
- Нажмите «Создать» .
Новые учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Установите библиотеки аутентификации Google
Установите библиотеки аутентификации Google:
pip install google-auth google-auth-oauthlibВыполнить авторизацию
Для использования REST API Meet требуются учётные данные пользователя в виде токена доступа 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
Добавьте API Meet REST
Теперь, когда код авторизации готов, пришло время включить и вызвать API REST Meet.
Включить API
Хотя этот раздел посвящен API Meet REST, в этом руководстве также используются API Google Cloud Pub/Sub и Google Workspace Events.
Консоль Google Cloud
В консоли Google Cloud включите API Google Meet REST, API Google Workspace Events и Google Cloud Pub/Sub.
Подтвердите, что вы включаете API в правильном облачном проекте, затем нажмите Далее .
Подтвердите, что вы включаете правильные API, затем нажмите Включить .
gcloud CLI
При необходимости установите текущий проект Cloud на тот, который вы создали с помощью команды
gcloud config set project:gcloud config set project PROJECT_IDЗамените PROJECT_ID на идентификатор созданного вами облачного проекта.
Включите API Google Meet REST, API Google Workspace Events и 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)
Подписаться на события
Чтобы получать события, связанные с конференц-залом, необходимо создать подписку с помощью API событий Google Workspace. Также необходимо создать тему Google Cloud Pub/Sub, которая будет служить конечной точкой уведомлений, куда ваше приложение будет получать события, и подписаться на неё.
Настройте Google Cloud Pub/Sub
Чтобы создать тему Pub/Sub и подписаться на нее:
Консоль Google Cloud
- В консоли Google Cloud перейдите в > Публикация/Подписка .
Убедитесь, что для вашего приложения выбран проект Cloud.
- Нажмите Создать тему и выполните следующие действия:
- Введите
workspace-eventsв качестве названия темы. - Оставьте выбранным опцию Добавить подписку по умолчанию .
- Нажмите «Создать» . Полное название темы будет выглядеть так:
projects/{project}/topics/{topic}. Запишите это название для дальнейшего использования.
- Введите
- Предоставьте доступ для публикации сообщений Pub/Sub в вашей теме:
- На боковой панели откройте вкладку Разрешения .
- Нажмите Добавить принципала .
- В поле Новые участники введите
meet-api-event-push@system.gserviceaccount.com. - В разделе Назначить роли выберите
Pub/Sub Publisher. - Нажмите « Сохранить ».
Обновление разрешений для вашей темы может занять несколько минут.
gcloud CLI
- В своем облачном проекте создайте тему, выполнив следующее:
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} соответствует идентификатору облачного проекта вашего приложения. Название темы понадобится вам позже для создания подписки Google Workspace.
Создать учетную запись службы
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
- Нажмите Создать учетную запись службы .
- Заполните данные учетной записи службы, затем нажмите «Создать» и продолжите .
- В разделе Предоставить этой учетной записи службы доступ к проекту добавьте следующие роли:
-
roles/pubsub.subscriber
-
- Нажмите «Продолжить» .
- Необязательно: введите пользователей или группы, которые смогут управлять этой учётной записью службы и выполнять с ней действия. Подробнее см. в разделе Управление олицетворением учётной записи службы .
- Нажмите «Готово» . Запишите адрес электронной почты для учётной записи сервиса.
gcloud CLI
- Создайте учетную запись службы:
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
- В столбце Действия для вновь созданной учетной записи службы нажмите > Управление разрешениями .
- Нажмите Добавить ключ > Предоставить доступ .
- Введите свой адрес электронной почты в поле Добавить участников .
- В качестве роли выберите Учетные записи служб > Создатель токенов учетной записи службы .
- Нажмите « Сохранить ».
- Вернитесь к терминалу и войдите в систему, используя
gcloud, чтобы установить учётную запись сервиса в качестве учётных данных приложения по умолчанию. При появлении запроса на авторизацию войдите в систему, используя ту же учётную запись, которая использовалась на предыдущих шагах.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
gcloud CLI
- Чтобы добавить разрешение, запустите
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 и добавьте следующий пример кода. Этот код реализует принимающую сторону и использует API Google Cloud Pub/Sub для извлечения событий по мере их появления. Различные методы-обработчики выводят информацию о соответствующих событиях.
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: уникальный идентификатор облачного проекта для вашего приложения, напримерmy-sample-project-191923.TOPIC_ID: Имя темы Pub/Sub, созданной вами в вашем облачном проекте.SUBSCRIPTION_ID: Название вашей подписки, например,workspace-events-sub.
Запустите программу:
python3 main.py
Если вы ранее не запускали программу, при первом запуске она запросит авторизацию. Предоставьте приложению доступ для вызова REST API Meet. После успешного запуска программы вы увидите примерно такой вывод:
Join the meeting at https://meet.google.com/abc-mnop-xyz
Присоединяйтесь к конференции
Чтобы создать события для приложения, присоединитесь к конференции, используя URL-адрес, отображаемый приложением. После присоединения вы можете попробовать следующие действия для запуска событий:
- Выйдите из встречи и снова присоединитесь к ней.
- Пригласите других или подключитесь с помощью телефона.
- Включить записи и расшифровки.
Каждое из этих действий генерирует событие, которое приложение получает и регистрирует в консоли Google Cloud.
После завершения работы программы используйте сочетание ctrl-c , чтобы прервать ее.
Необязательно: попробуйте выполнить дополнительные шаги
Приложение регистрирует основную информацию о событиях. Чтобы продолжить изучение API Meet REST, попробуйте изменить приложение для выполнения этих дополнительных действий.
Используйте API People для получения дополнительной информации о вошедших в систему участниках.
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» в метод авторизации в примерах учетных данных выше.
Используйте API Google Drive для загрузки записей и расшифровок.
Вместо загрузки расшифровок с Google Диска извлекайте их с помощью методов структурированной расшифровки в API REST Meet.
получить пространство вместо того, чтобы создавать его
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 перейдите в > Публикация/Подписка > Подписки.
Выберите подписку и нажмите Дополнительные действия .
Нажмите «Удалить» . Появится окно «Удалить подписку» .
Нажмите «Удалить» .
gcloud CLI
Удалить подписку:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
Чтобы удалить тему:
Консоль
В консоли Google Cloud перейдите в > Pub/Sub > Темы.
Выберите тему и нажмите Дополнительные действия .
Нажмите «Удалить» . Появится окно «Удалить тему» .
Введите
deleteи нажмите «Удалить» .
gcloud CLI
Удалить тему:
gcloud pubsub topics delete TOPIC_NAME
Чтобы удалить проект:
Консоль
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» . Выберите « » > «IAM и администрирование» > «Управление ресурсами» .
- В списке проектов выберите проект, вы хотите удалить, а затем нажмите Удалить .
- В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить» , чтобы удалить проект.
gcloud CLI
Чтобы удалить проект, используйте команду gcloud projects delete :
gcloud projects delete PROJECT_ID
Похожие темы
- Узнайте о типах мероприятий Meet, на которые вы можете подписаться .
- Узнайте больше о возможностях API REST Google Meet и ознакомьтесь со справочной документацией .
- Create a Google Workspace subscription to Meet meeting spaces or users using the Google Workspace Events API.
- To learn more about authentication, see Configure the OAuth consent screen and choose scopes .
This tutorial shows how to use the Google Meet REST API along with the Google Workspace Events API and Google Cloud Pub/Sub to observe and react to events in a Meet meeting space. The sample application records when conferences start and end, when participants join or leave, and when any generated meeting artifacts are available.
Instead of subscribing to a specific meeting space, you can instead subscribe to a Meet user to receive events for any meeting space that the user owns or organizes. For details, see Subscribe to Google Meet events in the Google Workspace Events API documentation.
Предпосылки
If you need any of these prerequisites turned on for your organization, ask your Google Workspace administrator to turn them on:
- A Google Workspace account with access to Google Meet .
- Access to create a Google Cloud project .
- Python 3 installed.
- The gcloud CLI installed.
Подготовьте свою среду
This section shows how to create and configure your local environment and the Google Cloud project for this tutorial.
Create a working directory and Python virtual environment
To create and activate a new virtual environment , run the following commands in your terminal.
Linux/macOS
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envsource env/bin/activate
Windows (command prompt)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.bat
Windows (PowerShell)
mkdir meet-tutorialcd meet-tutorialpython3 -mvenv envenv/bin/activate.ps1
Create a Google Cloud project
Консоль Google Cloud
- In the Google Cloud console, go to Menu > IAM & Admin > Create a Project .
- In the Project Name field, enter a descriptive name for your project.
Optional: To edit the Project ID , click Edit . The project ID can't be changed after the project is created, so choose an ID that meets your needs for the lifetime of the project.
- In the Location field, click Browse to display potential locations for your project. Then, click Select .
- Click Create . The Google Cloud console navigates to the Dashboard page and your project is created within a few minutes.
gcloud CLI
In one of the following development environments, access the Google Cloud CLI ( gcloud ):
- Cloud Shell : To use an online terminal with the gcloud CLI already set up, activate Cloud Shell.
Активировать Cloud Shell - Local Shell : To use a local development environment, install and initialize the gcloud CLI.
To create a Cloud project, use thegcloud projects createcommand: Replace PROJECT_ID by setting the ID for the project you want to create.gcloud projects create PROJECT_ID
Enable billing for the Google Cloud project
Консоль Google Cloud
- In the Google Cloud console, go to Billing . Click Menu > Billing > My Projects .
- In Select an organization , choose the organization associated with your Google Cloud project.
- In the project row, open the Actions menu ( ), click Change billing , and choose the Cloud Billing account.
- Click Set account .
gcloud CLI
- To list available billing accounts, run:
gcloud billing accounts list - Link a billing account with a Google Cloud project:
gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_IDЗаменить следующее:
-
PROJECT_IDis the Project ID for the Cloud project for which you want to enable billing. -
BILLING_ACCOUNT_IDis the billing account ID to link with the Google Cloud project.
-
Set up authentication and authorization
Authentication and authorization lets the app access Meet REST API resources. User authorization is required to call the Meet REST API. This section hows you how to configure user credentials and request authorization.
Configure the OAuth consent screen and choose scopes
The following steps suggest placeholder information to configure the OAuth consent screen for your app. Before publishing the app externally, update this information.
- In the Google Cloud console, go to Menu >Google Auth platform > Branding .
- If you have already configured the Google Auth platform, you can configure the following OAuth Consent Screen settings in Branding , Audience , and Data Access . If you see a message that says Google Auth platform not configured yet , click Get Started :
- Under App Information , in App name , enter
Meet REST API Tutorial. - In User support email , choose a support email address where users can contact you if they have questions about their consent.
- Нажмите кнопку «Далее» .
- Under Audience , select Internal .
- Нажмите кнопку «Далее» .
- Under Contact Information , enter an Email address where you can be notified about any changes to your project.
- Нажмите кнопку «Далее» .
- Under Finish , review the Google API Services User Data Policy and if you agree, select I agree to the Google API Services: User Data Policy .
- Нажмите «Продолжить» .
- Click Create .
- If you selected External for user type, add test users:
- Click Audience .
- Under Test users , click Add users .
- Enter your email address and any other authorized test users, then click Save .
- Click Data Access > Add or Remove Scopes . A panel appears with a list of scopes for each API that you've enabled in your Google Cloud project.
- Under Manually add scopes , paste the following scopes:
-
https://www.googleapis.com/auth/meetings.space.created
-
- Click Add to Table .
- Нажмите Обновить .
- After selecting the scopes required by your app, click Save .
For more information about configuring OAuth consent, see Get started with the Google Auth platform .
Create a client ID
The client ID acts as credentials for your application during the OAuth 2.0 flows. Since the app runs locally, create a desktop client ID.
- In the Google Cloud console, go to Menu >Google Auth platform > Clients .
- Click Create Client .
- Click Application type > Desktop app .
- In the Name field, type a name for the credential. This name is only shown in the Google Cloud console.
- Click Create .
The newly created credential appears under "OAuth 2.0 Client IDs."
Install the Google auth libraries
Install the Google auth libraries:
pip install google-auth google-auth-oauthlibExecute authorization
The Meet REST API requires user credentials in the form of an OAuth 2.0 access token. In this section, you implement the OAuth 2.0 flow to request an access token and a refresh token for the user.
In your working directory, create the file
main.pyand add the following contents: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()To run the code, both the client ID and the secret created earlier are required. Copy the downloaded client secret file to the project working directory and rename it as
client_secret.json.If you'd like to test how authorization works, run the following command. The app prompts for authorization and creates a
token.jsonfile in the project working directory after the request is approved.python3 main.py
Add the Meet REST API
Now that the authorization code is complete, it's time to enable and call the Meet REST API.
Enable the APIs
While this section is focused on the Meet REST API, this tutorial also uses Google Cloud Pub/Sub and Google Workspace Events API.
Консоль Google Cloud
In the Google Cloud console, enable the Google Meet REST API, the Google Workspace Events API, and Google Cloud Pub/Sub.
Confirm that you're enabling the APIs in the correct Cloud project, then click Next .
Confirm that you're enabling the correct APIs, then click Enable .
gcloud CLI
If necessary, set the current Cloud project to the one you created with the
gcloud config set projectcommand:gcloud config set project PROJECT_IDReplace PROJECT_ID with the Project ID of the Cloud project you created.
Enable the Google Meet REST API, the Google Workspace Events API, and Google Cloud Pub/Sub with the
gcloud services enablecommand:gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com
Install the Meet REST API client library
Follow these steps to install the Meet REST API client library:
Выполните команду:
pip install google-apps-meetEdit the
main.pyfile to import the client:from google.apps import meet_v2 as meet
Создать пространство
Now that the Meet REST API is available, define a function to create a meeting space that can be subscribed to.
Edit main.py and add:
def create_space() -> meet.Space:
"""Create a meeting space."""
client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
request = meet.CreateSpaceRequest()
return client.create_space(request=request)
Subscribe to events
To receive events about a meeting space, you create a subscription using the Google Workspace Events API. You must also create and subscribe to a Google Cloud Pub/Sub topic which serves as the notification endpoint where your app receives the events.
Configure Google Cloud Pub/Sub
To create and subscribe to a Pub/Sub topic:
Консоль Google Cloud
- In the Google Cloud console, go to Menu > Pub/Sub .
Make sure that the Cloud project for your app is selected.
- Click Create topic and do the following:
- Enter
workspace-eventsas the topic name. - Leave Add a default subscription selected.
- Click Create . Your full topic name is formatted as
projects/{project}/topics/{topic}. Make a note of this name for use in later steps.
- Enter
- Grant access to publish Pub/Sub messages to your topic:
- On the side panel, open the Permissions tab.
- Click Add Principal .
- In New principals , enter
meet-api-event-push@system.gserviceaccount.com. - In Assign roles , select
Pub/Sub Publisher. - Нажмите « Сохранить ».
It can take a few minutes to update the permissions for your topic.
gcloud CLI
- In your Cloud project, create a topic by running the following:
gcloud pubsub topics create workspace-eventsThe output displays the full topic name, formatted as
projects/{project}/topics/{topic}. Make a note of this name for use in later steps. - Grant access to publish messages to your topic:
gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'It can take a few minutes to update the permissions for your topic.
- Create a Pub/Sub subscription for the topic:
gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAMEЗаменить следующее:
-
TOPIC_NAME: The name of your topic that you created in the previous step.
-
Make note of the topic name and make sure the value for {project} is the Cloud project ID for your app. You'll use the topic name to create the Google Workspace subscription later.
Create a service account
Консоль Google Cloud
- In the Google Cloud console, go to Menu > IAM & Admin > Service Accounts .
- Click Create service account .
- Fill in the service account details, then click Create and continue .
- In the Grant this service account access to project section, add the following roles:
-
roles/pubsub.subscriber
-
- Нажмите «Продолжить» .
- Optional: Enter users or groups that can manage and perform actions with this service account. For more details, refer to Managing service account impersonation .
- Click Done . Make a note of the email address for the service account.
gcloud CLI
- Create the service account:
gcloud iam service-accounts create meet-event-listener \ --display-name="meet-event-listener" - Grant the necessary roles to the service account:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:meet-event-listener@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/pubsub.subscriber"Replace
PROJECT_IDwith your Google Cloud project ID.
Use the service account
After creating the service account, grant yourself access to impersonate the service account.
Консоль Google Cloud
- In the Actions column for the newly created service account, click > Manage permissions .
- Click Add key > Grant access .
- Enter your email address under Add principals .
- Select Service accounts > Service Account Token Creator as the role.
- Нажмите « Сохранить ».
- Return to your terminal and sign in with
gcloudto set the application default credentials to the service account. When prompted for authorization, sign in using the same account used in the previous steps.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
gcloud CLI
- To add the permission, run
gcloud iam service-accounts add-iam-policy-bindingusing the email address of the service account and the user.gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --member="user:YOUR_EMAIL" \ --role="roles/iam.serviceAccountTokenCreator" - Sign in to set the application default credentials to the service account. When prompted for authorization, sign in using the same account used in the previous steps.
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
Install the Pub/Sub client library
Use
pipto install the client library for Pub/Sub:pip install google-cloud-pubsubThen edit
main.pyto import the client:from google.cloud import pubsub_v1
Create the Google Workspace subscription
Add the following code to main.py to define a method for subscribing to Meet events. This code subscribes to all events for a meeting space. When subscribed, events are posted to the Pub/Sub topic.
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
Next, add the corresponding code to pull and process the events.
Listen for and handle events
Continue to edit main.py and add the following sample code. This code implements the receiving side and uses the Google Cloud Pub/Sub API to pull events as they're made available. The various handler methods print information about the corresponding events.
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")
Finalize the code
Add the following code to main.py to call the methods to create the space, subscribe to events, and listen. Update the TOPIC_NAME and SUBSCRIPTION_NAME constants with your own topic and subscription names that you previously created.
Add the code to
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: The unique Cloud project ID for your app, such asmy-sample-project-191923.TOPIC_ID: The name of the Pub/Sub topic that you created in your Cloud project.SUBSCRIPTION_ID: The name of your subscription, such asworkspace-events-sub.
Run the program:
python3 main.py
If you haven't previously run the program, it prompts for authorization the first time. Grant access to the application to call the Meet REST API. After the program successfully runs, you should see output similar to:
Join the meeting at https://meet.google.com/abc-mnop-xyz
Join the conference
To generate events for the application, join the conference using the URL displayed by the application. After you join, you can try these actions to trigger events:
- Leave and rejoin the meeting.
- Invite others or dial in with your phone.
- Enable recordings and transcripts.
Each of these activities generates an event that the application receives and logs to the Google Cloud console.
Use ctrl-c to interrupt the program when you're done.
Optional: Additional steps to try
The app logs basic details about the events. To continue exploring the Meet REST API, try modifying the application to perform these additional actions.
Use the People API to retrieve additional information about signed-in participants.
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)Make sure to add "https://www.googleapis.com/auth/userinfo.profile" in the authorize method in the credential samples above.
Use the Google Drive API to download recordings and transcripts.
Instead of downloading transcripts from Google Drive, retrieve them using the structured transcript methods in the Meet REST API.
get space instead of creating the space
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)Make sure to add "https://www.googleapis.com/auth/meetings.space.readonly" in the authorize method in the credential samples above.
Optional: Clean up
To avoid incurring charges to your Google Cloud console account for the resources used in this tutorial, we recommend that you clean up any resources and projects created.
To delete the subscription:
Консоль
In the Google Cloud console, go to Menu > Pub/Sub > Subscriptions
Select the subscription and click More actions .
Click Delete . The Delete subscription window appears.
Click Delete .
gcloud CLI
Delete the subscription:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
To delete the topic:
Консоль
In the Google Cloud console, go to Menu > Pub/Sub > Topics
Select the topic and click More actions .
Click Delete . The Delete topic window appears.
Enter
deleteand then click Delete .
gcloud CLI
Delete the topic:
gcloud pubsub topics delete TOPIC_NAME
Чтобы удалить проект:
Консоль
- In the Google Cloud console, go to the Manage resources page. Click Menu > IAM & Admin > Manage Resources .
- In the project list, select the project you want to delete and then click Delete .
- In the dialog, type the project ID and then click Shut down to delete the project.
gcloud CLI
To delete a project, use the gcloud projects delete command:
gcloud projects delete PROJECT_ID
Похожие темы
- Learn about the types of Meet events to which you can subscribe .
- Learn more about what Google Meet REST API can do and review the reference documentation .
- Create a Google Workspace subscription to Meet meeting spaces or users using the Google Workspace Events API.
- To learn more about authentication, see Configure the OAuth consent screen and choose scopes .