Autentica y autoriza apps de Chat y solicitudes a la API de Google Chat

La autenticación y la autorización son mecanismos que se usan para verificar la identidad y el acceso a los recursos, respectivamente. En este documento, se describe cómo funcionan la autenticación y la autorización para las apps de Chat y las solicitudes a la API de Chat.

Descripción general del proceso

En el siguiente diagrama, se muestran los pasos generales de autenticación y autorización para Google Chat:

Pasos generales para la autenticación y autorización de Google Chat
Figura 1: Pasos generales para la autenticación y autorización de Google Chat.

  1. Configura un proyecto de Google Cloud, habilita la API de Chat y configura tu app de Chat: Durante el desarrollo, crearás un proyecto de Google Cloud. En el proyecto de Google Cloud, habilita la API de Chat, configura tu app de Chat y establece la autenticación. Para obtener más información, consulta Desarrolla en Google Workspace y Crea una app de Chat.

  2. Llama a la API de Chat: Cuando tu app llama a la API de Chat, envía credenciales de autenticación a la API de Chat. Si tu app se autentica con una cuenta de servicio, las credenciales se envían como parte del código de la app. Si tu app requiere llamar a la API de Chat con la autenticación de un usuario que aún no se otorgó, se le solicita al usuario que acceda.

  3. Solicita recursos: Tu app solicita acceso con alcances que especificas cuando configuras la autenticación.

  4. Solicita consentimiento: Si tu app se autentica como usuario, Google muestra una pantalla de consentimiento de OAuth para que el usuario pueda decidir si le otorga acceso a tu app a los datos solicitados. La autenticación con una cuenta de servicio no requiere el consentimiento del usuario.

  5. Envía la solicitud aprobada de recursos: Si el usuario da su consentimiento para los alcances de autorización, tu app agrupa las credenciales y los alcances aprobados por el usuario en una solicitud. La solicitud se envía al servidor de autorización de Google para obtener un token de acceso.

  6. Google devuelve un token de acceso: El token de acceso contiene una lista de los permisos otorgados. Si la lista de permisos devuelta es más restrictiva que los permisos solicitados, tu app desactivará las funciones limitadas por el token.

  7. Accede a los recursos solicitados: Tu app usa el token de acceso de Google para invocar la API de Chat y acceder a sus recursos.

  8. Obtén un token de actualización (opcional): Si tu app debe acceder a la API de Google Chat más allá del ciclo de vida de un solo token de acceso, puede obtener un token de actualización. Si deseas obtener más información, consulta Usa OAuth 2.0 para acceder a las APIs de Google.

  9. Solicita más recursos: Si tu app necesita más acceso, le pide al usuario que otorgue nuevos permisos, lo que genera una nueva solicitud para obtener un token de acceso (pasos 3 a 6).

Cuándo las apps de chat requieren autenticación

Las apps de Chat pueden enviar mensajes en respuesta a una interacción del usuario o de forma asíncrona. También pueden completar tareas en nombre de un usuario, como crear un espacio de Chat o obtener una lista de las personas que se encuentran en un espacio de Chat.

Las apps de Chat no requieren autenticación para responder a una interacción del usuario, a menos que la app de Chat llame a la API de Chat o a otra API de Google mientras procesa una respuesta.

Para enviar mensajes asíncronos o realizar tareas en nombre de un usuario, las apps de Chat realizan solicitudes de REST a la API de Chat, que requieren autenticación y autorización.

Las respuestas a las interacciones del usuario no requieren autenticación

Las apps de Google Chat no necesitan autenticarse como usuario o app de Chat para recibir y responder de forma síncrona a los eventos de interacción.

Las apps de Google Chat reciben eventos de interacción cada vez que un usuario interactúa o invoca una app de Chat, incluidos los siguientes:

  • Un usuario envía un mensaje a una app de Chat.
  • Un usuario @menciona una app de Chat.
  • Un usuario invoca uno de los comandos de la app de Chat.

En el siguiente diagrama, se muestra una secuencia de solicitud y respuesta entre un usuario de Chat y la app de Chat:

No se requiere autorización para los eventos de interacción de la app de Chat
Figura 2.Los eventos de interacción de la app de Chat no requieren autenticación.

  1. El usuario envía un mensaje a la app de Chat en Google Chat.
  2. Google Chat reenvía el mensaje a la app.
  3. La app recibe el mensaje, lo procesa y devuelve una respuesta a Google Chat.
  4. Google Chat renderiza la respuesta para el usuario o en un espacio.

