Observa reuniones con Python y la API de REST de Google Meet

En este instructivo, se muestra cómo usar la API de REST de Google Meet junto con la API de Google Workspace Events y Google Cloud Pub/Sub para observar los eventos de la reunión y reaccionar a ellos. La aplicación de muestra registra cuándo comienzan y finalizan las conferencias, cuándo se unen o abandonan los participantes y cuándo están disponibles los artefactos de reunión generados.

Para obtener más información sobre cómo trabajar con eventos, consulta Suscríbete a eventos de Google Meet en la documentación de la API de eventos de Google Workspace.

Requisitos previos

Si necesitas activar alguno de estos requisitos previos para tu organización, pídele al administrador de Google Workspace que los active:

Prepare el entorno

En esta sección, se muestra cómo crear y configurar tu entorno local y el proyecto de Google Cloud para este instructivo.

Crea un directorio de trabajo y un entorno virtual de Python

Para crear y activar un entorno virtual nuevo, ejecuta los siguientes comandos en la terminal.

Linux/macOS

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

Windows (símbolo del sistema)

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

Crea un proyecto de Google Cloud

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a Menú > IAM y administración > Crear un proyecto.

    Ir a Crear un proyecto

  2. En el campo Nombre del proyecto, ingresa un nombre descriptivo para tu proyecto.

    Opcional: Para editar el ID del proyecto, haz clic en Editar. El ID del proyecto no se puede cambiar después de que se crea, por lo que debes elegir un ID que satisfaga tus necesidades durante todo el ciclo de vida del proyecto.

  3. En el campo Ubicación, haz clic en Explorar para mostrar las ubicaciones posibles del proyecto. Luego, haga clic en Seleccionar.
  4. Haz clic en Crear. La consola de Google Cloud navega a la página Panel y tu proyecto se crea en unos minutos.

gcloud CLI

En uno de los siguientes entornos de desarrollo, accede a Google Cloud CLI (`gcloud`):

  • Cloud Shell: Para usar una terminal en línea con la CLI de gcloud ya configurada, activa Cloud Shell.
    Activar Cloud Shell
  • Shell local: Para usar un entorno de desarrollo local, instala e initialize la CLI de gcloud.
    Para crear un proyecto de Cloud, usa el comando “gcloud projects create”:
    gcloud projects create PROJECT_ID
    Reemplaza PROJECT_ID mediante la configuración del ID del proyecto que deseas crear.

Habilita la facturación para el proyecto de Google Cloud

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a Facturación. Haz clic en Menú > Facturación > Mis proyectos.

    Ir a Facturación de mis proyectos

  2. En Selecciona una organización, elige la organización asociada con tu proyecto de Google Cloud.
  3. En la fila del proyecto, abre el menú Acciones (), haz clic en Cambiar facturación y elige la cuenta de Facturación de Cloud.
  4. Haz clic en Establecer cuenta.

gcloud CLI

  1. Para enumerar las cuentas de facturación disponibles, ejecuta
    gcloud billing accounts list
    .
  2. Vincula una cuenta de facturación con un proyecto de Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Reemplaza lo siguiente:

    • PROJECT_ID es el ID del proyecto de Cloud para el que deseas habilitar la facturación.
    • BILLING_ACCOUNT_ID es el ID de la cuenta de facturación que se vinculará con el proyecto de Google Cloud.

Configura la autenticación y la autorización

La autenticación y la autorización permiten que la app acceda a los recursos de la API de REST de Meet. Se requiere la autorización del usuario para llamar a la API de REST de Meet. En esta sección, se explica cómo configurar las credenciales del usuario y cómo solicitar autorización.

Configura la pantalla de consentimiento de OAuth y elige los permisos

