Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:adminserv:mattermost:hooks_commands [2021/01/05 11:11] – qduchemi | technique:adminserv:mattermost:hooks_commands [2022/04/25 09:59] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
## Préambule | ## Préambule | ||
- | Deux fonctionnalités méconnues de Mattermost | + | Deux fonctionnalités méconnues de Mattermost sont la création de **hooks |
- | * Un **hook** est une URL spéciale qui permet de poster un message sur un canal particulier lorsque l'URL est requêtée. | + | * Un **hook |
- | * Une **commande slash** est un mot clé précédé d'un symbole `/` qui déclenche l' | + | * Une **commande slash** |
- | Ces commandes | + | Les commandes sont à différencier des commandes de plugin (comme `/ |
- | < | + | < |
- | Les **hooks** sont très pratiques pour réagir à un événement extérieur et poster un message suite à cet événements. Voici quelques exemples : | + | Les **hooks** sont très pratiques pour réagir à un événement extérieur et poster un message suite à cet événement. Voici quelques exemples : |
- | + | * Ajout d'une nouvelle tâche sur un kanban : un message est posté sur le canal concerné | |
- | * Ajout d'une nouvelle tâche sur un kanban : un message est posté sur le canal concerné | + | * Ouverture d'une nouvelle issue sur Gitlab : une mention est envoyée aux membres du dépôt |
- | * Ouverture d'une nouvelle issue sur Gitlab : une mention est envoyée aux membres du dépôt | + | * CPU au dessus de 80% sur une des machines virtuelles : une mention est envoyée à l' |
- | * CPU au dessus de 80% sur une des machines virtuelles : une mention est envoyée à l' | + | |
</ | </ | ||
Ligne 26: | Ligne 25: | ||
< | < | ||
Les **commandes slash** sont utiles pour déclencher une action extérieure ou générer un message contenant une information dynamique. Exemples : | Les **commandes slash** sont utiles pour déclencher une action extérieure ou générer un message contenant une information dynamique. Exemples : | ||
- | + | | |
- | * Obtenir les statistiques d'un service, les mettre en forme et les poster | + | * Déclencher la génération d'un rapport journalier quelconque |
- | * Déclencher la génération d'un rapport journalier quelconque | + | * Générer et poster une citation d'un personnage de Kaamelott |
- | * Générer et poster une citation d'un personnage de Kaamelott | + | |
</ | </ | ||
- | Pour résumer, les hooks permettent d' | + | Pour résumer, les hooks permettent d' |
- | + | ||
- | < | + | |
- | </ | + | |
## Administration et portée | ## Administration et portée | ||
- | Les hooks et les commandes sont **circonscrits** à une équipe. Une commande mise en place sur une équipe ne fonctionnera que sur cette équipe. | + | Les hooks et les commandes sont **circonscrits à une seule équipe**. Une commande mise en place sur une équipe ne fonctionnera que sur cette équipe. |
Les administrateurs d' | Les administrateurs d' | ||
Ligne 51: | Ligne 46: | ||
``` | ``` | ||
- | Ou depuis | + | {{ : |
+ | ## Créer et tester un hook entrant | ||
+ | |||
+ | < | ||
+ | |||
+ | Depuis les intégrations, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Avec cette configuration, | ||
+ | |||
+ | < | ||
+ | |||
+ | Une URL confidentielle est générée suite à l' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Cette URL peut maintenant être utilisée par une application compatible Slack ou Mattermost. Mais elle peut aussi être utilisée "à la main" ou dans un script personnalisé. | ||
+ | |||
+ | Pour ce faire, il suffit d' | ||
+ | |||
+ | En reprenant l' | ||
+ | |||
+ | ```bash | ||
+ | $ curl -i -X POST -H ' | ||
+ | ``` | ||
+ | |||
+ | Le message est en effet reçu, le formatage Markdown est interprété et les mentions envoient des notifications aux personnes concernées. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Côté console, on reçoit un `200 OK` pour indiquer que tout s'est bien passé. | ||
+ | ## Créer et tester une commande slash | ||
+ | |||
+ | < | ||
+ | |||
+ | L' | ||
+ | |||
+ | On se rend dans les intégrations, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Les paramètres sont similaires au webhook entrant. En revanche, deux choix sont importants : | ||
+ | |||
+ | * L'URL qui sera appelée lors du déclenchement de la commande, | ||
+ | * La méthode (`GET` ou `POST`). | ||
+ | |||
+ | Le reste est de la responsabilité du serveur, qui reçoit toutes les informations de la commande et formate une réponse. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | On pourra consulter : | ||
+ | * Les [paramètres de la requête envoyée par Mattermost](https:// | ||
+ | * Les [paramètres supportés dans la réponse](https:// | ||
+ | </ | ||
+ | |||
+ | Dans tous les cas, le serveur distant doit répondre avec un objet `JSON` qui contient au moins l' | ||
+ | |||
+ | Voici un exemple simplissime qui répond à toutes les requêtes `POST` en ajoutant dans la réponse les paramètres passés à la commande : | ||
+ | |||
+ | ```python | ||
+ | from flask import Flask, request | ||
+ | |||
+ | app = Flask(__name__) | ||
+ | |||
+ | |||
+ | @app.route('/', | ||
+ | def result(): | ||
+ | return { | ||
+ | " | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | Pour le tester, il suffit de l' | ||
+ | |||
+ | ```bash | ||
+ | $ pip install flask | ||
+ | $ FLASK_APP=simple_server.py flask run -h 0.0.0.0 | ||
+ | ``` | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour tester, il suffit de déclencher la commande dans n' | ||
+ | |||
+ | ``` | ||
+ | / | ||
+ | ``` | ||
+ | |||
+ | La commande est envoyée, et Mattermost affiche en réponse : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | Par défaut, le message n'est visible que par la personne qui écrit la commande. Il est possible de changer ce comportement en assignant `in_channel` à l' | ||
+ | </ | ||
+ | |||
+ | ## Conclusion | ||
+ | |||
+ | Les commandes et les hooks sont très puissants. Dans leur forme basique, ils permettent de poster un message en réponse à un événement extérieur ou une commande depuis Mattermost. | ||
- | ## Exemple | + | En plus des exemples basiques vus ici (seul l' |
- | ## Exemple de commande slash | + | Ces paramètres sont traités dans la documentation officielle. |