The 6 WhatsApp Templates Every WooCommerce Store Needs (Copy Included)
Order emails get ignored; WhatsApp messages get read. Most WooCommerce stores need only six message templates to cover the whole order lifecycle — confirmations, holds, shipping, cancellations, failed payments, and the one recovery message that wins back abandoned carts — and all six are ready to copy below with {{1}} variables filled in. The Tech Pad runs these on the official WhatsApp Cloud API, free to start: open an account at thetechpad.com/wa/ with no credit card, install the free WooCommerce plugin, and there is no monthly SaaS fee — you pay Meta's per-message rate only (roughly Rs 0.10–0.30 per utility message in India; check Meta's current rate card).
The set is deliberately small: four transactional statuses, one payment-problem message, and one marketing message cover everything a shopper needs between ordering and receiving. New to Meta's templates? Every outbound message outside the 24-hour service window must be an approved template — the [guide](/blog/whatsapp-business-message-templates-guide/) explains the mechanics.
The starter set: order_confirmation / order_cancelled / order_shipped / cart_recovery / order_on_hold / payment_failed
Each template below covers what it is, when it fires, and the copy to submit. Meta fills {{1}}, {{2}} variables per recipient at send time, so give realistic sample values when submitting ({{1}} → "Priya", {{2}} → "#10432") to keep the preview true to the real message.
order_confirmation
The most important message a store sends. It fires when checkout completes and payment clears, answering the two questions every new customer has: did it go through, and what happens next. WhatsApp messages open at roughly 98% versus about 20% for email, so this confirmation actually gets read.
Hi {{1}}, thanks for your order {{2}}! We've received your payment and we're packing it now. We'll message you here with tracking the moment it ships. Reply any time if you'd like to change or add anything.
Samples: {{1}} first name; {{2}} order number as shown in WooCommerce.
order_cancelled
Fires when an order moves to cancelled, usually at the customer's request. A cancellation is a moment of doubt, and silence makes it worse: the customer wonders whether the refund is coming. Confirm it, name the refund path, and leave the thread open.
Hi {{1}}, your order {{2}} has been cancelled as you requested. The refund of {{3}} is being processed and should appear on your original payment method within 3–5 business days. Reply here if you don't see it by then.
Samples: {{1}} first name, {{2}} order number, {{3}} refund amount, e.g. "Rs 1,299.00".
order_shipped
Fires when you add a tracking number and hand the parcel to the courier. Customers actively wait for this one, and it cuts "where is my order?" tickets: the tracking link arrives before they ask.
Hi {{1}}, good news — your order {{2}} is on its way! Track it any time here: {{3}}. Delivery is estimated for {{4}}. Reply here if you'd like to leave delivery instructions for the courier.
Samples: {{1}} first name, {{2}} order number, {{3}} tracking URL in the courier's format, {{4}} delivery window, e.g. "Friday, Sep 12".
cart_recovery
Fires when a cart sits abandoned past the window you set — typically two to twenty-four hours. This is the only marketing template in the set and the one that pays for the rest: published benchmarks put abandoned-cart recovery via WhatsApp at 15–30%, versus 2–5% for email. It needs opt-out language and the closest review from Meta — see [our abandoned cart recovery templates post](/blog/whatsapp-abandoned-cart-recovery-templates/). Send it once, not on a loop.
Hi {{1}}, you left a {{2}} in your cart at {{3}} — it's still there, waiting for you. Finish your order here: {{4}} and we'll have it packed today. If you've changed your mind, just reply STOP and you won't hear from us again.
Samples: {{1}} first name, {{2}} product name, {{3}} store name, {{4}} recovery link, e.g. https://yourstore.com/cart?recover=10432.
order_on_hold
Fires when payment arrives but the order moves to on-hold — a bank transfer awaiting confirmation, a COD order in verification. The customer has paid and nothing is happening — exactly when they start worrying. Tell them the money is accounted for and what happens next.
Hi {{1}}, your order {{2}} is on hold while we confirm your payment of {{3}}. It usually takes a few hours; we'll message you the moment it's confirmed and starts packing. If you've already paid and this doesn't look right, reply here.
Samples: {{1}} first name, {{2}} order number, {{3}} payment amount, e.g. "Rs 2,450.00".
payment_failed
Fires when a payment fails at checkout — card declined, insufficient funds — or a scheduled retry fails. Most shoppers who hit a payment error never return on their own, so this message reassures them nothing is lost and hands them a retry link while intent is warm.
Hi {{1}}, your payment for order {{2}} didn't go through — nothing is lost and your cart is saved. Retry securely here: {{3}}, or reply here and we'll help you sort it out.
Samples: {{1}} first name, {{2}} order number, {{3}} retry URL, e.g. https://yourstore.com/checkout/pay/10432.
| Template | When it fires | Category |
|---|---|---|
| order_confirmation | Checkout completes and payment clears | UTILITY |
| order_cancelled | Order status moves to cancelled | UTILITY |
| order_shipped | Tracking number added, parcel handed to courier | UTILITY |
| cart_recovery | Cart abandoned past your set window | MARKETING (opt-out line included) |
| order_on_hold | Payment received, order awaiting confirmation | UTILITY |
| payment_failed | Payment declined or errored at checkout | UTILITY |
Meta submission rules that get templates rejected
Most rejections on this set are mechanical and avoidable — Meta's review runs on rules, not taste. The ones that trip up stores:
- Variables at the start or end of the message. A template that opens with {{1}} or closes with a bare {{2}} is rejected outright; wrap every variable in fixed text as the copy above does.
- Adjacent variables with no fixed text between them. "{{1}} {{2}}" reads as sloppy. Every variable above is separated by plain words.
- Missing or blank sample values. Submitting "test", "abc", or empty samples is a common rejection. Fill each with a value that matches its meaning.
- A promotional line inside a utility template. "Use code SAVE10 at checkout" tucked into order_confirmation is the classic mistake. Meta's classifiers treat any selling language as marketing, so the template is rejected — or re-categorized at the marketing rate. If the message sells anything, file it as marketing.
- Emoji in the header. Headers must be plain text — Meta rejects emoji and stray punctuation. Keep headers to a short label like "Your order is confirmed", or drop them; the copy above is body text only.
Avoiding these five keeps all six templates out of the rejection pile; the [full catalog of rejection reasons and fixes](/blog/whatsapp-template-rejected-reasons-fixes/) covers the rest.
UTILITY vs MARKETING and the 24-hour window
Template category decides price and review behavior, which is why the table labels each of the six. Inside the 24-hour customer service window — opened when a customer messages you or clicks one of your template buttons — you can reply freely, no template or approval needed. That is where real conversations live: a customer replies "where's my order?" and your team answers directly in the thread. Outside the window, every outbound message must be an approved template, and each opens a business-initiated conversation billed at that template's category rate.
UTILITY templates deliver a specific fact — order status, payment outcome, tracking — and are the cheapest to send, which is why the four status templates belong there. MARKETING templates promote a product or offer, require opt-out language, face stricter review, and cost roughly two to three times as much per message. See [the template categories and pricing breakdown](/blog/whatsapp-template-category-pricing-2026/) for current numbers — and keep cart_recovery disciplined: one send per abandoned cart, not a loop.
Shipping the six in an afternoon
None of this requires a developer. The full flow:
- Install the free plugin. In WordPress, go to Plugins → Add New → Upload Plugin, install the Tech Pad WooCommerce plugin zip, and activate it.
- Connect your store. Open a free account at thetechpad.com/wa/, connect your WhatsApp Business number through Meta's Cloud API, then paste the API key and phone number ID from the Tech Pad dashboard into the plugin's settings — it registers WooCommerce order events automatically.
- Submit the six templates to Meta. Create each template in the Tech Pad dashboard using the copy above, the category from the table, and realistic sample values. Utility templates usually clear review quickly; the marketing one gets the closest look, so submit cart_recovery first while you set up the rest.
- Map the events. In the plugin settings, match each order status to its template: on-hold to order_on_hold, cancelled to order_cancelled, tracking added to order_shipped, and so on. Set the abandoned-cart window, place a test order, and watch each message fire correctly. The [full integration walkthrough](/blog/whatsapp-woocommerce-integration-setup-templates/) covers every setting.
Get the six live this afternoon
A starter set exists so you do not design from scratch: copy the six templates above, download the free Tech Pad WooCommerce plugin, and open a free account at thetechpad.com/wa/ — no credit card, no monthly fee, just Meta's per-message rate. Most stores go from zero to live order updates in a single afternoon.