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 aplicaciones de Chat y las solicitudes a la API de Chat.

Descripción general del proceso

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

Pasos de alto nivel para la autenticación y autorización de Google Chat
Figura 1: Pasos de alto nivel 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, crea un proyecto de Google Cloud. En el proyecto de Google Cloud, debes habilitar la API de Chat, configurar la app de Chat y la autenticación. Para obtener más información, consulta Desarrolla en Google Workspace y Compila una app de Chat.

  2. API de Llamada 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 todavía no se otorgó, se le solicitará que acceda.

  3. Solicitar recursos: Tu app solicita acceso con los alcances que especificas mientras configuras la autenticación.

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

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

  6. Google muestra un token de acceso: El token de acceso contiene una lista de alcances otorgados. Si la lista de permisos que se muestra es más restrictiva que los permisos solicitados, la app desactivará cualquier función que el token limite.

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

  8. Obtén un token de actualización (opcional): Si la app debe acceder a la API de Google Chat más allá de la vida útil 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 API de Google.

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

Cuándo las apps de chat requieren autenticación

Las apps de chat pueden enviar mensajes a Google Chat de forma síncrona o asíncrona. También pueden completar tareas, como crear un espacio de Chat, en nombre de un usuario.

Los mensajes síncronos no requieren autenticación, a menos que la app de chat llame a la API de Chat o a otra API de Google mientras se procesa una respuesta.

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

Los mensajes síncronos no requieren autenticación

Los mensajes síncronos son respuestas a eventos de Chat. Las apps de Google Chat pueden recibir y responder eventos después de que se configuran y publican en la página de configuración de apps de Chat, y no requieren autenticación ni autorización.

Estos son algunos ejemplos de eventos de chat síncronos:

  • Un usuario envía un mensaje a una app de chat en Google Chat.
  • Un usuario menciona una app de chat.
  • Un usuario invoca uno de los comandos de barra de la app de Chat.

En el siguiente diagrama, se muestra una secuencia síncrona de solicitud-respuesta entre un usuario de Chat y una app de Chat:

No se requiere autorización para los mensajes síncronos
Figura 2: Los mensajes síncronos no requieren autenticación.

  1. El usuario envía un mensaje a la app de Chat en Google Chat.
  2. Google Chat reenviará el mensaje a la app.
  3. La app recibe el mensaje, lo procesa y muestra 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 chat.

Los mensajes asíncronos requieren autenticación

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

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

  • Crear un espacio de Chat dedicado a investigar y solucionar la interrupción
  • Agregar personas al espacio de Chat
  • Publicar un mensaje en el espacio de Chat para dar 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 mediante una llamada a la API de Chat con spaces.messages.create method y, además, incluye las credenciales del usuario en la solicitud HTTP.
  2. Google Chat autentica la app de Chat con una cuenta de servicio o credenciales de usuario.
  3. Google Chat procesa el mensaje de la app en un espacio de Chat especificado.

Permisos de la API de Chat

Para definir el nivel de acceso otorgado a la app, debes identificar y declarar los permisos de autorización. Un permiso de autorización es una string de URI de OAuth 2.0 que contiene el nombre de la app de Google Workspace, a qué tipo de datos accede y el nivel de acceso.

Google Chat admite los siguientes permisos:

Alcance de la API de Google Chat Descripción
https://www.googleapis.com/auth/chat.bot Permite que las apps de chat vean los chats y envíen mensajes. Otorga acceso a todas las funciones disponibles para las apps de Chat.
https://www.googleapis.com/auth/chat.delete Borra las conversaciones y los espacios, y quita el acceso a los archivos asociados en Google Chat.
Membresías  
https://www.googleapis.com/auth/chat.memberships Vea, agregue y quite miembros de las conversaciones en Google Chat.
https://www.googleapis.com/auth/chat.memberships.app Permite que la app de Chat se agregue a una conversación y se quite de ella (pero no de otras apps) de Google Chat.
https://www.googleapis.com/auth/chat.memberships.readonly Obtener detalles sobre una membresía y enumerar las membresías en un espacio
Mensajes  
https://www.googleapis.com/auth/chat.messages Crear, obtener, actualizar, borrar y enumerar mensajes en Google Chat
https://www.googleapis.com/auth/chat.messages.create Crear mensajes y subir archivos adjuntos en Google Chat
https://www.googleapis.com/auth/chat.messages.reactions Ver, agregar y borrar reacciones a los mensajes de Google Chat
https://www.googleapis.com/auth/chat.messages.reactions.create Agregar reacciones a los mensajes de Google Chat
https://www.googleapis.com/auth/chat.messages.reactions.readonly Vea reacciones a mensajes de Google Chat.
https://www.googleapis.com/auth/chat.messages.readonly Obtenga y enumere mensajes en Google Chat.
Espacios  
https://www.googleapis.com/auth/chat.spaces Crea conversaciones y espacios, y visualiza o actualiza metadatos (incluida la configuración del historial) en Google Chat.
https://www.googleapis.com/auth/chat.spaces.create Crear conversaciones en Google Chat
https://www.googleapis.com/auth/chat.spaces.readonly Consulta el chat y los espacios en Google Chat.

