Webhooks & event flow

Separate the event from the interruption.

Plan an authorized receiving process, a normalized work record, repeat handling, and a clear failure path.

What this guide covers

A webhook is a way for a service to deliver an event to a configured receiver. Some sources instead use a polling or change-history process. The exact access, event format, authentication, and retry behavior belong to the provider’s documentation. This page describes the workflow around receiving; it does not provide a hosted webhook endpoint or a place to submit credentials.

The Telegram guide, SMS guide, and email guide each link to an official source for their provider-specific receiving model.

Design a five-step event path

Begin with authorized access. Identify the account owner and the approved source scope. Next, validate the incoming request or retrieved event using the chosen provider’s current method. Normalize the relevant information into a work record, apply the routing decision, and record the downstream action.

Do not combine all of those steps into an indistinguishable “connected” state. A receiver can be running while account access is invalid. An event can be valid while no rule matches. A notification can be accepted by a transport service while nobody has accepted the work. Preserve these distinctions for troubleshooting.

Normalize only what the queue needs

{
  "example_only": true,
  "source": "authorized-channel",
  "source_event_id": "synthetic-event-042",
  "conversation_reference": "restricted-source-reference",
  "received_at": "2026-09-16T10:00:00Z",
  "issue_category": "access-review",
  "routing_reason": "current booking needs human assessment",
  "owner_role": "event-support",
  "work_state": "awaiting-owner"
}

The example is a proposed internal event shape, not a provider schema or an available InstaPager endpoint. Store secrets separately in a protected implementation environment. Do not place them in static JavaScript, public HTML, example URLs, or screenshots.

Recognize repeats and preserve progress

Use the source’s documented event identifiers and receiving model to decide whether an event is new. A repeated delivery should update the same work history rather than generate another initial page. Keep provider synchronization progress separate from the human issue state so a receiving retry does not accidentally reset ownership.

Plan for a backlog after an interruption. Preserve original event times and identify older work clearly. Review whether a recovered event still needs action before treating it as a new urgent issue. An operator should be able to distinguish fresh activity from delayed receiving.

Design the exception path first

What happens when access is removed, a required field is absent, or the intended notification destination rejects the event? Keep the issue visible and record why the normal route could not complete. Assign an operational owner for receiving failures rather than mixing every technical health update into the customer support queue.

Choose a bounded retry approach in the eventual implementation, with an explicit review destination for unresolved exceptions. Do not discard a customer task merely because one notification attempt failed. Equally, do not retry indefinitely without considering duplicates and cost.

Acceptance checklist

Use synthetic content to test a normal event, a duplicate, invalid request validation, a missing field, a paused receiver, a destination failure, and revoked access. Verify the human next action as well as the technical event history. Keep a manual handoff available where automated access cannot be established or is temporarily unavailable.