Наблюдайте за событиями встреч с помощью Python и REST API Google Meet.

В этом руководстве показано, как использовать REST API Google Meet вместе с API Google Workspace Events и Google Cloud Pub/Sub для наблюдения за событиями собраний и реагирования на них. Пример приложения записывает, когда конференции начинаются и заканчиваются, когда участники присоединяются или покидают их, а также когда доступны любые созданные артефакты собрания.

Дополнительную информацию о работе с событиями см. в разделе «Подписка на события Google Meet» в документации Google Workspace Events API.

Предварительные условия

Если вам необходимо включить какие-либо из этих предварительных условий для вашей организации, попросите администратора Google Workspace включить их:

Подготовьте свое окружение

В этом разделе показано, как создать и настроить локальную среду и проект Google Cloud для этого руководства.

Создайте рабочий каталог и виртуальную среду Python.

Чтобы создать и активировать новую виртуальную среду , выполните следующие команды в своем терминале.

Linux/macOS

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

Windows (командная строка)

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

Windows (PowerShell)

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

Создайте проект Google Cloud

Консоль Google Cloud

  1. В консоли Google Cloud выберите > IAM и администрирование > Создать проект .

    Перейти к созданию проекта

  2. В поле «Имя проекта» введите описательное имя вашего проекта.

    Необязательно: Чтобы изменить идентификатор проекта , нажмите «Изменить» . Идентификатор проекта нельзя изменить после его создания, поэтому выберите идентификатор, который соответствует вашим потребностям на протяжении всего срока существования проекта.

  3. В поле «Местоположение» нажмите «Обзор» , чтобы отобразить возможные местоположения для вашего проекта. Затем нажмите «Выбрать» .
  4. Нажмите Создать . Консоль Google Cloud перейдет на страницу панели инструментов, и ваш проект будет создан в течение нескольких минут.

интерфейс командной строки gcloud

В одной из следующих сред разработки получите доступ к Google Cloud CLI («gcloud»):

  • Cloud Shell : чтобы использовать онлайн-терминал с уже настроенным интерфейсом командной строки gcloud, активируйте Cloud Shell.
    Активировать Cloud Shell
  • Локальная оболочка : чтобы использовать локальную среду разработки, установите и инициализируйте интерфейс командной строки gcloud.
    Чтобы создать облачный проект, используйте команду gcloud project create:
    gcloud projects create PROJECT_ID
    Замените PROJECT_ID , указав идентификатор проекта, который вы хотите создать.

Включить оплату для проекта Google Cloud

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в раздел «Оплата» . Меню > Оплата > Мои проекты .

    Перейти к оплате за мои проекты

  2. В разделе «Выберите организацию» выберите организацию, связанную с вашим проектом Google Cloud.
  3. В строке проекта откройте меню «Действия» ( ), нажмите «Изменить биллинг » и выберите учетную запись Cloud Billing.
  4. Нажмите Установить учетную запись .

интерфейс командной строки gcloud

  1. Чтобы просмотреть доступные учетные записи выставления счетов, запустите:
    gcloud billing accounts list
  2. Свяжите платежный аккаунт с проектом Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Замените следующее:

    • PROJECT_ID — это идентификатор облачного проекта, для которого вы хотите включить оплату.
    • BILLING_ACCOUNT_ID — это идентификатор платежного аккаунта , который нужно связать с проектом Google Cloud.

Настройте аутентификацию и авторизацию

Аутентификация и авторизация позволяют приложению получать доступ к ресурсам API REST Meet. Для вызова Meet REST API необходима авторизация пользователя. В этом разделе описано, как настроить учетные данные пользователя и запросить авторизацию.

Настройте экран согласия OAuth и выберите области действия.

