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:14] – [Préambule] qduchemi | technique:adminserv:mattermost:hooks_commands [2022/04/25 09:59] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{indexmenu_n> | ||
+ | # Gérer les intégrations | ||
+ | |||
+ | Par intégration, | ||
+ | |||
+ | ## Préambule | ||
+ | |||
+ | Deux fonctionnalités méconnues de Mattermost sont la création de **hooks entrants** et de **commandes slash**. | ||
+ | |||
+ | * Un **hook entrant** (abrévié hook par la suite) est une URL spéciale qui permet de poster un message sur un canal particulier lorsque l'URL est requêtée. | ||
+ | * Une **commande slash** (abrévié commande par la suite) est un mot clé précédé d'un symbole `/` qui déclenche l' | ||
+ | |||
+ | 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énement. Voici quelques exemples : | ||
+ | * 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 | ||
+ | * CPU au dessus de 80% sur une des machines virtuelles : une mention est envoyée à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | 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 | ||
+ | * Générer et poster une citation d'un personnage de Kaamelott | ||
+ | </ | ||
+ | |||
+ | Pour résumer, les hooks permettent d' | ||
+ | |||
+ | ## Administration et portée | ||
+ | |||
+ | 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' | ||
+ | |||
+ | La personne qui crée une équipe en est automatiquement administrateur, | ||
+ | |||
+ | La gestion des intégrations se fait depuis l'URL suivante, construite à partir du nom de l' | ||
+ | |||
+ | ``` | ||
+ | https:// | ||
+ | ``` | ||
+ | |||
+ | {{ : | ||
+ | ## 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. | ||
+ | |||
+ | En plus des exemples basiques vus ici (seul l' | ||
+ | |||
+ | Ces paramètres sont traités dans la documentation officielle. |