Building a WhatsApp template step by step
The template builder: start from a Gulf starter template, Meta's library or an AI draft, choose the type (standard, carousel, limited-time offer, coupon, Flow, catalog, product list or authentication), write the message, add variables with sample values and buttons, watch it on a phone as you type, fix what Meta would reject in one click, translate it with AI, then submit, send a test or add a language.
The template builder is where you write a WhatsApp message template, see it on a phone as you type, fix anything Meta would reject, and submit it for review. It opens at WhatsApp → Templates → New template; a saved template opens in the same builder.
Before you start
- A connected WhatsApp number (WhatsApp Business).
- The Manage WhatsApp templates task (Owners, Admins and Editors have it by default; see Roles and tasks). Without it you can open and look at a template but not change it, and New template is not shown.
Step by step
- Open WhatsApp and the Templates tab. The list shows the number's templates with their status (Draft, In review, Approved, Rejected...). Press New template. From a broadcast, Create template on the Number & template step opens the same builder in a new tab. A new template first asks How do you want to start?: pick one under Starter templates, Meta library or Write with AI, or press Start from blank under Blank (see "Starting points" below).
- Basics: pick the WhatsApp number (when you have more than one), type the Template name (lowercase; spaces become underscores as you type, e.g. eid_offer_2026), choose the Language the text is written in and the Category (see below). Under Variables choose Numbered {{1}} or Named {{first_name}}. Message validity says how long WhatsApp keeps trying to deliver to a phone that is off; leave Meta's default or see "Message validity" below.
- Template type: Standard, Carousel, Limited-time offer, Coupon code, WhatsApp Flow, Catalog, Product list or Authentication. The editor below changes to what the type has; each one is explained under Template types further down. Changing the type keeps your message. The type can only change while the template is new or a draft.
- Header (optional): None, Text, Image, Video, Document or Location. For a picture, video or PDF press Choose file (or drop the file on the box); a bar shows the upload, and Meta reviews the template with this sample.
- Message: type the text. The toolbar adds Bold, Italic, Strikethrough, Monospace, Bulleted list, Numbered list, Quote and Emoji. Press Add variable where a value changes per customer (in named mode type the variable's name first, e.g. first_name).
- Variables and sample values (under the message, one box per variable): type a realistic Sample value (Sara, A-1042, 12 October; never "test"). Filled from says where broadcasts take the value: A contact field (then pick e.g. First name), A custom contact field, The same text for everyone, Asked in each broadcast or Choose when sending. If empty, use is the fallback, e.g. "there".
- Footer (optional): a small grey line. For Marketing, Add an opt-out line writes "Reply STOP to unsubscribe" (in Arabic for an Arabic template).
- Buttons (optional): Quick reply, Visit website, Call phone number, Copy offer code or Call on WhatsApp. Type the Button text; for a website the Website address (https://), and tick Add each customer's own ending to the link (e.g. an order number) for a per-customer link, with a Sample ending. The arrows move a button; quick replies are kept together automatically.
- Watch the phone preview and the Checks as you go (below). Press Save draft at any time.
- When Checks says Passes every check. Ready to submit. (or only warnings are left), press Submit for review, read the note and press Submit to Meta. You see Submitted to Meta for review and the status becomes In review.
- Meta decides, usually within minutes and at most in 24 hours. OmniBrand picks up the result by itself (within 15 minutes at the latest) and tells you in Notifications. Once Approved the template can be picked in a broadcast.
Starting points
The start screen of a new template has four tabs.
- Starter templates: templates OmniBrand wrote for Gulf businesses, each in English and Arabic, that already pass every check. Type in Search starter templates or press a topic (Seasons and occasions, Orders and delivery, Appointments and bookings, Payments, Customer engagement, Welcome and sign-up), choose English or العربية, then press Preview or Use this template. It opens in the editor with sample values and Filled from already set (the customer's first name, or Asked in each broadcast). Change the wording to fit your business before you submit.
- Marketing (each ends with a Stop promotions button and "Reply STOP to unsubscribe"): Ramadan greeting, Eid al-Fitr greeting, Eid al-Adha greeting, Saudi National Day (23 September), UAE National Day (Eid Al Etihad, 2 December), White Friday sale, Back in stock, Abandoned cart.
- Utility (no promotion at all, so Meta keeps them in Utility): Appointment reminder, Booking confirmation, Order confirmation, Cash on delivery confirmation, Order shipped, Ready for pickup, Payment reminder (polite, never threatening), Payment received, Feedback request, Welcome, Opt-in confirmation.
- Authentication: Verification code (OTP), a one-time passcode with a copy button (see "Authentication" under Template types).
- Meta library: Meta's own pre-written templates (orders, payments, accounts, feedback). With more than one number, choose it first. Type in Search Meta's library, pick a Library language or a topic, and press Preview and create. Meta keeps the text as it is: you type the Template name and fill what its buttons need, Website for the "…" button (starts with https://; end it with {{1}} for each customer's own ending and then fill Sample full address) and Phone number for the "…" button (with the country code, e.g. +966512345678). Press Create template. Meta usually approves it within seconds (Created from Meta's library and approved.) and it opens as a saved template.
- Write with AI: describe the message in What should the message say? (who gets it, why, and what they can do; never paste customer details), choose the Language, the Category (Let AI decide, Utility or Marketing) and the Tone, and press Write 3 drafts. Each draft is checked against Meta's rules before you see it and shows Ready to submit or how many checks are left to fix. Press Use this draft to open it in the editor. Read it through: AI can get details of your business wrong.
- Blank: press Start from blank to write it yourself.
Each AI request (Write 3 drafts, a translation, a category check) uses 1 AI generation from your plan; none when you use your own AI key (AI settings). If the request fails, the generation is given back.
AI help in the builder
Beside the checks (on a phone: at the bottom of the Checks tab), AI help offers:
- Translate to Arabic or Translate to English. Every variable, link, phone number, sample value and Filled from stays as it was; the translation is checked like any template. On a new template press Use this translation to replace the text. On a saved template press Create the draft: a new draft opens in the other language with the translated text (save your changes first).
- Check the category with AI (Utility templates only): says whether Meta would most likely treat the template as Marketing and why, lists the Promotional words found, and suggests a Utility wording that keeps your variables. Press Use this wording, or Switch to Marketing instead when the message really is a promotion.
Choosing the category
- Marketing: offers, sales, news, new products, invitations, reminders to come back. Highest price, and only sent to people who agreed to marketing.
- Utility: an update about something the customer did or asked for (an order, delivery, booking, payment or account change), with no promotion at all. Lower price.
- Authentication: one-time passcodes. Meta writes their text; choosing this category switches the Template type to Authentication (see below).
- Meta decides in the end. Since April 2025 a Utility template that reads as promotional is approved as Marketing (Marketing price, marketing agreement needed); the check CATEGORY_ADVICE warns you before you submit.
Message validity
When the customer's phone is off or has no connection, WhatsApp keeps trying to deliver the message. Message validity (under Basics, below Category) is how long it keeps trying; when the time runs out WhatsApp stops and the message is never delivered. A sale that has ended, a delivery slot that has passed or a code that has expired is worse than no message, so choose no longer than the message stays useful.
1. In Message validity leave Meta's default (30 days for Marketing and Utility, 10 minutes for Authentication), or pick a period from the list. 2. For another period pick Custom…, type the Amount and choose the Unit (Seconds, Minutes, Hours or Days). 3. What Meta accepts per category: - Authentication: 30 seconds to 15 minutes, or 30 days. Keep it no longer than the code expiry (the check MESSAGE_TTL_ADVICE warns you). - Utility: 30 seconds to 12 hours, or 30 days. - Marketing: 12 hours to 30 days. Meta applies it to messages sent with Optimised delivery (Marketing Messages API, see WhatsApp costs, limits and free windows); messages sent through the regular Cloud API keep being retried for 30 days. 4. A period outside the range shows as the check MESSAGE_TTL (must fix); Fix sets it back to the default. Changing the Category to one that does not accept the period removes it by itself. 5. The period goes to Meta with the template. Changing it on a submitted template is an edit: it counts toward the edit limits and the template goes back to review. The template's page shows the period that applies under Message validity.
Template types
Every type follows Meta's own rules; the Checks list what is missing for the type you chose.
Standard
Text with an optional header and footer and up to 10 buttons: Quick reply, Visit website (2 at most), Call phone number, Copy offer code and Call on WhatsApp (one each). Call on WhatsApp lets the customer call your business number inside WhatsApp; WhatsApp calling must be on for that number.
Carousel
Marketing only. The message is followed by 2 to 10 cards the customer swipes; there is no header, footer or button above the cards. 1. Under Cards, choose the Media on every card: Image or Video (all cards use the same). 2. Tick Add a short text to each card (up to 160 characters) if the cards should have text (all cards or none). 3. Under Buttons on every card add 1 or 2 buttons: Quick reply, Visit website or Call phone number. They are added to every card in the same order (Meta requires it); the arrows and the bin change them on every card at once. 4. In each Card, press Choose file under Card image or video for its sample, type the Card text (with Add variable if a value changes per customer, and its Sample value), then each button's Button text, and the Website address or Phone number. 5. Add card adds one more (up to 10), shaped like the last one. The arrows move a card earlier or later; the bin removes it (at least 2 stay). 6. The phone preview shows the cards under the message; swipe them sideways. Every broadcast must send the same number of cards the template has.
Limited-time offer
Marketing only. An offer line with a countdown above the message, an image or video header, a message of at most 600 characters and no footer. 1. Under Header choose Image or Video and upload the sample. 2. Under Offer type the Offer text (up to 16 characters, no variables, e.g. Ends Friday). 3. Leave Show a countdown to the end of the offer ticked to show when it ends; each broadcast sets the end date and time (the preview shows one 2 days from now). 4. Type the Sample offer code (up to 15 characters, no spaces); each broadcast sends its own code. 5. Tick Add a website button for a second button that opens your site. WhatsApp on a computer shows the offer as a plain message.
Coupon code
A message with exactly one Copy offer code button; you can add quick replies, a website or a call button as well. Type a Sample code of up to 20 characters without spaces; each broadcast sends its own code.
WhatsApp Flow
A button that opens one of your WhatsApp Flows (a form inside WhatsApp, e.g. a booking). Marketing or Utility. 1. The WhatsApp Flow button is added for you; type its Button text. 2. Under Flow choose a published Flow of this WhatsApp number (drafts are listed but can't be chosen; publish them in WhatsApp Manager → Account tools → Flows, then press Reload). If your Flows can't be listed, or you prefer, press Paste a Flow ID instead and type the Flow ID. 3. When the button is tapped: Open a screen of the Flow (then type the First screen ID from the Flow's JSON, e.g. WELCOME_SCREEN) or Ask the Flow's endpoint for the first screen (for Flows that use your own server).
Catalog
Marketing only. The message opens with a product image, and a View catalog button shows your whole catalog inside WhatsApp. It needs a catalog connected to the WhatsApp account; the Products box says Catalog connected: … or tells you to connect one in WhatsApp Manager → Account tools → Catalog before sending (Meta can review the template meanwhile). 1. Under Products change the Button text if you like. 2. Product for the header image (optional): a product ID from your catalog. Empty: WhatsApp uses the catalog's first product.
Product list
Marketing only. A text header, the message and a View items button that shows up to 30 products in up to 10 sections. 1. Type the Header text (required for this type). 2. Under Products, press Add section, type the Section title (up to 24 characters) and the Product IDs from your catalog, separated by commas or new lines. The counter shows how many of the 30 products you used. 3. Product for the header image (optional): empty uses the first product of the first section. The sections are what test sends and broadcasts show unless a broadcast sets its own; Meta does not review them. In the preview, press the button to see them.
Authentication
One-time passcodes. Meta writes the message itself in the template's language ("123456 is your verification code."); there is no header, footer, links, media or emoji. Your own system sends these messages with each customer's code. 1. Choose Authentication under Category or Template type. 2. Under Code message, tick Add “For your security, do not share this code.” and Say when the code expires (then the Minutes, 1 to 90) as you need. 3. Button: Copy code (the customer copies the code), One-tap autofill (one tap fills it into your Android app) or Zero-tap (your Android app receives it with no tap). Copy button text and Autofill button text are optional. 4. One-tap and zero-tap need your Android apps: press Add app and type each app's Package name (e.g. com.example.app) and Signature hash (11 characters); up to 5. 5. Zero-tap also needs the tick box accepting Meta's zero-tap terms. Send test fills in a random 6-digit code.
The phone preview
- It shows the template the way a customer sees it in WhatsApp and changes as you type: header, formatted message, footer and buttons.
- Samples fills the variables with your sample values; Variables shows {{1}} instead. A variable without a sample is marked in yellow.
- The sun and moon switch between light and dark; Android and iOS switch the phone. An Arabic template reads right to left.
- With more than 3 buttons the customer sees 2 and See all options; press it in the preview to see the rest. A note under the phone says when WhatsApp on a computer will not show the template.
- Notification and chat list shows the line a customer sees before opening the chat.
- On a phone the builder shows Edit, Preview and Checks as tabs; the red number on Checks is how many must-fix problems are left.
The checks
- Must fix: Meta would reject the template. Submit for review stays off until every one is fixed.
- Likely rejection: common reasons for rejection or for a change of category. You can still submit.
- Tips: advice only.
- Each check also appears under the field it is about. Fix repairs it in one click when it can (makes the name valid, groups the quick replies, renumbers the variables, adds an opt-out, shortens a text, fills a sample for a variable it recognises such as first_name). Show me jumps to the field. Why? opens its explanation in WhatsApp template rules.
- A few checks need your other templates (a name already used, the same text as another template, edit limits); they appear a moment after you stop typing.
Changing a template
- Draft: change anything, then press Save draft or Submit for review.
- In review: it can't be changed until Meta decides.
- Approved, Rejected or Paused: change it and press Save changes, then Save changes in the note. If what customers see changed, it goes back to Meta for review (Saved and sent to Meta for review); if only Filled from or If empty, use changed, it is saved in OmniBrand only. Meta allows one change a day and 10 in 30 days to an approved template, and never a change of its category. The name and language never change.
- Disabled, deleted or archived: it can't be changed; press Duplicate to start a new draft from it.
- The Unsaved changes badge shows beside the name until you save; closing or reloading the tab asks first.
Another language
Meta never translates. Save the template, press Add language, choose the Language and press Create draft. A draft with the same name opens, with the original text in a box at the top to translate from. Each language is reviewed on its own. Between English and Arabic, Translate to Arabic / Translate to English under AI help does both steps for you (see above).
Sending a test
An Approved template can be sent to your own test numbers: press Send test, choose the number in Send to and press Send test. It is filled with the sample values, does not appear in the inbox, and is limited to 30 per workspace a day. Add test numbers under Settings → Messaging rules.
If something goes wrong
- Submit for review is greyed out → a Must fix check is left (the red number on Checks), or no WhatsApp number is chosen.
- Meta would reject this template, so nothing was sent. Fix these and try again: → the server found a problem the browser could not see (for example the name is already used in this language). Fix each one.
- Meta refused the template: → Meta itself said no; its reason is shown. See WhatsApp template rules.
- This file is too big or Choose a JPEG or PNG image. → images JPEG or PNG up to 5 MB, videos MP4 up to 16 MB, documents PDF up to 100 MB.
- No test numbers yet. → add them under Settings → Messaging rules.
- Meta's template library could not be loaded for this number. → Meta refused the request for this number (its reason is shown under it). Reconnect the number on the Accounts page; Starter templates and Write with AI still work.
- Create template stays grey in Meta library → fill the Template name and every button detail: a website starting with https:// (with a Sample full address when it ends in {{1}}) and a phone number starting with + and the country code.
- AI draft failed, AI translation failed or AI category advice failed → the AI service did not answer or changed a variable; nothing was charged. Try again in a moment.
- Your Flows could not be listed → the WhatsApp account did not let OmniBrand read its Flows (Meta's reason is shown). Press Paste a Flow ID instead and type the ID from WhatsApp Manager → Flows.
- No catalog is connected to this WhatsApp account → connect one in WhatsApp Manager → Account tools → Catalog, then press the refresh arrow in Products. Until then catalog and product-list messages can't be sent.
- A carousel check says the cards' buttons differ → every card needs the same buttons in the same order; add and remove them under Buttons on every card, not on one card.
Related
Official references
- Meta: WhatsApp message templates ↗
- Meta: template categories ↗
- WhatsApp: text formatting ↗
- Meta: media card carousel templates ↗
- Meta: limited-time offer templates ↗
- Meta: coupon code templates ↗
- Meta: templates with WhatsApp Flows ↗
- Meta: catalog and multi-product templates ↗
- Meta: authentication templates ↗
- Meta: message time-to-live (validity) ↗
Checked against the product on Sep 25, 2026