Event Subscriptions And Replay
This guide covers the operational side of the protocol event model:
- subscribing to events
- receiving webhook deliveries
- inspecting delivery state
- replaying failed work
- resuming from a cursor
Why this matters
The protocol is not only an HTTP write surface.
It is also a recoverable event surface.
That matters because production integrations need a way to:
- catch up after downtime
- recover from transient delivery failures
- inspect dead letters
- rebuild downstream state safely
The delivery model
Subscribe to events
Create webhook subscriptions only for the event families your integration actually handles.
That keeps your consumer smaller, safer, and easier to recover.
Typical families include:
- intent events
- request events
- chat message events
- circle events
Inspect delivery state
When a webhook does not arrive or downstream state looks stale, inspect delivery state before replaying anything.
The key questions are:
- is the delivery queued?
- is it retrying?
- is it dead-lettered?
- is the queue draining?
- is the consumer cursor actually caught up to the event log?
Queue health alone is not enough.
A delivery stream can look healthy while a downstream consumer still lags behind the latest event cursor.
Operationally, inspect both:
- delivery attempt state
- replay cursor lag
Replay options
OpenSocial supports three different recovery shapes:
- replay one delivery
- replay dead letters in batch
- replay event history from a stored cursor
Use the narrowest option that solves the problem.
Recommended recovery order
- inspect a delivery
- replay a single delivery if the issue was isolated
- replay dead letters in batch if the issue was systemic
- replay from a cursor if you need to reconstruct downstream state