Skip to main content

Send List Message

Sends an interactive list message via the WhatsApp Business Cloud API. Recipients can tap a button to view and select from a list of options organized in sections.

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).
  • Button Text - Text shown on the button to open the list (max 20 characters).
  • Sections - Array of section objects containing list items.

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 List Message node sends an interactive list menu. When executed, the node:

  1. Validates all required inputs
  2. Parses the sections array with rows
  3. Constructs the interactive list 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 the button and selects an item, their response is received in the Receive Events node with the item ID.

Requirements

  • A WhatsApp Business Account in Meta Developer Portal
  • Access Token with appropriate permissions
  • Valid sections array with at least 1 section
  • Each section must have at least 1 row
  • Maximum 10 sections
  • Maximum 10 rows per section

Sections Structure

[
{
"title": "Section 1",
"rows": [
{
"id": "item_1",
"title": "Option 1",
"description": "Description for option 1"
},
{
"id": "item_2",
"title": "Option 2",
"description": "Description for option 2"
}
]
},
{
"title": "Section 2",
"rows": [
{
"id": "item_3",
"title": "Option 3"
}
]
}
]

Section Fields:

  • title: Section title (optional, max 24 characters)
  • rows: Array of row objects (required, at least 1)

Row Fields:

  • id: Unique identifier (required, max 200 characters)
  • title: Item title (required, max 24 characters)
  • description: Item description (optional, max 72 characters)

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 or invalid Button Text
  • Empty sections array
  • Too many sections (max 10)
  • Too many rows per section (max 10)
  • Section missing rows
  • Row missing id or title
  • Text exceeding character limits
  • Invalid access token
  • Network connectivity issues

Example: Product Catalog

Inputs:

  • Phone Number ID: 123456789012345
  • To Phone Number: 14155551234
  • Body Text: Browse our product catalog
  • Button Text: View Products
  • Sections:
    [
    {
    "title": "Electronics",
    "rows": [
    {
    "id": "prod_laptop",
    "title": "Laptop",
    "description": "High-performance laptop - $999"
    },
    {
    "id": "prod_phone",
    "title": "Smartphone",
    "description": "Latest model - $699"
    }
    ]
    },
    {
    "title": "Accessories",
    "rows": [
    {
    "id": "prod_headphones",
    "title": "Headphones",
    "description": "Wireless headphones - $199"
    },
    {
    "id": "prod_case",
    "title": "Phone Case",
    "description": "Protective case - $29"
    }
    ]
    }
    ]

Options:

  • Header Text: Product Catalog
  • Footer Text: Tap to browse

Example: Customer Service Menu

Inputs:

  • Phone Number ID: 123456789012345
  • To Phone Number: 14155551234
  • Body Text: How can we help you today?
  • Button Text: Select Option
  • Sections:
    [
    {
    "title": "Support",
    "rows": [
    {
    "id": "support_technical",
    "title": "Technical Support",
    "description": "Help with technical issues"
    },
    {
    "id": "support_billing",
    "title": "Billing Support",
    "description": "Questions about billing"
    }
    ]
    },
    {
    "title": "Information",
    "rows": [
    {
    "id": "info_hours",
    "title": "Business Hours"
    },
    {
    "id": "info_location",
    "title": "Our Locations"
    }
    ]
    }
    ]

Example: Appointment Booking

Inputs:

  • Phone Number ID: 123456789012345
  • To Phone Number: {{customer.phone}}
  • Body Text: Select your preferred appointment time
  • Button Text: View Times
  • Sections:
    [
    {
    "title": "Morning Slots",
    "rows": [
    {
    "id": "apt_0900",
    "title": "9:00 AM",
    "description": "Available"
    },
    {
    "id": "apt_1000",
    "title": "10:00 AM",
    "description": "Available"
    },
    {
    "id": "apt_1100",
    "title": "11:00 AM",
    "description": "Limited availability"
    }
    ]
    },
    {
    "title": "Afternoon Slots",
    "rows": [
    {
    "id": "apt_1300",
    "title": "1:00 PM",
    "description": "Available"
    },
    {
    "id": "apt_1400",
    "title": "2:00 PM",
    "description": "Available"
    }
    ]
    }
    ]

Handling List Responses

When a user selects an item, the response is received in the Receive Events node:

