Pular para o conteúdo principal
4 min de leitura

Webhook do Discord

Redirecione eventos do Zenovay para um canal do Discord — útil para salas de equipe de engenharia ou salas de guerra de crescimento da comunidade.

Os webhooks do Discord têm escopo por canal. Não é necessário bot Discord nem OAuth.

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


1. Criar o webhook do Discord

  1. No Discord, abra o canal que deve receber os alertas do Zenovay.
  2. Clique no ícone de engrenagem (Editar canal) → IntegraçõesWebhooksNovo Webhook.
  3. Dê um nome ("Zenovay Alerts") e um avatar, se desejar.
  4. Clique em Copiar URL do Webhook — ela terá o formato https://discord.com/api/webhooks/123456789012345678/XXXXXXXX....

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: Discord #ops (ou qualquer nome significativo)
    • URL: cole a URL do webhook do Discord do Passo 1
    • Events: escolha os eventos que deseja monitorar
  5. Clique em Create webhook.
  6. Clique no ícone de Send test event (ícone de avião de papel) — em cerca de 5 segundos, uma mensagem deverá aparecer no seu canal do Discord.

O Discord aceita JSON arbitrário, mas renderizará o payload bruto como texto simples. Para mensagens formatadas, veja o Passo 3.


3. (Opcional) Formatar com embeds do Discord

O Discord suporta embeds ricos com cores, campos e timestamps. O Zenovay envia um evento JSON genérico — para renderizá-lo como um embed, execute um pequeno relay:

// Cloudflare Workers / Node / Vercel — qualquer lugar que execute JS
export default {
  async fetch(req) {
    const event = await req.json();
    const colour = event.event_type === 'website_down' ? 0xdc2626
                 : event.event_type === 'traffic_spike' ? 0x10b981
                 : 0x3b82f6;
    const discordPayload = {
      embeds: [{
        title: `Zenovay: ${event.event_type}`,
        description: `Event for site ${event.website_id}`,
        color: colour,
        fields: [
          { name: 'Event type', value: event.event_type, inline: true },
          { name: 'Time', value: event.timestamp, inline: true },
        ],
        footer: { text: 'Zenovay Analytics' },
      }],
    };
    await fetch(DISCORD_WEBHOOK_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(discordPayload),
    });
    return new Response('ok');
  },
};

Aponte a URL do webhook do Zenovay para este relay em vez do Discord diretamente.


4. Verificar a assinatura do Zenovay

Para relays em produção, verifique a assinatura HMAC-SHA256 para garantir que apenas eventos genuínos do Zenovay cheguem ao Discord:

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

  • Discord rejeita com HTTP 400: o receptor de webhook do Discord é rigoroso — payloads com chaves de nível superior desconhecidas podem retornar 400. Use o relay do Passo 3 para reformatar.
  • Limites de taxa: os webhooks do Discord têm limite de taxa por canal (~30 mensagens por minuto). Para tipos de eventos muito frequentes como traffic_spike, agrupe-os no seu relay ou filtre do lado do Zenovay.
  • O evento de teste chega, mas os eventos reais não: confirme que os tipos de eventos corretos estão selecionados na configuração do webhook do Zenovay. O evento de teste usa event_type: 'test' independentemente do que estiver selecionado.

Relacionados

Esta página foi útil?