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 Talk 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, email bounce classification, per-carrier SMS segmentation, chat transport details - these differ per provider and change under you. The goal is a message with a status, with the connector absorbing the rest. Where a channel has semantics you genuinely need (WhatsApp’s 24-hour session window, for one), they are meant to surface as explicit fields, not leaked provider payloads.Status
Per channel, honestly:- Voice - production, via the Calling Engine.
- Web chat - production as an API: the Chat API (text in, text out; you render the UI). No embeddable widget yet.
- WhatsApp - in build. Two-way agent conversations over the Meta Cloud API are coded end to end, but not generally available.
- Email - in build, through Gmail-connected flows. Unpod’s own email sends platform notifications only.
- SMS - in build for conversations. A narrow in-call action (a template SMS to Indian numbers) is in production.
- LinkedIn - not available.
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.