Esta secuencia se repite para cada evento de interacción de la app de Chat.

Los mensajes asíncronos requieren autenticación

Los mensajes asíncronos se producen cuando una app de Chat realiza una solicitud a la API de Chat, que requiere autenticación y autorización.

Cuando llaman a la API de Chat, las apps de Chat pueden publicar mensajes en Google Chat o completar tareas y acceder a datos en nombre del usuario. Por ejemplo, después de detectar una interrupción del servidor, una app de Chat puede llamar a la API de Chat para hacer lo siguiente:

  • Crea un espacio de Chat dedicado a investigar y solucionar la interrupción.
  • Agrega personas al espacio de Chat.
  • Publica un mensaje en el espacio de Chat para brindar detalles sobre la interrupción.

En el siguiente diagrama, se muestra una secuencia de mensajes asíncronos entre una app de Chat y un espacio de Chat:

Se requiere autenticación para los mensajes asíncronos
Figura 3: Los mensajes asíncronos requieren autenticación.

  1. Una app de Chat crea un mensaje llamando a la API de Chat con el método spaces.messages.create y, luego, incluye las credenciales del usuario en la solicitud HTTP.
  2. Google Chat autentica la app de Chat con credenciales de usuario o de cuenta de servicio.
  3. Google Chat renderiza el mensaje de la app en un espacio de Chat especificado.

Permisos de la API de Chat

Configura la pantalla de consentimiento de OAuth y elige permisos para definir qué información se muestra a los usuarios y revisores de apps, y registra tu app para que puedas publicarla más adelante.

Para definir el nivel de acceso que se otorga a tu app, debes identificar y declarar los alcances de autorización. Un alcance de autorización es una cadena de URI de OAuth 2.0 que contiene el nombre de la app de Google Workspace, el tipo de datos a los que accede y el nivel de acceso.

Permisos no sensibles

Código de alcance Descripción
https://www.googleapis.com/auth/chat.bot

Permite que las apps de Chat vean los chats y envíen mensajes.

Este alcance solo admite la autenticación de apps con cuentas de servicio. No puedes autenticarte con credenciales de usuario ni con la delegación para todo el dominio con este permiso.

Permisos sensibles

Código de alcance Descripción
https://www.googleapis.com/auth/chat.spaces Crear conversaciones y espacios, y consultar o editar metadatos (incluida la configuración del historial y la configuración de acceso) en Chat
https://www.googleapis.com/auth/chat.spaces.create Crear conversaciones nuevas en Chat
https://www.googleapis.com/auth/chat.spaces.readonly Ver chats y espacios en Chat
https://www.googleapis.com/auth/chat.memberships Ver, agregar, actualizar y quitar miembros de las conversaciones en Chat
https://www.googleapis.com/auth/chat.memberships.app Unirse y salir de las conversaciones de Google Chat
https://www.googleapis.com/auth/chat.memberships.readonly Ver a los miembros de las conversaciones de Chat
https://www.googleapis.com/auth/chat.messages.create Redactar y enviar mensajes en Chat
https://www.googleapis.com/auth/chat.messages.reactions Ver, agregar y borrar reacciones a los mensajes en Chat
https://www.googleapis.com/auth/chat.messages.reactions.create Agregar reacciones a un mensaje en Chat
https://www.googleapis.com/auth/chat.messages.reactions.readonly Ver las reacciones a un mensaje en Chat
https://www.googleapis.com/auth/chat.users.readstate Ver y modificar la hora de la última lectura en las conversaciones de Chat
https://www.googleapis.com/auth/chat.users.readstate.readonly Ver la hora de la última lectura en las conversaciones de Chat
https://www.googleapis.com/auth/chat.admin.spaces.readonly Ver los chats y los espacios que pertenecen al dominio del administrador en Chat
https://www.googleapis.com/auth/chat.admin.spaces Ver o editar chats y espacios que pertenecen al dominio del administrador en Chat
https://www.googleapis.com/auth/chat.admin.memberships.readonly Ver miembros y administradores en conversaciones que pertenecen al dominio del administrador en Chat
https://www.googleapis.com/auth/chat.admin.memberships Ver, agregar, actualizar y quitar miembros y administradores en las conversaciones que pertenecen al dominio del administrador en Chat
https://www.googleapis.com/auth/chat.app.spaces

