← Volver al centro de ayuda

Conectar cualquier plataforma mediante un webhook

El webhook es el destino genérico de Siggmund. Usted proporciona una URL, Siggmund le envía cada artículo aprobado y es su receptor quien publica — en la plataforma que elija, mediante una herramienta de automatización como n8n, Make o Zapier, o mediante su propio backend.

No requiere ningún plugin, ninguna cuenta que conectar ni ninguna validación de un marketplace.

Qué hace el webhook y qué no hace

El webhook publica contenido nuevo. Es un envío en un solo sentido: Siggmund le transmite el artículo y nunca consulta su sitio a cambio.

Por tanto no puede modificar una página que ya está en línea, ni ofrecer una reversión automática. Ambas capacidades requieren un punto de enganche en la plataforma, que hoy solo ofrece el conector de WordPress.

Paso 1 — Declarar su URL

Desde Conexiones → Sitio web / WordPress → Webhook (todas las plataformas), introduzca la URL que recibirá los artículos. Debe ser pública, en HTTPS, y responder directamente — las redirecciones se rechazan.

Siggmund muestra entonces un secreto de firma (secret). Cópielo: no se vuelve a mostrar nunca. Si lo pierde, el botón Regenerar el secreto crea uno nuevo e invalida el anterior de inmediato.

Paso 2 — Recibir la solicitud

Siggmund envía una solicitud POST en application/json, con tres cabeceras:

CabeceraContenido
X-Shoggo-DeliveryIdentificador de la entrega. Es su clave de deduplicación.
X-Shoggo-TimestampMarca de tiempo Unix en segundos, en el momento del envío
X-Shoggo-Signaturesha256= seguido de la firma en hexadecimal

El tiempo de espera es de 10 segundos. Responda con 2xx en cuanto haya aceptado el mensaje; si su procesamiento es largo, confirme primero la recepción y trabaje después.

Una respuesta 3xx se trata como un fallo: Siggmund no sigue las redirecciones.

Paso 3 — Verificar la firma

La firma es un HMAC-SHA256 de la cadena <timestamp>.<cuerpo en bruto>, calculado con su secret y devuelto en hexadecimal.

El cuerpo en bruto es la secuencia exacta de bytes recibida — no el resultado de un JSON.parse seguido de un JSON.stringify, que reordenaría las claves e invalidaría la firma.

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");

  // Comparación en tiempo constante: un `===` filtra la firma carácter a
  // carácter a un atacante que mida el tiempo de respuesta.
  const a = Buffer.from(attendue);
  const b = Buffer.from(recue ?? "");
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) return false;

  // La marca de tiempo entra en la firma para impedir la repetición (replay).
  // Rechace lo que sea demasiado antiguo — cinco minutos es un valor razonable.
  const ageSecondes = Math.abs(Date.now() / 1000 - Number(timestamp));
  return ageSecondes < 300;
}

La marca de tiempo forma parte de la cadena firmada precisamente para que la misma solicitud no pueda repetirse indefinidamente. Verificar la firma sin verificar la antigüedad deja esa puerta abierta.

El cuerpo de la solicitud

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
  }
}

Dos puntos que no hay que confundir:

  • deliveryId es la clave de deduplicación. Si recibe dos veces el mismo deliveryId, es el mismo artículo: publíquelo una sola vez.
  • attemptId cambia en cada intento. Sirve únicamente para enlazar con los registros de Siggmund en caso de soporte. No lo use nunca para deduplicar.

El campo version se incrementa si cambia la forma del cuerpo. Verifíquelo si prefiere que se le avise de una evolución del contrato en lugar de descubrirla en producción.

Probar su receptor

La pantalla de conexión ofrece un botón Enviar un evento de prueba que envía una entrega ficticia, firmada con su secret real. Es la forma más rápida de validar su verificación de firma antes del primer artículo real.

Cortar la conexión

El botón Desconectar elimina la URL y el secret del lado de Siggmund, de inmediato. También puede cortar unilateralmente por su parte, dejando de responder en la URL o cambiándola: a diferencia de un acceso de escritura, un secreto de firma no da ningún derecho sobre su sitio.

Última actualización: · Primera publicación: