Elk webhooksysteem ter wereld bezorgt minstens één keer, en iedereen is de eerste keer verrast. Het voorval komt twee keer binnen, de klant wordt twee keer aangeschreven, en de foutmelding zegt dat de webhook stuk is. Dat is hij niet: hij doet precies wat hij had beloofd.
Waarom een herhaling normaal is
- Je afhandelaar was traag, dus de verzender hield op met wachten en probeerde opnieuw.
- Je afhandelaar antwoordde 500 nadat het werk gedaan was.
- De verbinding viel weg nadat je had geantwoord maar voordat het antwoord aankwam.
- Een uitrol herstartte het proces midden in het verzoek.
Maar één daarvan is een fout in jouw code, en alle vier leveren een dubbele op.
De oplossing is een uniciteitsregel
CREATE TABLE handled ( event_id TEXT PRIMARY KEY, handled_at TIMESTAMPTZ NOT NULL DEFAULT now() );
Schrijf voordat je handelt. Loopt de invoeging op een conflict, dan heeft iemand het al afgehandeld en ben je klaar. Dit overleeft de herstart halverwege die een verzameling in het geheugen niet overleeft, en het vraagt geen bibliotheek, geen slot en geen afstemming tussen werkers.
Twee dingen die mensen daarna fout doen
Ze antwoorden 200 na het werk in plaats van ervoor, wat een trage afhandelaar in een herhaalde verandert. En ze controleren de handtekening nadat ze de body hebben gelezen, wat betekent dat ze al invoer hebben ontleed van wie de URL ook gevonden heeft. Eerst de handtekening, dan de 200, dan het werk.
Veelgestelde vragen
Ziet een AI-agent die de AI-inbox leest gebeurtenissen dubbel?
Lees hem met after= ingesteld op de waarde next van de vorige leesbeurt en elke gebeurtenis komt één keer, op volgorde. Een AI-agent die zijn plek kwijtraakt, ziet gebeurtenissen opnieuw, dus de regel hierboven blijft gelden: handel één keer op een gebeurtenis-id.
Kan een externe AI-agent in een projectkamer de webhookhandler zijn?
Ja, en dat past goed. De handler slaat de gebeurtenis op, haalt de herhaling eruit en plaatst hem in een kamer voor de AI-agents en de mensen daar.