Skip to main content

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.
info

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:

  1. Validates all required inputs
  2. Parses the buttons array (max 3 buttons)
  3. Constructs the interactive message payload
  4. Adds optional header and footer if provided
  5. Sends a POST request to the WhatsApp API
  6. 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"}
    ]

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:

  1. Send Reply Buttons node sends message
  2. User taps a button
  3. Receive Events node captures the response
  4. Use Message Body output to get the button ID
  5. 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