Следующие шаги предлагают информацию-заполнитель для настройки экрана согласия OAuth для вашего приложения. Прежде чем публиковать приложение на внешних ресурсах, обновите эту информацию.

  1. В консоли Google Cloud выберите > API и службы > Экран согласия OAuth .

    Перейдите на экран согласия OAuth.

  2. В разделе «Тип пользователя» выберите «Внутренний» , затем нажмите «Создать» .
  3. В поле «Имя приложения» введите Meet REST API Tutorial .
  4. Заполните форму регистрации приложения, затем нажмите «Сохранить и продолжить» .
  5. Нажмите «Добавить или удалить области» . Появится панель со списком областей действия для каждого API, который вы включили в своем проекте Google Cloud.
  6. В разделе «Добавление областей вручную» вставьте следующие области:
    • https://www.googleapis.com/auth/meetings.space.created
  7. Нажмите «Добавить в таблицу» .
  8. Нажмите Обновить .
  9. После выбора областей, необходимых вашему приложению, нажмите «Сохранить и продолжить» .
  10. Если в качестве типа пользователя вы выбрали Внешний , добавьте тестовых пользователей:
    1. В разделе «Тестовые пользователи» нажмите «Добавить пользователей» .
    2. Введите свой адрес электронной почты и адрес других авторизованных тестовых пользователей, затем нажмите «Сохранить и продолжить» .
  11. Просмотрите сводку регистрации приложения. Чтобы внести изменения, нажмите «Изменить» . Если регистрация приложения выглядит нормально, нажмите «Вернуться на панель управления» .

Создайте идентификатор клиента

Идентификатор клиента действует как учетные данные для вашего приложения во время потоков OAuth 2.0. Поскольку приложение работает локально, создайте идентификатор клиента настольного компьютера.

  1. В консоли Google Cloud выберите > API и службы > Учетные данные .

    Перейти к учетным данным

  2. Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth ».
  3. Нажмите Тип приложения > Приложение для ПК .
  4. В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
  5. Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
  6. Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».

Установите библиотеки аутентификации Google.

Установите библиотеки аутентификации Google:

pip install google-auth google-auth-oauthlib

Выполнить авторизацию

Для API REST Meet требуются учетные данные пользователя в виде токена доступа OAuth 2.0. В этом разделе вы реализуете поток OAuth 2.0 для запроса токена доступа и токена обновления для пользователя.

  1. В своем рабочем каталоге создайте файл main.py и добавьте следующее содержимое:

    import os
    import json
    
    from google.auth.transport import requests
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    
    def authorize() -> Credentials:
        """Ensure valid credentials for calling the Meet REST API."""
        CLIENT_SECRET_FILE = "./client_secret.json"
        credentials = None
    
        if os.path.exists('token.json'):
            credentials = Credentials.from_authorized_user_file('token.json')
    
        if credentials is None:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRET_FILE,
                scopes=[
                    'https://www.googleapis.com/auth/meetings.space.created',
                ])
            flow.run_local_server(port=0)
            credentials = flow.credentials
    
        if credentials and credentials.expired:
            credentials.refresh(requests.Request())
    
        if credentials is not None:
            with open("token.json", "w") as f:
                f.write(credentials.to_json())
    
        return credentials
    
    USER_CREDENTIALS = authorize()
    
  2. Для запуска кода необходимы как идентификатор клиента, так и созданный ранее секрет. Скопируйте загруженный секретный файл клиента в рабочий каталог проекта и переименуйте его в client_secret.json .

  3. Если вы хотите проверить, как работает авторизация, выполните следующую команду. Приложение запрашивает авторизацию и создает файл token.json в рабочем каталоге проекта после одобрения запроса.

    python3 main.py
    

Добавьте REST API Meet

Теперь, когда код авторизации готов, пришло время включить и вызвать Meet REST API.

Включите API

Хотя этот раздел посвящен API REST Meet, в этом руководстве также используются API Google Cloud Pub/Sub и Google Workspace Events.

Консоль Google Cloud

  1. В консоли Google Cloud включите API REST Google Meet, API событий Google Workspace и Google Cloud Pub/Sub.

    Включите API

  2. Убедитесь, что вы включаете API в правильном облачном проекте, затем нажмите «Далее» .

  3. Убедитесь, что вы включаете правильные API, затем нажмите «Включить» .

интерфейс командной строки gcloud

  1. При необходимости установите текущий проект Cloud на тот, который вы создали с помощью команды gcloud config set project :

    gcloud config set project PROJECT_ID
    

    Замените PROJECT_ID на идентификатор созданного вами облачного проекта.

  2. Включите REST API Google Meet, 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:

  1. Запустите команду:

    pip install google-apps-meet
    
  2. Отредактируйте файл main.py , чтобы импортировать клиент:

    from google.apps import meet_v2 as meet
    

Создайте пространство

