Migrating from Plivo or WATI
Move your numbers, templates and integration from another WhatsApp provider onto WhaBuzz.
WhaBuzz speaks Meta's Cloud API. If your current provider (Plivo, WATI, or any BSP) wraps that API in its own format, migration is mostly changing what you send, not where your customers' conversations live.
#What carries over
- Your WhatsApp Business Account and its numbers, if the account is yours. WhaBuzz connects to the WABA, not to a provider.
- Approved templates, by name and language. Sync imports them after you connect.
- Quality rating, messaging tier and display name, which belong to the number at Meta.
#What does not
- Provider-specific features: campaign builders, chatbot flows, inboxes, contact lists, opt-in tracking. WhaBuzz is an API. Keep contact and opt-out state in your own system.
- Provider message ids. Message history stays with your old provider; WhaBuzz starts its log on connection.
- Your provider's request and webhook formats. You will change both.
#Steps
- Check who owns the WABA. In Meta Business Manager, open WhatsApp accounts. If the WABA belongs to your business, you can connect it yourself. If it is owned by the provider, ask them to transfer it to your business, or migrate the number to a WABA you own using Meta's number migration.
- Connect it. Use Embedded Signup in the console, or
POST /v1/numbers/connectwith a system-user token. Moving a number from a different provider's WABA to yours isPOST /v1/numbers/migrate. - Import templates.
POST /v1/templates/sync. - Add a webhook endpoint and verify it (Webhooks). Keep your old provider's webhook receiving until you cut over.
- Change your send code. Meta's body replaces your provider's. See the mapping below.
- Change your inbound handler. The
datafield of a WhaBuzz event holds Meta's change value andrawholds Meta's full POST. If your code already parsed Meta's format, the field paths are Meta's. Add signature verification anddedupe_key. - Cut over. WhatsApp delivers inbound messages to one webhook subscription per app at a time. Subscribing the WABA to WhaBuzz moves inbound delivery. Do it at a quiet hour, send a test message to the number, and confirm a
message.inboundevent arrives.
Cutting a number over has a short window where inbound messages go to neither provider. Keep the old provider's account open until you have seen traffic arrive on WhaBuzz.
#Mapping a send
Whatever your old call looked like (provider JSON with the destination, template name and variables), the WhaBuzz equivalent is Meta's body:
{
"from": "1013622581841046",
"to": "16505551234",
"type": "template",
"template": {
"name": "renewal_reminder",
"language": { "code": "en" },
"components": [{ "type": "body", "parameters": [{ "type": "text", "text": "Kerry" }] }]
}
}jsonMeta's message reference documents every field. If your old provider flattened variables into a list, you will build components[].parameters[] yourself.
#Things that will differ
- Errors are Meta's, not a provider's translated codes. See Errors.
- Statuses arrive as Meta's
sent,delivered,read,failed, one event each, unordered. - Opt-outs. WhaBuzz does not manage opt-outs. If a customer sends "STOP", you receive it as a
message.inboundand you decide. - Pricing. You pay Meta's per-conversation or per-message rates directly to Meta; WhaBuzz charges a flat monthly fee per number.
This page as Markdown: /guides/migrating.md. All docs in one file: /llms-full.txt.