Button
Category: Input
Overview
The Button node presents the customer with up to three reply buttons. Each button is its own labelled output port, so you can branch the flow per choice without a Condition node. The Fallback port catches taps on options that no longer exist or non-button replies.
On WhatsApp the node now sends a native, tappable interactive reply-button message — the customer taps a button instead of typing their choice, and the tap is matched to the correct branch automatically. The native render applies when the node has three or fewer buttons; with more than three the message is sent as plain text and the customer types their choice (see Limits & validation).
When to use
- Yes / No / Maybe style decisions.
- Short menu choices (“Track order”, “Talk to agent”, “Other”).
- Confirmation prompts (“Confirm appointment?” → Yes / Reschedule / Cancel).
Ports
| Port | Direction | Description |
|---|---|---|
in | input | Receives the flow from the previous node. |
<button_key> | output | One output port per configured button, named by the button’s stable key. Each port fires when the customer taps that specific button (on WhatsApp the tap is matched automatically) or types its label. |
fallback | output | Fires when the customer types something that doesn’t match any button label. |
talk_to_agent | output | Only present when the “Talk to agent” port toggle is on. Fires when the customer asks for a human while the buttons are showing. |
Configuration
Prompt (EN / AR)
The bilingual text shown above the buttons. Required.
Buttons
A repeater row per button: a stable internal key (which becomes the output port name, e.g. btn_1) plus the visible English and Arabic labels. Add and remove buttons inline. Each button produces its own labelled output port.
WhatsApp native reply buttons cap a single message at 3 buttons, and each label is truncated to 20 characters per language. Keep buttons to three or fewer to get the tappable render. If a node has more than three buttons, WhatsApp can’t show native buttons — the bot falls back to a plain text message and the customer types their choice. For more than three options, switch to the List node, which supports up to 10 tappable rows.
Expose ‘Talk to agent’ port
When enabled, the node renders an extra talk_to_agent port. If the customer asks to speak to a human while the buttons are showing, the flow exits through that port instead of fallback.
Common patterns
Triage menu
Button (“How can we help?”) → btn_1 → Order tracking subflow; btn_2 → Billing; btn_3 → Transfer to agent.
Yes / No confirmation
Button with two options → btn_1 → action; btn_2 → cancel/Close.
Limits & validation
- On WhatsApp, three or fewer buttons render as native, tappable reply buttons; the tap is matched to the right branch automatically.
- WhatsApp caps native reply buttons at 3 per message. If a node has more than 3, the bot sends a plain text message instead and the customer types their choice.
- WhatsApp truncates button labels longer than 20 characters per language — keep labels short so they read cleanly on the button.
- For more than 3 choices use the List node, which supports up to 10 tappable rows.
Troubleshooting
Customers type their answer instead of tapping.
Even though three-or-fewer buttons render as native taps on WhatsApp, a customer can still type a reply instead of tapping. Always wire Fallback to a sensible recovery path (re-prompt, intent route, or transfer). Do not assume taps.
The buttons show up as plain text the customer has to type.
The node has more than three buttons, so WhatsApp can’t render native reply buttons and the bot falls back to a plain text message. Trim to three buttons to restore the tappable render, or switch to the List node, which supports up to 10 rows.
See also
List for >3 options; Quick Links when you want clickable URLs instead of branching.