What it means
An interactive message is what happens when you stop asking customers to type. Instead of "reply 1 for delivery, 2 for returns", you send buttons. Instead of listing twelve branch names in a paragraph, you send a menu. The message body is still text, but the answer comes back as a structured payload with an identifier you chose.
On the wire it is a message with type: "interactive" and an interactive object whose own type selects the widget: reply buttons, a list menu, a call-to-action URL button, a Flow, or a product card. Each has its own body shape and its own limits.
The reason this matters more on WhatsApp than on other channels is the parsing problem it removes. Free-text answers on a messaging channel arrive misspelled, in mixed languages, with emoji, and with the answer to a different question. A tapped button arrives as an id you defined, every time, in every language, with no natural language processing in between.
The window rule, and why it is good news
Free-form interactive messages can only be sent while the 24-hour customer service window is open. Outside it, you are back to approved templates, which can carry quick-reply and URL buttons of their own but need review before every change.
Read that as an opportunity rather than a restriction. Everything inside the window is deployable without a reviewer. You can ship a new menu, restructure a support triage flow, add a fourth option and remove it again, all on your own release schedule. The approval queue only constrains the small set of messages that have to start conversations from cold.
So the healthy architecture is thin at the boundary and rich inside it: a small, stable library of templates whose job is to earn a tap, and a large, fast-moving set of interactive experiences that live in the conversation the tap opened.
The payload shape that catches everyone
Here is the bug we see in almost every first integration. A tap on a reply button in a free-form interactive message and a tap on a quick-reply button in a template produce two different inbound structures.
The interactive one arrives as type: "interactive" with interactive.type set to button_reply, carrying your id and the title the customer saw. The template one arrives as type: "button" with a button object carrying payload and text. A list selection is a third shape, interactive.type of list_reply, which also includes the row description.
A handler written against only the first shape looks correct in testing, because testing happens inside an open window, and then silently drops every response to a template button in production. The symptom is maddening: customers insist they answered, and your system has no record of it. Write one normaliser that maps all three shapes onto a single internal event and the whole class of bug disappears.
Design rules that survive contact with real users
- Ids are intents, titles are copy. Switch on
id, never on the visible label. Labels get reworded and translated; ids should not. - Three buttons is a feature. The cap forces the question "what are the three things this person is actually trying to do", which is a better product question than any menu structure.
- Always accept typing. A menu is a suggestion, not a constraint. People will reply "2" or "the first one" or write a sentence, and answering that with "please use the buttons" is how a block is earned.
- Do not rebuild a phone tree. Four levels of nested menu is worse than a human, and people abandon it. Two levels then a person is a good default.
- Use cta_url for links. A raw payment URL in text looks like phishing. A button with a clear label does not.
- Include an escape hatch. One option should always be "talk to someone", and it should work.
Why it matters
The commercial case is conversion and cost at once. A tap is faster than typing, so completion rates on a structured question are far higher than on the same question asked in prose. A tap is unambiguous, so automation resolves more conversations without a human. And a tap is an inbound message, so it keeps the service window open, which keeps the rest of the conversation free-form and cheap.
That last point deserves emphasis because it links directly to your bill. Every button you put on a notification template is an invitation to re-open the window. A confirmed appointment that comes back as a tap has both captured the answer and bought you another 24 hours of unrestricted conversation.
Real-world examples
- Appointment confirmation. A utility template with "Confirm" and "Reschedule". Confirm writes to the calendar and ends the thread. Reschedule opens the window and the bot sends a list of available slots as a free-form list message, with no approval needed to change the slots.
- Support triage. Three buttons on first contact: order status, returns, something else. The first two are resolved by automation; the third routes straight to a human with the transcript attached.
- Payment link. A short body plus a
cta_urlbutton labelled "Pay securely". The link is never visible as raw text, which removes the phishing look and measurably improves click-through. - Branch selection. Twelve locations across three regions, sent as a list grouped into sections. A paragraph listing twelve branch names would have been ignored.
- The escalation that worked. Every menu carried a "talk to a person" row. Usage was low, satisfaction was high, and the option itself was what stopped people abandoning the menu.
Common mistakes
- Handling only one reply shape. Template buttons and interactive buttons are different payloads. Handle both.
- Switching on the title. The first translation or rewrite breaks every branch of your logic.
- Reusing ids across contexts. A generic "option_1" tells you nothing when it arrives out of context.
- Sending a list where three buttons would do. A list costs an extra tap to open. Use it when there are genuinely more than three options.
- Assuming a tap is guaranteed. People type. Plan for it.
- Forgetting the window. A free-form interactive send after the window closes fails, exactly like any other free-form message.
Related concepts
- 24-hour customer service window: when free-form interactive messages are allowed.
- Message template: how you get buttons into a conversation you are starting.
- WhatsApp Flow: the multi-screen form an interactive message can open.
- Webhook: where the tap arrives, in one of three shapes.
- AI agent: combines structured taps with free-text understanding.
- Conversion funnel: buttons are the measurable steps inside a chat.
How Pinlyx handles it
Pinlyx normalises all three reply shapes into one event, so a tap on a template button and a tap on an interactive button reach your automation identically and nothing is silently lost. Menus are built visually with the current limits enforced before send, button ids are treated as stable intents that survive translation, and every tap is written to the contact timeline as a recorded answer rather than as an inbound text to be parsed later. Free text always reaches a human when it does not match, and the same builder produces Telegram and Instagram equivalents from one definition. See WhatsApp CRM.