Zum Inhalt springen
use-cases / recurring-webhook-replay / hero
CRON · FILES · EXEC

Spiele die Webhooks von heute Morgen morgen zur gleichen Zeit erneut ab

Richte deinen echten Stripe-Webhook für 30 Minuten auf eine hoody-files-URL. Das Verzeichnis enthält jetzt 14 JSON-Dateien — jedes Payload, das Production getroffen hat, byteweise. Ein Cron-Eintrag startet ein Exec-Skript, das sie um 9 Uhr von Montag bis Freitag wieder gegen Staging POSTet. Der Schedule läuft nächsten Samstag ab und löscht sich selbst.

Cron API lesen
use-cases / recurring-webhook-replay / pipeline

Einmal erfassen, als Dateien persistieren, nach Schedule wiederholen

Der gesamte Flow sind drei URLs. Production-Traffic kommt auf der Capture-URL an. Dateien landen in hoody-files. Cron läuft durch den Ordner und POSTet die Bodies wieder gegen Staging. Es gibt keinen Broker, keine Queue, keinen Replay-Service — nur ein Verzeichnis und einen Schedule.

PIPELINEkein Broker · keine Queue
01 · CAPTURE

Production-Webhook wird zum PUT

Setze deine Stripe / Intercom / GitHub-Webhook-URL auf einen hoody-files-Pfad. Jedes Event kommt als PUT an und landet als JSON-Datei, benannt mit seinem Zeitstempel. Das Verzeichnis ist die Aufnahme.

02 · PERSIST

Ein Ordner pro Tag, adressierbar als URL

Dateien persistieren auf der Disk; jede Datei hat ihre eigene URL. Durchsuche das Verzeichnis im Browser, liste es via API oder shell mit curl rein. Die Aufnahme ist ein Fakt, den du catten, scpen oder versionieren kannst.

03 · REPLAY

Ein Cron-Eintrag läuft durch den Ordner

POSTe einen Managed-Cron-Eintrag mit Schedule 0 9 * * 1-5 und Command bash /scripts/replay.sh /webhooks/2026-05-03. Das Skript listet das Verzeichnis und POSTet jede Datei in Zeitstempel-Reihenfolge wieder an Staging.

Capture und Replay sind dasselbe Protokoll an verschiedenen Tagen. Das, was die Bytes aufgenommen hat, ist das, was sie wieder abspielt. Es gibt keinen JSONL-Parser, keinen Sidecar, kein Recording-Format, das du lernen musst — Dateien in einem Ordner, in zeitlicher Reihenfolge.

use-cases / recurring-webhook-replay / mechanism

Zwei POSTs und ein Ordner

Capture ist ein PUT pro Webhook-Event. Replay ist ein POST an die Cron-API. Hoody Files hält die Aufnahme; Hoody Cron läuft nach Schedule durch sie; hoody-exec führt das Bash-Skript aus, das das POSTen erledigt. Drei Services, kein Glue dazwischen.

stripe → hoody-files
PUT · capture
# point your real webhook at hoody-files
curl -X PUT \
  https://files.containers.hoody.com/webhooks/2026-05-03/stripe-08-15-22.json \
  --data-binary @-

# 30 minutes later, the directory holds 14 files
HTTP/1.1 201 Created
webhooks/2026-05-03/stripe-08-15-22.json
den Replay planen
POST · Cron-Eintrag
# one cron entry replays the morning at 9am, mon-fri
curl -X POST \
  https://cron.containers.hoody.com/api/v1/cron/users/me/entries \
  -d '["schedule":"0 9 * * 1-5","command":"bash /scripts/replay.sh /webhooks/2026-05-03","expires_at":"2026-05-10T09:00:00Z"]'

HTTP/1.1 201 Created
{ "id":"f0a8", "schedule":"0 9 * * 1-5", "expires_at":"2026-05-10T09:00:00Z" }

Die Capture-Seite läuft einmal an einem Freitagmorgen. Die Replay-Seite läuft jeden Werktag bis nächsten Samstag, wenn das expires_at-Feld des Cron-Eintrags den Schedule löscht. Du hast eine PUT-URL in deine Webhook-Config geschrieben und einen POST in die Cron-API — das ist der gesamte Load-Test.

use-cases / recurring-webhook-replay / powers

Was dir das gibt, was eine Load-Test-Fixture nicht kann

Synthetischer Traffic ist das, was du dir vorgestellt hast, wie der Request aussieht. Erfasster Traffic ist das, was tatsächlich angekommen ist. Gleiche Feldnamen, gleiche Edge Cases, gleiche Überraschungen.