Теперь, когда API Meet REST доступен, определите функцию для создания пространства для собраний, на которое можно подписаться.

Отредактируйте 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 Events. Вы также должны создать тему Google Cloud Pub/Sub и подписаться на нее, которая будет служить конечной точкой уведомлений, откуда ваше приложение получает события.

Настройка Google Cloud Pub/Sub

Чтобы создать тему Pub/Sub и подписаться на нее:

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» .

    Перейти в паб/саб

    Убедитесь, что для вашего приложения выбран облачный проект.

  2. Нажмите Создать тему и выполните следующие действия:
    1. Введите workspace-events в качестве имени темы.
    2. Оставьте выбранным параметр «Добавить подписку по умолчанию» .
    3. Нажмите Создать . Полное название темы имеет формат projects/{project}/topics/{topic} . Запишите это имя для использования в последующих шагах.
  3. Предоставьте доступ к публикации сообщений Pub/Sub в вашей теме:
    1. На боковой панели откройте вкладку «Разрешения» .
    2. Нажмите «Добавить принципала» .
    3. В разделе «Новые участники» введите meet-api-event-push@system.gserviceaccount.com .
    4. В разделе «Назначить роли» выберите Pub/Sub Publisher .
    5. Нажмите Сохранить .

    Обновление разрешений для вашей темы может занять несколько минут.

интерфейс командной строки gcloud

  1. В своем облачном проекте создайте тему, выполнив следующую команду:
    gcloud pubsub topics create workspace-events

    В выводе отображается полное имя темы в формате projects/{project}/topics/{topic} . Запишите это имя для использования в последующих шагах.

  2. Предоставьте доступ к публикации сообщений в вашей теме:
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    Обновление разрешений для вашей темы может занять несколько минут.

  3. Создайте подписку Pub/Sub для темы:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    Замените следующее:

    • TOPIC_NAME : название вашей темы, которую вы создали на предыдущем шаге.

Запишите название темы и убедитесь, что значение {project} соответствует идентификатору облачного проекта вашего приложения. Название темы вы будете использовать позже для создания подписки на Google Workspace.

Создать учетную запись службы

Консоль Google Cloud

  1. В консоли Google Cloud выберите > IAM и администрирование > Учетные записи служб .

    Перейти к учетным записям служб

  2. Нажмите Создать учетную запись службы .
  3. Заполните данные учетной записи службы, затем нажмите «Создать и продолжить» .
  4. Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Дополнительные сведения см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .
  5. Нажмите Продолжить .
  6. Необязательно: укажите пользователей или группы, которые могут управлять этой учетной записью службы и выполнять действия с ней. Дополнительные сведения см. в разделе Управление олицетворением учетной записи службы .
  7. Нажмите Готово . Запишите адрес электронной почты для учетной записи службы.

интерфейс командной строки gcloud

  1. Создайте учетную запись службы:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Дополнительные сведения см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .

Используйте сервисный аккаунт

После создания учетной записи службы предоставьте себе доступ, чтобы выдавать себя за учетную запись службы.

Консоль Google Cloud

  1. В столбце «Действия» для вновь созданного сервисного аккаунта нажмите > Управление разрешениями .
  2. Нажмите Добавить ключ > Предоставить доступ .
  3. Введите свой адрес электронной почты в разделе «Добавить руководителей» .
  4. В качестве роли выберите Учетные записи служб > Создатель токенов учетных записей служб .
  5. Нажмите Сохранить .

интерфейс командной строки gcloud

  1. Чтобы добавить разрешение, запустите gcloud iam service-accounts add-iam-policy-binding используя адрес электронной почты сервисной учетной записи и пользователя.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_EMAIL \
      --member="user:YOUR_EMAIL \
      --role="roles/iam.serviceAccountTokenCreator"
  2. Войдите в систему с помощью gcloud , чтобы установить учетные данные приложения по умолчанию для учетной записи службы. При появлении запроса на авторизацию войдите в систему, используя ту же учетную запись, которая использовалась на предыдущих шагах.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

Установите клиентскую библиотеку Pub/Sub.

  1. Используйте pip для установки клиентской библиотеки для Pub/Sub:

    pip install google-cloud-pubsub
    
  2. Затем отредактируйте main.py , чтобы импортировать клиент:

    from google.cloud import pubsub_v1
    

Создайте подписку на Google Workspace.

