Build an abandoned cart flow on WhatsApp
Abandoned cart recovery works on WhatsApp and is the fastest way to get reported if you overdo it. This builds the version that does not: one message, correctly timed, stopping on reply.
Abandoned cart messages work on WhatsApp. They also account for a large share of the reports that get shop numbers restricted, and the difference between the two outcomes is almost entirely restraint.
This builds the restrained version: one message, well timed, stopping the moment anybody answers.
Get consent at checkout
An unticked box on the checkout form: Send my order updates on WhatsApp. The customer ticks it, not you.
Keep marketing consent as a separate box. Bundling them is how a shop ends up sending promotions to people who wanted a tracking number — and recipients who did not ask are the ones who press Block.
If you only take one thing from this page: cart recovery to somebody who never consented is cold outreach with a friendlier name, and it is the single fastest route to losing the number.
Decide what counts as abandoned
Narrower than the default, or you will message people who are mid-purchase.
| Rule | Why |
|---|---|
| Cart has items and no order after 60 minutes | Long enough that they really left |
| Customer is identified | You need a number and a consent record |
| Value above a floor | A two-dollar cart is not worth a WhatsApp interruption |
| Not messaged in the last 7 days | Stops frequent browsers being pestered |
| One per cart, ever | Not per item, not per visit |
Trigger it from your shop
WooCommerce, Shopify and most carts emit an event you can hook, or you can poll for carts older than an hour. Either way you end up making one call:
curl -s -X POST "$WAVESENDA_URL/messages/send/" \
-H "Authorization: Bearer $WAVESENDA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"session": "'"$SESSION"'",
"to": "+237670000000",
"type": "text",
"text": "Hi Ada — you left the blue kettle in your basket. Still want it, or was there something you needed to know first? shop.example.com/cart/8471"
}'Or build it as a flow in the console, which handles the timing and the stop-on-reply rule for you instead of you writing both.
Write it as a question, not a pitch
The single biggest lever, and it costs nothing. A discount teaches people to abandon carts. A question gets you a reason.
| Don’t | Do |
|---|---|
| "Complete your purchase now! 10% off with CART10" | "Still want the blue kettle, or was there something you needed to know first?" |
| "Your cart is about to expire!" | "Left this in your basket — happy to answer anything about it." |
| A message with no product named | Name the item. They may not remember |
The question version also does something a discount cannot: the replies tell you why people abandon. “Does it work on gas?” repeated eleven times is a product page problem you can fix permanently.
Make sure it stops
Any reply ends it. So does placing the order. If you built it with a scheduler rather than a flow, check the stop condition at send time — not when the message was queued — or somebody who replied four minutes ago still gets it.
Read the four ways this breaks before trusting your implementation.
Make sure a person receives the answer
This is where most setups fall down. The message goes out from an automation and the reply arrives at a number nobody is watching. A customer who answers within seconds and waits a day has been worse served than one you never messaged.
Replies should land in a shared inbox where whoever is free answers first.
Measuring it honestly
- Recovery rate — orders completed within 24 hours of the message.
- Reply rate — high is good, and the replies are free research.
- Block rate — the number that decides whether you keep doing this.
- Stop requests — rising means your consent is not real consent.
Compare against a holdout: exclude a random tenth of eligible carts and see whether they convert differently. Without it you are counting people who were going to come back anyway, and attributing them to a message.
Common questions
How long should I wait before sending an abandoned cart message?
Around an hour. Sooner and you interrupt someone who is still deciding; much later and the intent has gone. Same-day is the useful window, and a message four days later reads as surveillance rather than service.
Should I include a discount?
Usually not. It trains customers to abandon carts deliberately, and it converts worse than simply asking whether they had a question. Keep discounts for cases where price is the actual objection, which the replies will tell you.
How many messages should I send?
One. Sequences of three or four lift short-term recovery and are the most reported message type in ecommerce WhatsApp. The damage lands on the number every other message depends on, which is a bad trade at any recovery rate.
Do I need consent for cart recovery?
Practically, yes. It is a marketing message to somebody who did not complete a purchase, and recipients who did not ask for it block at a much higher rate. An unticked checkbox at checkout costs a little volume and protects the number.
What if they reply asking a question?
Then it worked, and the value is in answering quickly. Make sure replies reach a person rather than the automation that sent the message — a reply that waits a day is worse than no message at all.