Ce projet est une bot Slack permettant de diffuser des cours interactifs aux utilisateurs de différents workspaces Slack. L’application :
- Gère plusieurs cours, composés d’étapes (messages, questions).
- Exemple de cours dans le fichier
sql/data.sql
- Génération de cours avec un GPT personnalisé
- Exemple de cours dans le fichier
- Propose des questions avec des boutons interactifs.
- Suit la progression de chaque utilisateur en base de données.
- Gère un rythme d’envoi des messages avec un délai aléatoire pour un rendu plus humain.
- Diffusion de cours : Envoie automatiquement l’ensemble des étapes d’un cours.
- Questions interactives : Les étapes de type "question" utilisent des boutons Slack (Block Kit) pour permettre à l’utilisateur de répondre par simple clic.
- Progression utilisateur : La progression (cours, étape actuelle) est stockée en base et mise à jour à chaque étape. Proposition du cours suivant : À la fin d’un cours, l’application propose d’enchaîner sur le prochain. L’utilisateur répond "oui" ou "non".
- Un compte Slack et un workspace dans lequel vous avez les droits nécessaires pour ajouter des applications.
- Node.js et npm installés localement.
- Une base de données MySQL accessible.
- Un outil comme ngrok si vous développez localement, afin d’exposer votre application sur une URL publique HTTPS (nécessaire pour les événements Slack).
git clone [email protected]:HelloAsso/marcel-patulacci-bot.git
cd marcel-patulacci-bot
npm install
Créez les tables et colonnes telles que décrites dans le code SQL fourni (tables workspaces, users, courses, course_steps, progression).
Créez un fichier .env à la racine du projet avec les variables suivantes :
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=...
DB_HOST=localhost
DB_USER=root
DB_PASS=mypassword
DB_NAME=mydb
PORT=3000
SLACK_BOT_TOKEN
etSLACK_SIGNING_SECRET
proviennent de la configuration de l’application Slack (voir ci-dessous).DB_*
sont les infos de connexion à la base MySQL.PORT
est le port sur lequel votre application écoute.
- Rendez-vous sur https://api.slack.com/apps.
- Cliquez sur "Create New App".
- Donnez un nom à votre application et choisissez le workspace dans lequel vous la créez.
- Dans la section "OAuth & Permissions", ajoutez les scopes nécessaires :
- Bot Token Scopes :
chat:write
,commands
,im:history
,users:read
- Bot Token Scopes :
- Cliquez sur "Install to Workspace" puis "Allow".
- Copiez le Bot User OAuth Token (format
xoxb-...
) et placez-le dans votre.env
sousSLACK_BOT_TOKEN
.
- Dans la section "Basic Information", copiez la valeur du Signing Secret et placez-la dans le
.env
sousSLACK_SIGNING_SECRET
.
- Activez "Event Subscriptions" dans la section correspondante.
- Renseignez une URL publique (par exemple obtenue via
ngrok http 3000)
. - Slack enverra un challenge, votre app (Bolt) le gère automatiquement.
- Dans "Subscribe to bot events", ajoutez :
message.im
- Cliquez sur "Save Changes".
Créez deux slash commands (exemples) dans la section "Slash Commands" :
/marcel-sync
: pour synchroniser les utilisateurs du workspace et les enregistrer en base./marcel-start
: pour initier l’envoi du premier cours à tous les utilisateurs. Dans l’URL, mettez l’URL publique (ex:https://<votre-domaine-ngrok>/slack/events
).
Après création, Slack vous donnera un Request URL
qui doit pointer vers l’URL de votre application (https://<votre-domaine>/slack/events
).
N’oubliez pas de sauvegarder.
node app.js
Assurez-vous que votre application est accessible depuis l’URL publique configurée dans Slack (par exemple via ngrok
).
- /marcel-sync : Met à jour la liste des utilisateurs en base.
- /marcel-start : Lance le cours initial (ex: course_id=1) pour tous les utilisateurs du workspace actuel.
- Le bot envoie ensuite les étapes du cours, question après question, message après message, gère la progression, et propose le cours suivant une fois le cours actuel terminé.
- Ajoutez vos cours et steps dans la base
courses
etcourse_steps
. - Les réponses aux questions sont stockées au format JSON dans
course_steps.answers
.
Pour toutes questions, ouvrez une issue sur le dépôt GitHub du projet. Les contributions sont les bienvenues !