Zum Hauptinhalt springen
3 Min. Lesedauer

Discord-Webhook

Leiten Sie Zenovay-Ereignisse in einen Discord-Kanal weiter — nützlich für Engineering-Team-Räume oder Community-Growth-Räume.

Discords Webhooks sind kanalspezifisch. Kein Discord-Bot oder OAuth erforderlich.

Ausgehende Webhooks sind eine Pro+-Funktion. Aktualisieren Sie Ihren Plan, um sie zu aktivieren.


1. Den Discord-Webhook erstellen

  1. Öffnen Sie in Discord den Kanal, der Zenovay-Benachrichtigungen erhalten soll.
  2. Klicken Sie auf das Zahnrad-Symbol (Kanal bearbeiten) → IntegrationenWebhooksNeuer Webhook.
  3. Geben Sie ihm einen Namen ("Zenovay Alerts") und einen Avatar, wenn Sie möchten.
  4. Klicken Sie auf Webhook-URL kopieren — sie sieht aus wie https://discord.com/api/webhooks/123456789012345678/XXXXXXXX....

2. Den Webhook in Zenovay hinzufügen

  1. Gehen Sie in app.zenovay.com zu Settings → Webhooks.
  2. Wählen Sie die Website, für die Sie Benachrichtigungen erhalten möchten.
  3. Klicken Sie auf Add webhook.
  4. Füllen Sie aus:
    • Name: Discord #ops (oder etwas Aussagekräftiges)
    • URL: Fügen Sie die Discord-Webhook-URL aus Schritt 1 ein
    • Events: Wählen Sie die Events aus, die Sie interessieren
  5. Klicken Sie auf Create webhook.
  6. Klicken Sie auf das Send test event (Papierflugzeug-Symbol) — innerhalb von ca. 5 Sekunden sollte eine Nachricht in Ihrem Discord-Kanal erscheinen.

Discord akzeptiert beliebiges JSON, rendert aber den rohen Payload als Klartext. Für formatierte Nachrichten, siehe Schritt 3.


3. (Optional) Mit Discord-Embeds formatieren

Discord unterstützt reichhaltige Embeds mit Farben, Feldern und Zeitstempeln. Zenovay sendet ein generisches JSON-Ereignis — um es als Embed zu rendern, betreiben Sie ein kleines Relay:

// Cloudflare Workers / Node / Vercel — anywhere that runs 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');
  },
};

Richten Sie die Webhook-URL von Zenovay auf dieses Relay statt direkt auf Discord aus.


4. Zenovays Signatur verifizieren

Für Produktions-Relays, verifizieren Sie die HMAC-SHA256-Signatur, damit nur echte Zenovay-Ereignisse Discord erreichen:

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 });
}

Ihr Webhook-Secret finden Sie unter Settings → Webhooks → klicken Sie auf das Auge-Symbol auf der Webhook-Karte.


Fehlerbehebung

  • Discord lehnt mit HTTP 400 ab: Discords Webhook-Empfänger ist streng — Payloads mit unbekannten Top-Level-Schlüsseln können 400 zurückgeben. Verwenden Sie das Relay in Schritt 3 zur Umformung.
  • Rate Limits: Discord-Webhooks haben Rate Limits pro Kanal (ca. 30 Nachrichten pro Minute). Für häufige Ereignistypen wie traffic_spike bündeln Sie diese in Ihrem Relay oder filtern Sie auf der Zenovay-Seite.
  • Test-Ereignis kommt an, echte Ereignisse nicht: Bestätigen Sie, dass die richtigen Ereignistypen in der Zenovay-Webhook-Konfiguration ausgewählt sind. Das Test-Ereignis verwendet event_type: 'test' unabhängig von der Auswahl.

Verwandtes

War diese Seite hilfreich?