Créer sa commande slack en quelques minutes
Le but de cet article est de vous montrer que très simplement, nous pouvons créer une commande personnalisée pour Slack. Ici, nous allons afficher des chats :)"
Tout d'abord, nous allons nous créer des comptes sur:
- Slack: https://slack.com
- Heroku: http://www.heroku.com/ qui permettra d'héberger notre service REST pour Slack
- Gitlab: https://gitlab.com qui permet évidemment d'héberger notre code, mais qui pourra de manière automatiser déployer notre application sur Heroku à chaque commit (et cela, même en mode "gratuit")
Concentrons-nous tout d'abord sur Heroku et Gitlab.
Créons un compte Heroku. Une fois cela fait, aller dans votre compte:. Vous verrez alors une section nommée "API key":
Cliquez sur "Reveal" pour voir la valeur et conservez la bien en mémoire.
Ensuite, sur en retournant sur votre dashboard d'applications Heroku, cliquez sur "New" et créez une nouvelle application. Dans notre cas, elle s'appellera "slack-cat-command" et le l'application Web sera accessible via https://slack-cat-command.herokuapp.com/ (conservez bien cette URL aussi en mémoire).
Maintenant créons un dépôt sur Gitlab, que nous nommons "slack-cat-command". Une fois cela fait, dirigeons-nous vers la configuration pour "CI / CD" et notamment la section "Secret Variables". La dedans, nous allons créer une clé se nommant "HEROKU_API_KEY" et qui contiendra l' "API Key" que nous avions vu dans notre compte Heroku.
Initialisons notre projet Git, avec à l'intérieur et à la racine un fichier ".gitlab-ci.yml" qui indiquera à Gitlab la procédure pour déployer sur Heroku, et notamment notre application Heroku le code que nous allons écrire:
image: node:6.11.1 production: type: deploy script: - apt-get update -qy - apt-get install -y ruby-dev - apt-get install -y rubygems - gem install dpl - npm install - dpl --provider=heroku --app=slack-cat-command --api-key=$HEROKU_API_KEY only: - master
Ne pas oublier alors de déclarer dans le "package.json" un npm run-script "start" afin de démarrer l'application:
{ "name": "slack-cat-command", "version": "1.0.0", "description": "Slack command called '/cat'", "main": "./lib/index.js", "private": true, "scripts": { "start": "node ./lib/index.js" }, "keywords": [], "author": "", "license": "ISC", "engines": { "node": ">=6.0.0", "npm": ">=3.0.0" }, "dependencies": { "body-parser": "1.18.1", "express": "4.15.4", "morgan": "1.8.2" }, "devDependencies": {} }
Cette application NodeJs, d'ailleurs, pour commencer, va juste démarrer un petit serveur HTTP afin d'afficher une page Web:
'use strict'; const path = require('path'); const express = require('express'); const morgan = require('morgan'); const bodyParser = require('body-parser'); const HTTP_SERVER_PORT = process.env.PORT ? process.env.PORT : 9500; // Basicslet app = express(); let publicFolderPath = path.resolve(path.join(__dirname, '../www')); // Configure and launch the serverapp.use(morgan('combined')); app.use('/', express.static(publicFolderPath)); app.get('*', (req, res) => { res.redirect('/index.html'); }); app.listen(HTTP_SERVER_PORT, () => { console.info('HTTP server run on port', HTTP_SERVER_PORT); }); // Listen for global exceptionsprocess.once('uncaughtException', error => { console.error('Uncaught exception:', error); console.error(error.stack); }); process.on('SIGINT', () => { console.info('server stopped.'); process.exit(); }); process.on('SIGTERM', () => { console.info('server stopped.'); process.exit(); });
Maintenant, allons nous créer un compte Slack. Pour ma part, j'ai un dashboard se nommant https://julienrocheworkspace.slack.com/
Une fois cela fait, allons créer cette commande Slack.
Dirigeons-nous vers la page https://api.slack.com/slack-apps et cliquons sur "Create a Slack App". Une application est toujours au début liée à un workspace. Elle est donc privée. Nous pouvons la rendre publique plus tard, mais cela ne va pas être notre cas:
On est alors dans la configuration de notre application Slack, où nous pouvons personnaliser l'affichage:
De la déclarer en tant que "Commande Slack":
Et de configurer cette commande:
Et pour finir, de l'associer à notre workspace en cliquant sur "Install your app into your workspace":
Nous pouvons le vérifier:
Point important: il y a une section qui se nomme "App credentials", et notamment "Verification token". Ce token est important pour s'assurer dans notre application que les requêtes que nous recevons viennent bien de Slack.
Pour ce faire, nous allons dans notre application Heroku et créer une variable d'environnement qui contiendra ce token:
Maintenant, nous allons programmer notre application Slack
Nous allons nous reposer sur les liens suivants afin de gérer la requête et savoir quoi lui répondre:
- https://api.slack.com/slash-commands
- https://api.slack.com/docs/message-formatting
- https://api.slack.com/docs/message-attachments
Le but de notre commande:
- Si aucun paramètre: on miaule
- Si le paramètre est un entier, on miaule plusieurs fois
- Si le paramètres est "image", nous affichons une image
Voyons ce que cela donne:
app.post('/command/cat', bodyParser.urlencoded({ 'extended': false }), (req, res) => { if (!req.body) { res.send(400, 'Missing parameters'); } else { // Treat the slack command content
console.info('Slack cat command received information:', req.body); if (req.body.token === process.env.SLACK_TOKEN) { let manyTimes = parseInt(req.body.text, 10); if (req.body.text === 'image') { res .status(200) .json({ 'response_type': 'ephemeral', 'text': 'Frrrrrrrr', 'attachments': [ { 'image_url': 'https://static.pexels.com/photos/208967/pexels-photo-208967.jpeg'
} ] }); } else if (!Object.is(manyTimes, NaN)) { res.send(200, 'Meow'.repeat(manyTimes)); } else { res.send(200, 'Meow'); } } else { res.send(403, 'Forbidden: do not come from a Slack engine'); } } });
Et en action:
/slack
/slack 2
/slack image
Et voilà :)
Commentaires
Enregistrer un commentaire