Webhook Payload:

{
"messageType": "interactive",
"messageBody": "item_id_here",
"from": "14155551234",
...
}

Flow Example:

// In your flow logic
switch (messageBody) {
case "prod_laptop":
// Handle laptop selection
break;
case "prod_phone":
// Handle phone selection
break;
case "support_technical":
// Route to technical support
break;
default:
// Handle unknown selection
}

Usage Notes

  • Lists are ideal for more than 3 options (use Reply Buttons for 3 or fewer)
  • Sections help organize related options
  • Descriptions provide additional context
  • Button text should be action-oriented ("Select", "Choose", "View")
  • Maximum 10 sections and 10 rows per section
  • Interactive messages only work within the 24-hour window
  • Cannot be used in template messages
  • Users see a scrollable list when they tap the button

Tips for RPA Developers

  • Use lists for menus, catalogs, and multi-option selections
  • Group related items in sections
  • Keep titles concise (max 24 characters)
  • Use descriptions to provide additional details
  • Implement consistent ID naming conventions
  • Map item IDs to actions in your code
  • Log selections for analytics
  • Provide a way to go back or cancel
  • Test list scrolling on different devices
  • Consider pagination for very long lists

Common Use Cases

FAQ Menu:

{
"bodyText": "Select a topic to learn more",
"buttonText": "View FAQs",
"sections": [
{
"title": "Account",
"rows": [
{"id": "faq_signup", "title": "How to sign up"},
{"id": "faq_login", "title": "Login issues"},
{"id": "faq_password", "title": "Reset password"}
]
},
{
"title": "Orders",
"rows": [
{"id": "faq_track", "title": "Track my order"},
{"id": "faq_return", "title": "Return policy"},
{"id": "faq_shipping", "title": "Shipping info"}
]
}
]
}

Location Selection:

{
"bodyText": "Select your nearest store",
"buttonText": "View Stores",
"sections": [
{
"title": "San Francisco",
"rows": [
{"id": "store_sf_downtown", "title": "Downtown", "description": "123 Market St"},
{"id": "store_sf_mission", "title": "Mission", "description": "456 Valencia St"}
]
},
{
"title": "Oakland",
"rows": [
{"id": "store_oak_broadway", "title": "Broadway", "description": "789 Broadway"}
]
}
]
}

Service Selection:

{
"bodyText": "Select the service you need",
"buttonText": "View Services",
"sections": [
{
"title": "Hair Services",
"rows": [
{"id": "svc_haircut", "title": "Haircut", "description": "$50 - 30 min"},
{"id": "svc_color", "title": "Hair Coloring", "description": "$120 - 2 hours"}
]
},
{
"title": "Nail Services",
"rows": [
{"id": "svc_manicure", "title": "Manicure", "description": "$40 - 45 min"},
{"id": "svc_pedicure", "title": "Pedicure", "description": "$60 - 1 hour"}
]
}
]
}

Character Limits Summary

  • Body Text: 1024 characters
  • Button Text: 20 characters
  • Header Text: 60 characters
  • Footer Text: 60 characters
  • Section Title: 24 characters
  • Row Title: 24 characters
  • Row Description: 72 characters
  • Row ID: 200 characters

Common Errors and Solutions

Error: Too many sections

  • Maximum 10 sections allowed
  • Combine related items or split into multiple messages

Error: Too many rows

  • Maximum 10 rows per section
  • Organize into more sections or reduce options

Error: Title too long

  • Section titles: max 24 characters
  • Row titles: max 24 characters
  • Use abbreviations or shorter phrases

Error: Empty sections

  • Each section must have at least 1 row
  • Remove empty sections

Best Practices

  • Use clear, descriptive section titles
  • Keep row titles concise and scannable
  • Use descriptions for additional context
  • Order items logically (alphabetically, by popularity, etc.)
  • Limit total items for better UX (avoid overwhelming users)
  • Test list display on different devices
  • Provide a way to cancel or go back
  • Use consistent naming conventions
  • Monitor which items are selected most
  • Follow WhatsApp Business Policy for content

Performance Considerations

  • Lists with many items may take longer to render
  • Consider user scrolling effort (limit items when possible)
  • Test performance on slower devices
  • Cache frequently used list structures
  • Generate lists dynamically based on context