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
- No Zapier, cria um Zap e escolhe Webhooks by Zapier como gatilho (disponível nos planos pagos do Zapier).
- Escolhe Catch Hook e continua.
- Copia o URL que o Zapier mostra (começa por
https://hooks.zapier.com/hooks/catch/).
2. Junta o webhook no RastroAff
- No painel da tua rede, abre API e procura Webhooks (administradores, a partir do plano Starter).
- Cola o URL do Zapier, escolhe os eventos e carrega em Criar webhook.
- Copia o segredo de assinatura, que só aparece uma vez. Só precisas dele se verificares as assinaturas tu próprio.
- Carrega em Enviar teste. O RastroAff envia um evento
webhook.teste 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.