Pular para o conteúdo principal

Visão Geral

Os webhooks de feed notificam seu servidor quando a geração de um feed é concluída, falha ou a validação termina. Configure um ou mais endpoints de webhook por workspace.

Eventos de Webhook

EventoGatilho
feed.generatedGeração de feed concluída com sucesso
feed.failedGeração de feed falhou
feed.validatedVerificação de validação concluída

Criar uma Assinatura

POST /api/v1/feeds/{platform}/webhooks
curl -X POST "https://app.alana.shopping/api/v1/feeds/google/webhooks" \
  -H "X-API-Key: sk_live_sua_chave_api" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://seuservidor.com/webhooks/alana",
    "events": ["feed.generated", "feed.failed"],
    "secret": "seu_segredo_webhook"
  }'

Payload do Webhook

{
  "event": "feed.generated",
  "workspace_id": "ws_abc123",
  "platform": "google",
  "feed_url": "https://app.alana.shopping/api/v1/feeds/google",
  "product_count": 1432,
  "generated_at": "2026-03-17T12:00:00Z"
}

Verificando Assinaturas (HMAC-SHA256)

Toda requisição de webhook inclui um header X-Alana-Signature. Verifique-o para confirmar que a requisição veio do Alana:
import crypto from "crypto";

function verificarAssinatura(payload, assinatura, segredo) {
  const esperado = crypto
    .createHmac("sha256", segredo)
    .update(payload, "utf8")
    .digest("hex");
  const recebido = assinatura.replace("sha256=", "");
  return crypto.timingSafeEqual(
    Buffer.from(esperado, "hex"),
    Buffer.from(recebido, "hex")
  );
}

// Exemplo com Express:
app.post("/webhooks/alana", (req, res) => {
  const assinatura = req.headers["x-alana-signature"];
  const valido = verificarAssinatura(
    JSON.stringify(req.body),
    assinatura,
    process.env.WEBHOOK_SECRET
  );

  if (!valido) return res.status(401).send("Assinatura inválida");

  const { event, platform, product_count } = req.body;
  console.log(`Feed ${event} para ${platform}: ${product_count} produtos`);
  res.sendStatus(200);
});

Política de Retry

O Alana tenta reenviar entregas de webhook com backoff exponencial: 1 min, 5 min, 30 min, 2 h, 8 h. Após 5 tentativas falhas, a assinatura é marcada como inativa. Responda com qualquer status 2xx em até 10 segundos para confirmar o recebimento.
Last modified on March 18, 2026