Collegare qualsiasi piattaforma con un webhook
Il webhook è la destinazione generica di Siggmund. Voi fornite un URL, Siggmund vi invia ogni articolo approvato e è il vostro ricevitore a pubblicare — sulla piattaforma che preferite, tramite uno strumento di automazione come n8n, Make o Zapier, oppure tramite il vostro backend.
Non richiede alcun plugin, alcun account da collegare né alcuna approvazione da parte di un marketplace.
Cosa fa il webhook e cosa non fa
Il webhook pubblica contenuti nuovi. È un invio a senso unico: Siggmund vi trasmette l'articolo e non interroga mai il vostro sito in risposta.
Non può quindi modificare una pagina già online, né offrire un ripristino automatico. Entrambe le funzioni richiedono un punto di aggancio lato piattaforma, che oggi offre soltanto il connettore WordPress.
Passo 1 — Dichiarare il vostro URL
Da Connessioni → Sito web / WordPress → Webhook (tutte le piattaforme), inserite l'URL che riceverà gli articoli. Deve essere pubblico, in HTTPS, e rispondere direttamente — i reindirizzamenti vengono rifiutati.
Siggmund mostra allora un segreto di firma (secret). Copiatelo: non verrà mai più mostrato. Se lo perdete, il pulsante Rigenera il segreto ne crea uno nuovo e invalida subito il vecchio.
Passo 2 — Ricevere la richiesta
Siggmund invia una richiesta POST in application/json, con tre header:
| Header | Contenuto |
|---|---|
X-Shoggo-Delivery | Identificativo della consegna. È la vostra chiave di deduplicazione. |
X-Shoggo-Timestamp | Timestamp Unix in secondi, al momento dell'invio |
X-Shoggo-Signature | sha256= seguito dalla firma in esadecimale |
Il timeout è di 10 secondi. Rispondete con 2xx appena avete accettato il messaggio; se la vostra elaborazione è lunga, confermate prima la ricezione e lavorate dopo.
Una risposta 3xx è trattata come un errore: Siggmund non segue i reindirizzamenti.
Passo 3 — Verificare la firma
La firma è un HMAC-SHA256 della stringa <timestamp>.<corpo grezzo>, calcolato con il vostro secret e restituito in esadecimale.
Il corpo grezzo è esattamente la sequenza di byte ricevuta — non il risultato di un JSON.parse seguito da un JSON.stringify, che riordinerebbe le chiavi e invaliderebbe la firma.
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");
// Confronto a tempo costante: un `===` rivela la firma carattere per
// carattere a un attaccante che misura il tempo di risposta.
const a = Buffer.from(attendue);
const b = Buffer.from(recue ?? "");
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) return false;
// Il timestamp entra nella firma per impedire il replay. Rifiutate ciò che
// è troppo vecchio — cinque minuti è un valore ragionevole.
const ageSecondes = Math.abs(Date.now() / 1000 - Number(timestamp));
return ageSecondes < 300;
}
Il timestamp fa parte della stringa firmata proprio perché la stessa richiesta non possa essere riprodotta all'infinito. Verificare la firma senza verificare l'età lascia aperta questa porta.
Il corpo della richiesta
{
"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
}
}
Due punti da non confondere:
deliveryIdè la chiave di deduplicazione. Se ricevete due volte lo stessodeliveryId, si tratta dello stesso articolo: pubblicatelo una sola volta.attemptIdcambia a ogni tentativo. Serve solo a collegarsi ai log di Siggmund in caso di assistenza. Non usatelo mai per deduplicare.
Il campo version viene incrementato se cambia la forma del corpo. Verificatelo se preferite essere avvisati di un'evoluzione del contratto piuttosto che scoprirla in produzione.
Testare il vostro ricevitore
La schermata di connessione offre un pulsante Invia un evento di test che invia una consegna fittizia, firmata con il vostro vero secret. È il modo più rapido per convalidare la vostra verifica della firma prima del primo articolo reale.
Interrompere la connessione
Il pulsante Disconnetti elimina subito l'URL e il secret lato Siggmund. Potete anche interrompere unilateralmente dal vostro lato, smettendo di rispondere all'URL o cambiandolo: a differenza di un accesso in scrittura, un segreto di firma non dà alcun diritto sul vostro sito.
Ultimo aggiornamento: · Prima pubblicazione:
