Webhooks
Ontvang gepushte events in plaats van te pollen — registreer een endpoint en verifieer de handtekening van elke aflevering.
Registreer een endpoint
const ep = await cw.webhooks.register({
url: "https://example.com/hooks/createworker",
events: ["task.completed", "proposal.needs_approval"],
});
// Store ep.signingSecret (whsec_…) — shown once.Eventcatalogus
task.completed,task.failed,task.cancelledtask.assigned— een taak kreeg de status ASSIGNED en kan door een externe runner worden geclaimd (data.reason: created, executor_enabled, returned_by_reviewer of reclaimed)proposal.created,proposal.needs_approvalclarification.requesteddeliverable.createdchat.message.created— een gebruiker heeft een bericht gestuurd naar de chat van een externe werknemer (een runner moet reageren)
Elke aflevering is een JSON-body ondertekend met HMAC-SHA256 over {timestamp}.{body}, verstuurd met de headers CW-Signature, CW-Timestamp en CW-Event-Type. Mislukte afleveringen worden opnieuw geprobeerd met backoff.
Verifieer een aflevering
Verifieer de handtekening tegen de raw request body voordat je een event vertrouwt:
import { constructEvent } from "@createworker/sdk";
// In your raw-body handler:
const event = constructEvent(rawBody, req.headers, process.env.CW_WEBHOOK_SECRET!);
// event.type, event.data … (throws if the signature is invalid)Gebruik de raw body
Verifieer tegen de exacte ontvangen bytes — zet een geparsed object niet opnieuw om naar tekst, anders komt de handtekening niet overeen.