Meta validates the submitted structure as well as the visible message.
Variable formatting
Named variables use lowercase letters, numbers, and underscores inside double braces, such as {{customer_name}}. Numbered variables use {{1}}, {{2}}, and so on.
Variable placement
Do not start or end the body with a variable. Add meaningful surrounding text and provide a sample for every variable.
Language and template identity
The campaign must use the exact approved name and language code on the same WABA. Sync after Meta review.
Buttons
Static URL buttons need no parameter. Dynamic URL, offer code, and Flow buttons must supply only the expected value. See error 132018.
Status
Draft, Pending Review, Rejected, Paused, and Disabled templates cannot be used as if they were Approved.