WhatsApp Interactive Message Builder
Build reply buttons, list messages, CTA URL buttons and location requests for the WhatsApp Cloud API. Every field is checked against Meta's limits as you type, the preview shows roughly what the customer sees, and the JSON is ready to send.
Build a message
Preview
Your order #4821 has shipped and arrives Thursday. What would you like to do?
Reply any time
12:04
An approximation for layout. WhatsApp renders the final look, which differs slightly by phone and app version.
✓ Within every documented limit for this message type.
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "<RECIPIENT_PHONE_NUMBER>",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "Your order #4821 has shipped and arrives Thursday. What would you like to do?"
},
"footer": {
"text": "Reply any time"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "track_order",
"title": "Track my order"
}
},
{
"type": "reply",
"reply": {
"id": "change_address",
"title": "Change address"
}
},
{
"type": "reply",
"reply": {
"id": "talk_to_agent",
"title": "Talk to a person"
}
}
]
}
}
}POST it to /v26.0/<PHONE_NUMBER_ID>/messages with your own access token. Nothing here is sent anywhere.
Four message types, and when each one fits
Reply buttons put up to three choices directly under your message. They suit decisions the customer can make in one tap: confirm or reschedule, yes or no, track the order or talk to a person. Each button carries an ID that comes back to your webhook when it is tapped, which is what makes them better than asking someone to type a number.
List messages fold up to ten options behind one menu button, grouped into titled sections. Use them for anything longer than three: a service menu, delivery speeds, appointment slots, store locations. Each row can have a short description, so you can show a price or a duration without crowding the title.
CTA URL buttons attach one button that opens a web page, which reads far better than a raw link in the text: an invoice, a tracking page, a booking form. Location request messages show a Send location button so the customer can share where they are in a tap, which is how pickup, delivery and nearest-branch flows avoid a typed address.
The set mirrors what a quick reply does on other channels, with WhatsApp's own rules. A no-code WhatsApp chatbot builder produces exactly these payloads when you add a buttons or list step, so you only need to hand-write them if you call the API yourself.
The limits Meta enforces
The Cloud API rejects a message that breaks any of these rather than trimming it, usually with a parameter error such as 131008 or 100. Characters are counted as a person reads them, so an emoji uses one.
| Field | Reply buttons | List | CTA URL | Location |
|---|---|---|---|---|
| Body text | 1,024 | 4,096 | 1,024 | 1,024 |
| Header (text) | No limit stated; image, video or document also allowed | 60, text only | 60, or media | Not documented |
| Footer | 60 | 60 | 60 | Not documented |
| Options | Up to 3 buttons, unique labels | Up to 10 sections, 10 rows in total | 1 button | 1 fixed button |
| Label length | 20 | Row title 24, description 72, menu button 20, section title 24 | 20 | Set by WhatsApp |
| ID length | 256 | 200 per row | None | None |
Product and multi-product messages are not in this builder on purpose: they need a commerce catalog connected to your WhatsApp Business Account and real product retailer IDs, which no standalone tool can supply honestly.
Sending them: the window, and reading the reply
Interactive messages are session messages. Meta accepts them only while the customer service window is open, which means within 24 hours of the customer's last message to you. They need no approval, which is their advantage. Outside the window you need an approved message template, and the attempt to send anything else fails with 131047. To check a template before you submit it, use the WhatsApp template checker.
When the customer taps, your webhook receives a messages event with type interactive. A button tap fills interactive.button_reply with the ID and title; a list choice fills interactive.list_reply with the row's ID, title and description. Branch on the ID. Titles get reworded and translated, IDs should not, so an ID like change_address keeps your handler working through every copy change.
If the webhook never arrives, the problem is upstream of the message: an unverified callback URL or a missing subscription. The webhook verification tester checks the handshake, and the WhatsApp error code directory explains the rest.
WhatsApp interactive message questions
What is a WhatsApp interactive message?
It is a Cloud API message type that gives the customer something to tap instead of type: up to three reply buttons, a list of up to ten options, a button that opens a web page, or a request to share their location. Interactive messages need no template approval, but they can only be sent while the customer service window is open.
Can I send interactive messages outside the 24-hour window?
No. Reply buttons, lists, CTA URL buttons and location requests are session messages, so Meta only accepts them within 24 hours of the customer's last message to you. Outside that window the only thing you can send is an approved template, which can carry its own buttons. Sending anyway fails, and 131047 is the error code you will see in that case.
What is the difference between reply buttons and a list message?
Reply buttons show up to three options directly under the message, which is fastest when the choices fit. A list message hides its options behind a single menu button and holds up to ten rows grouped into titled sections, each row with an optional description. Use buttons for yes, no and next-step choices, and a list for menus, services or time slots.
How do I know which button or row the customer tapped?
The tap arrives as a messages webhook with type interactive. For a reply button, interactive.button_reply carries the id and title you set; for a list, interactive.list_reply carries the row's id, title and description. Route on the id, not the title, so you can rename a button later without breaking the logic that handles it.
Why does the API reject my list message?
The usual causes are a row title over 24 characters, a description over 72, more than ten rows across all sections combined, a missing section title, or a menu button label over 20 characters. Meta returns a parameter error such as 131008 or 100 rather than trimming the text, so validate before sending. This builder flags each of those as you type.
Is this builder safe to use with my WhatsApp account?
Yes. It never connects to your account. Everything runs in your browser: it formats the JSON and a curl command with placeholders for your access token and phone number ID, which you fill in yourself. Nothing you type is sent to Conferbot or to Meta, and no access token is needed to use the tool.
Related
Build button and list flows without JSON
Conferbot's visual builder turns buttons and lists into WhatsApp interactive messages and handles the replies for you. Free plan, no card.