Добавьте следующий код в main.py , чтобы определить метод подписки на события Meet. Этот код подписывается на все события в конференц-зале. При подписке события публикуются в теме Pub/Sub.

def subscribe_to_space(space_name: str = None, topic_name: str = None):
    """Subscribe to events for a meeting space."""
    session = requests.AuthorizedSession(USER_CREDENTIALS)
    body = {
        'targetResource': f"//meet.googleapis.com/{space_name}",
        "eventTypes": [
            "google.workspace.meet.conference.v2.started",
            "google.workspace.meet.conference.v2.ended",
            "google.workspace.meet.participant.v2.joined",
            "google.workspace.meet.participant.v2.left",
            "google.workspace.meet.recording.v2.fileGenerated",
            "google.workspace.meet.transcript.v2.fileGenerated",
        ],
        "payloadOptions": {
            "includeResource": False,
        },
        "notificationEndpoint": {
            "pubsubTopic": topic_name
        },
        "ttl": "86400s",
    }
    response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
    return response

Затем добавьте соответствующий код для извлечения и обработки событий.

Слушайте и обрабатывайте события

Продолжайте редактировать main.py и добавьте следующий пример кода. Этот код реализует принимающую сторону и использует 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 , указав собственные названия тем и подписок , которые вы создали ранее.

  1. Добавьте код в main.py :

    space = create_space()
    print(f"Join the meeting at {space.meeting_uri}")
    
    TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID"
    SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
    
    subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name)
    listen_for_events(subscription_name=SUBSCRIPTION_NAME)
    

    Замените следующее:

    • PROJECT_ID : уникальный идентификатор облачного проекта для вашего приложения, например my-sample-project-191923 .

    • TOPIC_ID : название темы Pub/Sub, которую вы создали в своем облачном проекте.

    • SUBSCRIPTION_ID : название вашей подписки, например workspace-events-sub .

  2. Запустите программу:

    python3 main.py
    

Если вы ранее не запускали программу, она запросит авторизацию с первого раза. Предоставьте приложению доступ для вызова API REST Meet. После успешного запуска программы вы должны увидеть вывод, похожий на:

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

Присоединяйтесь к конференции

Чтобы генерировать события для приложения, присоединитесь к конференции, используя URL-адрес, отображаемый приложением. После присоединения вы можете попробовать следующие действия для запуска событий:

  • Выйдите и снова присоединитесь к собранию.
  • Пригласите других или позвоните с помощью телефона.
  • Включите записи и расшифровки.

Каждое из этих действий генерирует событие, которое приложение получает и регистрирует в консоли Google Cloud.

Используйте ctrl-c , чтобы прервать программу, когда вы закончите.

Необязательно: дополнительные действия, которые стоит попробовать

Приложение регистрирует основные сведения о событиях. Чтобы продолжить изучение API REST Meet, попробуйте изменить приложение для выполнения этих дополнительных действий.

Дополнительно: очистка

Чтобы избежать списания средств с вашей учетной записи консоли Google Cloud за ресурсы, используемые в этом руководстве, мы рекомендуем вам очистить все созданные ресурсы и проекты.

Чтобы удалить подписку:

Консоль

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» > «Подписки» .

    Перейти в Подписки

  2. Выберите подписку и нажмите Дополнительные действия .

  3. Нажмите Удалить . Появится окно Удалить подписку .

  4. Нажмите Удалить .

интерфейс командной строки gcloud

  1. Удалить подписку:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

Чтобы удалить тему:

Консоль

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» > «Темы» .

    Перейти к темам

  2. Выберите тему и нажмите Дополнительные действия .

  3. Нажмите Удалить . Появится окно Удалить тему .

  4. Введите delete и нажмите «Удалить» .

интерфейс командной строки gcloud

  1. Удалить тему:

    gcloud pubsub topics delete TOPIC_NAME
    

Чтобы удалить проект:

Консоль

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» . Нажмите Меню > и администрирование > Управление ресурсами .

    Зайдите в диспетчер ресурсов

  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить .
  3. В диалоговом окне введите идентификатор проекта и нажмите «Завершить работу» , чтобы удалить проект.

интерфейс командной строки gcloud

  1. Чтобы удалить проект, используйте команду удаления проектов gcloud :

    gcloud projects delete PROJECT_ID
    
