← Retour au centre d'aide

Connecter n'importe quelle plateforme par webhook

Le webhook est la destination générique de Siggmund. Vous fournissez une URL, Siggmund y envoie chaque article validé, et c'est votre récepteur qui publie — sur la plateforme de votre choix, via un automate comme n8n, Make ou Zapier, ou via votre propre backend.

Il ne demande ni plugin, ni compte à connecter, ni validation de marketplace.

Ce que le webhook fait, et ce qu'il ne fait pas

Le webhook publie du contenu neuf. C'est un envoi sans relecture : Siggmund vous transmet l'article et n'interroge jamais votre site en retour.

Il ne peut donc pas modifier une page déjà en ligne, ni proposer de retour arrière automatique. Ces deux capacités demandent un point d'accroche côté plateforme, ce que seul le connecteur WordPress offre aujourd'hui.

Étape 1 — Déclarer votre URL

Depuis Connexions → Site web / WordPress → Webhook (toutes plateformes), saisissez l'URL qui recevra les articles. Elle doit être publique, en HTTPS, et répondre directement — les redirections sont refusées.

Siggmund affiche alors un secret de signature. Copiez-le : il n'est plus jamais réaffiché. Si vous le perdez, le bouton Régénérer le secret en crée un nouveau et invalide l'ancien immédiatement.

Étape 2 — Recevoir la requête

Siggmund envoie une requête POST en application/json, avec trois en-têtes :

En-têteContenu
X-Shoggo-DeliveryIdentifiant de la livraison. C'est votre clé de déduplication.
X-Shoggo-TimestampHorodatage Unix en secondes, au moment de l'envoi
X-Shoggo-Signaturesha256= suivi de la signature en hexadécimal

Le délai d'attente est de 10 secondes. Répondez en 2xx dès que vous avez accepté le message ; si votre traitement est long, accusez réception d'abord et travaillez ensuite.

Une réponse 3xx est traitée comme un échec : Siggmund ne suit pas les redirections.

Étape 3 — Vérifier la signature

La signature est un HMAC-SHA256 de la chaîne <timestamp>.<corps brut>, calculée avec votre secret et rendue en hexadécimal.

Le corps brut, c'est l'octet exact reçu — pas le résultat d'un JSON.parse suivi d'un JSON.stringify, qui réordonnerait les clés et invaliderait la signature.

JavaScript
import crypto from "node:crypto";

function verifie(secret, rawBody, headers) {
  const timestamp = headers["x-shoggo-timestamp"];
  const recue = headers["x-shoggo-signature"];

  const attendue =
    "sha256=" +
    crypto.createHmac("sha256", secret).update(`${timestamp}.${rawBody}`).digest("hex");

  // Comparaison à temps constant : un `===` fuit la signature caractère par
  // caractère pour un attaquant qui mesure le temps de réponse.
  const a = Buffer.from(attendue);
  const b = Buffer.from(recue ?? "");
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) return false;

  // Le timestamp entre dans la signature pour empêcher le rejeu. Rejetez ce
  // qui est trop ancien — cinq minutes est une valeur raisonnable.
  const ageSecondes = Math.abs(Date.now() / 1000 - Number(timestamp));
  return ageSecondes < 300;
}

Le timestamp fait partie de la chaîne signée précisément pour que la même requête ne puisse pas être rejouée indéfiniment. Vérifier la signature sans vérifier l'âge laisse cette porte ouverte.

Le corps de la requête

JSON
{
  "version": 1,
  "event": "craft.article.published",
  "deliveryId": "...",
  "clientId": "...",
  "runRef": "...",
  "attemptId": "...",
  "publishedAt": "2026-08-10T09:15:00.000Z",
  "article": {
    "slug": "...",
    "title": "...",
    "status": "...",
    "qcScore": 0,
    "blocks": [],
    "metaTitle": "...",
    "metaDescription": "...",
    "wordCount": 0,
    "thumbImage": null,
    "heroImage": null
  }
}

Deux points à ne pas confondre :

  • deliveryId est la clé de déduplication. Si vous recevez deux fois le même deliveryId, c'est le même article : ne le publiez qu'une fois.
  • attemptId change à chaque tentative. Il sert uniquement à faire le lien avec les journaux de Siggmund en cas de support. Ne l'utilisez jamais pour dédupliquer.

Le champ version est incrémenté si la forme du corps change. Vérifiez-le si vous voulez être averti d'une évolution du contrat plutôt que de la découvrir en production.

Tester votre récepteur

L'écran de connexion propose un bouton Envoyer un événement de test qui envoie une livraison factice, signée avec votre vrai secret. C'est le moyen le plus rapide de valider votre vérification de signature avant le premier article réel.

Couper la connexion

Le bouton Déconnecter supprime l'URL et le secret côté Siggmund, immédiatement. Vous pouvez aussi couper unilatéralement de votre côté, en cessant de répondre sur l'URL ou en la changeant : contrairement à un accès en écriture, un secret de signature ne donne aucun droit sur votre site.

Dernière mise à jour : · Première publication :