En los siguientes pasos, se sugiere información del marcador de posición para configurar la pantalla de consentimiento de OAuth de tu app. Antes de publicar la app de forma externa, actualiza esta información.

  1. En la consola de Google Cloud, ve a Menú > APIs y servicios > Pantalla de consentimiento de OAuth.

    Ir a la pantalla de consentimiento de OAuth

  2. En Tipo de usuario, selecciona Interno y, luego, haz clic en Crear.
  3. En Nombre de la app, ingresa Meet REST API Tutorial.
  4. Completa el formulario de registro de la app y, luego, haz clic en Save and Continue.
  5. Haz clic en Add or Remove Scopes. Aparecerá un panel con una lista de permisos para cada API que hayas habilitado en tu proyecto de Google Cloud.
  6. En Agregar permisos de forma manual, pega los siguientes permisos:
    • https://www.googleapis.com/auth/meetings.space.created
  7. Haz clic en Add to Table.
  8. Haz clic en Actualizar.
  9. Después de seleccionar los permisos que necesita tu app, haz clic en Save and Continue.
  10. Si seleccionaste Externo como tipo de usuario, agrega usuarios de prueba:
    1. En Usuarios de prueba, haz clic en Agregar usuarios.
    2. Ingresa tu dirección de correo electrónico y cualquier otro usuario de prueba autorizado. Luego, haz clic en Guardar y continuar.
  11. Revisa el resumen del registro de tu app. Para realizar cambios, haz clic en Editar. Si el registro de la app es correcto, haz clic en Volver al panel.

Crea un ID de cliente

El ID de cliente actúa como credenciales para tu aplicación durante los flujos de OAuth 2.0. Dado que la app se ejecuta de manera local, crea un ID de cliente de escritorio.

  1. En la consola de Google Cloud, ve a Menú > APIs y servicios > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales > ID de cliente de OAuth.
  3. Haz clic en Tipo de aplicación > App de escritorio.
  4. En el campo Nombre, escribe un nombre para la credencial. Este nombre solo se muestra en la consola de Google Cloud.
  5. Haz clic en Crear. Aparecerá la pantalla de creación del cliente de OAuth, en la que se mostrará tu ID de cliente nuevo y el secreto del cliente.
  6. Haz clic en OK. La credencial creada recientemente aparecerá en IDs de cliente de OAuth 2.0.

Instala las bibliotecas de autenticación de Google

Instala las bibliotecas de autenticación de Google:

pip install google-auth google-auth-oauthlib

Ejecutar autorización

La API de REST de Meet requiere credenciales de usuario en forma de un token de acceso de OAuth 2.0. En esta sección, implementarás el flujo de OAuth 2.0 con el fin de solicitar un token de acceso y un token de actualización para el usuario.

  1. En el directorio de trabajo, crea el archivo main.py y agrega el siguiente contenido:

    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. Para ejecutar el código, se requieren el ID de cliente y el secreto creados antes. Copia el archivo de secretos del cliente descargado en el directorio de trabajo del proyecto y cámbiale el nombre a client_secret.json.

  3. Si quieres probar cómo funciona la autorización, ejecuta el siguiente comando. La app solicita autorización y crea un archivo token.json en el directorio de trabajo del proyecto después de que se aprueba la solicitud.

    python3 main.py
    

Agrega la API de REST de Meet

Ahora que se completó el código de autorización, es momento de habilitar y llamar a la API de REST de Meet.

Habilita las APIs

Si bien esta sección se enfoca en la API de REST de Meet, en este instructivo también se usa Google Cloud Pub/Sub y la API de Eventos de Google Workspace.

Consola de Google Cloud

  1. En la consola de Google Cloud, habilita la API de REST de Google Meet, la API de eventos de Google Workspace y Google Cloud Pub/Sub.

    Habilitar las API

  2. Confirma que estás habilitando las APIs en el proyecto de Cloud correcto y, luego, haz clic en Siguiente.

  3. Confirma que estás habilitando las APIs correctas y, luego, haz clic en Habilitar.

gcloud CLI

  1. Si es necesario, configura el proyecto de Cloud actual como el que creaste con el comando gcloud config set project:

    gcloud config set project PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto de Cloud que creaste.

  2. Habilita la API de REST de Google Meet, la API de Google Workspace Events y Google Cloud Pub/Sub con el comando gcloud services enable:

    gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com
    

Instala la biblioteca cliente de la API de REST de Meet

Sigue estos pasos para instalar la biblioteca cliente de la API de REST de Meet:

  1. Ejecuta el siguiente comando:

    pip install google-apps-meet
    
  2. Edita el archivo main.py para importar el cliente:

    from google.apps import meet_v2 as meet
    

Crea un espacio