,

В этом руководстве показано, как использовать REST API Google Meet вместе с API Google Workspace Events и Google Cloud Pub/Sub для наблюдения за событиями собраний и реагирования на них. Пример приложения записывает, когда конференции начинаются и заканчиваются, когда участники присоединяются или покидают их, а также когда доступны любые созданные артефакты собрания.

Дополнительную информацию о работе с событиями см. в разделе «Подписка на события Google Meet» в документации Google Workspace Events API.

Предварительные условия

Если вам необходимо включить какие-либо из этих предварительных условий для вашей организации, попросите администратора Google Workspace включить их:

Подготовьте свое окружение

В этом разделе показано, как создать и настроить локальную среду и проект Google Cloud для этого руководства.

Создайте рабочий каталог и виртуальную среду Python.

Чтобы создать и активировать новую виртуальную среду , выполните следующие команды в своем терминале.

Linux/macOS

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

Windows (командная строка)

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

Windows (PowerShell)

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

Создайте проект Google Cloud

Консоль Google Cloud

  1. В консоли Google Cloud выберите > IAM и администрирование > Создать проект .

    Перейти к созданию проекта

  2. В поле «Имя проекта» введите описательное имя вашего проекта.

    Необязательно: Чтобы изменить идентификатор проекта , нажмите «Изменить» . Идентификатор проекта нельзя изменить после его создания, поэтому выберите идентификатор, который соответствует вашим потребностям на протяжении всего срока действия проекта.

  3. В поле «Местоположение» нажмите «Обзор» , чтобы отобразить возможные местоположения для вашего проекта. Затем нажмите «Выбрать» .
  4. Нажмите Создать . Консоль Google Cloud перейдет на страницу панели инструментов, и ваш проект будет создан в течение нескольких минут.

интерфейс командной строки gcloud

В одной из следующих сред разработки получите доступ к Google Cloud CLI («gcloud»):

  • Cloud Shell : чтобы использовать онлайн-терминал с уже настроенным интерфейсом командной строки gcloud, активируйте Cloud Shell.
    Активировать Cloud Shell
  • Локальная оболочка : чтобы использовать локальную среду разработки, установите и инициализируйте интерфейс командной строки gcloud.
    Чтобы создать облачный проект, используйте команду gcloud project create:
    gcloud projects create PROJECT_ID
    Замените PROJECT_ID , указав идентификатор проекта, который вы хотите создать.

Включить оплату для проекта Google Cloud

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в раздел «Оплата» . Меню > Оплата > Мои проекты .

    Перейти к оплате за мои проекты

  2. В разделе «Выберите организацию» выберите организацию, связанную с вашим проектом Google Cloud.
  3. В строке проекта откройте меню «Действия» ( ), нажмите «Изменить биллинг » и выберите учетную запись Cloud Billing.
  4. Нажмите Установить учетную запись .

интерфейс командной строки gcloud

  1. Чтобы просмотреть доступные учетные записи выставления счетов, запустите:
    gcloud billing accounts list
  2. Свяжите платежный аккаунт с проектом Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Замените следующее:

    • PROJECT_ID — это идентификатор облачного проекта, для которого вы хотите включить оплату.
    • BILLING_ACCOUNT_ID — это идентификатор платежного аккаунта , который нужно связать с проектом Google Cloud.

Настройте аутентификацию и авторизацию

Аутентификация и авторизация позволяют приложению получать доступ к ресурсам API REST Meet. Для вызова Meet REST API необходима авторизация пользователя. В этом разделе описано, как настроить учетные данные пользователя и запросить авторизацию.

Настройте экран согласия OAuth и выберите области действия.

