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édenteDernière révisionLes deux révisions suivantes | ||
technique:adminserv:mattermost:hooks_commands [2021/01/05 15:47] – [Exemple de hook entrant] qduchemi | technique:adminserv:mattermost:hooks_commands [2022/04/25 09:59] – 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 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. | * 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' | + | * 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 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 | ||
Ligne 30: | Ligne 30: | ||
</ | </ | ||
- | Pour résumer, les hooks permettent d' | + | Pour résumer, les hooks permettent d' |
## Administration et portée | ## Administration et portée | ||
Ligne 80: | Ligne 80: | ||
Côté console, on reçoit un `200 OK` pour indiquer que tout s'est bien passé. | Côté console, on reçoit un `200 OK` pour indiquer que tout s'est bien passé. | ||
+ | ## Créer et tester une commande slash | ||
- | ## Exemple | + | < |
+ | |||
+ | 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 | ||
+ | |||
+ | ```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. |