78 Dokumentationen verfügbar

Wissensdatenbank

Webhook Integration Automatisierung

Zuletzt aktualisiert: 11.01.2026 um 12:07 Uhr

Webhooks: Automatisierung zwischen Diensten

Webhooks sind HTTP-Callbacks, die automatisch ausgelöst werden, wenn ein Event eintritt. Statt regelmäßig nach Updates zu fragen (Polling), werden Sie aktiv benachrichtigt.

Wie funktionieren Webhooks?

  1. Sie registrieren eine URL bei einem Dienst
  2. Bei einem Event sendet der Dienst einen HTTP POST an Ihre URL
  3. Ihr Server verarbeitet die Daten

Webhook-Empfänger (PHP)

<?php
// webhook.php

// Nur POST erlauben
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    exit('Method not allowed');
}

// JSON-Payload lesen
$payload = file_get_contents('php://input');
$data = json_decode($payload, true);

// Logging
file_put_contents('webhook.log', date('Y-m-d H:i:s') . ': ' . $payload . "\n", FILE_APPEND);

// Verarbeitung je nach Event
if (isset($data['event'])) {
    switch ($data['event']) {
        case 'payment.completed':
            processPayment($data);
            break;
        case 'user.created':
            sendWelcomeEmail($data);
            break;
    }
}

// Erfolg bestätigen
http_response_code(200);
echo json_encode(['status' => 'ok']);
?>

Webhook-Empfänger (Node.js)

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook', (req, res) => {
    const event = req.body;
    
    console.log('Webhook received:', event);
    
    // Event verarbeiten
    switch (event.type) {
        case 'order.created':
            handleNewOrder(event.data);
            break;
        case 'order.shipped':
            sendShippingNotification(event.data);
            break;
    }
    
    res.status(200).json({ received: true });
});

app.listen(3000);

Webhook-Sender

<?php
function sendWebhook($url, $data) {
    $payload = json_encode($data);
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'X-Webhook-Signature: ' . hash_hmac('sha256', $payload, 'secret')
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return $httpCode === 200;
}

// Beispiel
sendWebhook('https://example.com/webhook', [
    'event' => 'order.created',
    'data' => ['order_id' => 123, 'total' => 99.99]
]);
?>

Signatur-Verifizierung

<?php
// Webhook mit Signatur verifizieren
$secret = 'mein_webhook_secret';
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

$expected = hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

// Signatur gültig - weiter verarbeiten
?>

Retry-Logik

async function sendWithRetry(url, data, maxRetries = 3) {
    for (let i = 0; i < maxRetries; i++) {
        try {
            const response = await fetch(url, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify(data)
            });
            
            if (response.ok) return true;
        } catch (error) {
            console.log(`Attempt ${i + 1} failed`);
        }
        
        // Exponential Backoff
        await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
    }
    
    return false;
}

Typische Anwendungen

  • 💳 Zahlungsanbieter (Stripe, PayPal)
  • 📧 E-Mail-Dienste (Bounces, Opens)
  • 🔔 Chat-Notifications (Slack, Discord)
  • 🚀 CI/CD (GitHub, GitLab)
  • 📦 Versand-Updates

Best Practices

  1. Signatur immer verifizieren
  2. Schnell antworten (< 5 Sek)
  3. Async verarbeiten (Queue)
  4. Idempotent implementieren
  5. Logging für Debugging

Weitere Hilfe