Следующие шаги предлагают информацию-заполнитель для настройки экрана согласия OAuth для вашего приложения. Прежде чем публиковать приложение на внешних ресурсах, обновите эту информацию.

  1. В консоли Google Cloud выберите > API и службы > Экран согласия OAuth .

    Перейдите на экран согласия OAuth.

  2. В разделе «Тип пользователя» выберите «Внутренний» , затем нажмите «Создать» .
  3. В поле «Имя приложения» введите Meet REST API Tutorial .
  4. Заполните форму регистрации приложения, затем нажмите «Сохранить и продолжить» .
  5. Нажмите «Добавить или удалить области» . Появится панель со списком областей действия для каждого API, который вы включили в своем проекте Google Cloud.
  6. В разделе «Добавление областей вручную» вставьте следующие области:
    • https://www.googleapis.com/auth/meetings.space.created
  7. Нажмите «Добавить в таблицу» .
  8. Нажмите Обновить .
  9. После выбора областей, необходимых вашему приложению, нажмите «Сохранить и продолжить» .
  10. Если в качестве типа пользователя вы выбрали Внешний , добавьте тестовых пользователей:
    1. В разделе «Тестовые пользователи» нажмите «Добавить пользователей» .
    2. Введите свой адрес электронной почты и адрес других авторизованных тестовых пользователей, затем нажмите «Сохранить и продолжить» .
  11. Просмотрите сводку регистрации приложения. Чтобы внести изменения, нажмите «Изменить» . Если регистрация приложения выглядит нормально, нажмите «Вернуться на панель управления» .

Создайте идентификатор клиента

Идентификатор клиента действует как учетные данные для вашего приложения во время потоков OAuth 2.0. Поскольку приложение работает локально, создайте идентификатор клиента настольного компьютера.

  1. В консоли Google Cloud выберите > API и службы > Учетные данные .

    Перейти к учетным данным

  2. Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth ».
  3. Нажмите Тип приложения > Приложение для ПК .
  4. В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
  5. Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
  6. Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».

Установите библиотеки аутентификации Google.

Установите библиотеки аутентификации Google:

pip install google-auth google-auth-oauthlib

Выполнить авторизацию

Для API REST Meet требуются учетные данные пользователя в виде токена доступа OAuth 2.0. В этом разделе вы реализуете поток OAuth 2.0 для запроса токена доступа и токена обновления для пользователя.

  1. В своем рабочем каталоге создайте файл main.py и добавьте следующее содержимое:

    import os
    import json
    
    from google.auth.transport import requests
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    
    def authorize() -> Credentials:
        """Ensure valid credentials for calling the Meet REST API."""
        CLIENT_SECRET_FILE = "./client_secret.json"
        credentials = None
    
        if os.path.exists('token.json'):
            credentials = Credentials.from_authorized_user_file('token.json')
    
        if credentials is None:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRET_FILE,
                scopes=[
                    'https://www.googleapis.com/auth/meetings.space.created',
                ])
            flow.run_local_server(port=0)
            credentials = flow.credentials
    
        if credentials and credentials.expired:
            credentials.refresh(requests.Request())
    
        if credentials is not None:
            with open("token.json", "w") as f:
                f.write(credentials.to_json())
    
        return credentials
    
    USER_CREDENTIALS = authorize()
    
  2. Для запуска кода необходимы как идентификатор клиента, так и созданный ранее секрет. Скопируйте загруженный секретный файл клиента в рабочий каталог проекта и переименуйте его в client_secret.json .

  3. Если вы хотите проверить, как работает авторизация, выполните следующую команду. Приложение запрашивает авторизацию и создает файл token.json в рабочем каталоге проекта после одобрения запроса.

    python3 main.py
    

Добавьте REST API Meet

Теперь, когда код авторизации готов, пришло время включить и вызвать Meet REST API.

Включите API

Хотя этот раздел посвящен API REST Meet, в этом руководстве также используются API Google Cloud Pub/Sub и Google Workspace Events.

Консоль Google Cloud

  1. В консоли Google Cloud включите API REST Google Meet, API событий Google Workspace и Google Cloud Pub/Sub.

    Включите API

  2. Убедитесь, что вы включаете API в правильном облачном проекте, затем нажмите «Далее» .

  3. Убедитесь, что вы включаете правильные API, затем нажмите «Включить» .

интерфейс командной строки gcloud

  1. При необходимости установите текущий проект Cloud на тот, который вы создали с помощью команды gcloud config set project :

    gcloud config set project PROJECT_ID
    

    Замените PROJECT_ID на идентификатор созданного вами облачного проекта.

  2. Включите REST API Google Meet, 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:

  1. Запустите команду:

    pip install google-apps-meet
    
  2. Отредактируйте файл main.py , чтобы импортировать клиент:

    from google.apps import meet_v2 as meet
    

Создайте пространство

Теперь, когда API Meet REST доступен, определите функцию для создания пространства для собраний, на которое можно подписаться.

