Ce guide explique comment utiliser l'API Google Chat pour créer des messages contenant des cartes interactives au nom des utilisateurs et comment mettre à jour ces cartes de manière asynchrone.
La création et la mise à jour de cartes sont utiles lorsque vous souhaitez effectuer les opérations suivantes :
- Publier une carte représentant une tâche ou une ressource externe au nom d'un utilisateur.
- Mettre à jour l'état de la carte (par exemple, "En cours" à "Terminé") en fonction d'événements externes, sans attendre l'interaction d'un utilisateur.
- Actualiser le contenu d'une carte dans un message utilisateur, par exemple un aperçu de lien.
En dehors du programme Preview développeur, les messages créés avec l'authentification de l'utilisateur ne peuvent contenir que du texte.
Prérequis
Node.js
- Compte Google Workspace pour les petites et grandes entreprises ayant accès à Google Chat.
- Configurez votre environnement :
- Créez un projet Google Cloud.
- Configurez l'écran de consentement OAuth.
- Activez et configurez l'API Google Chat avec un nom, une icône et une description pour votre application Chat.
- Installez la bibliothèque cliente des API Google pour Node.js.
- Créez des identifiants d'accès en fonction de la façon dont vous souhaitez vous authentifier dans votre requête API Google Chat
:
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
credentials.jsondans votre répertoire local. - Pour vous authentifier en tant qu'application Chat,
créez des identifiants de compte de service et enregistrez-les dans un fichier JSON nommé
credentials.json.
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
- Choisissez un champ d'application d'autorisation selon que vous souhaitez vous authentifier en tant qu'utilisateur ou en tant qu'application Chat.
Python
- Compte Google Workspace pour les petites et grandes entreprises ayant accès à Google Chat.
- Configurez votre environnement :
- Créez un projet Google Cloud.
- Configurez l'écran de consentement OAuth.
- Activez et configurez l'API Google Chat avec un nom, une icône et une description pour votre application Chat.
- Installez la bibliothèque cliente des API Google pour Python .
- Créez des identifiants d'accès en fonction de la façon dont vous souhaitez vous authentifier dans votre requête API Google Chat
:
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
credentials.jsondans votre répertoire local. - Pour vous authentifier en tant qu'application Chat,
créez des identifiants de compte de service et enregistrez-les dans un fichier JSON nommé
credentials.json.
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
- Choisissez un champ d'application d'autorisation selon que vous souhaitez vous authentifier en tant qu'utilisateur ou en tant qu'application Chat.
Java
- Compte Google Workspace pour les petites et grandes entreprises ayant accès à Google Chat.
- Configurez votre environnement :
- Créez un projet Google Cloud.
- Configurez l'écran de consentement OAuth.
- Activez et configurez l'API Google Chat avec un nom, une icône et une description pour votre application Chat.
- Installez la bibliothèque cliente des API Google pour Java.
- Créez des identifiants d'accès en fonction de la façon dont vous souhaitez vous authentifier dans votre requête API Google Chat
:
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
credentials.jsondans votre répertoire local. - Pour vous authentifier en tant qu'application Chat,
créez des identifiants de compte de service et enregistrez-les dans un fichier JSON nommé
credentials.json.
- Pour vous authentifier en tant qu'utilisateur Chat,
créez des identifiants d'ID client OAuth et enregistrez-les dans un fichier JSON nommé
- Choisissez un champ d'application d'autorisation selon que vous souhaitez vous authentifier en tant qu'utilisateur ou en tant qu'application Chat.
Apps Script
- Compte Google Workspace pour les petites et grandes entreprises ayant accès à Google Chat.
- Configurez votre environnement :
- Créez un projet Google Cloud.
- Configurez l'écran de consentement OAuth.
- Activez et configurez l'API Google Chat avec un nom, une icône et une description pour votre application Chat.
- Créez un projet Apps Script autonome, et activez le service Chat avancé.
- Dans ce guide, vous devez utiliser l'authentification de l'utilisateur ou de l'application. Pour vous authentifier en tant qu'application Chat, créez identifiants de compte de service. Pour connaître la procédure à suivre, consultez Authentifier et autoriser une application Google Chat.
- Choisissez un champ d'application d'autorisation selon que vous souhaitez vous authentifier en tant qu'utilisateur ou en tant qu'application Chat.
Créer une clé API pour accéder aux fonctionnalités de la Preview développeur
Pour appeler une méthode d'API de la Preview développeur, vous devez utiliser une version non publique de la Preview développeur du document de découverte de l'API. Pour authentifier la requête, vous devez transmettre une clé API.
Pour créer la clé API, ouvrez le projet Google Cloud de votre application et procédez comme suit :
- Dans la console Google Cloud, accédez à Menu > API et services > Identifiants.
- Cliquez sur Créer des identifiants > Clé API.
- Votre nouvelle clé API s'affiche.
- Cliquez sur Copy pour copier votre clé API et l'utiliser dans le code de votre application. La clé API se trouve également dans la section "Clés API" des identifiants de votre projet.
- Pour éviter toute utilisation abusive, nous recommandons d'ajouter des restrictions pour limiter les emplacements et les API pour lesquels la clé API peut être utilisée. Pour en savoir plus, consultez Ajouter des restrictions d'API.
Créer un message de carte au nom d'un utilisateur
Pour créer un message avec des cartes au nom d'un utilisateur, utilisez l'authentification de l'utilisateur.
Pour créer le message, spécifiez les éléments suivants dans votre requête :
- Le champ d'application d'autorisation
chat.messages.createouchat.messages. - Le champ
cardsV2dans la ressourceMessage, contenant les données de la carte. - Le
cardIdde chaque carte, qui est requis pour les mises à jour asynchrones.
L'exemple suivant montre comment créer un message avec une carte au nom d'un utilisateur :
Node.js
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
const {google} = require('googleapis');
const {auth} = require('google-auth-library');
async function main() {
// Create a client
const authClient = await auth.getClient({
scopes: ['https://www.googleapis.com/auth/chat.messages.create']
});
google.options({auth: authClient});
// Initialize the Chat API with Developer Preview labels
const chat = await google.discoverAPI(
'https://chat.googleapis.com/$discovery/rest?version=v1&labels=DEVELOPER_PREVIEW&key=API_KEY'
);
// The space to create the message in.
const parent = 'spaces/SPACE_NAME';
// Create the request
const request = {
parent: parent,
requestBody: {
text: 'Here is a card created on my behalf:',
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Card Title',
subtitle: 'Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'This card is attached to a user message.'
}
}]
}]
}
}]
}
};
// Call the API
const response = await chat.spaces.messages.create(request);
// Handle the response
console.log(response.data);
}
main().catch(console.error);
Python
"""
This sample shows how to create a message with a card on behalf of a user.
"""
from google.oauth2 import service_account
from googleapiclient.discovery import build
import google.auth
def create_message_with_card():
# Create a client
scopes = ["https://www.googleapis.com/auth/chat.messages.create"]
credentials, _ = google.auth.default(scopes=scopes)
# Build the service endpoint for Chat API with Developer Preview labels.
service = build(
'chat',
'v1',
credentials=credentials,
discoveryServiceUrl='https://chat.googleapis.com/$discovery/rest?version=v1&labels=DEVELOPER_PREVIEW&key=API_KEY'
)
# The space to create the message in.
parent = "spaces/SPACE_NAME"
# Create the request
result = service.spaces().messages().create(
parent=parent,
body={
'text': 'Here is a card created on my behalf:',
'cardsV2': [{
'cardId': 'unique-card-id',
'card': {
'header': {
'title': 'Card Title',
'subtitle': 'Card Subtitle'
},
'sections': [{
'widgets': [{
'textParagraph': {
'text': 'This card is attached to a user message.'
}
}]
}]
}
}]
}
).execute()
print(result)
if __name__ == "__main__":
create_message_with_card()
Java
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class CreateMessageWithCard {
public static void main(String[] args) throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
.createScoped(Arrays.asList("https://www.googleapis.com/auth/chat.messages.create"));
HttpRequestFactory requestFactory = transport.createRequestFactory(new HttpCredentialsAdapter(credentials));
String parent = "spaces/SPACE_NAME";
GenericUrl url = new GenericUrl("https://chat.googleapis.com/v1/" + parent + "/messages");
// Construct the message body
Map<String, Object> message = new HashMap<>();
message.put("text", "Here is a card created on my behalf:");
Map<String, Object> header = new HashMap<>();
header.put("title", "Card Title");
header.put("subtitle", "Card Subtitle");
Map<String, Object> textParagraph = new HashMap<>();
textParagraph.put("text", "This card is attached to a user message.");
Map<String, Object> widget = new HashMap<>();
widget.put("textParagraph", textParagraph);
Map<String, Object> section = new HashMap<>();
section.put("widgets", Collections.singletonList(widget));
Map<String, Object> card = new HashMap<>();
card.put("header", header);
card.put("sections", Collections.singletonList(section));
Map<String, Object> cardWithId = new HashMap<>();
cardWithId.put("cardId", "unique-card-id");
cardWithId.put("card", card);
message.put("cardsV2", Collections.singletonList(cardWithId));
HttpRequest request = requestFactory.buildPostRequest(url, new JsonHttpContent(jsonFactory, message));
System.out.println(request.execute().parseAsString());
}
}
Apps Script
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
function createMessageWithCard() {
const parent = 'spaces/SPACE_NAME';
const url = `https://chat.googleapis.com/v1/${parent}/messages`;
const message = {
text: 'Here is a card created on my behalf:',
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Card Title',
subtitle: 'Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'This card is attached to a user message.'
}
}]
}]
}
}]
};
const options = {
method: 'post',
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
},
contentType: 'application/json',
payload: JSON.stringify(message),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
console.log(response.getContentText());
} catch (err) {
console.log('Failed to create message: ' + err.message);
}
}
Mettre à jour les cartes de manière asynchrone
Après avoir créé un message avec des cartes, vous pouvez les mettre à jour de manière asynchrone à l'aide de l'authentification de l'application. Cela permet à votre application d'actualiser le contenu de la carte sans nécessiter l'interaction de l'utilisateur. Seule l'application Chat qui a ajouté la carte au message de l'utilisateur peut la remplacer. Si un utilisateur modifie le texte du message, les cartes appartenant à l'application sont supprimées et votre application ne peut plus les mettre à jour.
Pour mettre à jour les cartes, appelez la méthode replaceCards avec les éléments suivants :
- Le champ d'application d'autorisation
chat.bot. - Le
namedu message à mettre à jour. - La nouvelle liste
cardsV2. Cela remplace toutes les cartes existantes dans le message. Si vous fournissez une liste vide, les cartes sont supprimées.
L'exemple suivant montre comment mettre à jour les cartes d'un message :
Node.js
/**
* This sample shows how to update cards on a message.
*/
const {google} = require('googleapis');
const {auth} = require('google-auth-library');
async function main() {
// Create a client with app credentials
const authClient = await auth.getClient({
scopes: ['https://www.googleapis.com/auth/chat.bot']
});
google.options({auth: authClient});
// Initialize the Chat API with Developer Preview labels
const chat = await google.discoverAPI(
'https://chat.googleapis.com/$discovery/rest?version=v1&labels=DEVELOPER_PREVIEW&key=API_KEY'
);
// The message to update.
const messageName = 'spaces/SPACE_NAME/messages/MESSAGE_ID';
// Create the request
const request = {
name: messageName,
requestBody: {
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Updated Card Title',
subtitle: 'Updated Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
}
};
// Call the API
await chat.spaces.messages.replaceCards(request);
console.log('Cards updated.');
}
main().catch(console.error);
Python
"""
This sample shows how to update cards on a message.
"""
from google.oauth2 import service_account
from googleapiclient.discovery import build
import google.auth
def replace_message_cards():
# Create a client with app credentials
scopes = ["https://www.googleapis.com/auth/chat.bot"]
credentials, _ = google.auth.default(scopes=scopes)
# Build the service endpoint for Chat API with Developer Preview labels.
service = build(
'chat',
'v1',
credentials=credentials,
discoveryServiceUrl='https://chat.googleapis.com/$discovery/rest?version=v1&labels=DEVELOPER_PREVIEW&key=API_KEY'
)
# The message to update.
message_name = "spaces/SPACE_NAME/messages/MESSAGE_ID"
# Create the request
result = service.spaces().messages().replaceCards(
name=message_name,
body={
'cardsV2': [{
'cardId': 'unique-card-id',
'card': {
'header': {
'title': 'Updated Card Title',
'subtitle': 'Updated Card Subtitle'
},
'sections': [{
'widgets': [{
'textParagraph': {
'text': 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
}
).execute()
print("Cards updated.")
if __name__ == "__main__":
replace_message_cards()
Java
/**
* This sample shows how to update cards on a message.
*/
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class ReplaceMessageCards {
public static void main(String[] args) throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
.createScoped(Arrays.asList("https://www.googleapis.com/auth/chat.bot"));
HttpRequestFactory requestFactory = transport.createRequestFactory(new HttpCredentialsAdapter(credentials));
String messageName = "spaces/SPACE_NAME/messages/MESSAGE_ID";
GenericUrl url = new GenericUrl("https://chat.googleapis.com/v1/" + messageName + ":replaceCards");
// Construct the body
Map<String, Object> header = new HashMap<>();
header.put("title", "Updated Card Title");
header.put("subtitle", "Updated Card Subtitle");
Map<String, Object> textParagraph = new HashMap<>();
textParagraph.put("text", "The card content has been updated asynchronously.");
Map<String, Object> widget = new HashMap<>();
widget.put("textParagraph", textParagraph);
Map<String, Object> section = new HashMap<>();
section.put("widgets", Collections.singletonList(widget));
Map<String, Object> card = new HashMap<>();
card.put("header", header);
card.put("sections", Collections.singletonList(section));
Map<String, Object> cardWithId = new HashMap<>();
cardWithId.put("cardId", "unique-card-id");
cardWithId.put("card", card);
Map<String, Object> body = new HashMap<>();
body.put("cardsV2", Collections.singletonList(cardWithId));
HttpRequest request = requestFactory.buildPostRequest(url, new JsonHttpContent(jsonFactory, body));
request.execute();
System.out.println("Cards updated.");
}
}
Apps Script
/**
* This sample shows how to update cards on a message.
*/
function replaceMessageCards() {
const messageName = 'spaces/SPACE_NAME/messages/MESSAGE_ID';
const url = `https://chat.googleapis.com/v1/${messageName}:replaceCards`;
const request = {
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Updated Card Title',
subtitle: 'Updated Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
};
const options = {
method: 'post',
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
},
contentType: 'application/json',
payload: JSON.stringify(request),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
console.log('Cards updated.');
} catch (err) {
console.log('Failed to update cards: ' + err.message);
}
}
Limites
Lors de la création de messages avec des cartes au nom d'un utilisateur ou de la mise à jour de cartes, l'application Chat doit être membre de l'espace. Cette exigence s'applique lorsque :
- Vous créez un message avec des cartes au nom d'un utilisateur.
- Vous remplacez ou mettez à jour les cartes d'un message.
Cette exigence est différente de celle des autres API qui utilisent l'authentification de l'utilisateur, qui ne nécessitent généralement pas que l'application soit membre de l'espace.
La
replaceCardsméthode permet de remplacer et de supprimer des cartes. Vous pouvez également en ajouter d'autres lors du remplacement, mais vous ne pouvez pas ajouter de cartes à un message qui n'en contient pas déjà.L'application Chat ne peut remplacer que les cartes qu'elle a jointes à un message, et non celles jointes par d'autres applications Chat.
Si un utilisateur modifie le texte du message, les cartes appartenant à l'application Chat sont supprimées et vous ne pouvez plus les mettre à jour.