Zum Inhalt springen
Integration

Debuggen Sie Webhooks ohne Bereitstellung: ein temporärer Posteingang, den Sie in 10 Sekunden einrichten können

| 5 min read

Erstellen Sie eine Wegwerf-Webhook-URL, richten Sie einen beliebigen Dienst darauf und überprüfen Sie jede Nutzlast. Keine Tunnel, keine Server, kein Zapier-Konto.

Notification bell with incoming data streams
Photo by Brett Jordan on Unsplash

Sie möchten sehen, was Stripe sendet, wenn eine Zahlung erfolgreich ist. Oder was GitHub sendet, wenn jemand eine Pull-Anfrage öffnet. Der Standardansatz: Einen lokalen Server starten, ngrok installieren, einen Tunnel konfigurieren, ein Terminalfenster geöffnet lassen, die Sitzung hoffen läuft während des Tests nicht ab. Oder noch schlimmer: Stellen Sie einen halbfertigen Handler für Staging- und Tail-Logs bereit, während Sie warten.

Beide Arbeitsabläufe verschwenden Zeit für die Infrastruktur, wenn die eigentliche Frage einfach ist: *Wie sieht die Nutzlast aus?*

Botois Webhook-Posteingang bietet Ihnen eine verfügbare URL, die eingehende Nutzlasten erfasst und 24 Stunden lang speichert. Drei API-Aufrufe. Keine Konten, keine Tunnel, keine Server.

Der 3-Schritte-Workflow

  1. Erstellen Sie einen Posteingang um eine eindeutige Empfangs-URL zu erhalten
  2. Zeigen Sie auf Ihre Webhook-Quelle unter dieser URL
  3. Listen Sie die Nutzlasten auf um zu prüfen, was angekommen ist

Jeder Schritt ist ein einzelner curl Befehl.

Schritt 1: Erstellen Sie einen Posteingang

curl -X POST https://api.botoi.com/v1/webhook/inbox/create

Antwort:

{
  "success": true,
  "data": {
    "inbox_id": "a1b2c3d4",
    "url": "https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive",
    "expires_in": 86400
  }
}

Speichern Sie die inbox_id Und url Werte. Der Posteingang bleibt dann 24 Stunden (86.400 Sekunden) bestehen Die URL und alle gespeicherten Payloads werden gelöscht.

Schritt 2: Senden Sie einen Webhook an den Posteingang

Zeigen Sie Ihren Webhook-Anbieter auf url ab Schritt 1. Der Posteingang akzeptiert jeden JSON-Text:

curl -X POST https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive \\
  -H "Content-Type: application/json" \\
  -d '{
    "event": "payment_intent.succeeded",
    "amount": 4999,
    "currency": "usd",
    "customer_email": "buyer@example.com"
  }'

Antwort:

{
  "success": true,
  "data": {
    "received": true,
    "payload_id": "e5f6g7h8"
  }
}

Schritt 3: Überprüfen Sie die Nutzlasten

curl -X POST https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/list

Antwort:

{
  "success": true,
  "data": {
    "inbox_id": "a1b2c3d4",
    "payloads": [
      {
        "id": "e5f6g7h8",
        "received_at": "2026-03-26T10:00:00Z",
        "body": {
          "event": "payment_intent.succeeded",
          "amount": 4999,
          "currency": "usd",
          "customer_email": "buyer@example.com"
        }
      }
    ],
    "count": 1
  }
}

Jede Nutzlast wird mit einem Zeitstempel und einer eindeutigen ID gespeichert. Sie können den Listenendpunkt beliebig oft aufrufen innerhalb des 24-Stunden-Fensters.

Beispiel aus der Praxis: Debuggen eines Stripe-Webhooks

Mit dem Testmodus von Stripe können Sie Ereignisse über das Dashboard auslösen. Anstatt einen Server aufzustellen, um sie zu empfangen, Zeigen Sie Stripe auf die URL Ihres Posteingangs.

1. Erstellen Sie den Posteingang

