Channel Setup
When to Use
Use this skill when wiring a freshly connected channel (WhatsApp, Telegram, Instagram, Messenger, email, phone number) into code, or when deciding which sender ID to pass to the API.
The two-layer model
Zavu has two objects that beginners often conflate:
| Layer | What it is | Where it lives |
|---|---|---|
| Account | The connection to a provider: a WhatsApp Business Account, a Facebook Page, an Instagram account, a Telegram bot, an email domain, a phone number | Connected in the dashboard (Accounts, Phone Numbers) or via partner invitations |
| Sender | The API handle that ROUTES accounts: what you pass as Zavu-Sender, what carries the webhook and the AI agent |
GET /v1/senders |
Billing: accounts are what you pay for (a WhatsApp account, a channel connection, a phone number). Senders are free — they are the view that groups your accounts under one sending identity.
Connecting always yields a ready sender. When an account is connected and no sender references it, Zavu creates one automatically, named after the account (the WhatsApp verified name, the Page name, the @username). The first sender of a project becomes the default. Partner-invitation connects have always worked this way; every connect surface now does.
Finding the sender to send from
GET /v1/senders is the answer to "what can I send with, and from where?". Each sender's channels array is the source of truth for capability — computed from its actual configuration, not inferred:
{
"id": "sender_12345",
"name": "Acme Store",
"channels": ["whatsapp", "sms", "voice"],
"isDefault": true
}
- An empty
channelsarray means the sender cannot send anything yet (a phone number alone does not enable SMS). - Omit
Zavu-Senderto use the project's default sender. - To target a specific one, pass its ID as a header inside the send params object:
'Zavu-Sender': "sender_12345".
Per-channel wiring
| You connected... | The sender... | Send with |
|---|---|---|
| WhatsApp (embedded signup or invitation) | auto-created, channels includes whatsapp once the account is active |
channel: "whatsapp" |
| Messenger Page / Instagram account | auto-created, named after the Page/@username | channel: "messenger" / "instagram" |
| Telegram bot | attached via POST /v1/senders/{senderId}/telegram (bot token from @BotFather) |
channel: "telegram" |
| Email domain (verified) | attach with emailAddress on sender create/update |
channel: "email" |
| Nothing yet (zero-setup start) | enableSmsOneway: true on POST /v1/senders or PATCH /v1/senders/{senderId} — no number, no credential, active immediately; recipients cannot reply |
channel: "sms_oneway" |
| Phone number | route it to a sender (PATCH /v1/phone-numbers/{id} with senderId) — that is what turns SMS on; add enableVoice for calls |
channel: "sms" / "voice" |
One sender can carry several channels at once — that is the point: one Zavu-Sender, every channel.
Constraints
- A sender belongs to one project; an account is routed by at most one sender.
- Webhooks and AI agents are configured per sender, so they apply to every channel that sender carries.
- Free plans include two connection slots (one can be a WhatsApp account); paid plans add connections at a monthly fee per connection. Creating senders never costs anything.