1. Présentation

Dans cet atelier de programmation, vous allez apprendre à créer un bot Slack à l'aide de la suite d'outils Botkit et à l'exécuter sur Google Cloud. Vous pourrez ensuite interagir avec le bot dans une chaîne Slack en direct.
Points abordés
- Créer une intégration personnalisée de bot dans Slack
- Sécuriser vos secrets Slack avec Secret Manager
- Déployer un bot Slack sur Cloud Run, une plate-forme de calcul entièrement gérée qui effectue un scaling automatique de vos conteneurs sans état
Prérequis
Comment allez-vous utiliser ce tutoriel ?
Quel est votre niveau d'expérience avec Google Cloud ?
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Cloud Shell pour ce tutoriel, un environnement de ligne de commande exécuté dans le cloud.
Activer Cloud Shell
- Dans Cloud Console, cliquez sur Activer Cloud Shell
.

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire s'affiche pour vous expliquer de quoi il s'agit. Si cet écran s'est affiché, cliquez sur Continuer.

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier de programmation dans un navigateur.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est défini avec votre ID de projet.
- Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
Résultat de la commande
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet :
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si vous obtenez un résultat différent, exécutez cette commande :
gcloud config set project <PROJECT_ID>
Résultat de la commande
Updated property [core/project].
3. Activer les API
Dans Cloud Shell, activez les API Artifact Registry, Cloud Build, Cloud Run et Secret Manager :
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
Un message de confirmation semblable à celui-ci s'affiche :
Operation "operations/..." finished successfully.
Vous êtes maintenant prêt à préparer et à déployer votre application.
4. Créer un espace de travail Slack
Vous aurez besoin d'un espace de travail Slack dans lequel vous êtes autorisé à créer des intégrations personnalisées. Vous pouvez créer un espace de travail sans frais si vous n'en avez pas déjà un que vous souhaitez utiliser pour ce tutoriel.

