En esta guía, se explica cómo configurar y usar una cuenta de servicio para acceder a la API de Google Chat en nombre de una app de Chat. En primer lugar, se explica cómo crear una cuenta de servicio. Luego, se muestra 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.
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 mostrar una lista de miembros de un espacio o crear un mensaje en un espacio, la app de Chat debe ser miembro del espacio. La única excepción es cuando una app de Chat crea un espacio con autenticación de apps, en cuyo caso la app crea el espacio y, luego, se convierte automáticamente en miembro.
Los métodos de la API de Google Chat que admiten la autorización de apps con permisos de autorización que tienen nombres que comienzan con https://www.googleapis.com/auth/chat.app.*
requieren una aprobación única del administrador.
Los métodos de la API de Google Chat que admiten la autorización de apps con el permiso https://www.googleapis.com/auth/chat.bot
no requieren aprobación adicional. Los permisos de autorización de https://www.googleapis.com/auth/chat.app.*
están disponibles en la Versión preliminar para desarrolladores.
Si tu app de chat necesita acceder a los datos del usuario o realizar acciones en su nombre, autentícate como usuario. Si eres administrador de dominio, puedes otorgar la delegación de autoridad en todo el dominio para autorizar a la cuenta de servicio de una app de Chat a acceder a los datos de tus usuarios sin que cada uno de ellos deba dar su consentimiento. Para obtener más información, consulta Cómo autenticar y autorizar con la delegación de todo el dominio.
Para obtener más información sobre cuándo las apps de Chat requieren autenticación y qué tipo de autenticación usar, consulta Tipos de autenticación requerida en la descripción general de autenticación y autorización de la API de Chat.
Requisitos previos
Java
- JDK 1.7 o superior
- La herramienta de administración de paquetes Maven
-
Un proyecto de Maven inicializado Para inicializar un proyecto nuevo, ejecuta el siguiente comando en la
interfaz de línea de comandos:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Una app de Google Chat habilitada para funciones interactivas Para crear una app de Chat interactiva con un servicio HTTP, completa esta guía de inicio rápido.
- Agregar la app de Chat a un espacio Para agregar la app de Chat, consulta Cómo probar las funciones interactivas de las apps de Google Chat.
Python
- Python 3.6 o una versión posterior
- La herramienta de administración de paquetes pip
- Una app de Google Chat habilitada para funciones interactivas. Para crear una app de Chat interactiva con un servicio HTTP, completa esta guía de inicio rápido.
- Agrega la app de Chat a un espacio. Para agregar la app de Chat, consulta Cómo probar las funciones interactivas de las apps de Google Chat.
Node.js
- Node.js 14 o versiones posteriores
- La herramienta de administración de paquetes npm
-
Un proyecto de Node.js inicializado Para inicializar un proyecto nuevo, crea una carpeta nueva y cambia a ella. Luego, ejecuta el siguiente comando en la interfaz de línea de comandos:
npm init
- Una app de Google Chat habilitada para funciones interactivas. Para crear una app de Chat interactiva con un servicio HTTP, completa esta guía de inicio rápido.
- Agregar la app de Chat a un espacio Para agregar la app de Chat, consulta Cómo probar las funciones interactivas de las apps de Google Chat.
Apps Script
- Una app de Google Chat habilitada para funciones interactivas Para crear una app de Chat interactiva en Apps Script, completa esta guía de inicio rápido.
- Agrega la app de Chat a un espacio. Para agregar la app de Chat, consulta Cómo probar las funciones interactivas de las apps de Google Chat.
Paso 1: Crea una cuenta de servicio en la consola de Google Cloud
Crea una cuenta de servicio que tu app de Chat pueda usar para acceder a las APIs de Google.
Crea una cuenta de servicio
Para crear una cuenta de servicio, sigue estos pasos:
Consola de Google Cloud
- En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.
- Haga clic en Crear cuenta de servicio.
- Completa los detalles de la cuenta de servicio y, luego, haz clic en Crear y continuar.
- 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 Otorga, cambia y revoca el acceso a los recursos.
- Haz clic en Continuar.
- Opcional: Ingresa los usuarios o grupos que pueden administrar esta cuenta de servicio y realizar acciones con ella. Para obtener más detalles, consulta Administra la suplantación de identidad de cuentas de servicio.
- Haz clic en Listo. Toma nota de la dirección de correo electrónico de la cuenta de servicio.
gcloud CLI
- Crea la cuenta de servicio:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - 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.
La cuenta de servicio aparecerá en la página de cuentas de servicio. A continuación, crea una clave privada para la cuenta de servicio.
Crea una clave privada
Para crear y descargar una clave privada para la cuenta de servicio, sigue estos pasos:
- En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.
- Selecciona tu cuenta de servicio.
- Haz clic en Claves > Agregar clave > Crear nueva clave.
- Selecciona JSON y, luego, haz clic en Crear.
Se generará y descargará a tu equipo el nuevo par de claves pública/privada como un archivo nuevo. Guarda el archivo JSON descargado como
credentials.json
en tu directorio de trabajo. Este archivo es la única copia de esta clave. Si quieres obtener más información para almacenar tu clave de forma segura, consulta Administra claves para cuentas de servicio. - 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.
A continuación, crea un cliente de OAuth compatible con Google Workspace Marketplace para esta cuenta de servicio.
Recibir la aprobación del administrador
Para usar un permiso de autorización que comienza con https://www.googleapis.com/auth/chat.app.*
, que está disponible como parte de una Versión preliminar para desarrolladores, tu app de Chat debe obtener una aprobación del administrador única.
Para usar el permiso de autorización https://www.googleapis.com/auth/chat.bot
,
no se requiere la aprobación del administrador.
Para recibir la aprobación del administrador, debes preparar la cuenta de servicio de tu app de Chat con la siguiente información:
- Un cliente de OAuth compatible con Google Workspace Marketplace
- Configuración de la app en el SDK de Google Workspace Marketplace
Crea un cliente de OAuth compatible con Google Workspace Marketplace
Para crear un cliente de OAuth compatible con Google Workspace Marketplace, sigue estos pasos:
En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.
Haz clic en la cuenta de servicio que creaste para tu app de Chat.
Haz clic en Configuración avanzada.
Haz clic en Crear un cliente de OAuth compatible con Google Workspace Marketplace.
Haz clic en Continuar.
Aparecerá un mensaje de confirmación que indica que se creó un cliente de OAuth compatible con Google Workspace Marketplace.
Cómo configurar la app de Chat en el SDK de Google Workspace Marketplace
Para configurar la app de Chat en el SDK de Google Workspace Marketplace, sigue estos pasos:
En la consola de Google Cloud, habilita el SDK de Google Workspace Marketplace.
En la consola de Google Cloud, ve a Menú > APIs y servicios > APIs y servicios habilitados > SDK de Google Workspace Marketplace > Configuración de la app.
Completa la página Configuración de la app. La forma en que configures tu app de chat depende de quién sea tu público objetivo y de otros factores. Si necesitas ayuda para completar la página de configuración de la app, consulta Cómo configurar tu app en el SDK de Google Workspace Marketplace. Para los fines de esta guía, ingresa la siguiente información:
- En Visibilidad de la app, selecciona Privada.
- En Configuración de instalación, selecciona Instalaciones individuales y de administrador.
- En Integraciones de apps, selecciona App de Chat.
En Alcances de OAuth, ingresa todos los alcances de autenticación que usa tu app de Chat.
En Información del desarrollador, ingresa tu Nombre del desarrollador, URL del sitio web del desarrollador y Correo electrónico del desarrollador.
Haz clic en Guardar borrador.
Obtén la aprobación del administrador
Ahora que tu cuenta de servicio está configurada para recibir la aprobación del administrador, obtén la aprobación de un administrador de Google Workspace que pueda otorgarla. Para ello, sigue los pasos que se indican en Cómo configurar la autorización para apps de Chat.
Paso 2: Instala la biblioteca cliente de Google y otras dependencias
Instala la biblioteca cliente de Google y otras dependencias necesarias para el proyecto.
Java
Para agregar las bibliotecas cliente de Google y otras dependencias requeridas a tu proyecto de Maven, edita el archivo pom.xml
en el directorio de tu proyecto y agrega las siguientes dependencias:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Python
Si aún no instalaste las bibliotecas cliente de Google para Python, ejecuta el siguiente comando en la interfaz de línea de comandos:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Para agregar las bibliotecas cliente de Google a tu proyecto de Node.js, cambia al directorio del proyecto y ejecuta el siguiente comando en la interfaz de línea de comandos:
npm install "@googleapis/chat"
Apps Script
En este ejemplo, se usa la biblioteca OAuth2 para Apps Script para generar un token JWT para la autenticación de cuentas de servicio. Para agregar la biblioteca a tu proyecto de Apps Script, sigue estos pasos:
- A la izquierda, haz clic en Editor .
- A la izquierda, junto a Bibliotecas, haz clic en Agregar una biblioteca .
- Ingresa el ID de la secuencia de comandos
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Haz clic en Buscar y, luego, en Agregar.
En esta muestra, se usa el servicio de Chat avanzado para llamar a la API de Google Chat. Para activar el servicio en tu proyecto de Apps Script, haz lo siguiente:
- A la izquierda, haz clic en Editor .
- A la izquierda, junto a Servicios, haz clic en Agregar un servicio .
- Selecciona API de Google Chat.
- En Versión, selecciona v1.
- Haz clic en Agregar.
Puedes usar cualquier lenguaje compatible con nuestras bibliotecas cliente.
Paso 3: Escribe una secuencia de comandos que use la cuenta de servicio para autenticarse con la API de Chat
El siguiente código se autentica con la API de Chat con una cuenta de servicio y, luego, publica un mensaje en un espacio de Chat:
Java
- En el directorio de tu proyecto, abre el archivo
src/main/java/com/google/chat/app/authsample/App.java
. Reemplaza el contenido de
App.java
por el siguiente código:package com.google.chat.app.authsample; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Message; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; /** * Authenticates with Chat API using service account credentials, * then creates a Chat message. */ public class App { // Specify required scopes. private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot"; // Specify service account details. private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json"; public static void main( String[] args ) { try { // Run app. Message response = App.createChatMessage(); // Print details about the created message. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } private static Message createChatMessage() throws Exception { // Build the Chat API client and authenticate with the service account. GoogleCredentials credentials = GoogleCredentials.fromStream( App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI)) .createScoped(CHAT_SCOPE); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); HangoutsChat chatService = new HangoutsChat.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("auth-sample-app") .build(); // 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. String spaceName = "spaces/SPACE_NAME"; // Create a Chat message. Message message = new Message().setText("Hello, world!"); return chatService.spaces().messages().create(spaceName, message).execute(); } }
En el código, reemplaza
SPACE_NAME
por un nombre de espacio, que puedes obtener del métodospaces.list
en la API de Chat o de la URL de un espacio.Crea un subdirectorio nuevo llamado
resources
dentro del directorio de tu proyecto.Asegúrate de que el archivo de clave privada de tu cuenta de servicio se llame
credentials.json
y cópialo en el subdirectorioresources
.Para configurar Maven para que incluya el archivo de clave privada en el paquete del proyecto, edita el archivo
pom.xml
en el directorio de tu proyecto y agrega la siguiente configuración a la sección<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Para configurar Maven de modo que incluya las dependencias en el paquete del proyecto y ejecute la clase principal de tu aplicación, edita el archivo
pom.xml
en el directorio de tu proyecto y agrega la siguiente configuración a la sección<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Python
- En el directorio de trabajo, crea un archivo llamado
chat_app_auth.py
. Incluye el siguiente código en
chat_app_auth.py
:from apiclient.discovery import build from google.oauth2 import service_account # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. creds = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', credentials=creds) # 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() # Prints details about the created message. print(result)
En el código, reemplaza
SPACE_NAME
por un nombre de espacio, que puedes obtener del métodospaces.list
en la API de Chat o de la URL de un espacio. Asegúrate de que el archivo de claves privadas para tu cuenta de servicio se llamecredentials.json
.
Node.js
- En el directorio de tu proyecto, crea un archivo llamado
chat_app_auth.js
. Incluye el siguiente código en
chat_app_auth.js
:const chat = require('@googleapis/chat'); async function createMessage() { const auth = new chat.auth.GoogleAuth({ // Specify service account details. keyFilename: 'credentials.json', // Specify required scopes. scopes: ['https://www.googleapis.com/auth/chat.bot'] }); const authClient = await auth.getClient(); // Create the Chat API client and authenticate with the service account. const chatClient = await chat.chat({ version: 'v1', auth: authClient }); // Create a Chat message. const result = await chatClient.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. requestBody: { 'text': 'Hello, world!' } }); return result; } // Execute function then print details about the created message. createMessage().then(console.log);
En el código, reemplaza
SPACE_NAME
por un nombre de espacio, que puedes obtener del métodospaces.list
en la API de Chat o de la URL de un espacio. Asegúrate de que el archivo de claves privadas de tu cuenta de servicio se llamecredentials.json
.
Apps Script
En el editor de Apps Script, edita el archivo
appsscript.json
y agrega el permiso de OAuth necesario para realizar solicitudes externas y obtener el token de OAuth de la cuenta de servicio:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Guarda el siguiente código en un archivo llamado
ChatAppAuth.gs
en tu proyecto de Apps Script:// Specify the contents of the file credentials.json. const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; // 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. const PARENT = 'spaces/SPACE_NAME' /** * Authenticates with Chat API using app credentials, then posts a message. */ function createMessageWithAppCredentials() { try { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // Specify the message to create. const message = {'text': 'Hello world!'}; // Call Chat API with a service account to create a message. const result = Chat.Spaces.Messages.create( message, PARENT, {}, // Authenticate with the service account token. {'Authorization': 'Bearer ' + service.getAccessToken()}); // Log details about the created message. console.log(result); } catch (err) { // TODO (developer) - Handle exception. console.log('Failed to create message with error %s', err.message); } } /** * Configures the OAuth library to authenticate with the service account. */ function getService_() { return OAuth2.createService(CREDENTIALS.client_email) .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(CREDENTIALS.private_key) .setIssuer(CREDENTIALS.client_email) .setSubject(CREDENTIALS.client_email) .setScope(SCOPE) .setPropertyStore(PropertiesService.getScriptProperties()); }
En el código, reemplaza
CREDENTIALS
por el contenido del archivocredentials.json
.En el código, reemplaza
SPACE_NAME
por un nombre de espacio, que puedes obtener del métodospaces.list
en la API de Chat o de la URL de un espacio.
Paso 4: Ejecuta el ejemplo completo
En tu directorio de trabajo, compila y ejecuta la muestra:
Java
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_app_auth.py
Node.js
node chat_app_auth.js
Apps Script
Abre el archivo ChatAppAuth.gs
en el editor de Apps Script y haz clic en Run.
Tu secuencia de comandos realiza una solicitud autenticada a la API de Chat, que responde publicando un mensaje en un espacio de Chat como una app de Chat.
Soluciona el problema 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 la secuencia de comandos, es posible que recibas un error que diga lo siguiente:
<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 crear mensajes de Chat en el espacio de Chat especificado.
Para resolver el error, agrega la app de Chat al espacio de Chat especificado en la secuencia de comandos.
El administrador debe otorgarle a la app el alcance de autorización de OAuth requerido para esta acción.
Cuando ejecutes la secuencia de comandos, es posible que recibas un error que diga lo siguiente:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">
Este mensaje de error significa que un administrador de Google Workspace aún no otorgó la aprobación única a la app de Chat para usar los permisos de autorización que comienzan con el nombre https://www.googleapis.com/auth/chat.app.*
.
Para resolver el error, haz lo siguiente:
- Pídele al administrador de Google Workspace que otorgue la aprobación a tu app de Chat. Cuando manejes este error en la lógica de tu app de Chat, considera enviar un mensaje en el que se anuncie que la app de Chat necesita la aprobación del administrador para realizar la acción solicitada, tal vez:
To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>.
- Si el método de la API de Google Chat admite el permiso de autorización
https://www.googleapis.com/auth/chat.bot
, que no requiere la aprobación del administrador, considera usarlo. Para verificar qué permisos de autorización admite un método, consulta la documentación de referencia de la API de Google Chat.
Temas relacionados
- Para conocer qué más puede hacer la API de Chat, consulta la documentación de referencia de la API de Chat.
- Si usas un permiso de autorización de OAuth que comienza con
https://www.googleapis.com/auth/chat.app.*
, obtén información sobre cómo los administradores otorgan aprobación única.