Crear conversaciones y espacios, y consultar o actualizar metadatos (incluida la configuración del historial y la configuración de acceso) en Chat Requiere aprobación del administrador.

Este alcance solo admite la autenticación de apps con cuentas de servicio. No puedes autenticarte con credenciales de usuario ni con la delegación para todo el dominio con este permiso.

https://www.googleapis.com/auth/chat.app.spaces.create

Crear conversaciones y espacios nuevos en Chat Requiere aprobación del administrador.

Este alcance solo admite la autenticación de apps con cuentas de servicio. No puedes autenticarte con credenciales de usuario ni con la delegación para todo el dominio con este permiso.

https://www.googleapis.com/auth/chat.app.memberships

Visualiza, agrega, actualiza y quita miembros de conversaciones y espacios de Chat. Requiere aprobación del administrador.

Este alcance solo admite la autenticación de apps con cuentas de servicio. No puedes autenticarte con credenciales de usuario ni con la delegación para todo el dominio con este permiso.

https://www.googleapis.com/auth/chat.customemojis Visualizar, crear y borrar emojis personalizados en Chat
https://www.googleapis.com/auth/chat.customemojis.readonly Visualiza emojis personalizados en Chat.
https://www.googleapis.com/auth/chat.users.spacesettings Consulta y actualiza la configuración de espacio del usuario de Chat.

Permisos restringidos

Código de alcance Descripción
https://www.googleapis.com/auth/chat.delete Borrar conversaciones y espacios, y quitar el acceso a los archivos asociados en Chat
https://www.googleapis.com/auth/chat.import Importar espacios, mensajes y membresías a Chat Para obtener más información, consulta Autoriza apps de Chat para importar datos.
https://www.googleapis.com/auth/chat.messages Ver, redactar, enviar, actualizar y borrar mensajes, así como agregar, ver y borrar reacciones a los mensajes.
https://www.googleapis.com/auth/chat.messages.readonly Ver mensajes y reacciones en Chat
https://www.googleapis.com/auth/chat.admin.delete Borrar conversaciones y espacios que pertenecen al dominio del administrador, y quitar el acceso a los archivos asociados en Chat
https://www.googleapis.com/auth/chat.app.delete

Borrar conversaciones y espacios, y quitar el acceso a los archivos asociados en Chat Requiere aprobación del administrador.

Este alcance solo admite la autenticación de apps con cuentas de servicio. No puedes autenticarte con credenciales de usuario ni con la delegación para todo el dominio con este permiso.

Los alcances de las tablas anteriores indican su sensibilidad, según las siguientes definiciones:

Si tu app requiere acceso a otras APIs de Google, también puedes agregar esos permisos. Si deseas obtener más información sobre los permisos de las APIs de Google, consulta Usa OAuth 2.0 para acceder a las APIs de Google.

Para obtener más información sobre los permisos de las APIs de Google Workspace, consulta Cómo configurar la pantalla de consentimiento de OAuth y elegir permisos.

Tipos de autenticación requerida

Existen dos formas en que las apps de Chat pueden autenticarse y autorizarse con la API de Chat:

Autenticación de usuarios
Autenticación del usuario permite que una app de Chat acceda a los datos del usuario y complete acciones en nombre de un usuario. Los permisos de OAuth especifican los datos y las acciones autorizados. A menos que la app de Chat se haya instalado por el administrador o se le haya otorgado la delegación de todo el dominio, la primera vez que la app de Chat realice una acción en nombre de un usuario, este deberá autorizarla con la pantalla de consentimiento de OAuth.
Autenticación de la app

La autenticación de apps permite que una app de Chat use credenciales de cuentas de servicio y acceda a datos, y complete acciones por sí misma. Dado que la app de Chat usa sus propias credenciales para acceder a los recursos y trabajar con ellos, los usuarios finales no necesitan aprobar las llamadas a la API de la app de Chat, y no puedes agregar permisos de autorización de OAuth que admitan la autorización de la app a la pantalla de consentimiento de OAuth.