5. Créer un utilisateur de bot Slack
Un utilisateur bot peut consulter et publier des messages, ainsi qu'importer des fichiers dans Slack. Dans cet atelier de programmation, vous allez créer un bot pour publier un simple message d'accueil.
Créer une application Slack
- Accédez à la page de gestion des applications Slack.
- Cliquez sur le bouton Create new app (Créer une application) en haut à droite.
- Nommez l'application, par exemple "Kittenbot".
- Choisissez l'espace de travail Slack où elle sera installée pour votre équipe.
Créer un utilisateur de bot
- Accédez à App Home (Accueil de l'application) dans le panneau de gauche, sous Fonctionnalités.

- Attribuez un champ d'application à votre jeton de bot en cliquant sur Examiner les champs d'application à ajouter.
- Faites défiler la page jusqu'à Champs d'application des jetons de bot, puis cliquez sur Ajouter un champ d'application OAuth. Sélectionnez
chat:writepour "Envoyer des messages en tant que Kittenbot".

- Faites défiler la page vers le haut, puis cliquez sur le bouton Install App to your Workspace (Installer l'application dans votre espace de travail).
- Cela installera l'application dans votre équipe, ajoutera l'utilisateur bot que vous venez de créer et générera un jeton de bot.
- Lorsque vous y êtes invité, cliquez sur Autoriser pour autoriser le bot à discuter dans votre espace de travail.
Activer les messages et les commandes
- Faites défiler la page jusqu'à Afficher les onglets et assurez-vous que les deux options sont activées :

Obtenir le code secret de signature du client
- Accédez à Informations de base sous Paramètres.
- Faites défiler la page jusqu'à Signing Secret (Secret de signature), cliquez sur Show (Afficher), puis copiez le secret dans le presse-papiers :

- Enregistrez le secret dans une variable d'environnement :
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
Obtenir le jeton du bot
- Accédez à OAuth et autorisations sous Fonctionnalités.
- Cliquez sur le bouton Copy (Copier) pour copier le texte du champ Bot user OAuth access token (Jeton d'accès OAuth de l'utilisateur bot) dans votre presse-papiers.

- Enregistrez le jeton du bot dans une variable d'environnement :
BOT_TOKEN=PASTE_THE_BOT_TOKEN
Ne vous inquiétez pas. Vous pouvez revenir sur cette page de configuration depuis la page de gestion des applications si vous avez besoin de retrouver ces jetons.
6. Sécuriser vos secrets
Nous souhaitons nous assurer que votre jeton de bot et votre code secret de signature client sont stockés de manière sécurisée. Si vous les codez en dur dans le code source, vous risquez de les exposer sans le vouloir en les transmettant au système de contrôle des versions ou en les intégrant à une image Docker.
Secret Manager fournit une méthode sécurisée et pratique pour stocker les clés API, les mots de passe, les certificats et d'autres données sensibles. Il fournit un emplacement centralisé et un référentiel unique pour la gestion, la consultation et l'audit des secrets sur Google Cloud.
Créer vos secrets
Enregistrez votre code secret de signature client et votre jeton de bot à l'aide des commandes suivantes :
- Signature secrète du client
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \ --replication-policy automatic \ --data-file -
- Jeton de bot
echo -n $BOT_TOKEN | gcloud secrets create bot-token \ --replication-policy automatic \ --data-file -
Accéder à vos secrets
Vérifions que vos secrets ont été créés correctement et que vos autorisations fonctionnent. Accédez à vos secrets à l'aide des commandes suivantes :
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Vous pouvez également afficher et gérer vos secrets dans la console Google Cloud.
7. Obtenir l'exemple de code
Dans Cloud Shell, exécutez la commande suivante pour cloner le dépôt GitHub :
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
Remplacez le répertoire par cloud-slack-bot/start.
cd cloud-slack-bot/start
Comprendre le code
Ouvrez le fichier kittenbot.js avec l'éditeur de ligne de commande de votre choix (nano, vim, emacs, etc.) ou avec la commande suivante pour ouvrir directement le dossier actuel dans l'éditeur Cloud Shell :
cloudshell workspace .
Le code Kittenbot a deux fonctions principales. L'un sert à récupérer les secrets et l'autre à exécuter le robot.
Commençons par importer les dépendances :
kittenbot.js
const { Botkit } = require('botkit');
const {
SlackAdapter,
SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
SlackAdapter et SlackEventMiddleware sont des packages qui étendent Botkit et permettent au bot de traduire facilement les messages vers et depuis l'API Slack. Le client Secret Manager vous permettra d'accéder aux secrets que vous avez enregistrés à une étape précédente.
Ensuite, nous avons notre fonction pour récupérer les secrets :
/**
* Returns the secret string from Google Cloud Secret Manager
* @param {string} name The name of the secret.
* @return {Promise<string>} The string value of the secret.
*/
async function accessSecretVersion(name) {
const client = new SecretManagerServiceClient();
const projectId = process.env.PROJECT_ID;
const [version] = await client.accessSecretVersion({
name: `projects/${projectId}/secrets/${name}/versions/1`,
});
// Extract the payload as a string.
const payload = version.payload.data.toString('utf8');
return payload;
}
Cette fonction renvoie les valeurs de chaîne des secrets nécessaires pour authentifier le bot.
La fonction suivante initialise le bot :
/**
* Function to initialize kittenbot.
*/
async function kittenbotInit() {
const adapter = new SlackAdapter({
clientSigningSecret: await accessSecretVersion('client-signing-secret'),
botToken: await accessSecretVersion('bot-token'),
});
adapter.use(new SlackEventMiddleware());
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
controller.ready(() => {
controller.hears(
['hello', 'hi', 'hey'],
['message', 'direct_message'],
async (bot, message) => {
await bot.reply(message, 'Meow. :smile_cat:');
}
);
});
}
La première partie de la fonction configure SlackAdapter avec les secrets, puis spécifie un point de terminaison pour la réception des messages. Une fois la manette allumée, le bot répondra à tout message contenant "bonjour", "salut" ou "coucou" par "Miaou. 😺".
Consultez les parties spécifiques suivantes dans le fichier manifeste de l'application :
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Vous pouvez déployer une application Node.js directement à partir de la source avec Cloud Run. Voici ce qui se passe en coulisses :
- Cloud Run appelle Cloud Build pour créer une image de conteneur (voir Déployer à partir du code source).
- Si un
Dockerfileest présent dans le répertoire du code source, Cloud Build l'utilise pour créer une image de conteneur. - Comme ce n'est pas le cas, Cloud Build appelle Buildpacks pour analyser la source et générer automatiquement une image prête pour la production.
- Les buildpacks détectent le fichier manifeste
package.jsonet créent une image Node.js. - Le champ
scripts.startdétermine comment l'application est lancée. - Le champ
engines.nodedétermine la version Node.js de l'image de base du conteneur. - Lors du déploiement, les correctifs de sécurité connus sont automatiquement appliqués.
Vous êtes prêt à déployer l'application.
8. Déployer l'application
L'API Slack Events utilise des webhooks pour envoyer des messages sortants concernant les événements. Lorsque vous configurez l'application Slack, vous devez fournir une URL accessible au public pour que l'API Slack puisse l'envoyer.
Cloud Run est une bonne solution pour héberger des cibles de webhook. Il vous permet d'utiliser le langage ou l'environnement d'exécution de votre choix et offre la simultanéité, ce qui signifie que votre application pourra gérer un volume beaucoup plus élevé.
Récupérer votre ID de projet
Définissez la variable d'environnement PROJECT_ID :
PROJECT_ID=$(gcloud config get-value core/project)
Définir votre région Cloud Run
Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute votre service Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région. Définissez la région que vous utiliserez pour votre déploiement, par exemple :
REGION="us-central1"
Modifier les autorisations
Pour pouvoir accéder aux secrets de Secret Manager, le compte de service Cloud Run doit disposer du rôle roles/secretmanager.secretAccessor.
Tout d'abord, enregistrez le compte de service par défaut dans une variable d'environnement :
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --format "value(email)" \ --filter "displayName:Compute Engine default service account")
Vérifiez que l'adresse e-mail est enregistrée :
echo $SERVICE_ACCOUNT
Le compte de service est au format suivant : PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Une fois que vous avez l'adresse e-mail, activez le rôle pour le compte de service :
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/secretmanager.secretAccessor
Déployer l'application
Un service Cloud Run expose un point de terminaison unique et adapte automatiquement l'infrastructure sous-jacente pour gérer les requêtes entrantes.
Déployez l'application sur Cloud Run :
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- Cette opération crée un service appelé
kittenbot. - L'option
--sourceutilise le dossier actuel pour compiler l'application avec Cloud Build. Cloud Build détecte automatiquement la présence du fichierpackage.json. - Vous pouvez également définir une région par défaut avec la commande suivante :
gcloud config set run/region $REGION - Vous pouvez également définir Cloud Run comme plate-forme gérée par défaut à l'aide de la commande suivante :
gcloud config set run/platform managed - L'option
--set-env-varsdéfinit les variables d'environnement du service. - L'option
--allow-unauthenticatedrend le service accessible au public.
La première fois, vous serez invité à créer un dépôt Artifact Registry. Appuyez sur Entrée pour valider :
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Cela lance l'importation de votre code source dans le dépôt Artifact Registry et la compilation de votre image de conteneur :
Building using Dockerfile and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Patientez ensuite quelques instants jusqu'à la fin de la compilation et du déploiement. En cas de réussite, la ligne de commande affiche l'URL du service :
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Vous pouvez obtenir l'URL du service à l'aide de la commande suivante :
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
L'URL se présente au format suivant :
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
Cette URL servira de base pour activer l'API Slack Events. Copiez-le dans votre presse-papiers pour l'utiliser à l'étape suivante.
Votre service est désormais actif et accessible au public. Pour en savoir plus, consultez la console Cloud Run. 
Vous pouvez consulter la date de création de la dernière révision, le volume de trafic qu'elle génère et les journaux. Si nous cliquons sur les journaux, nous pouvons voir que le contrôleur Botkit est activé et prêt à recevoir des messages.
Commençons maintenant à envoyer des messages depuis notre canal Slack.
9. Activer les événements Slack
Comme nous l'avons vu précédemment, notre code kittenbot spécifie un point de terminaison relatif pour notre cible de webhook.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
Cela signifie que notre URL complète sera la partie de base du service Cloud Run, plus /api/messages.
Activer les événements
Sur la page de gestion des applications, accédez à la section Abonnements aux événements dans la barre latérale, puis activez l'option Activer les événements. Saisissez l'URL de votre service :
PASTE_THE_SERVICE_URL/api/messages

Selon la vitesse à laquelle vous saisissez l'URL, il est possible que le système tente de la valider avant que vous ayez terminé. Si l'opération échoue, cliquez sur "Réessayer".
S'abonner
S'abonner à tous les événements du bot de messages

Cliquez sur Enregistrer les modifications en bas de la page. Vous serez invité à réinstaller votre application. Suivez les instructions et cliquez sur Autoriser.
À ce stade, votre bot est entièrement intégré. Les messages dans l'espace de travail déclenchent l'envoi de messages de Slack à votre service Cloud Run, qui répond à son tour par un simple message d'accueil.
10. Tester votre bot
Envoyez un message privé à Kittenbot :

Ajoutez kittenbot à votre chaîne en saisissant "@kittenbot", puis en cliquant sur "Invite Them" (Inviter).

Tous les membres de votre chaîne peuvent désormais interagir avec Kittenbot.

Chaque message dans Slack déclenche un événement et envoie un message HTTP POST à notre service Cloud Run. Si vous examinez les journaux du service Cloud Run, vous verrez que chaque message correspond à une entrée POST dans le journal.

Le chatonbot répond à chaque message par "Miaou. 😺".
11. Bonus : Mettre à jour votre bot
Cette section facultative ne devrait prendre que quelques minutes. N'hésitez pas à passer directement à la section "Nettoyage".
Fils de discussion
Nous souhaitons que le bot fasse plus que miauler. Mais comment déployer une nouvelle version d'un élément exécuté sur Cloud Run ?
Remplacez le répertoire par cloud-slack-bot/extra-credit:
cd ../extra-credit/
Ouvrez le dossier actuel dans l'éditeur Cloud Shell :
cloudshell workspace .
Botkit peut gérer les conversations. Grâce à cet outil, le bot peut demander plus d'informations et répondre aux messages avec plus d'un seul mot.
Définir la boîte de dialogue
Tout d'abord, découvrez comment les fonctions conversationnelles sont définies à la fin du fichier :
// ...
const maxCats = 20;
const catEmojis = [
':smile_cat:',
':smiley_cat:',
':joy_cat:',
':heart_eyes_cat:',
':smirk_cat:',
':kissing_cat:',
':scream_cat:',
':crying_cat_face:',
':pouting_cat:',
':cat:',
':cat2:',
':leopard:',
':lion_face:',
':tiger:',
':tiger2:',
];
/**
* Function to concatenate cat emojis
* @param {number} numCats Number of cat emojis.
* @return {string} The string message of cat emojis.
*/
function makeCatMessage(numCats) {
let catMessage = '';
for (let i = 0; i < numCats; i++) {
// Append a random cat from the list
catMessage += catEmojis[Math.floor(Math.random() * catEmojis.length)];
}
return catMessage;
}
/**
* Function to create the kitten conversation
* @param {Object} controller The botkit controller.
* @return {Object} The BotkitConversation object.
*/
function createKittenDialog(controller) {
const convo = new BotkitConversation('kitten-delivery', controller);
convo.ask('Does someone need a kitten delivery?', [
{
pattern: 'yes',
handler: async (response, convo, bot) => {
await convo.gotoThread('yes_kittens');
},
},
{
pattern: 'no',
handler: async (response, convo, bot) => {
await convo.gotoThread('no_kittens');
},
},
{
default: true,
handler: async (response, convo, bot) => {
await convo.gotoThread('default');
},
},
]);
convo.addQuestion(
'How many would you like?',
[
{
pattern: '^[0-9]+?',
handler: async (response, convo, bot, message) => {
const numCats = parseInt(response);
if (numCats > maxCats) {
await convo.gotoThread('too_many');
} else {
convo.setVar('full_cat_message', makeCatMessage(numCats));
await convo.gotoThread('cat_message');
}
},
},
{
default: true,
handler: async (response, convo, bot, message) => {
if (response) {
await convo.gotoThread('ask_again');
} else {
// The response '0' is interpreted as null
await convo.gotoThread('zero_kittens');
}
},
},
],
'num_kittens',
'yes_kittens'
);
// If numCats is too large, jump to start of the yes_kittens thread
convo.addMessage(
'Sorry, {{vars.num_kittens}} is too many cats. Pick a smaller number.',
'too_many'
);
convo.addAction('yes_kittens', 'too_many');
// If response is not a number, jump to start of the yes_kittens thread
convo.addMessage("Sorry I didn't understand that", 'ask_again');
convo.addAction('yes_kittens', 'ask_again');
// If numCats is 0, send a dog instead
convo.addMessage(
{
text:
'Sorry to hear you want zero kittens. ' +
'Here is a dog, instead. :dog:',
attachments: [
{
fallback: 'Chihuahua Bubbles - https://youtu.be/s84dBopsIe4',
text: '<https://youtu.be/s84dBopsIe4|' + 'Chihuahua Bubbles>!',
},
],
},
'zero_kittens'
);
// Send cat message
convo.addMessage('{{vars.full_cat_message}}', 'cat_message');
convo.addMessage('Perhaps later.', 'no_kittens');
return convo;
}
Cette nouvelle conversation oriente le fil de discussion en fonction des réponses. Par exemple, si l'utilisateur répond "non" à la question sur les chatons, il passe au message intitulé "no_kittens", qui marque la fin de ce fil de conversation.
Ajouter la boîte de dialogue au contrôleur
Maintenant que la conversation est définie, découvrez comment l'ajouter au contrôleur :
async function kittenbotInit() {
// ...
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
// Add Kitten Dialog
const convo = createKittenDialog(controller);
controller.addDialog(convo);
// Controller is ready
controller.ready(() => {
// ...
});
}
Déclencher la boîte de dialogue
Maintenant que la boîte de dialogue est disponible pour le contrôleur, voyons comment la conversation démarre lorsque le chatbot entend "chaton", "chatons", "chat" ou "chats" :
// ...
controller.ready(() => {
controller.hears(
['hello', 'hi', 'hey'],
['message', 'direct_message'],
async (bot, message) => {
await bot.reply(message, 'Meow. :smile_cat:');
return;
}
);
// START: listen for cat emoji delivery
controller.hears(
['cat', 'cats', 'kitten', 'kittens'],
['message', 'direct_message'],
async (bot, message) => {
// Don't respond to self
if (message.bot_id !== message.user) {
await bot.startConversationInChannel(message.channel, message.user);
await bot.beginDialog('kitten-delivery');
return;
}
}
);
// END: listen for cat emoji delivery
// ...
});
// ...
Mettre à jour l'application
Redéployez l'application sur Cloud Run :
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
Essayer

Félicitations ! Vous venez de mettre à jour un bot Slack exécuté dans Cloud Run.
Commandes à barre oblique
Que faire si vous ne souhaitez pas avoir de conversation avec l'utilisateur ? Et si vous préférez simplement déclencher une action avec une simple commande ?
Slack propose cette fonctionnalité via les commandes Slash, qui permettent aux utilisateurs d'appeler votre application en saisissant la commande dans la zone de message.
Activer les commandes à barre oblique Slack
- Accédez à la section Commandes slash sous Fonctionnalités sur la page de gestion des applications.
- Cliquez sur Créer une commande.
- Configurez une commande
/catsavec l'URL de votre service kittenbot. N'oubliez pas d'utiliser le même point de terminaison que celui que vous avez utilisé pour activer l'API Events. Il s'agit de votre URL, plus'/api/messages'.

- Suivez l'invite pour mettre à jour votre application et vos autorisations.
Ajouter des commandes à barre oblique à votre contrôleur
Découvrez comment un gestionnaire de commandes à barre oblique a été ajouté à la fonction controller.ready :
// ...
// Controller is ready
controller.ready(() => {
// ...
// START: slash commands
controller.on('slash_command', async (bot, message) => {
const numCats = parseInt(message.text);
const response = makeCatMessage(numCats);
bot.httpBody({ text: response });
});
// END: slash commands
});
// ...
Essayer
Saisissez /chats suivi d'un nombre pour envoyer la commande à barre oblique. Ex. : /cats 8

Le bot répondra avec huit chats, que vous seul pourrez voir :

12. Nettoyage
Félicitations ! Vous disposez désormais d'un bot Slack exécuté sur Cloud Run. Vous devez désormais nettoyer les ressources utilisées pour limiter vos dépenses et avoir un comportement responsable dans le cloud.
Supprimer le projet
Vous pouvez supprimer l'intégralité du projet directement depuis Cloud Shell :
gcloud projects delete $PROJECT_ID
Si vous préférez supprimer les différentes ressources une par une, passez à la section suivante.
Supprimer le déploiement
gcloud run services delete kittenbot --region $REGION
Résultat de la commande
Service [kittenbot] will be deleted. Do you want to continue (Y/n)? y Deleted service [kittenbot].
Supprimer votre signature secrète du client
gcloud secrets delete client-signing-secret
Résultat de la commande
You are about to destroy the secret [client-signing-secret] and its [1] version(s). This action cannot be reversed. Do you want to continue (Y/n)? y Deleted secret [client-signing-secret].
Supprimer le secret du jeton de votre bot
gcloud secrets delete bot-token
Résultat de la commande
You are about to destroy the secret [bot-token] and its [1] version(s). This action cannot be reversed. Do you want to continue (Y/n)? y Deleted secret [bot-token].
Supprimer les buckets de stockage
Commencez par lister les buckets Google Cloud Storage pour obtenir le chemin d'accès au bucket :
gsutil ls
Résultat de la commande
gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/ gs://<PROJECT_ID>_cloudbuild/
Supprimez maintenant le bucket d'artefacts :
gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/
Résultat de la commande
Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...
Enfin, supprimez le bucket cloudbuild :
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
Résultat de la commande
Removing gs://<PROJECT_ID>_cloudbuild/...
13. Félicitations !

Vous savez désormais exécuter un bot Slack sur Cloud Run.
Nous n'avons fait qu'effleurer les possibilités offertes par cette technologie. Nous vous encourageons à l'explorer davantage avec vos propres déploiements Cloud Run.
Points abordés
- Créer une intégration personnalisée de bot dans Slack
- Sécuriser vos secrets Slack avec Secret Manager
- Déployer votre bot Slack sur Cloud Run
Étapes suivantes
- Suivez d'autres tutoriels Cloud Run.
En savoir plus
- Consultez les autres exemples d'intégrations Slack dans Google Cloud sur GitHub.
- Testez d'autres fonctionnalités de Google Cloud. en consultant nos tutoriels.