Saltar para o conteúdo

Ligar o RastroAff ao Zapier com webhooks: conversões para Sheets, Slack ou CRM

Envia conversões, registos de afiliados e pagamentos do RastroAff para o Zapier, o Make ou o n8n com webhooks assinados: configuração, o JSON recebido e verificação.

Atualizado a 30/10/2026

Os webhooks deixam o RastroAff avisar outros sistemas no momento em que algo acontece: uma conversão nova, uma mudança de estado, um afiliado novo ou aprovado, um pagamento. Com o Zapier (ou o Make, ou o n8n) podes então juntar uma linha ao Google Sheets, publicar no Slack ou criar um contacto no teu CRM, sem programar.

Eventos que podes enviar

Evento Quando
conversion.created É registada uma conversão nova
conversion.status_changed Uma conversão é aprovada, rejeitada ou revertida
affiliate.signed_up Um afiliado regista-se
affiliate.approved Aprovas um afiliado
payout.requested Um afiliado pede um pagamento
payout.status_changed Um pagamento é aprovado, pago ou rejeitado

1. Cria o gatilho no Zapier

  1. No Zapier, cria um Zap e escolhe Webhooks by Zapier como gatilho (disponível nos planos pagos do Zapier).
  2. Escolhe Catch Hook e continua.
  3. Copia o URL que o Zapier mostra (começa por https://hooks.zapier.com/hooks/catch/).

2. Junta o webhook no RastroAff

  1. No painel da tua rede, abre API e procura Webhooks (administradores, a partir do plano Starter).
  2. Cola o URL do Zapier, escolhe os eventos e carrega em Criar webhook.
  3. Copia o segredo de assinatura, que só aparece uma vez. Só precisas dele se verificares as assinaturas tu próprio.
  4. Carrega em Enviar teste. O RastroAff envia um evento webhook.test e mostra a resposta do Zapier.

3. Termina o Zap

De volta ao Zapier, carrega em Test trigger: vês os campos do evento de teste. Depois da primeira conversão real, aparecem também os campos da conversão. Junta uma ação, por exemplo Google Sheets → Create Spreadsheet Row ou Slack → Send Channel Message, e liga os campos.

O que o RastroAff envia

Cada pedido é um POST com JSON:

{
  "id": "cmw1…",
  "event": "conversion.created",
  "createdAt": "2026-10-30T15:46:34.684Z",
  "data": {
    "id": "cmw2…",
    "status": "approved",
    "offer": "CMP-7K2M9XA1",
    "affiliate": "AFF-78HHEKM6",
    "clickId": "01JCW7R2KQ8M4T…",
    "transactionId": "order-1042",
    "goal": null,
    "payout": 25,
    "revenue": 30,
    "saleAmount": 99,
    "currency": "EUR",
    "country": "PT",
    "sub1": "facebook",
    "sub2": null,
    "sub3": null
  }
}

As mudanças de estado trazem também previousStatus. Cabeçalhos: X-RastroAff-Event, X-RastroAff-Delivery (o ID da entrega) e X-RastroAff-Signature.

Repetições

Se o teu endereço não responder com um estado 2xx, o RastroAff tenta de novo ao fim de 1 minuto, 5 minutos, 30 minutos, 2 horas, 6 horas e 12 horas. A página API mostra as últimas entregas e as respostas. Usa o id da entrega para ignorar duplicados.

Verificar a assinatura (no teu servidor)

O X-RastroAff-Signature tem a forma t=1730303194,v1=5f2b…. Calcula o HMAC-SHA256 de t + "." + corpo em bruto com o teu segredo e compara com o v1; recusa pedidos com mais de 5 minutos.

import crypto from "node:crypto";

function verify(secret, rawBody, header) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

O Zapier e o Make não verificam assinaturas; o próprio URL é o segredo, por isso não o partilhes.