Ahora que la API de REST de Meet está disponible, define una función para crear una sala de reuniones a la que puedas suscribirte.

Edita main.py y agrega lo siguiente:

def create_space() -> meet.Space:
    """Create a meeting space."""
    client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
    request = meet.CreateSpaceRequest()
    return client.create_space(request=request)

Suscríbete a eventos

Para recibir eventos sobre una sala de reuniones, crea una suscripción con la API de Google Workspace Events. También debes crear un tema de Google Cloud Pub/Sub y suscribirte a él, que funcione como el extremo de notificación en el que tu app recibe los eventos.

Configura Google Cloud Pub/Sub

Para crear un tema de Pub/Sub y suscribirte a uno, haz lo siguiente:

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a Menú > Pub/Sub.

    Ir a Pub/Sub

    Asegúrate de que esté seleccionado el proyecto de Cloud para tu app.

  2. Haz clic en Crear tema y haz lo siguiente:
    1. Ingresa workspace-events como nombre del tema.
    2. Deja seleccionada la opción Agregar una suscripción predeterminada.
    3. Haz clic en Crear. El nombre completo del tema tiene el formato projects/{project}/topics/{topic}. Toma nota de este nombre para usarlo en pasos posteriores.
  3. Otorga acceso para publicar mensajes de Pub/Sub en tu tema:
    1. En el panel lateral, abre la pestaña Permisos.
    2. Haz clic en Agregar permisos de cuenta principal.
    3. En Principales nuevas, ingresa meet-api-event-push@system.gserviceaccount.com.
    4. En Asignar roles, selecciona Pub/Sub Publisher.
    5. Haz clic en Guardar.

    Es posible que la actualización de los permisos de tu tema tarde unos minutos.

gcloud CLI

  1. En tu proyecto de Cloud, ejecuta el siguiente comando para crear un tema:
    gcloud pubsub topics create workspace-events

    El resultado muestra el nombre completo del tema con el formato projects/{project}/topics/{topic}. Toma nota de este nombre para usarlo en pasos posteriores.

  2. Otorga acceso para publicar mensajes en tu tema:
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    Es posible que la actualización de los permisos de tu tema tarde unos minutos.

  3. Crea una suscripción de Pub/Sub para el tema:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    Reemplaza lo siguiente:

    • TOPIC_NAME: Es el nombre del tema que creaste en el paso anterior.

Toma nota del nombre del tema y asegúrate de que el valor de {project} sea el ID del proyecto de Cloud de tu app. Usarás el nombre del tema para crear la suscripción a Google Workspace más adelante.

Crea una cuenta de servicio

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.

    Ir a Cuentas de servicio

  2. Haz clic en Crear cuenta de servicio.
  3. Completa los detalles de la cuenta de servicio y, luego, haz clic en Crear y continuar.
  4. Opcional: Asigna roles a tu cuenta de servicio para otorgar acceso a los recursos de tu proyecto de Google Cloud. Para obtener más detalles, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.
  5. Haz clic en Continuar.
  6. Opcional: Ingresa usuarios o grupos que puedan administrar y realizar acciones con esta cuenta de servicio. Para obtener más información, consulta Administra la suplantación de cuentas de servicio.
  7. Haz clic en Listo. Toma nota de la dirección de correo electrónico de la cuenta de servicio.

gcloud CLI

  1. Crea la cuenta de servicio:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. Opcional: Asigna roles a tu cuenta de servicio para otorgar acceso a los recursos de tu proyecto de Google Cloud. Para obtener más detalles, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.

Usa la cuenta de servicio

Después de crear la cuenta de servicio, otórgate acceso para usar la identidad de la cuenta de servicio.

Consola de Google Cloud

  1. En la columna Acciones de la cuenta de servicio recién creada, haz clic en > Administrar permisos.
  2. Haz clic en Agregar clave > Otorgar acceso.
  3. Ingresa tu dirección de correo electrónico en Agregar principales.
  4. Selecciona Cuentas de servicio > Creador de tokens de cuenta de servicio como el rol.
  5. Haz clic en Guardar.

