How to set up multilingual messaging on the WhatsApp Business API
India speaks in many tongues, and a Hindi customer opening an English-only order update rarely reads it the same way as one written in their own language. On the WhatsApp Business API, "multilingual" doesn't mean one clever template that auto-translates — it means creating the same template in each language you serve, tagging every contact with a language preference, and choosing the right version at send time. This tutorial walks through exactly how to build that setup in InfiQ, from creating language-pair templates and locale codes to fallback logic and testing, so your notifications land in the language each customer actually reads. Every step reflects how the official WhatsApp Business API and Meta's template approval process really work in 2026.
What you'll do
Multilingual on the WhatsApp Business API works by creating one approved template per language (not auto-translation), storing a language preference on each contact, and selecting the matching template at send time with a fallback default. In InfiQ you group these as language variants of the same template name, set locale codes, and route by the contact's language field — testable on your own number before going live.Step 1 — Plan your languages and set a default
Before touching a template, decide which languages you will actually maintain. Every language you add is a template you must write, get approved by Meta, and keep in sync whenever the message changes — so start with the two or three that cover most of your audience rather than fifteen you will never update. A retailer in Maharashtra might launch with English, Hindi and Marathi; a Tamil Nadu clinic might pick English and Tamil. Pick one language as your default fallback: this is what a contact receives when their preference is unknown or when a specific language variant hasn't been approved yet. English is the common default in India because it clears Meta review quickly and is broadly understood, but choose whatever fits your customer base best.
- List languages by real audience share, not aspiration — each one is ongoing maintenance.
- Nominate a single default/fallback language for contacts with no stored preference.
- Confirm WhatsApp supports the locale code for each language (for example en, hi, mr, ta, te, bn, gu, kn, ml, pa).
Step 2 — Create one approved template per language
WhatsApp does not translate templates for you. For a single order-confirmation message you serve in three languages, you create three templates — and Meta reviews each one separately. In InfiQ you keep them tidy by giving every language variant the same template name (for example order_confirmation) and assigning each its own language/locale code, so they read as one logical template with multiple language versions rather than three unrelated messages. Keep the variable positions identical across every language: if {{1}} is the customer name in English, it must be the customer name in Hindi and Marathi too, because your send logic passes the same values into whichever version is chosen. Match the category to the message so cost and approval stay predictable — utility for order and account updates, marketing for promotions, authentication for OTPs — and use the same category for every language variant of the same message.
- Reuse one template name across languages; differentiate by locale code (order_confirmation in en, hi, mr).
- Keep {{1}}, {{2}} … mapped to the same meaning in every language so one payload fills all versions.
- Set the same category (utility / marketing / authentication) on every language variant.
- Have a native speaker proofread each translation before submitting — Meta will not fix wording, only approve or reject it.
Step 3 — Store a language preference on every contact
Multilingual routing only works if you know which language each person wants. Add a language field to your contacts in InfiQ and populate it from whatever signal you already have: the language a customer chose on your website or app, the state or region in their address, or an explicit reply to a first-message language prompt. The most reliable approach is to ask once — a welcome template that offers 'Reply 1 for English, 2 for हिंदी' — and save the answer so every future message honours it. Where you have no signal at all, the contact simply inherits your default language from Step 1. Storing the preference as a clean locale code (hi, not 'Hindi') makes the send-time lookup in the next step trivial.
Step 4 — Route each send to the right language variant
With variants created and preferences stored, sending becomes a lookup: read the contact's language field, pick the template variant whose locale code matches, and fall back to your default if that language isn't available. In InfiQ's no-code flows you branch on the language field so the same campaign or automation fires the correct version to each segment; for developers building on the API, you pass the matching language code in the template send call. The safeguard that saves you is the fallback rule — if a contact is tagged for a language you haven't yet had approved, the send should silently use the default rather than fail, so no one gets an empty or errored message. Because you kept variable positions identical in Step 2, the same values slot into whichever variant is chosen without any per-language mapping.
- Look up the contact's stored locale code at send time.
- Select the template variant matching that code; use the default when there's no match.
- Pass the identical variable payload regardless of which language variant is sent.
- Never let a missing translation block a send — always resolve to the default.
Step 5 — Test on your own number, then go live
Multilingual bugs hide in the details — a Hindi template that renders name and order number in the wrong order, a fallback that never triggers, an emoji that breaks a right-to-left rendering. Before any real customer sees it, set your own contact record to each language in turn and send yourself the message in every variant, checking that the correct template appears, the variables land in the right spots, and the fallback fires when you clear the language field. Send from a number that's already warmed up rather than a brand-new one pushing high volume on day one. Once live, watch delivery and read status and each template's quality rating per language: a variant that draws blocks or low read rates in one language can be revised and resubmitted without touching the others, which is the quiet advantage of keeping every language as its own approved template.
- Impersonate each language on a test contact and confirm the right variant, variables and fallback.
- Test from a warmed-up number, not a fresh one at high volume.
- Monitor delivery, read status and per-language quality rating after launch.
- Revise and resubmit a weak language variant independently — the others stay live.