Send Reply Buttons
Sends an interactive message with reply buttons via the WhatsApp Business Cloud API. Recipients can tap buttons to respond with predefined options.
Common Properties
- Name - The custom name of the node.
- Color - The custom color of the node.
- Delay Before (sec) - Waits in seconds before executing the node.
- Delay After (sec) - Waits in seconds after executing node.
- Continue On Error - Automation will continue regardless of any error. The default value is false.
If the ContinueOnError property is true, no error is caught when the project is executed, even if a Catch node is used.
Inputs
- Phone Number ID - WhatsApp Business Phone Number ID from Meta Developer Portal.
- To Phone Number - Recipient's phone number with country code (without + sign). Example:
1234567890. - Body Text - Message body text (max 1024 characters).
- Buttons - Array of button objects with id and title. Maximum 3 buttons.
Options
- API Version - Meta Graph API version. Default is
21.0. - Header Text - Optional header text (max 60 characters).
- Footer Text - Optional footer text (max 60 characters).
- Access Token - WhatsApp Cloud API Access Token credential (required).
Output
- Response - The complete API response object containing message details and status.
How It Works
The Send Reply Buttons node sends interactive buttons for quick replies. When executed, the node:
- Validates all required inputs
- Parses the buttons array (max 3 buttons)
- Constructs the interactive message payload
- Adds optional header and footer if provided
- Sends a POST request to the WhatsApp API
- Returns the API response
When a recipient taps a button, their response is received in the Receive Events node with the button ID.
Requirements
- A WhatsApp Business Account in Meta Developer Portal
- Access Token with appropriate permissions
- Valid button array with at least 1 button (max 3)
- Each button must have an id and title
Button Object Structure
[
{
"id": "button_1",
"title": "Yes"
},
{
"id": "button_2",
"title": "No"
}
]
Button Requirements:
- id: Unique identifier (max 256 characters, used to identify the button response)
- title: Button label shown to user (max 20 characters)
- Minimum 1 button, maximum 3 buttons
- Button IDs should be unique within the message
Error Handling
The node will return specific errors in the following cases:
- Empty or invalid Phone Number ID
- Empty or invalid recipient phone number
- Empty or invalid Body Text
- Empty buttons array
- Too many buttons (max 3)
- Button missing id or title
- Button title too long (max 20 characters)
- Header text too long (max 60 characters)
- Footer text too long (max 60 characters)
- Invalid access token
- Network connectivity issues
Example: Simple Yes/No Question
Inputs:
- Phone Number ID:
123456789012345 - To Phone Number:
14155551234 - Body Text:
Would you like to receive promotional offers? - Buttons:
[
{"id": "opt_in_yes", "title": "Yes, please"},
{"id": "opt_in_no", "title": "No, thanks"}
]
Example: With Header and Footer
Inputs:
- Phone Number ID:
123456789012345 - To Phone Number:
14155551234 - Body Text:
Your order has been confirmed. How would you like to proceed? - Buttons:
[
{"id": "track_order", "title": "Track Order"},
{"id": "modify_order", "title": "Modify Order"},
{"id": "cancel_order", "title": "Cancel Order"}
]
Options:
- Header Text:
Order Confirmation - Footer Text:
Thank you for your purchase!
Example: Customer Service Menu
Inputs:
- Phone Number ID:
123456789012345 - To Phone Number:
{{customer.phone}} - Body Text:
How can we help you today? - Buttons:
[
{"id": "support_technical", "title": "Technical Support"},
{"id": "support_billing", "title": "Billing Question"},
{"id": "support_other", "title": "Other"}
]
Handling Button Responses
When a user taps a button, the response is received in the Receive Events node:
Webhook Payload:
{
"messageType": "interactive",
"messageBody": "button_id_here",
"from": "14155551234",
...
}
Flow Example:
- Send Reply Buttons node sends message
- User taps a button
- Receive Events node captures the response
- Use Message Body output to get the button ID
- Route flow based on button ID
// In your flow logic
if (messageBody === "opt_in_yes") {
// User opted in
} else if (messageBody === "opt_in_no") {
// User opted out
}
Usage Notes
- Buttons provide a better user experience than free-text responses
- Button IDs are returned in responses, not titles
- Use descriptive button IDs for easier flow logic
- Maximum 3 buttons per message
- Button titles should be concise (max 20 characters)
- Header and footer are optional but recommended for context
- Interactive messages only work within the 24-hour window
- Cannot be used in template messages
Tips for RPA Developers
- Design button flows as state machines
- Use consistent button ID naming conventions
- Store button IDs in configuration
- Map button IDs to actions in your code
- Provide fallback for unrecognized responses
- Log button interactions for analytics
- Use buttons for menu navigation
- Implement timeout handling for no response
- Test button flows thoroughly
- Consider button order (most common action first)
Common Use Cases
Order Confirmation:
{
"bodyText": "Your order #12345 is ready. What would you like to do?",
"buttons": [
{"id": "confirm_pickup", "title": "Confirm Pickup"},
{"id": "request_delivery", "title": "Request Delivery"},
{"id": "cancel_order", "title": "Cancel Order"}
]
}
Appointment Scheduling:
{
"bodyText": "When would you like to schedule your appointment?",
"buttons": [
{"id": "slot_morning", "title": "Morning (9-12)"},
{"id": "slot_afternoon", "title": "Afternoon (1-5)"},
{"id": "slot_evening", "title": "Evening (6-8)"}
]
}
Feedback Collection:
{
"bodyText": "How was your experience with our service?",
"buttons": [
{"id": "feedback_great", "title": "Great!"},
{"id": "feedback_ok", "title": "OK"},
{"id": "feedback_poor", "title": "Poor"}
]
}
Survey Question:
{
"bodyText": "How likely are you to recommend us to a friend?",
"buttons": [
{"id": "nps_promoter", "title": "Very Likely"},
{"id": "nps_passive", "title": "Maybe"},
{"id": "nps_detractor", "title": "Unlikely"}
]
}
Button Design Best Practices
- Keep titles short and clear
- Use action verbs (Confirm, Cancel, View, etc.)
- Order buttons by importance or likelihood
- Provide an "Other" or "Cancel" option when appropriate
- Use consistent terminology across messages
- Test button titles on different devices
- Consider internationalization for multi-language support
Common Errors and Solutions
Error: Too many buttons
- Maximum 3 buttons allowed
- Combine related options or use List Message for more options
Error: Button title too long
- Maximum 20 characters per title
- Use abbreviations or shorter phrases
- Example: "Technical Support" → "Tech Support"
Error: Empty buttons array
- Provide at least 1 button
- Validate buttons array before sending
Error: Missing button id or title
- Every button must have both id and title
- Check JSON structure is correct
Advanced Patterns
Multi-Step Wizard:
Step 1: Send Reply Buttons (Choose Category)
→ User taps button
Step 2: Send Reply Buttons (Choose Subcategory)
→ User taps button
Step 3: Send Reply Buttons (Confirm Action)
→ User taps button
Step 4: Execute action and confirm
Conditional Button Display:
const buttons = [];
if (order.canTrack) {
buttons.push({"id": "track", "title": "Track Order"});
}
if (order.canCancel) {
buttons.push({"id": "cancel", "title": "Cancel Order"});
}
if (order.canModify) {
buttons.push({"id": "modify", "title": "Modify Order"});
}
Best Practices
- Use buttons for binary or limited-choice questions
- Keep body text clear and concise
- Provide context with header/footer
- Use meaningful button IDs for flow logic
- Handle all possible button responses
- Implement fallback for unexpected responses
- Test interactive messages thoroughly
- Monitor button click analytics
- Use List Message for more than 3 options
- Follow WhatsApp Business Policy for content