Zum Hauptinhalt springen
3 Min. Lesedauer

Slack Incoming Webhook

Erhalten Sie eine Slack-Nachricht, sobald ein Zenovay-Ereignis ausgelöst wird — Traffic-Spitze, Zielabschluss, Fehler-Spitze oder Ausfall.

Dieses Rezept nutzt die native Incoming Webhook-Funktion von Slack — kein Slack-App oder Bot erforderlich.

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


1. Den Slack Incoming Webhook erstellen

  1. Öffnen Sie in Slack Ihren Workspace → Apps → suchen Sie nach "Incoming Webhooks" → Add to Slack.
  2. Wählen Sie den Kanal, der Zenovay-Benachrichtigungen erhalten soll (z. B. #alerts oder #growth).
  3. Klicken Sie auf Add Incoming Webhooks integration.
  4. Slack zeigt eine Webhook URL wie https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX — kopieren Sie diese.

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: Slack #alerts (oder etwas Aussagekräftiges)
    • URL: Fügen Sie die Slack-Webhook-URL aus Schritt 1 ein
    • Events: Wählen Sie die Events aus, die Sie interessieren (Traffic-Spitze, Zielabschluss, Website ausgefallen, …)
  5. Klicken Sie auf Create webhook.
  6. Klicken Sie auf das Send test event (Papierflugzeug-Symbol) auf der neuen Karte. Innerhalb von ca. 5 Sekunden sollte eine Slack-Nachricht im Kanal erscheinen.

Das war's für die Grundkonfiguration — Slack akzeptiert Zenovays Standard-JSON-Payload als generisches text-Feld.


3. (Optional) Die Slack-Nachricht formatieren

Slacks Incoming Webhooks akzeptieren einen reichhaltigeren Payload mit Blocks, Attachments und Markdown-Formatierung. Zenovay sendet ein generisches JSON-Ereignis — Slack rendert es als Fallback-text-Wert.

Wenn Sie hübsch formatierte Slack-Nachrichten mit farbigen Attachments oder Block-Layouts möchten, betreiben Sie ein kleines Relay zwischen Zenovay und Slack:

// Cloudflare Workers / any Node-style runtime
export default {
  async fetch(req) {
    const event = await req.json();
    const slackPayload = {
      text: `📈 Zenovay event: *${event.event_type}* on ${event.website_id}`,
      attachments: [{
        color: event.event_type === 'website_down' ? '#dc2626' : '#3b82f6',
        fields: [
          { title: 'Event', value: event.event_type, short: true },
          { title: 'Time', 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');
  },
};

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


4. Zenovays Signatur verifizieren (empfohlen für Relays)

Wenn Sie ein Relay verwenden, verifizieren Sie Zenovays HMAC-SHA256-Signatur, damit Slack nur echte Zenovay-Ereignisse erhält:

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

  • Keine Slack-Nachricht kommt an: Prüfen Sie die Webhook-Karte in Zenovay auf einen "Last fired"-Zeitstempel — wenn er leer ist, wurde noch kein Ereignis ausgelöst. Klicken Sie auf Send test event, um eines zu erzwingen.
  • invalid_payload von Slack: Slacks Webhook hat ein 400 zurückgegeben, weil die JSON-Form nicht passte. Verwenden Sie ein Relay (Schritt 3), um das Format an Slacks erwartetes Format anzupassen.
  • Zu viele Benachrichtigungen: Deaktivieren Sie in der Webhook-Konfiguration häufige Ereignistypen wie traffic_spike. Behalten Sie nur die signalstarken.

Verwandtes

War diese Seite hilfreich?