Existen dos tipos de permisos de autorización de OAuth que admiten la autenticación de apps:

  • https://www.googleapis.com/auth/chat.bot: Tu app de Chat puede llamar a los métodos de la API de Google Chat que admiten este alcance de autorización para crear, actualizar, obtener, enumerar o borrar los recursos a los que tiene acceso, como los mensajes en los espacios a los que los usuarios finales agregan tu app de Chat. Tu app de Chat puede otorgarse a sí misma este alcance de autorización, sin necesidad de autorización del administrador o del usuario final.
  • https://www.googleapis.com/auth/chat.app.* (Versión preliminar para desarrolladores): El uso de estos permisos requiere la aprobación única del administrador. Para recibir la aprobación del administrador, prepara la cuenta de servicio de la app de Chat para recibir la aprobación del administrador creando un cliente de OAuth compatible con Google Workspace Marketplace y configurando la app en el SDK de Google Workspace Marketplace. Estos alcances permiten que tu app de Chat llame a métodos específicos de la API de Google Chat. Por ejemplo, chat.app.spaces.create permite que las apps creen espacios de Chat.

Si un método admite la autenticación de usuarios o de apps, la API de Chat devuelve resultados diferentes según el tipo de autenticación que uses:

  • Con la autenticación de la app, los métodos solo devuelven recursos a los que puede acceder la app de chat.
  • Con la autenticación del usuario, los métodos solo devuelven los recursos a los que puede acceder el usuario.

Por ejemplo, llamar al método spaces.list() con la autorización de la app devuelve la lista de espacios de los que la app de Chat es miembro. Si llamas a spaces.list() con la autorización del usuario, se muestra la lista de espacios de los que el usuario es miembro. En la práctica, es posible que uses ambos tipos de autenticación cuando llames a la API de Chat, según el diseño y las funciones de tu app de Chat.

Para llamadas asíncronas a la API de Chat

En la siguiente tabla, se enumeran los métodos de la API de Chat y sus alcances de autorización admitidos:

Método Autenticación de usuarios compatible Se admite la autenticación de la app. Permisos de autorización admitidos
Espacios  
Cómo crear un espacio Con la autenticación de usuarios:
  • chat.spaces.create
  • chat.spaces
  • chat.import
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.spaces.create
  • chat.app.spaces
Cómo configurar un espacio Con la autenticación de usuarios:
  • chat.spaces.create
  • chat.spaces
Obtén un espacio Con la autenticación de usuarios:
  • chat.spaces.readonly
  • chat.spaces
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.spaces.readonly
Con la autenticación de apps:
  • chat.bot
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.spaces
Crea listas de espacios Con la autenticación de usuarios:
  • chat.spaces.readonly
  • chat.spaces
Con la autenticación de apps:
  • chat.bot
Espacios de búsqueda Con la autenticación de usuarios que utiliza privilegios de administrador, haz lo siguiente:
  • chat.admin.spaces.readonly
Actualiza un espacio Con la autenticación de usuarios:
  • chat.spaces
  • chat.import
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.spaces
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.spaces
Cómo borrar un espacio Con la autenticación de usuarios:
  • chat.delete
  • chat.import
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.delete
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.delete
Cómo completar el proceso de importación de un espacio Con la autenticación de usuarios:
  • chat.import
Cómo encontrar un mensaje directo Con la autenticación de usuarios:
  • chat.spaces.readonly
  • chat.spaces
Con la autenticación de apps:
  • chat.bot
Miembros  
Crea un miembro Con la autenticación de usuarios:
  • chat.memberships
  • chat.memberships.app
  • chat.import
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.memberships
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.memberships
Obtén un miembro Con la autenticación de usuarios:
  • chat.memberships.readonly
  • chat.memberships
Con la autenticación de apps:
  • chat.bot
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.memberships.readonly
Crea una lista de los miembros Con la autenticación de usuarios:
  • chat.memberships.readonly
  • chat.memberships
  • chat.import
Con la autenticación de apps:
  • chat.bot
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.memberships.readonly
Borra un miembro Con la autenticación de usuarios:
  • chat.memberships
  • chat.memberships.app
  • chat.import
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.memberships
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.memberships
Actualiza un miembro Con la autenticación de usuarios:
  • chat.memberships
  • chat.import
Con la autenticación de usuarios que usa privilegios de administrador:
  • chat.admin.memberships
Con la autenticación de la app y la aprobación del administrador (disponibles en la versión preliminar para desarrolladores):
  • chat.app.memberships
Mensajes  
Crea un mensaje Con la autenticación de usuarios:
  • chat.messages.create
  • chat.messages
  • chat.import
