Skip to content
Start free

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 WhatsApp Business numbers
Instagram Instagram Professional accounts linked to a Facebook Page (beta)
Messenger Facebook Pages with messaging access (beta)

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.

Every send takes a channelId:

await wabery.messages.send({
channelId: "channel_...",
conversationId: "conversation_...",
text: "Thanks for reaching out!",
});

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" });

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.

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.

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.