INBOX=\$(curl -s -X POST https://api.botoi.com/v1/webhook/inbox/create)
INBOX_ID=\$(echo \$INBOX | jq -r '.data.inbox_id')
INBOX_URL=\$(echo \$INBOX | jq -r '.data.url')
echo "Inbox URL: \$INBOX_URL"

2. Fügen Sie die URL zu Stripe hinzu

Gehe zu Stripe-Dashboard > Entwickler > Webhooks. Klicken Sie auf „Endpunkt hinzufügen“ und fügen Sie den ein INBOX_URL. Wählen Sie die Ereignisse aus, die Ihnen am Herzen liegen. wie payment_intent.succeeded Und invoice.payment_failed.

3. Lösen Sie ein Testereignis aus

Klicken Sie im Stripe-Dashboard auf „Test-Webhook senden“. Dann überprüfen Sie, was angekommen ist:

curl -s -X POST "https://api.botoi.com/v1/webhook/inbox/\$INBOX_ID/list" | jq '.data.payloads'

Sie verfügen nun über die genaue Nutzlast, die Stripe sendet, mit allen verschachtelten Objekten, Feldnamen und Typen. Verwenden Sie dies, um Ihren Handler sicher zu schreiben, anstatt über das Schema zu raten.

Beispiel aus der Praxis: Testen einer GitHub-Webhook-Integration

GitHub-Repository-Webhooks werden bei Ereignissen wie ausgelöst push, pull_request, Und issues. Hier erfahren Sie, wie Sie einen erfassen, ohne lokal Code auszuführen.

1. Erstellen Sie einen Posteingang und konfigurieren Sie GitHub

# Create the inbox
INBOX=\$(curl -s -X POST https://api.botoi.com/v1/webhook/inbox/create)
INBOX_URL=\$(echo \$INBOX | jq -r '.data.url')
INBOX_ID=\$(echo \$INBOX | jq -r '.data.inbox_id')

# Add webhook to your repo via GitHub API
curl -X POST \\
  -H "Authorization: token \$GITHUB_TOKEN" \\
  -H "Content-Type: application/json" \\
  "https://api.github.com/repos/your-org/your-repo/hooks" \\
  -d "{
    \\"config\\": {
      \\"url\\": \\"\$INBOX_URL\\",
      \\"content_type\\": \\"json\\"
    },
    \\"events\\": [\\"pull_request\\"]
  }"

2. Öffnen Sie eine Pull-Anfrage und überprüfen Sie dann den Posteingang

curl -s -X POST "https://api.botoi.com/v1/webhook/inbox/\$INBOX_ID/list" \\
  | jq '.data.payloads[0].body | {action, number: .pull_request.number, title: .pull_request.title}'

Ausgabe (Beispiel):

{
  "action": "opened",
  "number": 42,
  "title": "Add rate limiting to /api/orders"
}

Sie können die genaue Struktur sehen, die GitHub sendet, einschließlich Feldern wie action, sender, repository, und das volle pull_request Objekt. Dies ist schneller als das Lesen der GitHub-Dokumente und das Erraten, welche Felder für jeden Ereignistyp ausgefüllt sind.

Automatisieren: ein Testskript

Dieses Bash-Skript erstellt einen Posteingang, sendet eine Testnutzlast, ruft sie ab und überprüft den Roundtrip. Speichern Sie es unter test-webhook.sh und führen Sie es aus, um zu bestätigen, dass Ihre Integration durchgängig funktioniert.

#!/bin/bash
set -euo pipefail

API="https://api.botoi.com/v1/webhook/inbox"

echo "Creating inbox..."
INBOX=\$(curl -s -X POST "\$API/create")
INBOX_ID=\$(echo "\$INBOX" | jq -r '.data.inbox_id')
INBOX_URL=\$(echo "\$INBOX" | jq -r '.data.url')
echo "Inbox ID: \$INBOX_ID"
echo "Receive URL: \$INBOX_URL"

echo ""
echo "Sending test payload..."
SEND=\$(curl -s -X POST "\$INBOX_URL" \\
  -H "Content-Type: application/json" \\
  -d '{
    "event": "order.created",
    "order_id": "ord_98765",
    "total": 129.99,
    "items": [
      {"sku": "WIDGET-A", "qty": 2},
      {"sku": "GADGET-B", "qty": 1}
    ]
  }')

PAYLOAD_ID=\$(echo "\$SEND" | jq -r '.data.payload_id')
echo "Payload ID: \$PAYLOAD_ID"

echo ""
echo "Retrieving payloads..."
LIST=\$(curl -s -X POST "\$API/\$INBOX_ID/list")
COUNT=\$(echo "\$LIST" | jq -r '.data.count')

if [ "\$COUNT" -ge 1 ]; then
  echo "Success: \$COUNT payload(s) received"
  echo "\$LIST" | jq '.data.payloads[0].body'
else
  echo "Error: no payloads found"
  exit 1
fi

Erwartete Ausgabe:

Creating inbox...
Inbox ID: a1b2c3d4
Receive URL: https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive

Sending test payload...
Payload ID: e5f6g7h8

Retrieving payloads...
Success: 1 payload(s) received
{
  "event": "order.created",
  "order_id": "ord_98765",
  "total": 129.99,
  "items": [
    {"sku": "WIDGET-A", "qty": 2},
    {"sku": "GADGET-B", "qty": 1}
  ]
}

Vergleich: Botoi-Posteingang vs. die Alternativen

Besonderheit Botoi-Posteingang ngrok webhook.site RequestBin
Rüstzeit Ein Curl-Befehl Installieren Sie CLI + Authentifizierung Browser öffnen Browser öffnen
Lokaler Server erforderlich NEIN Ja NEIN NEIN
Konto erforderlich NEIN Ja (kostenloses Kontingent) Nein (begrenzt) Ja
Programmgesteuerter Zugriff Vollständige API API (kostenpflichtig) API (kostenpflichtig) API (kostenpflichtig)
CI/CD-freundlich Ja; Curl + jq Möglich; Komplex NEIN NEIN
TTL 24 Stunden Sitzungsbasiert Variiert 48 Stunden
Der Prozess läuft weiter NEIN Ja NEIN NEIN
Frei Ja Beschränkt Beschränkt NEIN

Der Hauptvorteil des Botoi-Posteingangs besteht darin, dass alles über die API geschieht. Sie können Posteingänge erstellen und Tests senden Nutzlasten und rufen Sie Ergebnisse in Shell-Skripten, CI-Pipelines und Integrationstests ab, ohne einen Browser zu öffnen oder einen Hintergrundprozess am Leben zu erhalten.

Wann ist dies zu verwenden?

  • Erkundung eines neuen Webhook-Anbieters. Erfassen Sie vor dem Schreiben von Handlercode echte Nutzlasten, um sie zu verstehen die Datenform, Feldnamen und Randfälle.
  • Integrationstests in CI. Richten Sie in Ihrer Testsuite einen Posteingang ein, lösen Sie den Webhook aus und fragen Sie die Liste ab Endpunkt und bestätigen Sie den Inhalt der Nutzlast.
  • Debuggen eines defekten Handlers. Tauschen Sie Ihre Produktions-Webhook-URL vorübergehend gegen eine Posteingangs-URL aus Erfassen Sie die genaue Nutzlast, die Fehler verursacht.
  • Paarprogrammierung oder Demos. Teilen Sie die Posteingangs-ID mit einem Teamkollegen. Sie beide können Nutzlasten senden und Überprüfen Sie die Ergebnisse verschiedener Maschinen.

Der Posteingang ist von Natur aus wegwerfbar. Erstellen Sie bei Bedarf eines, verwenden Sie es für die Sitzung und lassen Sie es ablaufen. Keine Bereinigung, keine verbleibenden Endpunkte, keine Überraschungen bei der Abrechnung.

FAQ

Wie lange hält ein Webhook-Posteingang?
Jeder Posteingang läuft nach 24 Stunden ab. Die Posteingangs-URL, alle empfangenen Payloads und Metadaten werden nach Ablauf gelöscht. Erstellen Sie jederzeit einen neuen Posteingang.
Benötige ich einen API-Schlüssel, um einen Posteingang zu erstellen?
Nein. Das kostenlose Kontingent ermöglicht anonymen Zugriff mit 5 Anfragen pro Minute mit IP-basierter Ratenbegrenzung. Sie können in Sekundenschnelle mit dem Testen beginnen, ohne sich anzumelden.
Gibt es eine Größenbeschränkung für Webhook-Payloads?
Der Empfangsendpunkt akzeptiert jeden gültigen JSON-Body. Es gilt die standardmäßige Größenbeschränkung für Cloudflare Workers-Anfragen (100 MB für die meisten Pläne).
Kann ich dies mit Nicht-JSON-Webhooks verwenden?
Der Empfangsendpunkt erwartet einen JSON-Body. Wenn Ihre Webhook-Quelle formcodierte Daten oder XML sendet, benötigen Sie einen kleinen Proxy, um die Nutzlast in JSON zu konvertieren, bevor Sie sie an die Posteingangs-URL weiterleiten.
Wie unterscheidet sich das von Ngrok?
ngrok erstellt einen Tunnel zu einem laufenden lokalen Server. Der Botoi-Webhook-Posteingang ist ein gehosteter Endpunkt, der Nutzlasten speichert, damit Sie sie später abrufen können. Kein lokaler Server erforderlich, keine CLI zu installieren, kein Prozess, der am Leben gehalten werden muss.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.