AlgoGuardDocs
AlgoGuard

AlgoGuard

Integration

Webhooks

Echtzeit-Benachrichtigungen über Lizenzereignisse

🎣 Webhooks

Erhalten Sie Echtzeit-Benachrichtigungen über Lizenzereignisse direkt auf Ihren Server.


🌐 Übersicht

Webhooks ermöglichen es Ihnen, HTTP-POST-Anfragen zu empfangen, wann immer bestimmte Ereignisse in Ihrem AlgoGuard-Konto auftreten:

  • ✅ Lizenz erstellt
  • 🔓 Lizenz aktiviert
  • ❌ Verifizierung fehlgeschlagen
  • 💳 Abonnement-Zahlung

⚙️ Einrichtung

1. Webhook-Endpoint erstellen

Navigieren Sie zu Einstellungen → Webhooks und klicken Sie auf "Endpoint erstellen":

  • URL: Ihr Server-Endpoint (muss HTTPS sein) ODER eine Discord/Telegram Webhook-URL.
  • Ereignisse: Wählen Sie aus, welche Ereignisse Sie empfangen möchten.
  • Secret: Kopieren Sie das Webhook-Secret (wird zur Signaturüberprüfung verwendet).

💡 Cross-Platform Unterstützung: Wenn Sie eine Discord oder Telegram Webhook-URL eingeben, formatiert AlgoGuard den Payload automatisch, damit er auf diesen Plattformen perfekt aussieht (Embeds, Farben, etc.). Kein eigener Server erforderlich!

2. Receiver implementieren

Ihr Server muss innerhalb von 10 Sekunden mit HTTP 200-299 antworten.

Node.js/Express Beispiel

const express = require("express");
const crypto = require("crypto");

const app = express();
app.use(express.raw({ type: "application/json" }));

const WEBHOOK_SECRET = "whsec_ihr_secret_hier";

app.post("/webhooks/algoguard", (req, res) => {
  const signature = req.headers["x-algoguard-signature"];
  const timestamp = req.headers["x-algoguard-timestamp"];
  const body = req.body.toString();

  // 🔐 Signatur überprüfen
  if (!verifySignature(body, timestamp, signature, WEBHOOK_SECRET)) {
    return res.status(401).send("Ungültige Signatur");
  }

  const payload = JSON.parse(body);
  console.log("🔔 Ereignis empfangen:", payload.event, payload.data);

  // Ereignis verarbeiten
  handleEvent(payload);

  res.status(200).send("OK");
});

function verifySignature(body, timestamp, signature, secret) {
  const unsigned = `${timestamp}.${body}`;
  const expectedSignature =
    "sha256=" + crypto.createHmac("sha256", secret).update(unsigned).digest("hex");

  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature));
}

app.listen(3000);

PHP Beispiel

<?php
$webhookSecret = 'whsec_ihr_secret_hier';

$signature = $_SERVER['HTTP_X_ALGOGUARD_SIGNATURE'];
$timestamp = $_SERVER['HTTP_X_ALGOGUARD_TIMESTAMP'];
$body = file_get_contents('php://input');

// 🔐 Signatur überprüfen
$unsigned = $timestamp . '.' . $body;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $unsigned, $webhookSecret);

if (!hash_equals($expectedSignature, $signature)) {
  http_response_code(401);
  exit('Ungültige Signatur');
}

$payload = json_decode($body, true);
error_log('🔔 Ereignis: ' . $payload['event']);

// Ereignis verarbeiten
handleEvent($payload);

http_response_code(200);
echo 'OK';
?>

📡 Ereignisse

license.created

Ausgelöst, wenn eine neue Lizenz erstellt wird.

{
  "event": "license.created",
  "data": {
    "license": {
      "id": "uuid",
      "license_key": "AG-XXXX-XXXX-XXXX-XXXX",
      "status": "active",
      "expires_at": "2025-12-31T23:59:59Z"
    }
  }
}

verification.failed

Ausgelöst, wenn eine Lizenzverifizierung fehlschlägt.

{
  "event": "verification.failed",
  "data": {
    "license_key": "AG-XXXX-XXXX-XXXX-XXXX",
    "reason": "license_expired",
    "ip_address": "203.0.113.42"
  }
}

🔒 Sicherheit

Signaturüberprüfung

Überprüfen Sie immer die Webhook-Signatur, um sicherzustellen, dass die Anfragen von AlgoGuard stammen.

  1. X-AlgoGuard-Timestamp und X-AlgoGuard-Signature Header abrufen.
  2. Unsignierten String erstellen: {timestamp}.{raw_body}.
  3. HMAC-SHA256 mit Webhook-Secret berechnen.
  4. Mit sha256= präfigieren.
  5. Mit timing-safe equals vergleichen.

Zeitstempel-Validierung

Lehnen Sie Webhooks ab, die älter als 5 Minuten sind, um Replay-Angriffe zu verhindern.


🔄 Wiederholungslogik

AlgoGuard versucht automatisch, fehlgeschlagene Webhook-Zustellungen erneut zu senden:

  • Plan: Exponentieller Backoff (15s, 30s, 1m, ...).
  • Max: 8 Versuche.

✅ Best Practices

  1. Schnell antworten: Sofort 200 OK zurückgeben, asynchron verarbeiten.
  2. Signatur überprüfen: Immer die Authentizität validieren.
  3. Idempotenz: Behandeln Sie Duplikate anhand der Ereignis-ID.

📞 Support

Benötigen Sie Hilfe? E-Mail an support@algoguard.dev

Webhooks | AlgoGuard