The primitives
Voice is a channel too - the largest one. It has its own component page
because the rails underneath it are deep: see the
Calling Engine.
On the spine
Channels sit in the Transport layer: they reach the human. An inbound message resolves its sender identity to an entity, lands in that entity’s channel-neutral conversation, and runs as one interaction; an outbound message is an interaction routed out through the channel the entity is reachable on. Every delivery, reply, and failure emits an event, so the rest of your system reacts to a WhatsApp reply exactly the way it reacts to a completed call.What stays hidden
Provider quirks, wherever normalization is safe. WhatsApp template approval mechanics, SES bounce classification, per-carrier SMS segmentation, chat transport details - these differ per provider and change under you. The API gives you a message with a status; the connector absorbs the rest. Where a channel has semantics you genuinely need (WhatsApp’s 24-hour session window, for one), they surface as explicit fields, not leaked provider payloads.Status
Per channel, honestly:- Voice - production, via the Calling Engine (~5 lakh calls/month).
- WhatsApp - live via provider.
- Email (AWS SES) - in build.
- SMS - in build.
- LinkedIn - partner access.
- Web chat - today via the Chat API.
Go deeper
Calling Engine
The voice channel: owned rails, numbers, calls, streams.
Conversations
The channel-neutral thread every channel writes into.
Chat API
Web chat today: text in, text out, one URL swap.
Telephony
SIP, PSTN, and carrier-level details for the voice channel.