Message Editor
The message editor is where you compose the WhatsApp template a flow sends. It mirrors how the message appears in WhatsApp and validates against Meta’s template rules as you work. This page covers each part of the editor; for the end-to-end create-and-submit process, see Create a flow.
A WhatsApp template has four parts, in this order: an optional header, the body, an optional footer, and up to a fixed number of buttons. The editor lays them out top to bottom, with a live preview alongside.
The body is the main text of the message and the only required content part. As you type:
- A live preview updates to show how the message will render in WhatsApp.
- A character counter tracks length against Meta’s limit.
- For right-to-left languages (Arabic, Hebrew, Persian, Urdu), the body field switches to RTL automatically based on the flow’s language.
Formatting
Section titled “Formatting”WhatsApp supports lightweight inline formatting inside the body, which renders on the customer’s device:
| Style | Syntax |
|---|---|
| Bold | *bold* |
| Italic | _italic_ |
| Strikethrough | ~strikethrough~ |
| Monospace | ```monospace``` |
Variables (placeholders)
Section titled “Variables (placeholders)”Variables are placeholders you drop into the body that WhatPro fills in at send time from the order or customer context. Below the body field is a row of chips labelled Click to insert a variable — tapping one inserts the placeholder at your cursor.
The variables offered depend on the flow type, because each type resolves different data. Common examples include:
| Variable | Resolves to |
|---|---|
| Customer first name | The customer’s first name |
| Order number | The Shopify order number |
| Order total | The order’s total price |
| Order items | A list of the items in the order |
| Product title | The relevant product’s name |
| Discount code / discount value | The attached discount and its value |
| Tracking number / carrier | Shipping details, for shipping-update flows |
When a flow has a discount enabled, the discount-code and discount-value chips appear so you can place them in the body — the discount is only sent if its placeholder is present.
Header
Section titled “Header”The header is an optional element above the body. Choose one of:
| Header type | Behaviour |
|---|---|
| None | No header (the default for new flows). |
| Text | A short static title above the body. Limited to 60 characters. |
| Static Image | A fixed image you upload; the same image is used on every send. |
| Dynamic Product Image | No upload — the image is pulled from the flow’s resolved context at send time (for example, the product photo for an abandoned cart or restock alert). |
Buttons
Section titled “Buttons”Buttons appear at the bottom of the message. Use Add button to add one; the menu hides any kind that has reached its limit, or that isn’t allowed for the current flow type.
| Button kind | What it does |
|---|---|
| Visit Website (URL) | Opens a link. For built-in flows the destination is set from the flow’s context (the recovery checkout, the order-status page, the product page, a tracking page), and the editor shows where it will lead. |
| Copy offer code | Renders as a tappable “Copy offer code” button; the real coupon is delivered at send time. Pair it with the Discount section. On OTP templates WhatsApp shows it as “Copy code”. |
| Quick Reply | The customer taps it and the reply lands in your Team Inbox. Some flows use quick replies to capture intent (for example, Confirm / Cancel an order). |
| Call Phone Number | Opens the dialer with a number you provide in international (E.164) format. |
Meta caps how many of each kind a template can carry — for example, URL buttons are limited per template, and a phone or copy-code button is limited to one. The editor enforces these caps and a total-button cap by greying out unavailable choices.
Required and recommended buttons
Section titled “Required and recommended buttons”Some flow types seed required buttons you can edit but not remove, because they’re essential to the flow’s job (for example, an abandoned-cart reminder always keeps its link back to checkout). Other types suggest recommended buttons that you can remove and later re-add by name from the Add-button menu.
Footer
Section titled “Footer”The footer is optional small text below the message. Some flow types pre-fill a footer default, which you can edit or clear. For marketing flows you can also enable a Reply STOP to unsubscribe opt-out line, which WhatPro appends to the footer in the flow’s language before submitting to Meta. See Order tags and your marketing-flow settings for the related opt-out / resubscribe handling.
Discount
Section titled “Discount”Discount-eligible flows show a Discount section with an Include discount code toggle. When on, you pick an active (or scheduled) discount from your Shopify store. The picker shows the code and its value (percentage, fixed amount, free shipping, or other). Turning the toggle on adds a Copy-code button where the template allows one; turning it off removes it. The code itself is delivered at send time, and the matching variables become available to insert in the body.
Live preview
Section titled “Live preview”The preview pane renders the message as WhatsApp would show it: your store’s name in the header, the header element, formatted body, footer, and buttons. It uses your verified WhatsApp display name when connected, and updates in real time as you edit so you can confirm the layout before submitting to Meta.
Validation
Section titled “Validation”The editor checks your template against Meta’s rules as you edit and again when you save. Issues are split into:
- Errors — block saving (for example, a variable in a header, or a body over the length limit). They appear in a red banner you must clear before submitting.
- Warnings — advisory (for example, a very short abandoned-cart delay). They don’t block saving.
Once the template is valid and submitted, Meta reviews it. See Create a flow for the approval states and resubmission behaviour.
Authentication (OTP) flows
Section titled “Authentication (OTP) flows”The phone-verification (OTP) flow is special: its body, footer, and buttons are generated by Meta’s authentication template format, so the editor hides the fields you can’t influence and exposes only the OTP-specific controls (such as a code-expiration option). This flow powers the Checkout Gate.