Отредактируйте 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 Events. Вы также должны создать тему Google Cloud Pub/Sub и подписаться на нее, которая будет служить конечной точкой уведомлений, откуда ваше приложение получает события.

Настройка Google Cloud Pub/Sub

Чтобы создать тему Pub/Sub и подписаться на нее:

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» .

    Перейти в паб/саб

    Убедитесь, что для вашего приложения выбран облачный проект.

  2. Нажмите Создать тему и выполните следующие действия:
    1. Введите workspace-events в качестве имени темы.
    2. Оставьте выбранным параметр «Добавить подписку по умолчанию» .
    3. Нажмите Создать . Полное название темы имеет формат projects/{project}/topics/{topic} . Запишите это имя для использования в последующих шагах.
  3. Предоставьте доступ к публикации сообщений Pub/Sub в вашей теме:
    1. На боковой панели откройте вкладку «Разрешения» .
    2. Нажмите «Добавить принципала» .
    3. В разделе «Новые участники» введите meet-api-event-push@system.gserviceaccount.com .
    4. В разделе «Назначить роли» выберите Pub/Sub Publisher .
    5. Нажмите Сохранить .

    Обновление разрешений для вашей темы может занять несколько минут.

интерфейс командной строки gcloud

  1. В своем облачном проекте создайте тему, выполнив следующую команду:
    gcloud pubsub topics create workspace-events

    В выводе отображается полное имя темы в формате projects/{project}/topics/{topic} . Запишите это имя для использования в последующих шагах.

  2. Предоставьте доступ к публикации сообщений в вашей теме:
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    Обновление разрешений для вашей темы может занять несколько минут.

  3. Создайте подписку Pub/Sub для темы:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    Замените следующее:

    • TOPIC_NAME : название вашей темы, которую вы создали на предыдущем шаге.

Запишите название темы и убедитесь, что значение {project} соответствует идентификатору облачного проекта вашего приложения. Название темы вы будете использовать позже для создания подписки на Google Workspace.

Создать учетную запись службы

Консоль Google Cloud

  1. В консоли Google Cloud выберите > IAM и администрирование > Учетные записи служб .

    Перейти к учетным записям служб

  2. Нажмите Создать учетную запись службы .
  3. Заполните данные учетной записи службы, затем нажмите «Создать и продолжить» .
  4. Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Дополнительные сведения см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .
  5. Нажмите Продолжить .
  6. Необязательно: укажите пользователей или группы, которые могут управлять этой учетной записью службы и выполнять действия с ней. Дополнительные сведения см. в разделе Управление олицетворением учетной записи службы .
  7. Нажмите Готово . Запишите адрес электронной почты для учетной записи службы.

интерфейс командной строки gcloud

  1. Создайте учетную запись службы:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Дополнительные сведения см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .

Используйте сервисный аккаунт

После создания учетной записи службы предоставьте себе доступ, чтобы выдавать себя за учетную запись службы.

Консоль Google Cloud

  1. В столбце «Действия» для вновь созданного сервисного аккаунта нажмите > Управление разрешениями .
  2. Нажмите Добавить ключ > Предоставить доступ .
  3. Введите свой адрес электронной почты в разделе «Добавить руководителей» .
  4. В качестве роли выберите Учетные записи служб > Создатель токенов учетных записей служб .
  5. Нажмите Сохранить .

интерфейс командной строки gcloud

  1. Чтобы добавить разрешение, запустите gcloud iam service-accounts add-iam-policy-binding используя адрес электронной почты сервисной учетной записи и пользователя.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_EMAIL \
      --member="user:YOUR_EMAIL \
      --role="roles/iam.serviceAccountTokenCreator"
  2. Войдите в систему с помощью gcloud , чтобы установить учетные данные приложения по умолчанию для учетной записи службы. При появлении запроса на авторизацию войдите в систему, используя ту же учетную запись, которая использовалась на предыдущих шагах.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

Установите клиентскую библиотеку Pub/Sub.

  1. Используйте pip для установки клиентской библиотеки для Pub/Sub:

    pip install google-cloud-pubsub
    
  2. Затем отредактируйте main.py , чтобы импортировать клиент:

    from google.cloud import pubsub_v1
    

Создайте подписку на Google Workspace.

