One adapter and one webhook per channel
Inbound messages normalize at the edge into one canonical shape and run one pipeline: dedup, identity, middleware, conversation, brain, persist, deliver. Adding a channel touches one adapter file and one webhook route. Nothing else changes.
- Web chat, SMS, and voice share one data plane
- Inbound dedup keys on the provider message id
- The agent brain never sees channel-specific payloads
- Voice keeps its low-latency loop on the same data plane