Si quieres obtener más información sobre los permisos para las API de Google Workspace, consulta Cómo elegir los permisos de tu app.

Si deseas ver una lista de los alcances disponibles, consulta Alcances de OAuth 2.0 para las API de Google.

Tipos de autenticación obligatoria

Existen dos maneras de autenticar y autorizar apps de Chat con la API de Chat: credenciales de usuario o cuentas de servicio.

Con la autorización de credenciales de usuario, una app de chat puede acceder a los datos del usuario y completar acciones en su nombre. Los permisos de OAuth especifican los datos y las acciones autorizados. Sin embargo, estas apps de chat no se pueden publicar de forma pública. Para obtener más información, consulta Publica apps de Google Chat.

Con la autorización de apps, una app de chat accede a la API como una app mediante las credenciales de la cuenta de servicio. La autorización de la app siempre usa el permiso de autorización chat.bot.

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 la autenticación del usuario puede usar la delegación de todo el dominio.

Cuando decidas qué tipo de credencial usar para una solicitud a la API en particular, ten en cuenta que algunos métodos de la API solo admiten un tipo particular de credenciales. Si un método de la API admite ambas credenciales, el tipo de credencial que se usó en la llamada afecta el resultado que se muestra:

  • Con la autorización de la app, los métodos solo muestran recursos a los que puede acceder la app.
  • Con la autorización del usuario, los métodos solo muestran recursos a los que el usuario puede acceder en la IU de Chat.

Por ejemplo, si llamas al método ListSpaces con la autorización de la app, se muestra la lista de espacios de los que forma parte la app. Si llamas a ListSpaces con la autorización del usuario, se muestra la lista de espacios de los que forma parte el usuario. En la práctica, tu app puede usar ambos tipos de autorización cuando llama a la API de Chat, según la funcionalidad que desees.

Para llamadas asíncronas de la API de Chat

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

Método Se admite la autenticación de usuarios Se admite la autenticación de apps Alcances de autorización admitidos
Espacios  
Cómo crear un espacio
  • chat.spaces.create
  • chat.spaces
Configura un espacio
  • chat.spaces.create
  • chat.spaces
Obtener un espacio Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.spaces.readonly
  • chat.spaces
Con Autenticación de la app:
  • chat.bot
Enumera los espacios Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.spaces.readonly
  • chat.spaces
Con Autenticación de la app:
  • chat.bot
Cómo actualizar un espacio
  • chat.spaces
Cómo borrar un espacio
  • chat.delete
Cómo buscar un mensaje directo Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.spaces.readonly
  • chat.spaces
Con Autenticación de la app:
  • chat.bot
Miembros  
Cómo crear un miembro
  • chat.memberships
  • chat.memberships.app
Obtener un miembro Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.memberships.readonly
  • chat.memberships
Con Autenticación de la app:
  • chat.bot
Miembros de la lista Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.memberships.readonly
  • chat.memberships
Con Autenticación de la app:
  • chat.bot
Cómo borrar un miembro
  • chat.memberships
  • chat.memberships.app
Mensajes  
Cómo crear un mensaje Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.messages.create
  • chat.messages
Con Autenticación de la app:
  • chat.bot
Cómo recibir un mensaje Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.messages.readonly
  • chat.messages
Con Autenticación de la app:
  • chat.bot
Cómo enumerar mensajes
  • chat.messages.readonly
  • chat.messages
Cómo actualizar un mensaje Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.messages
Con Autenticación de la app:
  • chat.bot
Cómo borrar un mensaje Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.messages
Con Autenticación de la app:
  • chat.bot
Reacciones  
Cómo crear una reacción
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
Enumera reacciones
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
Cómo borrar una reacción
  • chat.messages.reactions
  • chat.messages
Contenido multimedia y archivos adjuntos  
Cómo subir contenido multimedia como un archivo adjunto
  • chat.messages.create
  • chat.messages
Descargar contenido multimedia Con la autenticación de usuarios, puedes hacer lo siguiente:
  • chat.messages.readonly
  • chat.messages
Con Autenticación de la app:
  • chat.bot
Cómo obtener un archivo adjunto de un mensaje
  • chat.bot

Para recibir interacciones del usuario y responderlas de manera síncrona

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

Situación No se requiere autenticación Se admite la autenticación de usuarios Se admite la autenticación de apps
Recibir mensajes de:
Eventos de chat
Devoluciones de llamada de Apps Script
Google Cloud Pub/Sub
Responde mensajes:
De forma síncrona mediante un evento de chat
De forma síncrona mediante un valor de devolución de llamada de devolución de llamada de Apps Script
Enviar mensajes nuevos:
Con webhooks entrantes