Collects as they arrive, acts daily
Recover abandoned carts on WhatsApp
Shoppers who leave checkout without paying get a WhatsApp reminder an hour later, and your team sees each attempt in Slack.
- Runs
- Collects as they arrive, acts daily
- Apps
- Slack, WhatsApp Business
- AI
- Not needed
- Access
- whatsapp_business_messaging; chat:write
Send this to your assistant
Create a ClickRuntime automation: when a checkout starts, remember it; an hour later, if it hasn't been paid, send the shopper my approved WhatsApp cart reminder and post it in #sales.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Most online shops lose a large share of checkouts at the last step. Some shoppers got distracted, some had a question, some were comparing prices. Reminder emails help, but they're easy to ignore.
A WhatsApp message an hour after the shopper left, from a shop they've just been browsing, is far more likely to be read, and the Slack log lets your team see what recovery attempts are going out.
What you get out of it
More completed orders
A timely reminder brings back shoppers who simply got distracted.
Read, not ignored
WhatsApp messages are opened far more often than marketing email.
Paid orders left alone
Shoppers who complete their order never get a reminder.
Visible to the team
Each reminder is logged in Slack, so the team knows what's been sent.
How it works
What happens, step by step
Your shop tells ClickRuntime when a checkout starts and when it's paid.
Each started checkout is remembered with the time and the shopper's number.
Every hour it looks for checkouts started over an hour ago that still aren't paid.
Those shoppers get your approved WhatsApp reminder, and the attempt is posted to Slack.
Each checkout gets one reminder only.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect WhatsApp Business
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and WhatsApp Business steps into one automation
Under the hood
The code that runs this automation
import time
from clickruntime import on_event, on_trigger, credentials, http, notify, state
WA = "https://graph.facebook.com/v20.0/your-phone-number-id/messages"
def wa_template(to, name, params):
body = {"messaging_product": "whatsapp", "to": to, "type": "template", "template": {"name": name, "language": {"code": "en"},
"components": [{"type": "body", "parameters": [{"type": "text", "text": str(p)} for p in params]}]}}
return http.post(WA, headers={"Authorization": f"Bearer {credentials.secret('WHATSAPP_TOKEN')}"}, json=body).json()
@on_event
def handle(event):
c = event.json or {}
carts = state.get("carts") or {}
if c.get("status") == "paid":
carts.pop(c.get("id"), None)
elif c.get("phone") and c.get("opt_in"):
carts[c["id"]] = {"phone": c["phone"], "name": c.get("name", "there"), "total": c.get("total"), "at": time.time()}
state.set("carts", carts)
return {"open": len(carts)}
@on_trigger
def run(event):
carts = state.get("carts") or {}
due = {k: v for k, v in carts.items() if time.time() - v["at"] > 3600}
for cid, c in due.items():
wa_template(c["phone"], "cart_reminder", [c["name"]])
notify.slack(f":shopping_trolley: Cart reminder sent to {c['name']} ({c['total']})", channel="#sales")
carts.pop(cid)
state.set("carts", carts)
return {"reminded": len(due)}FAQ
Common questions
Do shoppers need to agree to WhatsApp messages?
How long does it wait?
Does it send more than one reminder?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Send system alerts to Slack and the on-call phone
When something breaks, the team sees it in Slack and the person on call gets a WhatsApp message, without repeats.
See how it worksAnswer WhatsApp support questions and escalate to Slack
Customers get instant answers on WhatsApp, and anything the bot isn't confident about is posted to Slack for a person to pick up.
See how it worksShare sales call summaries in Slack and on WhatsApp
After each call, a summary with next steps is posted to your sales channel and sent to the rep on WhatsApp.
See how it worksKeep exploring
Set up “Recover abandoned carts on WhatsApp” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.