FIDELITY

Echte Payload-Shapes, nicht deine Vermutung

Die Aufnahme erfasst exakt das JSON, das Stripe gesendet hat — inklusive jedes nullable Felds, jedes unerwarteten Event-Typs, jedes customer_id-Formats, das du vergessen hast. Dein Handler trifft auf dieselben Payloads, an denen er gestern gescheitert ist.

TIMING

Gleicher Tageszeit-Druck wie in Production

Die Cron-Expression 0 9 * * 1-5 platziert den Replay zur Stunde, in der deine echten Nutzer das System tatsächlich verwenden. Der Handler unter Test sieht den Morgenrausch gegen die gleichen Caches, die gleichen Cron-Nachbarn, die gleiche laute DB.

REPEATABILITY

Wiederholen, bis der Bug weg ist

Der Ordner ist immutable; der Cron läuft jeden Werktag bis expires_at. Wenn der Handler beim Dienstags-Lauf immer noch bricht, fixt du ihn und lässt den Mittwochs-Lauf es beweisen. Gleicher Input jedes Mal — der Handler ist das Einzige, was sich ändert.

use-cases / recurring-webhook-replay / capacity

Was der Schedule verspricht

Die Zahlen kommen aus der Hoody Cron Managed Entries API und der Standard-Cron-Expression-Spec — nicht aus erfundenen Benchmarks.

  1. FELDER PRO ENTRY5

    Standard 5-Feld-Cron-Expression — Minute, Stunde, Tag-des-Monats, Monat, Wochentag. Dieselbe Syntax, die du 1985 verwendet hast, plant 2026 immer noch den Replay.

  2. ENTRIES PRO SEITE200

    GET /users/[user]/entries paginiert bis zu 200 Managed Entries auf einmal. 63 Replay-Schedules pro Environment liegen klar im Budget.

  3. POST ZUM ERSTELLEN1

    Erstelle den wiederkehrenden Replay mit einem POST /users/me/entries — schedule, command, expires_at. PATCH später, um ihn stummzuschalten; DELETE, um ihn auszumustern; expires_at mustert ihn für dich aus.

Limits gemäß Hoody Cron Managed Entries API: Standard 5-Feld-Cron-Expressions plus @daily / @hourly Macros, Pagination bis zu 200 Entries pro Seite, expires_at ist optional und deaktiviert den Entry automatisch nach Ablauf der Frist.

use-cases / recurring-webhook-replay / punchline

Production-Traffic, einmal aufgenommen, nach Schedule wiederholt.

erfasst · Freitag 08:00wiederholt · Montag bis Freitag 09:00
WIE DER ALTE LOAD-TEST AUSSAHk6-Skript · faker · vermutete Payload-Shapesdeine Vermutung, was Stripe sendet · jedes Quartal neu vermutet
WIE ES JETZT AUSSIEHTPUT files/webhooks/[day] · POST cron/entries 0 9 * * 1-5echte Bytes, die Production getroffen haben · von einem Schedule wiederholt
Cron API lesen
use-cases / recurring-webhook-replay / replaces

Was das ersetzt

Die Standard-Tools zum Wiederholen von Webhook-Traffic — Recorder, Replay-Services, geplante Mocks. Jedes davon ist ein SaaS, ein Sidecar oder ein Skript, das du babysittest. Das hoody-files + hoody-cron-Paar ist nichts davon.

  • ngrok Webhook-RecordingEin SaaS-Plan, um Requests aufzunehmen, die du auf Disk schreiben könntest
  • Hookdeck Event-ReplaysEin Event-Routing-Service für das, was nur Dateien in einem Ordner sind
  • Custom Replay-SkripteGlue, die du einmal schreibst und vergisst, wie du sie planen sollst
  • Postman Scheduled MocksEin Monitor-Seat, um HTTP an dein eigenes Staging zu feuern
  • Mocking-Server in Test-EnvsEin zweites Backend, das neben dem echten gepflegt werden muss
  • Manuelles Webhook-FuzzingDu, sitzend in einem Terminal um 9 Uhr, Payloads pasted
use-cases / recurring-webhook-replay / cta

Erfasse Freitags Traffic. Plane den Replay nächste Woche. Lass den Cron-Eintrag sich selbst ablaufen, wenn das Experiment vorbei ist.

Cron API lesen
use-cases / recurring-webhook-replay / related

Lies die anderen