Master WhatsApp message templates. Learn what gets approved, common rejection reasons, and best practices.
WhatsApp lets you reply freely to any customer for 24 hours after their last message. Outside that window, and for any campaign you start, you must use a message template: a pre-written message that Meta has reviewed and approved. This guide covers creating templates in Ghala and getting them approved on the first try.
| Situation | Template needed? |
|---|---|
| Replying within 24h of the customer's last message | No, free-form messages |
| Following up after the 24h window closed | Yes |
| Bulk campaigns and broadcasts | Yes |
| Order updates initiated by you | Yes |
| Sign-in and verification codes | Yes, an Authentication template |
A template has up to four parts:
{{1}}-style variables for personalizationVariables are placeholders filled in at send time: "Hi {{1}}, your order {{2}} has shipped" becomes "Hi Amina, your order #1042 has shipped." Number them ({{1}}, {{2}}) or name them ({{first_name}}), one style per template, and give each a sample value so Meta's reviewers can read the message.
A header can be text, an image, a video, a document, or a location. Buttons can be quick replies, a website link, or a phone number.
Meta reviews every template under a category, and pricing differs per category, so pick honestly:
A promotional message submitted as Utility is a near-guaranteed rejection. When a message mixes both, it's Marketing.
order_shipped, august_saleReview usually takes minutes to a few hours. The Templates page tracks each template's status (pending, approved, rejected, paused, or disabled) and keeps it in step with Meta, so you do not need to press Sync from Meta to see an outcome. Only approved templates can be used in campaigns.
A template made in Meta's WhatsApp Manager appears here after a sync, and can be sent through the API before that.
An Authentication template sends a one-time code, such as a sign-in code, with a copy code button. WhatsApp writes the message itself: "482913 is your verification code." in the template's language. You set three things:
Pick Authentication as the category when you create the template, then submit it for review as usual. An Authentication template has no header, and it cannot be edited after it is created, because WhatsApp writes its text.
Once it is approved, open it on the Templates page and click Send test to send a code of your choice to one contact, such as your own number. The code is never kept: the conversation shows Verification code sent.
Codes are sent from your own system through the Ghala API, one customer at a time. An Authentication template cannot be used in a campaign, and the inbox does not offer it. Send One-Time Codes is the developer guide.
The most common rejection reasons, and the fix:
| Rejection reason | Fix |
|---|---|
| Wrong category | Promotional content must be Marketing, not Utility |
| Vague variables | {{1}} with no context confuses reviewers; make the surrounding text explain it |
| Floating variables | Don't start or end the message with a bare variable |
| Policy content | No prohibited goods, misleading claims, or requests for sensitive data |
| Formatting issues | Broken variable numbering ({{1}}, {{3}} with no {{2}}), excessive caps or emoji |
A rejected template can be edited and resubmitted; you don't lose the slot. Editing an approved template sends it back to Meta for review.
order_confirmed, order_shipped, order_delivered beat one do-everything templateFor deeper guidance on wording that converts without hurting your quality rating, see Message Template Best Practices.