gcloud CLI

  1. Para agregar el permiso, ejecuta gcloud iam service-accounts add-iam-policy-binding con la dirección de correo electrónico de la cuenta de servicio y el usuario.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_EMAIL \
      --member="user:YOUR_EMAIL \
      --role="roles/iam.serviceAccountTokenCreator"
  2. Accede con gcloud para establecer las credenciales predeterminadas de la aplicación en la cuenta de servicio. Cuando se te solicite autorización, accede con la misma cuenta que usaste en los pasos anteriores.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

Instala la biblioteca cliente de Pub/Sub

  1. Usa pip para instalar la biblioteca cliente de Pub/Sub:

    pip install google-cloud-pubsub
    
  2. Luego, edita main.py para importar el cliente:

    from google.cloud import pubsub_v1
    

Crea la suscripción a Google Workspace

Agrega el siguiente código a main.py para definir un método de suscripción a eventos de Meet. Este código se suscribe a todos los eventos de un espacio de reunión. Cuando te suscribes, los eventos se publican en el tema de 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

A continuación, agrega el código correspondiente para extraer y procesar los eventos.

Escucha y controla eventos

Edita main.py y agrega el siguiente código de muestra. Este código implementa el lado receptor y usa la API de Google Cloud Pub/Sub para extraer eventos a medida que están disponibles. Los distintos métodos de controlador imprimen información sobre los eventos correspondientes.

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")

Finaliza el código

Agrega el siguiente código a main.py para llamar a los métodos a fin de crear el espacio, suscribirse a eventos y escuchar. Actualiza las constantes TOPIC_NAME y SUBSCRIPTION_NAME con los nombres de tema y suscripción que creaste anteriormente.

  1. Agrega el código a 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)
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID único del proyecto de Cloud de tu app, como my-sample-project-191923.

    • TOPIC_ID: Es el nombre del tema de Pub/Sub que creaste en el proyecto de Cloud.

    • SUBSCRIPTION_ID: Es el nombre de la suscripción, como workspace-events-sub.

  2. Ejecuta el programa:

    python3 main.py
    

Si no ejecutaste el programa antes, te solicitará autorización la primera vez. Otorgar acceso a la aplicación para llamar a la API de REST de Meet Una vez que el programa se ejecute correctamente, deberías ver un resultado similar al siguiente:

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

Únete a la conferencia

Si quieres generar eventos para la aplicación, únete a la conferencia mediante la URL que muestra la aplicación. Después de unirte, puedes probar estas acciones para activar eventos:

  • Abandonar la reunión y volver a unirse a ella
  • Invita a otras personas o llama para entrar a la reunión con tu teléfono.
  • Habilita las grabaciones y transcripciones.

Cada una de estas actividades genera un evento que la aplicación recibe y registra en la consola de Google Cloud.

Usa ctrl-c para interrumpir el programa cuando termines.

Opcional: Pasos adicionales que puedes probar

La app registra los detalles básicos sobre los eventos. Para seguir explorando la API de REST de Meet, intenta modificar la aplicación a fin de realizar estas acciones adicionales.

Opcional: Limpieza

Para evitar que se apliquen cargos a tu cuenta de la consola de Google Cloud por los recursos usados en este instructivo, te recomendamos que borres todos los recursos y proyectos creados.

Para borrar la suscripción, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a Menú > Pub/Sub > Suscripciones

    Ir a Suscripciones

  2. Selecciona la suscripción y haz clic en Más acciones.

  3. Haz clic en Borrar. Aparecerá la ventana Borrar suscripción.

  4. Haz clic en Borrar.

gcloud CLI

  1. Borra la suscripción:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

Para borrar el tema, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a Menú > Pub/Sub > Temas.

    Ir a temas

  2. Selecciona el tema y haz clic en Más acciones.

  3. Haz clic en Borrar. Aparecerá la ventana Borrar tema.

  4. Ingresa delete y, luego, haz clic en Borrar.

gcloud CLI

  1. Borra el tema:

    gcloud pubsub topics delete TOPIC_NAME
    

Para borrar el proyecto, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a la página Administrar recursos. Haz clic en Menú > IAM y administración > Administrar recursos.

    Ir a Resource Manager

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

gcloud CLI

  1. Para borrar un proyecto, usa el comando gcloud projects delete:

    gcloud projects delete PROJECT_ID