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

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

Вместо подписки на определенное пространство для собраний вы можете подписаться на пользователя Meet, чтобы получать события для любого пространства для собраний, которым владеет или организует этот пользователь. Подробную информацию см. в разделе «Подписка на события 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 projects 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. Нажмите Сохранить .
  6. Вернитесь к своему терминалу и войдите в систему с помощью gcloud чтобы установить учетные данные приложения по умолчанию для учетной записи службы. При появлении запроса на авторизацию войдите в систему, используя ту же учетную запись, которая использовалась на предыдущих шагах.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

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

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

Установите клиентскую библиотеку 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 перейдите на страницу «Управление ресурсами» . Нажмите Меню > IAM и администрирование > ресурсами .

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

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

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

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

    gcloud projects delete PROJECT_ID