introduction
Slack est une plateforme de communication pour les équipes. Slack propose de nombreux ajouts qui permettent aux équipes d'étendre Slack et de l'intégrer à d'autres programmes. Slackslash commands sont un moyen rapide et facile d'effectuer des actions dans la zone de saisie de message. Par exemple, la saisie de/who
répertorie tous les utilisateurs du canal actuel. Vous pouvez trouver une liste complète des commandes slash intégrées àhttps://get.slack.help/hc/en-us/articles/201259356-Slash-commands.
Vous pouvez créer vos propres commandes slash utiles aux membres de votre espace de travail Slack. Lorsque vous installez la commande sur votre espace de travail et que vous l'invoquez, vous pouvez demander à Slack de demander à un programme que vous avez écrit. Ce programme reçoit les informations de Slack et renvoie une réponse, qui est affichée dans Slack. Vous pouvez en savoir plus sur les commandes Slack slash en lisant lesAPI documentation.
Dans ce didacticiel, vous allez créer une commande Slack slash appelée/slash
, alimentée par une applicationFlask exécutée sur un serveur Ubuntu 16.04 et installer cette commande dans votre espace de travail Slack. Une fois que vous avez terminé, taper/slash
dans la zone de saisie du message enverra des informations à l'application Flask qui traitera la demande et renverra un court message à Slack vous informant que cela a fonctionné.
Conditions préalables
Pour compléter ce tutoriel, vous aurez besoin de:
-
Un serveur Ubuntu 16.04 configuré en suivantthe Ubuntu 16.04 initial server setup guide, y compris un utilisateur sudo non root et un pare-feu.
-
Une application Flask existante servie avec uWSGI s'exécutant derrière Nginx. Suivez le didacticielHow To Serve Flask Applications with uWSGI and Nginx on Ubuntu 16.04 pour configurer cela sur votre serveur.
-
Un espace de travail de développement Slack avec l'autorisation d'installer des applications. Si vous n'en avez pas, créez-en une àhttps://slack.com/create.
[[step-1 -—- creation-and-installation-the-slack-app]] == Étape 1 - Création et installation de l'application Slack
Avant d'écrire notre code, nous allons d'abord créer unSlack app, qui fournit des fonctionnalités supplémentaires à Slack, et l'installer dans un espace de travail de développement Slack. Ensuite, nous définirons la commande et spécifierons l’URL que la commande doit demander lors de l’appel de la commande.
Pour créer une application Slack, visitezhttps://api.slack.com/apps et cliquez sur le bouton vertCreate New App. Dans le formulaire qui apparaît, entrez les détails suivants:
-
PourApp Name, entrez
DigitalOcean Slack slash command
. -
PourDevelopment Slack Workspace, sélectionnez votre espace de travail de développement.
Cliquez ensuite sur le bouton vertCreate App.
Une fois l'application créée, cliquez surSlash Commands puis sur le boutonCreate New Command. Vous verrez la page suivante:
Pour ce didacticiel, vous allez créer une commande appelée/slash
, qui enverra des données via HTTP POST à une URL de requête qui esthttp://server_domain_or_IP/slash
. Pour cela, renseignez les informations suivantes:
-
Remplissez le champCommand avec
/slash
. -
PourRequest URL, entrez
http://your_server_ip_or_domain/slash
. -
PourShort Description, entrez
DigitalOcean Slack slash command
.
Puis sur le bouton vertSave pour terminer la création de la commande slash.
Installez maintenant l'application sur votre espace de travail en cliquant sur le lienInstall App. Appuyez sur le bouton vertInstall App to Workspace. Appuyez ensuite sur le bouton vertAuthorize.
Nous avons maintenant créé et installé une application Slack dans l’espace de travail de développement Slack., Mais la commande ne fonctionnera pas tant que nous n'aurons pas créé une application Web qui traite la commande slash. Avant de pouvoir créer l'application, nous devons configurer votre environnement Python.
[[step-2 -—- configuration-de-l'environnement-python]] == Étape 2 - Configuration de l'environnement Python
Après avoir terminé le didacticiel deHow To Serve Flask Applications with uWSGI and Nginx on Ubuntu 16.04, vous avez une application Flask située dans~/myproject/
. Ce répertoire contient les fichiers et le répertoire suivants:
-
myproject.ini
-
myproject.py
-
wsgi.py
-
myprojectenv/
Nous allons modifier l'application Flask dansmyproject.py
pour agir sur les données envoyées par la commande Slack slash et renvoyer une réponse JSON à Slack.
LeAPI documentation for commands indique que nous devons valider la commande slash à l'aide du jeton de vérification associé au commnd, fourni par Slack.
Ce jeton de vérification doit rester secret. Nous l'enregistrerons donc dans un nouveau fichier appelé.env
file qui n'est pas conservé sous le contrôle de version. Nous utiliserons le packagepython-dotenv
pour exporter les paires clé-valeur dans.env
en tant que variables d'environnement, et nous accéderons à ces variables d'environnement dansmyproject.py
.
Tout d’abord, activez l’environnement virtuel Python en lançant:
source myprojectenv/bin/activate
Pour confirmer que virtualenv est activé, vous devriez voir(myprojectenv)
sur le côté gauche de l'invite Bash. Des secrets tels que le jeton de vérification ne doivent pas être stockés sous contrôle de version. Pour ce faire, nous utilisons le packagepython-dotenv
qui exporte les secrets en tant que variables d'environnement. En utilisantpip
, nous installons le packagepython-dotenv
:
pip install python-dotenv
À l'aide de nano ou de votre éditeur de texte préféré, créez le fichier.env
:
nano .env
Obtenez le jeton de vérification en visitanthttps://api.slack.com/apps. Cliquez sur l'appliDigitalOcean Slack slash command puis surBasic Information. Recherchez ensuiteVerification Token.
Copiez la valeur du jeton et placez-la dans le fichier.env
, en affectant la valeur à une variable d'environnement appeléeVERIFICATION_TOKEN
:
~/myproject/.env
VERIFICATION_TOKEN=your_verification_token
Enregistrez le fichier et quittez l'éditeur.
Lorsque vous développez une application Flask, vous souhaiterez que le serveur uWSGI se recharge automatiquement lorsque vous apportez des modifications à l’application. Pour ce faire, ouvrez d'abordmyproject.ini
dans votre éditeur:
nano myproject.ini
Ajoutez cette ligne à la fin du fichier pour vous assurer que uWSGI se recharge automatiquement lorsque voustouch
ou modifiez l'application Flask dansmyproject.py
~/myproject/myproject.ini
...
touch-reload = myproject.py
Enregistrez le fichier et quittez l'éditeur.
Nous allons maintenant créer l’application Flask qui reçoit et traite les informations envoyées par la commande slash et renvoie une réponse appropriée à Slack.
[[step-3 -–- creating-the-flask-app]] == Étape 3 - Création de l'application Flask
Lorsque nous invoquons la commande/slash
dans Slack, Slack fera une requête à notre serveur. Nous avons configuré la commande pour atteindre l'url/slash
, nous allons donc modifier l'application Flask que nous avons créée pour répondre à ce point de terminaison.
Ouvrezmyproject.py
dans votre éditeur:
nano myproject.py
Supprimer le contenu du fichier. Nous allons créer une nouvelle application à partir de zéro.
Ajoutez ce code qui importe Flask et charge des modules supplémentaires pour la gestion des données JSON et les requêtes Web:
~/myproject/myproject.py
#!/usr/bin/env python
from flask import Flask, jsonify, request
Ajoutez ensuite ce code qui charge le moduledotenv
. lit le contenu du fichier.env
que vous avez créé. charge son contenu dans des variables d'environnement, puis récupère le jeton de vérification de l'environnement, en le stockant dans la variableverification_token
:
~/myproject/myproject.py
...
import os
import dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
dotenv.load_dotenv(dotenv_path)
verification_token = os.environ['VERIFICATION_TOKEN']
Ajoutez maintenant ce code pour configurer l’application Flask afin qu’elle réponde à la commande slack slash en envoyant une réponse textuelle indiquant que «La commande slash de DigitalOcean est réussie!»:
~/myproject/myproject.py
...
app = Flask(__name__)
@app.route('/slash', methods=['POST'])
def slash():
if request.form['token'] == verification_token:
payload = {'text': 'DigitalOcean Slack slash command is successful!'}
return jsonify(payload)
if __name__ == '__main__':
app.run()
Enregistrez le fichier et quittez l'éditeur.
Redémarrez le service systemd demyproject
pour vous assurer que la dernière version de votre code est en cours d'exécution:
sudo systemctl restart myproject
Modifions maintenant la configuration de Nginx pour prendre en charge notre commande slash.
[[step-4 -–- configuring-nginx-to-serve-the-command]] == Étape 4 - Configuration de Nginx pour servir la commande
Puisque notre URL de demande esthttp://server_domain_or_IP/slash
, nous devons changer la valeur delocation
dans notre bloc de serveur Nginx de/
à/slash
.
Ouvrez le fichier/etc/nginx/sites-available/myproject
dans votre éditeur:
sudo nano /etc/nginx/sites-available/myproject
Modifiez la valeur delocation
de/
à/slash
:
/etc/nginx/sites-available/myproject
...
location /slash {
include uwsgi_params;
uwsgi_pass unix:/home/sammy/myproject/myproject.sock;
}
}
Enregistrez le fichier et quittez l'éditeur.
Ensuite, vérifiez les erreurs de syntaxe dans le fichier de configuration Nginx:
sudo nginx -t
S'il n'y a pas d'erreur de syntaxe avec le fichier de configuration Nginx, redémarrez le service Nginx:
sudo systemctl restart nginx
Accédez à votre espace de travail Slack de développement et saisissez/slash
dans n'importe quel canal. Vous devriez voir la réponse suivante:
Si vous recevez un message indiquant que la commande a échoué, vérifiez le code dansmyproject.py
pour toute erreur ou problème de syntaxe. Puis réessaye.
Enfin, une fois que vous avez fini de développer votre commande, désactivez l’environnement virtuel Python afin que les futures commandes Python utilisent l’interpréteur Python du système:
deactivate
Vous venez de créer une application Flask qui reçoit les informations de la commande slash/slash
et renvoie une réponse à Slack.
[.note] #Pour vous assurer que la communication entre votre serveur et Slack est sécurisée, cryptez la connexion pour la commande slash en utilisant HTTPS pour l'URL de la requête. Vous pouvez le faire parinstalling a free SSL certificate issued by Let’s Encrypt on the Nginx server. Lorsque vous avez terminé, assurez-vous de modifier l'URL de votre application Slack et de remplacerhttp://
parhttps://
.
#
Conclusion
Dans ce didacticiel, vous avez implémenté une commande slack slash en configurant une application Flask servie par un serveur d'applications uWSGI et un serveur proxy inverse Nginx.
Maintenant que vous connaissez les bases de la création de commandes slash, vous pouvez implémenter toutes les commandes slash dont votre équipe a besoin. Vous pouvez créer des commandes permettant d'extraire des données de bases de données, interagir avec d'autres API ou même créer des commandes de déploiement de code.