How to Build WhatsApp Automation Flows with Templates, Buttons, CTA URLs, and Interactive Lists
WhatsApp automation flows combine templates, button messages, CTA URL buttons, and interactive lists into a single conversation that feels guided. With Wutt’s flow builder, you design the journey once and the runtime sends the right template to the right contact at the right time, with full branching and human handoff. This guide shows the visual flow and the underlying JSON you would post to the WhatsApp Cloud API.
The visual flow (text diagram)
START
|
v
[Trigger: contact added to list "Demo request"]
|
v
[Wait: 2 minutes]
|
v
[Send template: demo_welcome_v1]
Buttons: [Book a demo] [See pricing] [Talk to sales]
|
+-----> Book a demo -> [Send list: time slots] -> [Wait for reply] -> END
|
+-----> See pricing -> [Send template: pricing_v1 with PDF] -> END
|
+-----> Talk to sales -> [Assign to agent: Sales] -> END
(any other inbound reply)
|
v
[AI assistant draft] -> [Agent approves] -> END
Step 1 — Create the approved templates
Go to Templates → New and create one Meta-approved template per node. The button payload is what Wutt maps to the next node in the flow.
Step 2 — Create the contact list and tag
Use Contacts → Lists → New list named “Demo request”. The trigger subscribes the contact to this list automatically. Tags (e.g. hot-lead) are useful for filtering and for AI training data.
Step 3 — Build the flow in Wutt
Open Automations → Flows → New flow. Drag these blocks from the right panel:
- Trigger — Contact added to list.
- Delay — 2 minutes.
- Send template —
demo_welcome_v1. - Branch on button — 3 buttons, 3 outgoing edges.
- Send list — for the “Book a demo” branch.
- Wait for reply — up to 24 hours.
- Assign to agent — for the “Talk to sales” branch.
- AI assistant draft — for unexpected replies.
Step 4 — The same flow in raw WhatsApp Cloud API JSON
If you ever want to send a button template directly via the WhatsApp Cloud API, the JSON looks like this:
{
"messaging_product": "whatsapp",
"to": "{{customer_phone}}",
"type": "template",
"template": {
"name": "demo_welcome_v1",
"language": { "code": "en" },
"components": [
{
"type": "header",
"parameters": [
{ "type": "image", "image": { "link": "https://wutt.net/img/demo-hero.png" } }
]
},
{
"type": "body",
"parameters": [
{ "type": "text", "text": "{{customer_first_name}}" },
{ "type": "text", "text": "{{company_name}}" }
]
},
{
"type": "buttons",
"buttons": [
{ "type": "url", "text": "Book a demo", "url": "https://wutt.net/book/{{customer_id}}" },
{ "type": "url", "text": "See pricing", "url": "https://wutt.net/pricing" },
{ "type": "phone_number", "text": "Talk to sales", "phone": "+966500000000" }
]
}
]
}
}
Step 5 — Interactive list message (slot picker)
For the “Book a demo” branch, the list message lets the customer pick a slot without leaving WhatsApp. JSON:
{
"messaging_product": "whatsapp",
"to": "{{customer_phone}}",
"type": "interactive",
"interactive": {
"type": "list",
"header": { "type": "text", "text": "Pick a demo time" },
"body": { "type": "text", "text": "Choose a slot this week, we will confirm by reply." },
"footer": { "type": "text", "text": "Wutt Sales" },
"action": {
"button": "See times",
"sections": [
{
"title": "Tomorrow",
"rows": [
{ "id": "slot-1030", "title": "10:30 AM", "description": "30-min demo with Layla" },
{ "id": "slot-1330", "title": "1:30 PM", "description": "30-min demo with Omar" }
]
},
{
"title": "Friday",
"rows": [
{ "id": "slot-1500", "title": "3:00 PM", "description": "30-min demo with Sara" }
]
}
]
}
}
}
Step 6 — CTA URL button on a template
For the “See pricing” branch, use a CTA URL button (one per template):
{
"messaging_product": "whatsapp",
"to": "{{customer_phone}}",
"type": "template",
"template": {
"name": "pricing_v1",
"language": { "code": "en" },
"components": [
{ "type": "body", "parameters": [
{ "type": "text", "text": "{{customer_first_name}}" }
]},
{ "type": "button", "sub_type": "url", "index": 0,
"parameters": [ { "type": "text", "text": "{{utm_source}}" } ] }
]
}
}
Step 7 — Human handoff
Any reply that is not a recognized button or list id is routed to the AI assistant for a draft, then to a human agent. Wutt logs the handoff so you can review which flows leak into the inbox and improve them.
Step 8 — Test, ship, measure
Use the Preview button to dry-run the flow with a test number. Then click Activate. Open Reports → Flow performance to see send, open, click, and conversion numbers per node.
Best practices
- One template per message — do not chain multiple templates in the same send window.
- Always include at least one button so the customer does not have to type.
- For Arabic campaigns, prepare a parallel
_arversion of every template. - Use CTA URL buttons for the “primary action” and quick-reply buttons for “yes/no” branching.
Build WhatsApp automation flows without a developer.
Wutt’s flow builder turns templates, buttons, CTA URLs, and lists into revenue-ready conversations.
