Autentica como una app de chat

En esta guía, se explica cómo configurar y usar una cuenta de servicio para acceder a la API de REST de Google Chat en nombre de una app de Chat. Primero, se explica cómo crear una cuenta de servicio. Luego, se demuestra cómo escribir una secuencia de comandos que use la cuenta de servicio para autenticarse con la API de Chat y publicar un mensaje en un espacio de Chat.

Las apps de chat pueden usar cuentas de servicio para autenticarse cuando llaman de forma asíncrona a la API de REST de Google Chat a fin de realizar lo siguiente:

  • Enviar mensajes a Google Chat con spaces.messages.create para lo siguiente:
    • Notificar a los usuarios cuando un trabajo en segundo plano de larga duración termina de ejecutarse.
    • Alerta a los usuarios que un servidor se quedó sin conexión.
    • Pídale a una persona de atención al cliente que dé lugar a un caso de cliente abierto recientemente.
  • Actualiza los mensajes enviados previamente con spaces.messages.update a lo siguiente:
    • Cambia el estado de la operación en curso.
    • Actualiza el destinatario de una tarea o la fecha límite.
  • Enumera los usuarios en un espacio con spaces.members.list para lo siguiente:
    • Mira quién está en un espacio.
    • Verifique que la membresía del espacio incluya a todos los miembros de un equipo.

Cuando se autentica con una cuenta de servicio, para obtener datos sobre un espacio de Chat o realizar acciones en él, las apps de Chat deben tener membresía en el espacio. Por ejemplo, para crear una lista de los miembros de un espacio o crear un mensaje en él, la app de Chat debe ser miembro del espacio.

Si tu app de chat necesita acceder a datos del usuario o realizar acciones en nombre de un usuario, autentícate como usuario en su lugar.

Si eres administrador de dominio, puedes otorgar delegación de autoridad de todo el dominio para autorizar que la cuenta de servicio de una aplicación acceda a los datos de tus usuarios sin requerir que cada uno otorgue su consentimiento. Después de configurar la delegación de todo el dominio, puedes realizar llamadas a la API con la cuenta de servicio para actuar en nombre de una cuenta de usuario. Aunque una cuenta de servicio se usa para la autenticación, la delegación de todo el dominio actúa en nombre de un usuario y, por lo tanto, se la considera autenticación de usuario. Cualquier funcionalidad que requiera autenticación del usuario, puedes usar la delegación de todo el dominio.

Para obtener más información sobre el momento en que las apps de Chat requieren autenticación y qué tipo de autenticación se debe usar, consulta Tipos de autenticación requerida en la descripción general de la autenticación y la autorización de la API de Chat.

Requisitos previos

Para ejecutar el ejemplo de esta guía, necesitas los siguientes requisitos previos:

Python

Paso 1: Crea una cuenta de servicio en Google Cloud Console

Crea una cuenta de servicio que usará la app de Chat para acceder a las API de Google.

Crear una cuenta de servicio:

Para crear una cuenta de servicio, sigue estos pasos:

  1. En la consola de Google Cloud, ve al 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 funciones a tu cuenta de servicio para otorgar acceso a los recursos de tu proyecto de Google Cloud. Para obtener más información, consulta Otorga, cambia y revoca 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 detalles, consulta Cómo administrar el robo de identidad de cuentas de servicio.
  7. Haz clic en Listo. Toma nota de la dirección de correo electrónico de la cuenta de servicio.

La cuenta de servicio aparecerá en la página de la cuenta de servicio. A continuación, crea una clave privada para la cuenta de servicio.

Crea una clave privada

A fin de crear una clave privada para la cuenta de servicio, sigue estos pasos:

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

    Ir a Cuentas de servicio

  2. Selecciona tu cuenta de servicio.
  3. Haz clic en Claves > Agregar clave > Crear clave nueva.
  4. Selecciona JSON y, luego, haz clic en Crear.

    Ya se generó y descargó el nuevo par de claves pública y privada en tu máquina como un archivo nuevo. Este archivo es la única copia de esta clave. Para obtener información sobre cómo almacenar tu clave de forma segura, consulta Cómo administrar claves para cuentas de servicio.

  5. Haz clic en Cerrar.

Para obtener más información sobre las cuentas de servicio, consulta cuentas de servicio en la documentación de Google Cloud IAM.

Paso 2: Escribe una secuencia de comandos que use la cuenta de servicio para autenticarse con la API de REST de Chat

El siguiente código se autentica con la API de REST de Chat mediante una cuenta de servicio y, luego, publica un mensaje en un espacio de Chat:

Python

  1. En tu directorio de trabajo, crea un archivo llamado chat_app_auth.py.
  2. Incluye el siguiente código en chat_app_auth.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'service_account.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # Replace SPACE_NAME with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        parent='spaces/SPACE_NAME',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    print(result)
    
  3. En el código, reemplaza SPACE_NAME por un nombre de espacio, que puedes obtener del método spaces.list en la API de Chat o de la URL de un espacio.

Paso 3: Ejecuta el ejemplo completo

En tu directorio de trabajo, compila y ejecuta la muestra:

Python

python3 chat_app_auth.py

La secuencia de comandos realiza una solicitud autenticada a la API de REST de Chat que responde mediante la publicación de un mensaje en un espacio de Chat como una app de Chat.

Cómo solucionar problemas del ejemplo

En esta sección, se describen los problemas comunes que puedes encontrar cuando intentas ejecutar esta muestra.

No tienes permiso para usar esta app

Cuando ejecutes chat_app_auth.py, es posible que recibas el siguiente error:

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">

Este mensaje de error significa que la app de Chat no tiene permiso para publicar mensajes de Chat en el espacio de Chat en el que intenta publicar.

Para resolver el error, agrega la app de Chat al espacio de Chat especificado en chat_app_auth.py.

Próximo paso

Revisa la documentación de referencia de la API de Chat para saber qué más puede hacer la API de Chat.