Добавьте следующий код в main.py , чтобы определить метод подписки на события Meet. Этот код подписывается на все события в конференц-зале. При подписке события публикуются в теме Pub/Sub.

def subscribe_to_space(space_name: str = None, topic_name: str = None):
    """Subscribe to events for a meeting space."""
    session = requests.AuthorizedSession(USER_CREDENTIALS)
    body = {
        'targetResource': f"//meet.googleapis.com/{space_name}",
        "eventTypes": [
            "google.workspace.meet.conference.v2.started",
            "google.workspace.meet.conference.v2.ended",
            "google.workspace.meet.participant.v2.joined",
            "google.workspace.meet.participant.v2.left",
            "google.workspace.meet.recording.v2.fileGenerated",
            "google.workspace.meet.transcript.v2.fileGenerated",
        ],
        "payloadOptions": {
            "includeResource": False,
        },
        "notificationEndpoint": {
            "pubsubTopic": topic_name
        },
        "ttl": "86400s",
    }
    response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
    return response

Затем добавьте соответствующий код для извлечения и обработки событий.

Слушайте и обрабатывайте события

Продолжайте редактировать main.py и добавьте следующий пример кода. Этот код реализует принимающую сторону и использует 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 , указав собственные названия тем и подписок , которые вы создали ранее.

  1. Добавьте код в main.py :

    space = create_space()
    print(f"Join the meeting at {space.meeting_uri}")
    
    TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID"
    SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
    
    subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name)
    listen_for_events(subscription_name=SUBSCRIPTION_NAME)
    

    Замените следующее:

    • PROJECT_ID : уникальный идентификатор облачного проекта для вашего приложения, например my-sample-project-191923 .

    • TOPIC_ID : название темы Pub/Sub, которую вы создали в своем облачном проекте.

    • SUBSCRIPTION_ID : название вашей подписки, например workspace-events-sub .

  2. Запустите программу:

    python3 main.py
    

Если вы ранее не запускали программу, она запросит авторизацию с первого раза. Предоставьте приложению доступ для вызова API REST Meet. После успешного запуска программы вы должны увидеть вывод, похожий на:

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

Присоединяйтесь к конференции

Чтобы генерировать события для приложения, присоединитесь к конференции, используя URL-адрес, отображаемый приложением. После присоединения вы можете попробовать следующие действия для запуска событий:

  • Выйдите и снова присоединитесь к собранию.
  • Пригласите других или позвоните с помощью телефона.
  • Включите записи и расшифровки.

Каждое из этих действий генерирует событие, которое приложение получает и регистрирует в консоли Google Cloud.

Используйте ctrl-c , чтобы прервать программу, когда вы закончите.

Необязательно: дополнительные действия, которые стоит попробовать

Приложение регистрирует основные сведения о событиях. Чтобы продолжить изучение API REST Meet, попробуйте изменить приложение для выполнения этих дополнительных действий.

Дополнительно: очистка

Чтобы избежать списания средств с вашей учетной записи консоли Google Cloud за ресурсы, используемые в этом руководстве, мы рекомендуем вам очистить все созданные ресурсы и проекты.

Чтобы удалить подписку:

Консоль

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» > «Подписки» .

    Перейти в Подписки

  2. Выберите подписку и нажмите Дополнительные действия .

  3. Нажмите Удалить . Появится окно Удалить подписку .

  4. Нажмите Удалить .

интерфейс командной строки gcloud

  1. Удалить подписку:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

Чтобы удалить тему:

Консоль

  1. В консоли Google Cloud перейдите в «Меню» > «Pub/Sub» > «Темы» .

    Перейти к темам

  2. Выберите тему и нажмите Дополнительные действия .

  3. Нажмите Удалить . Появится окно Удалить тему .

  4. Введите delete и нажмите «Удалить» .

интерфейс командной строки gcloud

  1. Удалить тему:

    gcloud pubsub topics delete TOPIC_NAME
    

Чтобы удалить проект:

Консоль

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» . Нажмите Меню > и администрирование > Управление ресурсами .

    Зайдите в диспетчер ресурсов

  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить .
  3. В диалоговом окне введите идентификатор проекта и нажмите «Завершить работу» , чтобы удалить проект.

интерфейс командной строки gcloud

  1. Чтобы удалить проект, используйте команду удаления проектов gcloud :

    gcloud projects delete PROJECT_ID