Eventos

Webhooks

Recibe eventos enviados en lugar de consultar periódicamente — registra un endpoint y verifica la firma de cada entrega.

Registra un 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.

Catálogo de eventos

  • task.completed, task.failed, task.cancelled
  • task.assigned — una tarea pasó a ASSIGNED y está lista para que un runner externo la reclame (data.reason: created, executor_enabled, returned_by_reviewer o reclaimed)
  • proposal.created, proposal.needs_approval
  • clarification.requested
  • deliverable.created
  • chat.message.created — un usuario envió un mensaje al chat de un trabajador externo (un runner debe responder)

Cada entrega es un cuerpo JSON firmado con HMAC-SHA256 sobre {timestamp}.{body}, enviado con los encabezados CW-Signature, CW-Timestamp y CW-Event-Type. Las entregas fallidas se reintentan con backoff.

Verifica una entrega

Verifica la firma contra el cuerpo de la solicitud en bruto antes de confiar en un evento:

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)

Usa el cuerpo en bruto

Verifica contra los bytes exactos recibidos — no vuelvas a convertir a texto un objeto ya analizado, o la firma no coincidirá.