Les intégrations

Brancher Kortlex sur Slack, Teams, Zapier, Make, n8n ou vos propres outils : un webhook à chaque nouvelle correspondance de veille, un flux RSS privé par recherche sauvegardée.

Les intégrations font sortir votre veille de Kortlex : au lieu d'ouvrir l'application, vous recevez chaque nouveauté là où votre équipe travaille déjà - un canal Slack, un tableau Teams, un scénario d'automatisation, un lecteur de flux. Deux mécanismes, branchés sur vos recherches sauvegardées :

  • les webhooks sortants - Kortlex envoie une requête HTTP (un petit message JSON) à l'URL de votre choix dès qu'une recherche sauvegardée a une nouvelle correspondance ;
  • les flux RSS privés - une adresse par recherche sauvegardée, à coller dans n'importe quel lecteur RSS ou outil qui sait lire un flux.

Tout se gère sur la page Intégrations. La fonctionnalité est réservée aux abonnés (et à l'essai de 14 jours) ; dans une organisation, seuls le propriétaire du compte et les gestionnaires y ont accès.

Les webhooks sortants

Depuis la page Intégrations, « Nouveau webhook » demande :

  • une URL de destination en HTTPS (le HTTP simple est refusé, de même que les adresses internes ou privées) ;
  • l'événement qui déclenche l'envoi - aujourd'hui « nouvelle correspondance de veille » (veille.match) ;
  • les recherches concernées : soit toutes vos recherches (présentes et futures), soit une sélection que vous cochez. Seules vos propres recherches sont proposées - la recherche d'un membre de l'organisation ne déclenche jamais de webhook.

À la création, Kortlex affiche une seule fois un secret de signature. Chaque envoi porte un en-tête Kortlex-Signature (un HMAC SHA-256 calculé avec ce secret) : votre outil peut ainsi vérifier que la requête vient bien de Kortlex et non d'un tiers. Le secret se régénère à tout moment (« Renouveler le secret »), ce qui invalide l'ancien.

Le corps de chaque envoi est un objet JSON de cette forme :

{
  "type": "veille.match",
  "created_at": "2026-01-15T09:30:00Z",
  "saved_search": { "id": "…", "label": "Sanctions CNIL - santé" },
  "matches": [
    { "collection": "jurisprudence", "id": "…", "title": "…",
      "url": "https://app.kortlex.com/…", "date": "2026-01-14", "autorite": "CNIL" }
  ]
}

La page Intégrations tient un journal des livraisons (statut, code HTTP, date) pour vérifier le câblage, un bouton Tester qui envoie un message ping, et de quoi activer / désactiver, modifier les recherches ou supprimer chaque webhook. Un envoi qui échoue est réessayé plusieurs fois avec des délais croissants ; après une longue série d'échecs, le webhook est désactivé automatiquement et le propriétaire du compte est prévenu par e-mail.

Les webhooks sont indépendants des alertes e-mail : ils partent même si les notifications de la recherche ou du compte sont coupées. C'est une infrastructure que l'organisation branche volontairement, pas un canal de notification personnel.

Les flux RSS privés

Chaque recherche sauvegardée peut exposer un flux RSS. Comme les lecteurs RSS n'ouvrent pas de session, l'authentification passe par un jeton dans l'adresse du flux - traitez cette URL comme un mot de passe. Le lien se révèle depuis la page Recherches sauvegardées, ligne par ligne ; « régénérer le lien » invalide l'ancien et coupe l'accès des lecteurs qui l'utilisaient. Le flux renvoie les 30 éléments les plus récents, du plus récent au plus ancien.

Brancher un outil

Le message envoyé par un webhook est du JSON brut. Certains outils l'acceptent tel quel ; d'autres (Slack, Discord, Teams) attendent un format de message précis et ont besoin d'un intermédiaire (Zapier, Make, n8n, ou un petit script) pour le reformater. Les tutoriels ci-dessous partent du plus direct au plus souple.

Zapier
  1. Créez un Zap avec le déclencheur « Webhooks by Zapier » → « Catch Hook ».
  2. Copiez l'URL personnalisée fournie par Zapier dans le champ URL du webhook Kortlex.
  3. Dans Kortlex, cliquez sur Tester : Zapier reçoit un exemple de message et découvre la structure des champs (saved_search.label, matches[]…).
  4. Ajoutez l'action de votre choix - « Send Channel Message » vers Slack, une ligne de Google Sheets, une carte Teams… - en glissant les champs du message.
  5. Facultatif : une étape « Code » qui recalcule le HMAC SHA-256 de l'en-tête Kortlex-Signature pour rejeter les requêtes non signées.
Make (ex-Integromat)
  1. Créez un scénario, module de départ « Webhooks » → « Custom webhook », puis « Add ».
  2. Copiez l'adresse générée dans le champ URL du webhook Kortlex.
  3. Laissez Make « en écoute » et cliquez sur Tester dans Kortlex : Make enregistre la structure du message.
  4. Enchaînez les modules voulus - Slack, Microsoft Teams, HTTP, Data store - en mappant saved_search.label et la liste matches (module « Iterator » pour parcourir les correspondances une à une).
n8n
  1. Ajoutez un nœud « Webhook », méthode POST, et copiez son URL de production dans Kortlex.
  2. Facultatif mais recommandé : un nœud « Crypto » (HMAC, SHA-256, la valeur du secret Kortlex) suivi d'un « IF » pour comparer au v1= de l'en-tête Kortlex-Signature et arrêter le flux si ça ne correspond pas.
  3. Un nœud « Item Lists » / « Split Out » sur matches pour traiter chaque correspondance, puis le nœud de sortie (Slack, Discord, e-mail, base de données…).
  4. Activez le workflow, puis cliquez sur Tester dans Kortlex.
Slack

Deux voies. La plus simple passe par un intermédiaire (Zapier / Make / n8n ci-dessus) qui reçoit le JSON de Kortlex et poste un message formaté dans le canal.

Sans intermédiaire, utilisez le Générateur de workflows Slack : créez un workflow démarré par « Webhook », définissez les variables attendues (par ex. label et title), collez l'URL du workflow dans Kortlex, puis ajoutez une étape « Envoyer un message » qui compose le texte à partir de ces variables. Les Incoming Webhooks Slack classiques, eux, n'acceptent que leur propre format {"text": "…"} et ne conviennent pas directement.

Discord

Un webhook Discord attend un corps {"content": "…"} (ou des embeds) : il ne peut pas recevoir le JSON de Kortlex tel quel. Passez par un intermédiaire - n8n ou Make conviennent bien - qui reçoit le message Kortlex, met en forme un texte lisible (titre, autorité, lien) et appelle l'URL du webhook Discord du salon.

Microsoft Teams

Comme Discord, Teams attend un format de carte précis (Adaptive Card via un connecteur ou un Workflow Power Automate). Le plus fiable est d'utiliser Power Automate avec un déclencheur « Lorsqu'une requête HTTP est reçue » : collez son URL dans Kortlex, puis ajoutez l'action « Publier une carte dans un canal » en réutilisant saved_search.label et matches. Zapier et Make proposent la même chose avec leurs modules Teams.

Votre propre outil (script, API interne)
  1. Exposez un point d'entrée HTTPS qui accepte une requête POST avec un corps JSON.
  2. Vérifiez l'en-tête Kortlex-Signature : format t=<horodatage>,v1=<hmac>, où hmac est le HMAC SHA-256 de la chaîne <t>.<corps brut> avec votre secret. Rejetez si la signature ou l'horodatage ne collent pas.
  3. Répondez rapidement un code 2xx ; tout autre code (ou un délai trop long) est considéré comme un échec et sera réessayé.
  4. Traitez le message de façon idempotente : en cas de nouvel essai, la même correspondance peut arriver deux fois (dédupliquez sur l'id de la livraison).

Qui peut gérer les intégrations

L'accès est réservé aux abonnés et à l'essai de 14 jours - voir Essai, offre gratuite et abonnement. Dans une organisation, seuls le propriétaire du compte et les gestionnaires voient la page Intégrations et peuvent créer ou modifier un webhook. Chaque webhook et chaque flux RSS est rattaché à l'organisation, pas à la personne qui l'a créé : il continue de fonctionner si cette personne quitte l'équipe.

Centre d'aide