Channels
A channel is a connected messaging account you send and receive through.
Wabery is WhatsApp-first, with opt-in beta support for Instagram Direct and
Facebook Messenger. API calls target a concrete channel_id returned by
channels.list().
| Surface | Channel |
|---|---|
| WhatsApp Business numbers | |
| Instagram Professional accounts linked to a Facebook Page (beta) | |
| Messenger | Facebook Pages with messaging access (beta) |
Connect a channel
Section titled “Connect a channel”Link an account from the dashboard under Channels. For WhatsApp, Wabery asks how the number is used today and shows the matching setup:
| Choose | When to use it |
|---|---|
| Set up a new number | The number is new or is not connected to another WhatsApp API provider. |
| Keep using the Business app | Your team wants to keep using the WhatsApp Business mobile app alongside Wabery. |
| Move an existing API number | The number is currently connected to another provider or WhatsApp Business Account. |
| Reconnect a Wabery number | The channel was previously disconnected from this Wabery project. |
Choosing the correct path matters: normal setup does not move an existing API
number between accounts. See Connect WhatsApp for the
short guided checklist. Once connected, your wab_live_ key can send and
receive on the channel. The free sandbox gives you a shared test number with no
setup.
Instagram and Messenger are disabled by default. An organization owner or admin must first open Settings → Channels and activate the desired beta platform. Return to the project’s Channels page, start the Meta sign-in, and select the Facebook Page that owns the messaging account. See Beta channel capabilities before enabling either platform.
Disconnected social-channel attempts cannot be revived because Wabery removes their access tokens. Reconnect them through a new Meta sign-in after the required permissions have been approved.
Targeting a channel
Section titled “Targeting a channel”Every send takes a channelId:
await wabery.messages.send({ channelId: "channel_...", conversationId: "conversation_...", text: "Thanks for reaching out!",});curl https://api.wabery.com/v1/messages \ -H "Authorization: Bearer $WABERY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "channel_id": "channel_...", "conversation_id": "conversation_...", "text": "Thanks for reaching out!" }'Routing inbound messages
Section titled “Routing inbound messages”Each channel has a routing_mode that decides what happens to inbound messages
on it — EXTERNAL forwards to your project webhook, FLOWS runs native
automations, NONE records only. For a dedicated number this overrides the
project’s routing_mode, so a channel left in FLOWS under an EXTERNAL
project never reaches your webhook. New channels inherit the project’s routing at
connect time. See Webhooks → Channel routing
for the full precedence rules.
channels.list() / channels.get(id) include a routing_warning when a channel
would silently drop inbound. Set a channel’s routing in code:
const { data } = await wabery.channels.list();data.forEach((c) => c.routing_warning && console.warn(c.id, c.routing_warning));
await wabery.channels.update("channel_...", { routingMode: "EXTERNAL" });wabery channels listwabery channels update channel_... --routing-mode EXTERNALPublish readiness
Section titled “Publish readiness”WhatsApp channels include publish_readiness on channels.list(),
channels.get(id), and project responses. Use it before publishing Flows or
submitting templates:
{ "can_publish_flows": false, "can_submit_templates": false, "business_verification_status": "not_verified", "account_review_status": "APPROVED", "phone_number_status": "CONNECTED", "blockers": ["BUSINESS_NOT_VERIFIED", "NO_PAYMENT_METHOD"]}The shared Wabery sandbox can publish Flows when the sandbox WhatsApp Business
Account is verified, but it cannot submit templates because templates belong to
Wabery’s sandbox account. Dedicated WhatsApp numbers must pass Meta’s business
and account readiness checks before Flows can be published. Templates have one
extra billing prerequisite: template submission and proactive template sending
require a Meta payment method on the WhatsApp Business Account. Without it,
can_publish_flows can still be true, but can_submit_templates is false and
blockers includes NO_PAYMENT_METHOD. Read
why WhatsApp templates need a payment method
for the billing context. Wabery returns 412 with the same publish_readiness
blockers instead of queueing work that cannot succeed.
Broadcast channel availability
Section titled “Broadcast channel availability”The broadcast composer lists only connected, dedicated WhatsApp numbers. Unavailable numbers remain visible with their exact blocker so an operator can fix the account instead of guessing. Common blockers include missing Meta billing, an unverified business, a restricted or disconnected number, poor quality, and a readiness check that must be retried.
Wabery allows only one active dedicated WhatsApp channel for a normalized phone number across the platform. Reconnecting the same number reuses its eligible channel in the current organization and project; it never transfers a channel from another tenant. Disconnected rows are retained because historical messages refer to them, but they are not selectable for new broadcasts. This is why an older number can appear in channel history without representing another active sender.
If a channel says Payment method required, add billing to the WhatsApp Business Account in Meta Business Manager and then refresh its status in Wabery. If it says the payment status could not be checked, retry the check before changing billing—the unknown state is not treated as proof that billing is missing.
The 24-hour window
Section titled “The 24-hour window”WhatsApp restricts free-form messages to a 24-hour window after the user’s last message. Outside the window you must use an approved template. Wabery returns a clear error when a send falls outside the window — see Errors & rate limits.