Skip to main content
The Numbered list node sends a message with options presented as a list of numbered items. The user responds by typing the number corresponding to their choice.
Unlike the List node, which uses WhatsApp’s native dropdown menu, the numbered list works on all channels since it sends the options as plain text.

General configuration

  • Content: Introductory message that accompanies the list (maximum 1,024 characters)

Options

Each option has:
  • Option name: Text visible for the item (maximum 24 characters)
  • Description: Additional text below the name (optional, maximum 72 characters)
You can add multiple options. Options can be reordered by dragging and duplicated to quickly create variants.

Dynamic options

If the options come from variable data, enable dynamic mode:
  • Source variable: {{$memory.options}}
  • Label template: {{item.name}}
  • Description template: {{item.detail}}
Predefined templates: Simple list, Products, Available schedules, Branches.

Variables in messages

Content: Hello {{$user.names}}, how can I help you today?

Advanced configuration

Mandatory selection

When enabled, the user must respond with a valid number from the list to continue. If they type free text or a number out of range, they will see a customizable error message (maximum 250 characters).
Mandatory selection is only available on the WhatsApp channel.

Response variable

Saves the option the user selected in a memory variable for later use in the flow. How to configure it:
  1. Enable the Save response toggle.
  2. Enter the variable name (for example, chosen_option).

Value saved with static options

When options are defined manually, the name of the selected option is saved as plain text. The number the user types only indicates the position — the number itself is not saved. Example with these options:
#Option
1Sales
2Technical Support
3Billing
4Returns
If the user responds 2:
// {{$memory.chosen_option}} contains:
const chosen_option = "Technical Support";

Value saved with dynamic options

When options are generated from a source variable, the complete object from the array to which the selected option belongs is saved. Suppose {{$memory.branches}} contains:
[
  { "id": "br1", "name": "Downtown", "address": "Main Ave 100", "phone": "555-0101" },
  { "id": "br2", "name": "North", "address": "North St 200", "phone": "555-0202" },
  { "id": "br3", "name": "South", "address": "South Ave 300", "phone": "555-0303" }
]
With the numbered list configured with source variable {{$memory.branches}}, the user receives:
Which branch are you at?

1. Downtown
2. North
3. South
If the user responds 1, the variable holds the complete object:
// {{$memory.chosen_option}} contains the complete object:
const chosen_option = {
  id: "br1",
  name: "Downtown",
  address: "Main Ave 100",
  phone: "555-0101"
};
You can access each property of the object in subsequent nodes:
// Accessing properties of {{$memory.chosen_option}}:
chosen_option.name;    // "Downtown"
chosen_option.address; // "Main Ave 100"
chosen_option.phone;   // "555-0101"

Use cases

Connect a Conditional node and create a branch for each option:
If {{$memory.chosen_option}} = "Sales"             → Sales branch
If {{$memory.chosen_option}} = "Technical Support" → Support branch
If {{$memory.chosen_option}} = "Billing"           → Billing branch
With the complete object saved, you can respond to the user with precise information about their selection without additional queries:
Text: "Your order will be delivered to the {{$memory.chosen_option.name}} branch,
located at {{$memory.chosen_option.address}}.
You can call {{$memory.chosen_option.phone}} if you have questions."
Pass the object to the AI Agent node to personalize the response:
The user selected the branch: {{$memory.chosen_option.name}}.
Address: {{$memory.chosen_option.address}}.
Phone: {{$memory.chosen_option.phone}}.
Confirm the details and offer additional assistance.
Use an API or Datum node to record the selection with the object’s ID:
{
  "userId": "{{$user.id}}",
  "branchId": "{{$memory.chosen_option.id}}",
  "branchName": "{{$memory.chosen_option.name}}",
  "channel": "{{$context.channel}}",
  "timestamp": "{{$context.timestamp}}"
}

List expires

If the user does not respond within the configured time:
  • Send text: Displays an expiration message
  • Redirect to skill: Takes the user to another flow
List expiration is only available on the WhatsApp channel.

Example

Configuration:
  • Content: What is the reason for your inquiry?
  • Options: 1. Sales, 2. Technical Support, 3. Billing, 4. Returns
The user receives:
What is the reason for your inquiry?

1. Sales
2. Technical Support
3. Billing
4. Returns
The user responds by typing 2 and the flow continues along the corresponding route.

When to use Numbered list vs List?

Numbered listList
ChannelsAll (WhatsApp, Web, Facebook, Instagram)WhatsApp
InterfacePlain text with numbersNative dropdown menu
Maximum optionsNo fixed limit10 options
Recommended whenYou need multi-channel compatibilityYou have 4-10 options on WhatsApp only