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

# Lista numerada

> Muestra una lista numerada de opciones para que el usuario responda con el número de su elección

El nodo **Lista numerada** envía un mensaje con opciones presentadas como una lista de ítems numerados. El usuario responde escribiendo el número correspondiente a su elección.

<Note>
  A diferencia del nodo [Lista](/guides/nodos/lista), que usa el menú desplegable nativo de WhatsApp, la lista numerada funciona en **todos los canales** ya que envía las opciones como texto plano.
</Note>

## Configuración general

* **Contenido**: Mensaje introductorio que acompaña la lista (máximo 1,024 caracteres)

### Opciones

Cada opción tiene:

* **Nombre de la opción**: Texto visible para el ítem (máximo 24 caracteres)
* **Descripción**: Texto adicional debajo del nombre (opcional, máximo 72 caracteres)

Puedes agregar múltiples opciones. Las opciones se pueden reordenar arrastrándolas y duplicar para crear variantes rápidas.

### Opciones dinámicas

Si las opciones provienen de datos variables, activa el modo **dinámico**:

* **Variable fuente**: `{{$memory.opciones}}`
* **Plantilla de etiqueta**: `{{$item.nombre}}`
* **Plantilla de descripción**: `{{$item.detalle}}`

Plantillas predefinidas: Lista simple, Productos, Horarios disponibles, Sucursales.

## Variables en mensajes

```
Contenido: Hola {{$user.names}}, ¿en qué te puedo ayudar hoy?
```

## Configuración avanzada

### Selección obligatoria

Cuando está activada, el usuario **debe** responder con un número válido de la lista para continuar. Si escribe texto libre o un número fuera de rango, verá un mensaje de error personalizable (máximo 250 caracteres).

<Note>
  La selección obligatoria está disponible únicamente en el canal **WhatsApp**.
</Note>

### Variable de respuesta

Guarda la opción que el usuario seleccionó en una variable de memoria para usarla más adelante en el flujo.

**Cómo configurarlo:**

1. Activa el interruptor **Guardar respuesta**.
2. Escribe el nombre de la variable (por ejemplo, `opcion_elegida`).

#### Valor guardado con opciones estáticas

Cuando las opciones están definidas manualmente, se guarda el **nombre** de la opción seleccionada como texto plano. El número que el usuario escribe solo indica la posición — no se guarda el número.

Ejemplo con estas opciones:

| #  | Opción          |
| :- | :-------------- |
| 1  | Ventas          |
| 2  | Soporte Técnico |
| 3  | Facturación     |
| 4  | Devoluciones    |

Si el usuario responde `2`:

```javascript theme={null}
// {{$memory.opcion_elegida}} contiene:
const opcion_elegida = "Soporte Técnico";
```

#### Valor guardado con opciones dinámicas

Cuando las opciones se generan desde una variable fuente, se guarda el **objeto completo** del array al que pertenece la opción seleccionada.

Supón que `{{$memory.sucursales}}` contiene:

```json theme={null}
[
  { "id": "suc1", "nombre": "Centro", "direccion": "Av. Principal 100", "telefono": "555-0101" },
  { "id": "suc2", "nombre": "Norte", "direccion": "Calle Norte 200", "telefono": "555-0202" },
  { "id": "suc3", "nombre": "Sur", "direccion": "Av. Sur 300", "telefono": "555-0303" }
]
```

Con la lista numerada configurada con variable fuente `{{$memory.sucursales}}`, el usuario recibe:

```
¿En qué sucursal te encuentras?

1. Centro
2. Norte
3. Sur
```

Si el usuario responde `1`, la variable queda con el objeto completo:

```javascript theme={null}
// {{$memory.opcion_elegida}} contiene el objeto completo:
const opcion_elegida = {
  id: "suc1",
  nombre: "Centro",
  direccion: "Av. Principal 100",
  telefono: "555-0101"
};
```

Puedes acceder a cada propiedad del objeto en nodos posteriores:

```javascript theme={null}
// Acceso a propiedades de {{$memory.opcion_elegida}}:
opcion_elegida.nombre;    // "Centro"
opcion_elegida.direccion; // "Av. Principal 100"
opcion_elegida.telefono;  // "555-0101"
```

#### Casos de uso

<AccordionGroup>
  <Accordion title="Enrutar el flujo según la selección (opciones estáticas)">
    Conecta un nodo [Condicional](/guides/nodos/condicional) y crea una rama por cada opción:

    ```
    Si {{$memory.opcion_elegida}} = "Ventas"          → rama Ventas
    Si {{$memory.opcion_elegida}} = "Soporte Técnico" → rama Soporte
    Si {{$memory.opcion_elegida}} = "Facturación"     → rama Facturación
    ```
  </Accordion>

  <Accordion title="Usar datos del objeto seleccionado (opciones dinámicas)">
    Con el objeto completo guardado, puedes responder al usuario con información precisa de su selección sin nuevas consultas:

    ```
    Texto: "Tu pedido se entregará en la sucursal {{$memory.opcion_elegida.nombre}},
    ubicada en {{$memory.opcion_elegida.direccion}}.
    Puedes llamar al {{$memory.opcion_elegida.telefono}} si tienes dudas."
    ```
  </Accordion>

  <Accordion title="Personalizar la respuesta del AI Agent">
    Pasa el objeto al nodo [AI Agent](/guides/nodos/ai-agent) para personalizar la respuesta:

    ```
    El usuario seleccionó la sucursal: {{$memory.opcion_elegida.nombre}}.
    Dirección: {{$memory.opcion_elegida.direccion}}.
    Teléfono: {{$memory.opcion_elegida.telefono}}.
    Confirma los datos y ofrece asistencia adicional.
    ```
  </Accordion>

  <Accordion title="Registrar la elección en una base de datos">
    Usa un nodo [API](/guides/nodos/api) o [Datum](/guides/nodos/datum) para registrar la selección con el ID del objeto:

    ```json theme={null}
    {
      "userId": "{{$user.id}}",
      "sucursalId": "{{$memory.opcion_elegida.id}}",
      "sucursalNombre": "{{$memory.opcion_elegida.nombre}}",
      "canal": "{{$context.channel}}",
      "timestamp": "{{$context.timestamp}}"
    }
    ```
  </Accordion>
</AccordionGroup>

### Lista expira

Si el usuario no responde dentro del tiempo configurado:

* **Enviar texto**: Muestra un mensaje de expiración
* **Redirigir a flujo**: Lleva al usuario a otro flujo

<Note>
  La expiración de lista está disponible únicamente en el canal **WhatsApp**.
</Note>

## Ejemplo

**Configuración:**

* Contenido: `¿Cuál es el motivo de tu consulta?`
* Opciones: `1. Ventas`, `2. Soporte Técnico`, `3. Facturación`, `4. Devoluciones`

**El usuario recibe:**

```
¿Cuál es el motivo de tu consulta?

1. Ventas
2. Soporte Técnico
3. Facturación
4. Devoluciones
```

El usuario responde escribiendo `2` y el flujo continúa por la ruta correspondiente.

## ¿Cuándo usar Lista numerada vs Lista?

|                        | Lista numerada                             | Lista                                       |
| :--------------------- | :----------------------------------------- | :------------------------------------------ |
| **Canales**            | Todos (WhatsApp, Web, Facebook, Instagram) | WhatsApp                                    |
| **Interfaz**           | Texto plano con números                    | Menú desplegable nativo                     |
| **Máximo de opciones** | Sin límite fijo                            | 10 opciones                                 |
| **Recomendado cuando** | Necesitas compatibilidad multicanal        | Tienes entre 4-10 opciones solo en WhatsApp |
