Envoyer un message à Google Chat à l'aide de l'API REST (l'exemple Google ne fonctionne pas en 2020)
Par où commencer même ... (Google, pourquoi dois-tu me faire du mal de cette façon?)
Informations de fond
J'ai créé un nouveau chatbot à l' aide de Google Apps Script , qui reçoit les messages des utilisateurs dans Google Chat et répond de manière synchrone avec un seul message (chaque message ne peut avoir qu'une seule réponse du chatbot).
Maintenant, j'ai besoin d'un moyen d'envoyer des messages asynchrones afin que le bot puisse envoyer des messages par lui-même ou envoyer plusieurs réponses distinctes à la fois.
Le problème
L' API REST de Google Chat a une méthode pour créer un message de manière asynchrone , mais cette méthode ( spaces.messages.create
) ne fonctionne pas! Il n'y a pas d'exemples pratiques de cette méthode à partir de 2020.
Voici un exemple de code de Google pour créer un message à l'aide de l'API REST.
Le problème est que dans leur exemple, le SCOPE
est défini sur une URL qui ne se termine plus :
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
Si vous accédez à cette URL, vous verrez cette erreur 404:
Not Found
Error 404
De plus, si vous consultez la liste des étendues OAuth2 disponibles , vous remarquerez qu'il n'y a pas d'étendues liées à Hangouts ou au chat, et qu'il n'y a aucune mention de chat.bot
l'étendue qui a été utilisée dans l'exemple de code.
Qu'ai-je essayé?
J'ai lu toutes les questions sur StackOverflow liées à cette API de chat, ainsi que tous les didacticiels de l'API REST.
- Le didacticiel officiel Apps Script de Google ne fonctionne pas car la
chat.bot
portée n'existe plus:- Messages asynchrones à l'aide d'Apps Script
- Ces solutions StackOverflow utilisent toutes la même
chat.bot
portée inexistante :- Envoyer un message privé sans événement
- Répondre de manière asynchrone dans le nouveau Hangout Chat à l'aide de l'API rest
- 404 réponse de serveur tronquée sur Apps Script Bot
- Cet utilisateur de StackOverflow dit qu'il a pu utiliser la
chat
portée (c'est-à-diregoogleapis.com/auth/chat
), mais cette portée n'existe pas non plus:- Erreur 400: invalid_scope
En conclusion
Comment envoyer des messages depuis Google Apps Script vers Google Chat à l'aide de l' API REST de Google Chat ?
Il semble que la documentation de Google soit obsolète et qu'aucun des exemples de cette API ne fonctionne en août 2020. Soit ils ignorent que leur API REST ne fonctionne pas, soit ils ont désapprouvé l'API REST sans le dire à personne.
Réponses
Répondre:
Je peux confirmer que la chat.bot
portée existe bel et bien. Pour configurer un chat bot avec l'API REST, vous devez utiliser un compte de service .
Plus d'information:
Selon la documentation que vous avez liée sur le développement de bots avec Apps Script , pour l'envoi de messages asynchrones sur le déclencheur:
... le seul moyen d'y parvenir actuellement est via l'API HTTP externe (voir documentation ). Cela nécessite l'utilisation d'un compte de service Cloud (voir documentation) via la bibliothèque OAuth2 for Apps Script .
Cela signifie que vous devez d'abord configurer un compte de service dans la console GCP afin que l' chat.bot
étendue puisse être utilisée pour ces messages. L'ensemble du processus peut être assez ardu pour les non-initiés, je vais donc fournir les étapes du début à la fin ici.
Le processus:
Créer un compte de service:
- Accédez à la console Google Cloud et créez un nouveau projet GCP. Appuyez
Select a project
sur en haut de la page et cliquez surNEW PROJECT
.- Vous devrez fournir un
Project name
, les autres champs doivent être remplis automatiquement pour vous.
- Vous devrez fournir un
- Appuyez sur
CREATE
- une nouvelle fenêtre contextuelle apparaîtra en haut à droite de l'écran confirmant qu'un nouveau projet est en cours de création. Une fois chargé, vous pouvez cliquerVIEW
. - Cliquez sur l'
☰
icône en haut à gauche et suivez l'APIs & Services > Credentials
élément de menu. - En haut de cette page, cliquez sur
+ CREATE CREDENTIALS > Service Account
.- Donnez un nom et une description au compte de service, puis appuyez sur
CREATE
, suivi deCONTINUE
et enfinDONE
.
- Donnez un nom et une description au compte de service, puis appuyez sur
Votre compte de service a maintenant été créé.
Création des informations d'identification du compte de service:
Ceux-ci seront nécessaires pour le code fourni dans l'exemple de la page Développement de bots avec Apps Script .
- Après avoir créé le compte de service, vous serez redirigé vers la liste des informations d'identification que vous pouvez utiliser pour le projet GCP. Dans la
Service Accounts
section, cliquez sur votre compte de service nouvellement créé. Cela s'appellera[email protected]
- Cliquez sur
ADD KEY > Create new key
- Restez
JSON
sélectionné et appuyez surCREATE
.- Cela lancera le téléchargement d'un fichier d'informations d'identification que vous devrez utiliser pour accéder à l'API en tant que compte de service. NE PAS PERDRE OU PARTAGER CE FICHIER. En cas de perte, vous devrez supprimer et créer de nouvelles informations d'identification pour ce compte.
Activation de l'API Hangouts Chat:
- Revenez à
☰ > APIs & Services
et sélectionnezLibrary
. - Recherchez
Hangouts Chat API
et cliquez sur le seul résultat. - Cliquez sur
ENABLE
. Cela activera l'API pour votre projet.
Remarque: ne fermez pas encore cet onglet! Nous devrons toujours utiliser la console GCP plus tard.
Configuration du projet Apps Script:
- Créez un nouveau projet Apps Script.
- Maintenant, vous pouvez copier et coller l'exemple de la page des messages Async dans le nouveau projet.
- Ouvrez ce fichier d'informations d'identification que vous avez téléchargé à partir de la console GCP.
- Copiez la
private_key
valeur (celle qui commence par-----BEGIN PRIVATE KEY-----
et collez-la dans value ofSERVICE_ACCOUNT_PRIVATE_KEY
dans le projet Apps Script. - Copiez également la
client_email
valeur du fichier d'informations d'identification et collez-laSERVICE_ACCOUNT_EMAIL
dans le projet Apps Script.
- Copiez la
Pour utiliser la bibliothèque Google Apps Script OAuth2 comme dans l'exemple, vous devrez ajouter la bibliothèque au projet à l'aide de l'ID de script de la bibliothèque.
- Dans l'interface utilisateur du projet Apps Script, suivez l'
Resources > Libraries...
élément de menu et copier coller le script OAuth2 ID dans laAdd a library
boîte- L'ID de script est
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
- Ceci, ainsi que le reste de la bibliothèque, se trouvent sur le référentiel GitHub OAuth2 for Apps Script
- L'ID de script est
- Assurez-vous de sélectionner la dernière version stable de la bibliothèque (au moment de la rédaction, il s'agit de la version 38)
- Appuyez sur
Save
.
Ensuite, vous devrez lier le projet Apps Script au projet GCP que vous avez créé précédemment.
- Revenez à l'onglet Console GCP et suivez l'
☰ > IAM & Admin > Settings
élément de menu. - Copiez le
Project number
défini sur cette page. - Dans votre projet Apps Script, suivez l'
Resources > Cloud Platform project...
élément de menu et collez le numéro de projet dans laEnter Project Number here
boîte de dialogue. - Cliquez sur
Set Project
.
Configuration du manifeste de projet: pour utiliser un chat bot dans Apps Script, vous devez inclure la chat
clé dans le manifeste du projet.
- Dans l'interface utilisateur d'Apps Script, cliquez sur
View > Show manifest file
. - Après la dernière paire clé-valeur, ajoutez ce qui suit:
"chat": {
"addToSpaceFallbackMessage": "Thank you for adding me!"
}
Votre fichier manifeste complet ressemblera maintenant à ceci:
{
"timeZone": "Europe/Paris",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "Drive",
"serviceId": "drive",
"version": "v2"
}],
"libraries": [{
"userSymbol": "OAuth2",
"libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
"version": "38"
}]
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"chat": {
"addToSpaceFallbackMessage": "Thank you for adding me!"
}
}
- Sauvegardez votre projet.
Dernières étapes:
Vous avez presque terminé! Maintenant, vous devrez déployer le bot à partir du manifeste, configurer la configuration dans GCP et configurer le déclencheur qui effectuera l'appel réel.
Déployer le bot:
- Dans l'interface utilisateur Apps Script, accédez à
Publish > Deploy from manifest...
et appuyez surCreate
dans la boîte de dialogue nouvellement ouverte.- Remarque: vous ne pouvez pas utiliser le déploiement Head si vous souhaitez l'utiliser pour l'ensemble de votre domaine, un nouveau déploiement doit donc être créé.
- Donnez un nom et une description au déploiement, puis appuyez sur
Save
. - Une fois l'enregistrement terminé, appuyez sur à
Get ID
côté du déploiement que vous venez de créer et copiez le fichierDeployment ID
.
Configuration de la configuration GCP:
- Pour revenir à la console Cloud, vous devrez maintenant accéder à
☰ > APIs & Services > Dashboard
. - Dans la liste des API activées au bas de cette page, sélectionnez le
Hangouts Chat API
. - Dans le menu de gauche, sélectionnez
Configuration
. - Configurez la configuration de votre bot. Vous devrez fournir un
Bot name
,Avatar URL
etDescription
. Configurez les paramètres de fonctionnalité pour qu'il fonctionne dans les pièces. - Sous
Connection Settings
, sélectionnezApps Script project
et collez votre ID de déploiement de la section précédente. - Donnez à votre bot Apps Script les autorisations appropriées et appuyez sur
Save
.
Le déclencheur insaisissable:
La seule chose que vous devez faire maintenant est de configurer votre déclencheur. Cela se fait comme un déclencheur Apps Script normal - à partir de l'
Edit > Current project's triggers
élément de menu dans Apps Script. Pour terminer l'exemple, cliquez sur le bouton + Ajouter un déclencheur en bas à droite et configurez les paramètres de déclenchement comme suit:Choisissez la fonction à exécuter:
onTrigger
Choisissez le déploiement à exécuter: Head
Sélectionnez la source de l'événement: en fonction du temps
Sélectionnez le type de déclencheur basé sur le temps:
Minutes timer
Sélectionnez l'intervalle en minutes:
Every minute
Et appuyez sur Enregistrer.
Et tu as fini! Ce bot créé publiera désormais dans toutes les salles qu'il se trouve dans l'heure actuelle, toutes les minutes.
J'espère que cette explication vous sera utile!
Références:
- Comptes de service | Documentation Cloud IAM
- Comprendre les comptes de service | Documentation Cloud IAM
- Développer des bots avec Apps Script | API Google Chat | Développeurs Google
- Messages lancés par des bots - Création de nouveaux bots | API Google Chat | Développeurs Google
- GitHub - gsuitedevs / apps-script-oauth2: une bibliothèque OAuth2 pour Google Apps Script.
- Google Cloud Console