Skip to main content
Cash-on-delivery orders are the ones most often returned undelivered, and most of those are orders the customer never meant to place. The Cash on delivery tab of a store console sends one template with two buttons the moment a COD order lands, and acts on the answer.

How it runs

1

A COD order lands

The store’s webhook says the gateway was cash on delivery.
2

Watx asks on WhatsApp

Your chosen template goes out with two buttons — confirm, or cancel.
3

They tap

Confirm tags the order at the store. Cancel cancels it there and restocks, if you have that switched on.
4

Or the timer decides

After your deadline, an unanswered order is cancelled — only if the message was actually delivered.
The customer’s reply is handled before automations, flows and AI agents: “Cancel” tapped on this template is an answer to you, not a keyword.

Turning it on

Ask COD customers to confirm is the master switch. With it on, a new COD order gets the confirmation template instead of the ordinary order message. If you have no suitable template, the picker offers the store bundle, which includes store_cod_confirm with both buttons already on it. See Template library and packs.
Cancelling and tagging an order at the store needs the write_orders scope. The Overview tab and this tab both say so when the token does not have it — cancels will fail until the store is reconnected with that permission.

The guardrail

Only if the message was delivered is on by default, and it is the difference between cancelling an order the customer declined and cancelling one they were never asked about. Auto-cancel only fires when Meta reported the confirmation as delivered. An order whose confirmation never reached the phone is left open and flagged as Need a human. Switching it off means a customer who never received the message is treated as if they declined, and real orders are cancelled.

What the statuses mean

Every exit from Awaiting reply happens once. A customer who taps Confirm while the sweep is running does not have their confirmed order cancelled underneath them — the first write wins. If the store then refuses the cancellation, the row carries the error and says the order is still open at the store, which is recoverable. The sweep runs every 15 minutes.

Reading a reply

The button tap arrives as the button’s own label, so a tap is unambiguous. People who type instead of tapping are matched on whole words — “cancel” cancels, “confirm” confirms. A message containing both words (“cancel my other order but confirm this one”) is nobody’s decision to guess, so it is left for a human.

The confirmations list

Every COD order that entered the flow, newest first, filterable by status. Each row shows the order number, the customer and their phone, the total, the status (with the store’s error underneath when there is one), and when the message was sent · delivered. Rows that are Awaiting reply or Need a human carry Confirm and Cancel order buttons, so you can settle one by hand after a phone call. The four tiles above the list: Awaiting reply, Confirmed · 7d, Cancelled · 7d and Need a human.

What the customer sees

The confirmation template, then a short acknowledgement of whichever way they answered. If you also have the Order received recipe on, tick Skip cash-on-delivery orders when setting it up — two messages about one order in the same minute reads as a fault.