Ce guide explique comment configurer et utiliser un compte de service pour accéder à l'API Google Chat au nom d'une application Chat. Tout d'abord, il explique comment créer un compte de service. Ensuite, il montre comment écrire un script qui utilise le compte de service pour s'authentifier auprès de l'API Chat et publier un message dans un espace Chat.
Les applications de chat peuvent utiliser des comptes de service pour s'authentifier lors de l'appel asynchrone de l'API Google Chat. Elles peuvent ainsi:
- Envoyer des messages à Google Chat avec
spaces.messages.create
à :- Prévenez les utilisateurs lorsqu'une tâche d'arrière-plan de longue durée se termine.
- Alertez les utilisateurs lorsqu'un serveur est hors connexion.
- Demandez à un membre du service client de s'occuper d'un nouveau dossier client.
- Mettez à jour les messages précédemment envoyés avec
spaces.messages.update
pour :- Modifier l'état de l'opération en cours.
- Modifiez le responsable ou la date limite d'une tâche.
- Répertoriez les utilisateurs d'un espace avec
spaces.members.list
pour :- Voir qui est dans un espace.
- Vérifiez que les membres de l'espace incluent tous les membres d'une équipe.
Lorsqu'elles sont authentifiées avec un compte de service, pour obtenir des données ou effectuer des actions dans un espace Chat, les applications Chat doivent être membres de l'espace. Par exemple, pour répertorier les membres d'un espace ou créer un message dans un espace, l'application Chat doit être elle-même membre de l'espace.
Si votre application Chat doit accéder aux données utilisateur ou effectuer des actions au nom d'un utilisateur, authentifiez-vous en tant qu'utilisateur.
Si vous êtes administrateur de domaine, vous pouvez accorder une délégation d'autorité au niveau du domaine pour autoriser le compte de service d'une application à accéder aux données de vos utilisateurs sans que chacun d'eux donne son consentement. Après avoir configuré la délégation au niveau du domaine, vous pouvez effectuer des appels d'API à l'aide de votre compte de service pour emprunter l'identité d'un compte utilisateur. Bien qu'un compte de service soit utilisé pour l'authentification, la délégation au niveau du domaine emprunte l'identité d'un utilisateur et est donc considérée comme une authentification de l'utilisateur. Vous pouvez utiliser la délégation au niveau du domaine pour toutes les fonctionnalités qui nécessitent une authentification des utilisateurs.
Pour en savoir plus sur les cas où les applications Chat nécessitent une authentification et sur le type d'authentification à utiliser, consultez la section Types d'authentification requise dans la présentation de l'authentification et de l'autorisation de l'API Chat.
Conditions préalables
Pour exécuter l'exemple de ce guide, vous devez disposer des conditions préalables suivantes:
- Un compte Google Workspace ayant accès à Google Chat
- Un projet Google Cloud avec l'API Chat activée Pour créer un projet et activer une API, consultez la page Créer un projet et activer l'API.
- Une application Chat publiée qui est membre d'un espace Chat :
- Pour créer et publier une application Chat, consultez la page Créer une application Google Chat avec Cloud Functions.
- Pour ajouter une application Chat à un espace Chat, consultez Ajouter des applications à des espaces ou à des conversations dans Google Chat.
De plus, vous devez remplir les conditions préalables suivantes propres à chaque langage:
Java
- JDK 1.7 ou version ultérieure
- L'outil de gestion de packages Maven
Projet Maven initialisé. Pour initialiser un nouveau projet, exécutez la commande suivante dans votre interface de ligne de commande:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Python
- Python 3.6 ou version ultérieure
- L'outil de gestion de packages pip
Node.js
Apps Script
- Un projet Apps Script connecté à votre projet Google Cloud. Pour initialiser un projet Apps Script, consultez le guide de démarrage rapide de l'application Chat de Google Apps Script.
Étape 1: Créez un compte de service dans la console Google Cloud
créer un compte de service que votre application Chat peut utiliser pour accéder aux API Google ;
Créer un compte de service
Pour créer un compte de service, procédez comme suit :
- Dans la console Google Cloud, accédez à Menu > IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- Saisissez les informations du compte de service, puis cliquez sur Créer et continuer.
- (Facultatif) Attribuez des rôles à votre compte de service pour accorder l'accès aux ressources de votre projet Google Cloud. Pour en savoir plus, consultez Accorder, modifier et révoquer les accès à des ressources.
- Cliquez sur Continuer.
- Facultatif: Saisissez les utilisateurs ou les groupes autorisés à gérer et à effectuer des actions avec ce compte de service. Pour en savoir plus, consultez Gérer l'emprunt d'identité d'un compte de service.
- Cliquez sur OK. Notez l'adresse e-mail du compte de service.
Le compte de service apparaît sur la page du compte de service. Créez ensuite une clé privée pour le compte de service.
Créer une clé privée
Pour créer et télécharger une clé privée pour le compte de service, procédez comme suit:
- Dans la console Google Cloud, accédez à Menu > IAM et administration > Comptes de service.
- Sélectionnez votre compte de service.
- Cliquez sur Clés > Ajouter une clé > Créer une clé.
- Sélectionnez JSON, puis cliquez sur Créer.
Votre nouvelle paire de clés publique/privée est générée et téléchargée sur votre ordinateur en tant que nouveau fichier. Enregistrez le fichier JSON téléchargé sous le nom
credentials.json
dans votre répertoire de travail. Ce fichier est la seule copie de cette clé. Pour savoir comment stocker votre clé en toute sécurité, consultez la page Gérer des clés de compte de service. - Cliquez sur Fermer.
Pour en savoir plus sur les comptes de service, consultez la section Comptes de service dans la documentation Google Cloud IAM.
Étape 2: Installez la bibliothèque cliente Google et les autres dépendances
Installez la bibliothèque cliente Google et les autres dépendances requises pour le projet.
Java
Pour ajouter les bibliothèques clientes Google et les autres dépendances requises à votre projet Maven, modifiez le fichier pom.xml
dans le répertoire de votre projet et ajoutez les dépendances suivantes:
<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 vous n'avez pas encore installé les bibliothèques clientes Google pour Python, exécutez la commande suivante dans votre interface de ligne de commande:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client
Node.js
Pour ajouter les bibliothèques clientes Google à votre projet Node.js, accédez au répertoire de votre projet et exécutez la commande suivante dans votre interface de ligne de commande:
npm install "@googleapis/chat"
Apps Script
Cet exemple utilise la bibliothèque OAuth2 pour Apps Script afin de générer un jeton JWT pour l'authentification du compte de service. Pour ajouter la bibliothèque à votre projet Apps Script, procédez comme suit:
- À gauche, cliquez sur Montage .
- Sur la gauche, à côté de Bibliothèques, cliquez sur Ajouter une bibliothèque .
- Saisissez l'ID de script
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Cliquez sur Rechercher, puis sur Ajouter.
Vous pouvez utiliser n'importe quel langage compatible avec nos bibliothèques clientes.
Étape 3: Écrivez un script qui utilise le compte de service pour s'authentifier auprès de l'API Chat
Le code suivant s'authentifie auprès de l'API Chat à l'aide d'un compte de service, puis publie un message dans un espace Chat:
Java
- Dans le répertoire de votre projet, ouvrez le fichier
src/main/java/com/google/chat/app/authsample/App.java
. Remplacez le contenu de
App.java
par le code suivant: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 via 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(); } }
Dans le code, remplacez
SPACE_NAME
par un nom d'espace, que vous pouvez obtenir à partir de la méthodespaces.list
de l'API Chat ou de l'URL d'un espace.Créez un sous-répertoire nommé
resources
dans le répertoire de votre projet.Assurez-vous que le fichier de clé privée de votre compte de service s'appelle
credentials.json
et copiez-le dans le sous-répertoireresources
.Pour configurer Maven afin d'inclure le fichier de clé privée dans le package du projet, modifiez le fichier
pom.xml
dans le répertoire de votre projet et ajoutez la configuration suivante à la section<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Pour configurer Maven afin d'inclure les dépendances dans le package du projet et d'exécuter la classe principale de votre application, modifiez le fichier
pom.xml
dans le répertoire de votre projet et ajoutez la configuration suivante à la section<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
- Dans votre répertoire de travail, créez un fichier nommé
chat_app_auth.py
. Incluez le code suivant dans
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( 'credentials.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() # Prints details about the created message. print(result)
Dans le code, remplacez
SPACE_NAME
par un nom d'espace, que vous pouvez obtenir à partir de la méthodespaces.list
de l'API Chat ou de l'URL d'un espace. Assurez-vous que le fichier de clé privée de votre compte de service s'appellecredentials.json
.
Node.js
- Dans le répertoire de votre projet, créez un fichier nommé
chat_app_auth.js
. Incluez le code suivant dans
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);
Dans le code, remplacez
SPACE_NAME
par un nom d'espace, que vous pouvez obtenir à partir de la méthodespaces.list
de l'API Chat ou de l'URL d'un espace. Assurez-vous que le fichier de clé privée de votre compte de service s'appellecredentials.json
.
Apps Script
Dans l'éditeur Apps Script, modifiez le fichier
appsscript.json
et ajoutez les champs d'application OAuth nécessaires pour appeler l'API:"oauthScopes": [ "https://www.googleapis.com/auth/chat.messages.create", "https://www.googleapis.com/auth/script.external_request" ]
Enregistrez le code suivant dans un fichier nommé
ChatAppAuth.gs
dans votre projet Apps Script:const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; /** * Authenticates with Chat API via app credentials, then posts a message. */ function createMessage() { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // 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'; // Call the Chat API to create a message. const result = UrlFetchApp.fetch(`https://chat.googleapis.com/v1/${parent}/messages`, { method: 'post', contentType: 'application/json', // Authenticate with the service account token. headers: { 'Authorization': 'Bearer ' + service.getAccessToken() }, // The message to create. payload: JSON.stringify({ 'text': 'Hello, world!' }) }); // Log details about the created message. console.log(result.getContentText()); } /** * 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()); }
Dans le code, remplacez
CREDENTIALS
par le contenu du fichiercredentials.json
.Dans le code, remplacez
SPACE_NAME
par un nom d'espace, que vous pouvez obtenir à partir de la méthodespaces.list
de l'API Chat ou de l'URL d'un espace.
Étape 4: Exécutez l'exemple complet
Dans votre répertoire de travail, créez et exécutez l'exemple:
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
Ouvrez le fichier ChatAppAuth.gs
dans l'éditeur Apps Script, puis cliquez sur Exécuter.
Votre script envoie une requête authentifiée à l'API Chat, qui répond en publiant un message dans un espace Chat en tant qu'application Chat.
Résoudre l'exemple
Cette section décrit les problèmes courants que vous pouvez rencontrer lors de l'exécution de cet exemple.
Vous n'êtes pas autorisé à utiliser cette application
Lors de l'exécution du script, l'erreur suivante peut s'afficher:
<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">
Ce message d'erreur signifie que l'application Chat n'est pas autorisée à créer des messages Chat dans l'espace Chat spécifié.
Pour résoudre l'erreur, ajoutez l'application Chat à l'espace Chat spécifié dans le script.
Articles associés
Découvrez les autres fonctionnalités de l'API Chat en consultant la documentation de référence.