> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Numbered list

> Displays a numbered list of options for the user to respond with the number of their choice

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.

<Note>
  Unlike the [List](/guides/nodos/lista) node, which uses WhatsApp's native dropdown menu, the numbered list works on **all channels** since it sends the options as plain text.
</Note>

## 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).

<Note>
  Mandatory selection is only available on the **WhatsApp** channel.
</Note>

### 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            |
| :- | :---------------- |
| 1  | Sales             |
| 2  | Technical Support |
| 3  | Billing           |
| 4  | Returns           |

If the user responds `2`:

```javascript theme={null}
// {{$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:

```json theme={null}
[
  { "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:

```javascript theme={null}
// {{$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:

```javascript theme={null}
// Accessing properties of {{$memory.chosen_option}}:
chosen_option.name;    // "Downtown"
chosen_option.address; // "Main Ave 100"
chosen_option.phone;   // "555-0101"
```

#### Use cases

<AccordionGroup>
  <Accordion title="Route the flow based on the selection (static options)">
    Connect a [Conditional](/guides/nodos/condicional) 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
    ```
  </Accordion>

  <Accordion title="Use data from the selected object (dynamic options)">
    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."
    ```
  </Accordion>

  <Accordion title="Personalize the AI Agent response">
    Pass the object to the [AI Agent](/guides/nodos/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.
    ```
  </Accordion>

  <Accordion title="Record the choice in a database">
    Use an [API](/guides/nodos/api) or [Datum](/guides/nodos/datum) node to record the selection with the object's ID:

    ```json theme={null}
    {
      "userId": "{{$user.id}}",
      "branchId": "{{$memory.chosen_option.id}}",
      "branchName": "{{$memory.chosen_option.name}}",
      "channel": "{{$context.channel}}",
      "timestamp": "{{$context.timestamp}}"
    }
    ```
  </Accordion>
</AccordionGroup>

### List expires

If the user does not respond within the configured time:

* **Send text**: Displays an expiration message
* **Redirect to workflow**: Takes the user to another flow

<Note>
  List expiration is only available on the **WhatsApp** channel.
</Note>

## 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 list                            | List                                   |
| :------------------- | :--------------------------------------- | :------------------------------------- |
| **Channels**         | All (WhatsApp, Web, Facebook, Instagram) | WhatsApp                               |
| **Interface**        | Plain text with numbers                  | Native dropdown menu                   |
| **Maximum options**  | No fixed limit                           | 10 options                             |
| **Recommended when** | You need multi-channel compatibility     | You have 4-10 options on WhatsApp only |