Con la autenticación de apps:
  • chat.bot
Recibir un mensaje Con la autenticación de usuarios:
  • chat.messages.readonly
  • chat.messages
Con la autenticación de apps:
  • chat.bot
Crea una lista con los mensajes Con la autenticación de usuarios:
  • chat.messages.readonly
  • chat.messages
  • chat.import
Actualiza un mensaje Con la autenticación de usuarios:
  • chat.messages
  • chat.import
Con la autenticación de apps:
  • chat.bot
Cómo borrar un mensaje Con la autenticación de usuarios:
  • chat.messages
  • chat.import
Con la autenticación de apps:
  • chat.bot
Reacciones  
Crea una reacción Con la autenticación de usuarios:
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
  • chat.import
Crea una lista con las reacciones Con la autenticación de usuarios:
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
Cómo borrar una reacción Con la autenticación de usuarios:
  • chat.messages.reactions
  • chat.messages
  • chat.import
Emojis personalizados  
Cómo crear un emoji personalizado Con la autenticación de usuarios:
  • chat.customemojis
Cómo borrar un emoji personalizado Con la autenticación de usuarios:
  • chat.customemojis
Obtén un emoji personalizado Con la autenticación de usuarios:
  • chat.customemojis
  • chat.customemojis.readonly
Enumera emojis personalizados Con la autenticación de usuarios:
  • chat.customemojis
  • chat.customemojis.readonly
Multimedia y archivos adjuntos  
Cómo subir contenido multimedia como archivo adjunto Con la autenticación de usuarios:
  • chat.messages.create
  • chat.messages
  • chat.import
Descarga contenido multimedia Con la autenticación de usuarios:
  • chat.messages.readonly
  • chat.messages
Con la autenticación de apps:
  • chat.bot
Obtén un archivo adjunto de un mensaje Con la autenticación de apps:
  • chat.bot
Estados de lectura del usuario
Obtén el estado de lectura del espacio de un usuario Con la autenticación de usuarios:
  • chat.users.readstate
  • chat.users.readstate.readonly
Actualiza el estado de lectura del espacio de un usuario Con la autenticación de usuarios:
  • chat.users.readstate
Obtén el estado de lectura del subproceso de un usuario Con la autenticación de usuarios:
  • chat.users.readstate
  • chat.users.readstate.readonly
Configuración del espacio del usuario
Obtén la configuración de notificaciones de un espacio del usuario Con la autenticación de usuarios:
  • chat.users.spacesettings
Actualiza la configuración de notificaciones de un espacio para un usuario Con la autenticación de usuarios:
  • chat.users.spacesettings
Eventos de Space
Obtén eventos del espacio Con la autenticación de usuarios, debes usar un alcance basado en el tipo de evento:
  • Para los eventos relacionados con mensajes, se incluyen los siguientes campos:
    • chat.messages
    • chat.messages.readonly
  • Para los eventos sobre reacciones, haz lo siguiente:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • Para los eventos relacionados con membresías, haz lo siguiente:
    • chat.memberships
    • chat.memberships.readonly
  • Para eventos sobre el espacio:
    • chat.spaces
    • chat.spaces.readonly
Enumera los eventos del espacio Con la autenticación de usuarios, debes usar un alcance para cada tipo de evento incluido en la solicitud:
  • Para los eventos relacionados con mensajes, se incluyen los siguientes campos:
    • chat.messages
    • chat.messages.readonly
  • Para los eventos sobre reacciones, haz lo siguiente:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • Para los eventos relacionados con membresías, haz lo siguiente:
    • chat.memberships
    • chat.memberships.readonly
  • Para eventos sobre el espacio:
    • chat.spaces
    • chat.spaces.readonly

Para eventos de interacción de la app de Chat

En la siguiente tabla, se enumeran las formas comunes en que los usuarios interactúan con las apps de chat y se indica si se requiere o admite la autenticación:

Situación No se requiere autenticación Autenticación de usuarios compatible Se admite la autenticación de la app.
Recibir mensajes de:
Eventos de interacción de la app de Chat
Devoluciones de llamada de Apps Script
Google Cloud Pub/Sub
Responder mensajes:
De forma síncrona, con un evento de interacción de la app de Chat
De forma síncrona, con un valor de devolución de llamada de Apps Script
Enviar mensajes nuevos:
Con webhooks entrantes