Pular para o conteúdo principal
4 min de leitura

Incoming webhook do Slack

Receba uma mensagem no Slack toda vez que um evento do Zenovay disparar — pico de tráfego, conclusão de meta, pico de erros ou indisponibilidade.

Esta receita usa o recurso nativo de incoming webhook do Slack: nenhum app ou bot Slack necessário.

Webhooks de saída são um recurso Pro+. Faça upgrade do seu plano para habilitá-los.


1. Criar o incoming webhook do Slack

  1. No Slack, abra seu workspace → Apps → pesquise "Incoming Webhooks" → Add to Slack.
  2. Escolha o canal que deve receber os alertas do Zenovay (ex: #alertas ou #crescimento).
  3. Clique em Add Incoming Webhooks integration.
  4. O Slack exibe uma Webhook URL com o formato https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX — copie-a.

2. Adicionar o webhook no Zenovay

  1. Em app.zenovay.com, acesse Settings → Webhooks.
  2. Escolha o site para o qual deseja receber notificações.
  3. Clique em Add webhook.
  4. Preencha:
    • Name: Slack #alertas (ou qualquer nome que faça sentido para você)
    • URL: cole a URL do webhook do Slack do Passo 1
    • Events: escolha os eventos que deseja monitorar (Pico de tráfego, Meta concluída, Site fora do ar, …)
  5. Clique em Create webhook.
  6. Clique no Send test event (ícone de avião de papel) no novo cartão. Em cerca de 5 segundos, você deverá ver uma mensagem no canal do Slack.

Isso é tudo para a configuração básica — o Slack aceita o payload JSON padrão do Zenovay como um campo text genérico.


3. (Opcional) Formatar as mensagens do Slack

Os incoming webhooks do Slack aceitam um payload mais rico com blocos, attachments e formatação Markdown. O Zenovay envia um evento JSON genérico — o Slack o renderizará como um valor text de fallback.

Se quiser mensagens Slack formatadas com attachments coloridos por severidade ou layouts em blocos, execute um pequeno relay entre o Zenovay e o Slack:

// Cloudflare Workers / qualquer runtime Node-style
export default {
  async fetch(req) {
    const event = await req.json();
    const slackPayload = {
      text: `📈 Evento Zenovay: *${event.event_type}* em ${event.website_id}`,
      attachments: [{
        color: event.event_type === 'website_down' ? '#dc2626' : '#3b82f6',
        fields: [
          { title: 'Evento', value: event.event_type, short: true },
          { title: 'Hora', value: event.timestamp, short: true },
        ],
      }],
    };
    await fetch(SLACK_WEBHOOK_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(slackPayload),
    });
    return new Response('ok');
  },
};

Aponte a URL do webhook do Zenovay para o seu relay em vez do Slack diretamente.


4. Verificar a assinatura do Zenovay (recomendado para relays)

Se você usar um relay, verifique a assinatura HMAC-SHA256 do Zenovay para que o Slack receba apenas eventos genuínos do Zenovay:

import { createHmac } from 'crypto';

const signature = req.headers.get('x-zenovay-signature'); // 'sha256=<hex>'
const provided = signature.replace(/^sha256=/, '');
const expected = createHmac('sha256', YOUR_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');

if (provided !== expected) {
  return new Response('invalid signature', { status: 401 });
}

Seu segredo do webhook é exibido em Settings → Webhooks → clique no ícone de olho no cartão do webhook.


Solução de problemas

  • Nenhuma mensagem chega no Slack: verifique o cartão do webhook no Zenovay em busca de um timestamp "Last fired" — se estiver vazio, nenhum evento foi disparado ainda. Clique em Send test event para forçar um.
  • invalid_payload do Slack: o webhook do Slack retornou 400 porque o formato JSON não correspondia. Use um relay (Passo 3) para reformatar no formato esperado pelo Slack.
  • Alertas frequentes demais: na configuração do webhook, desmarque tipos de eventos muito frequentes como traffic_spike. Mantenha apenas os de alto sinal.

Relacionados

Esta página foi útil?