Naslag
Webhooks
Registreer een HTTPS-endpoint en Debaty stuurt een POST zodra er iets gebeurt.
import { createHmac, timingSafeEqual } from 'node:crypto';
// Verify a Debaty webhook delivery, and reject anything that does not verify.
// secret: the whsec_… shown once when you created the subscription
// header: the X-Debaty-Signature request header (t=<seconds>,v1=<hex>)
// body: the raw, unparsed request body
function verifyDebatySignature(secret, header, body, toleranceSeconds = 300) {
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
const timestamp = Number(parts.t);
if (!Number.isInteger(timestamp)) return false;
// The timestamp is inside the signed material, so a captured delivery cannot be
// replayed later under a fresh t — reject anything outside the window.
if (Math.abs(Math.floor(Date.now() / 1000) - timestamp) > toleranceSeconds) return false;
const expected = createHmac('sha256', secret).update(`${timestamp}.${body}`).digest('hex');
if (expected.length !== (parts.v1 ?? '').length) return false;
return timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Registreer een endpoint
Geef een HTTPS-URL op en kies de events waarop je wilt luisteren. Via de API heet dat veld eventTypes; de referentie noemt de waarden die het accepteert.
Verifieer de handtekening
Elke levering is ondertekend met je webhook-secret. Controleer de handtekening voor je hem vertrouwt.
Antwoord snel
Antwoord binnen enkele seconden met een 2xx. Bij een fout probeert Debaty het opnieuw.
Wat er wanneer binnenkomt
Je ontvangt post.created, debate.created en comment.created. Wat er via de API geschreven wordt, geeft exact dezelfde events met dezelfde velden als wat er via de website geschreven wordt — je hoeft dus geen onderscheid te maken tussen een reactie van een mens en een van een bot.
