Disponible dans SeaTable Free, Plus et Enterprise
SeaTable offre la possibilité de configurer un ou plusieurs webhooks pour une base. Une fois qu'un webhook est configuré, toute modification du contenu d'une base déclenche une impulsion sous la forme d'un HTTP Post Request.
Pour simplifier, on peut se représenter un webhook comme un système de notification. Chaque fois que quelque chose change dans une base, un enregistrement est envoyé à une URL que vous avez définie.
- Vous ajoutez une nouvelle ligne : SeaTable vous envoie un message.
- Vous cochez une case, c'est aussi un message.
Toute modification, même minime, du contenu d'une base entraîne l'envoi d'un webhook. Important : en cas de modification de la structure de la base, aucun webhook n'est envoyé.
Utilisations possibles des webhooks #
Les webhooks sont, avec les API REST, une méthode populaire pour faire parler les systèmes informatiques entre eux. Un webhook est en quelque sorte une requête API inversée. Dans le cas d'une API, SeaTable attend une demande à laquelle l'API répond. Dans le cas d'un webhook, en revanche, une notification est automatiquement envoyée lorsque quelque chose se passe.
Les webhooks ne fonctionnent donc en principe que dans un sens. SeaTable informe une autre application que quelque chose s'est passé. C'est donc à l'application cible de décider si ce changement est pertinent et quelles actions de suivi doivent être déclenchées. Les utilisations les plus courantes des webhooks sont par exemple
- notification par e-mail ou chat dès qu'une nouvelle ligne est créée dans une base
- Publication automatique d'un article dès que le statut est modifié, par exemple en "publier maintenant".
- Mise à jour d'un abonnement dès qu'un paiement est enregistré
Dans l'optique d'une automatisation, les webhooks sont donc toujours les déclencheurs qui conduisent à une activité consécutive souhaitée.
Mettre en place un webhook #
Sur la page d'accueil de cloud.seatable.io, passez sur une base pour laquelle vous souhaitez configurer un webhook. Dans le menu contextuel, sous Avancé, vous trouverez l'option Webhooks. Pour créer un nouveau webhook, il suffit d'indiquer une URL quelconque. La clé secrète peut également rester vide, mais si votre URL cible est publiquement disponible, vous devez définir cette valeur et la valider lors du traitement des webhooks. Dès que vous enregistrez le webhook, toute modification du contenu de votre base est envoyée à cette URL.

Formulaire de création d'un webhook dans SeaTable
Les modifications suivantes déclenchent un webhook :
- une nouvelle ligne est ajoutée ou dupliquée
- La ligne est supprimée
- Le contenu des lignes est modifié
Les modifications structurelles d'une base, telles que l'ajout d'une nouvelle colonne, un commentaire de colonne, la création d'une nouvelle vue ou le verrouillage d'une ligne , ne déclenchent pas de webhook.
Exemples de webhooks envoyés par SeaTable #
Exemple 1 : une nouvelle ligne a été ajoutée (par exemple dans l'interface web SeaTable, par formulaire web ou par appel API)
{ "event": "update", "data": { "dtable_uuid": "fae0a3a42ba94df88e8303fd385e37de", "row_id": "Fk-i7xZGS5iA5aSvaG5HAA", "op_user": "4bc9a7c79c5942c5b6238413f2132bea@auth.local", "op_type": "insert_row", "op_time": 1649922777.279, "table_id": "9g8f", "table_name": "Opportunities", "row_name": "", "row_data": [] } }
Exemple 2 : une valeur Single-Select a été sélectionnée
{ "event": "update", "data": { "dtable_uuid": "fae0a3a42ba94df88e8303fd385e37de", "row_id": "QoNno3QiTF26sxmG1sl3_g", "op_user": "4bc9a7c79c5942c5b6238413f2132bea@auth.local", "op_type": "modify_row", "op_time": 1649929622.589, "table_id": "9g8f", "table_name": "Opportunities", "row_name": "", "row_data": [{ "column_key": "589r", "column_name": "Prio", "column_type": "single-select", "column_data": { "options": [{ "name": "++", "color": "#F4667C", "textColor": "#FFFFFF", "id": "381992" }, { "name": "+", "color": "#FBD44A", "textColor": "#FFFFFF", "id": "830278" } ]}, "value": "381992", "old_value": "" }] } }
Exemple 3 : une ligne a été supprimée
{ "event": "update", "data": { "dtable_uuid": "fae0a3a42ba94df88e8303fd385e37de", "row_id": "QoNno3QiTF26sxmG1sl3_g", "op_user": "4bc9a7c79c5942c5b6238413f2132bea@auth.local", "op_type": "delete_row", "op_time": 1649929650.668, "table_id": "9g8f", "table_name": "Opportunities", "row_name": "", "row_data": [] } }
Valeurs possibles qu'un webhook peut prendre #
La valeur "event" est actuellement toujours "update".
La valeur "data" a toujours la structure suivante :
{ "dtable_uuid": base_uuid, "row_id": row_id, "op_user": username (or user_id), "op_type": op_type, // insert_row, delete_row, delete_rows, modify_row, modify_rows "op_time": op_time, "table_id": table_id, "table_name": table_name, "row_name": row_name, "row_data": row_data, "op_app": appName // If the base has been updated via API Token, then the op_app will be the app's name of that API }
Exemple de traitement simple d'un webhook avec PHP #
Le traitement d'un webhook se fait différemment selon le langage de programmation. Le code PHP suivant sert uniquement à illustrer comment réagir, par exemple, à un certain événement comme une ligne supprimée.
$raw_payload = file_get_contents('php://input', true); $payload = json_decode($raw_payload, true); if($payload['event'] === "update"){ // check for a deleted row if($payload['data']['op_type'] === "delete_row"){ // ... } // check if a checkbox was checked in the column with the name "checkbox" if($payload['data']['row_data'][0]['column_name'] === "checkbox" AND $payload['data']['row_data'][0]['value'] === true){ // ... } // save content to file (for debugging $file = 'webhook_payload.txt'; $current = file_get_contents($file); $current .= $raw_payload; $output = file_put_contents($file, $current); }