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

> Exibe uma lista suspensa de opções para o usuário selecionar

O nodo **Lista** envia uma mensagem com um botão que, ao ser tocado, expande uma lista de opções. Ele permite exibir até **10 opções**, cada uma com título e descrição.

<Note>
  No WhatsApp, listas são exibidas como um menu suspenso nativo. É a melhor opção quando você tem entre 4 e 10 opções.
</Note>

## Configuração geral

* **Cabeçalho**: Título da mensagem (máximo 60 caracteres)
* **Conteúdo**: Mensagem principal (máximo 1.024 caracteres, obrigatório)
* **Nome do botão**: Texto no botão que expande a lista (máximo 20 caracteres)

### Opções

Cada opção tem:

* **Nome da opção**: Texto visível na lista (máximo 24 caracteres)
* **Descrição**: Texto adicional abaixo do nome (opcional, máximo 72 caracteres)

Você pode adicionar até **10 opções**. As opções podem ser reordenadas por arrastar e duplicadas para criar variantes rapidamente.

### Opções dinâmicas

Se as opções vêm de dados variáveis, habilite o modo **dinâmico**:

* **Variável de origem**: `{{$memory.options}}`
* **Template de rótulo**: `{{$item.name}}`
* **Template de descrição**: `{{$item.detail}}`

Templates predefinidos: Lista simples, Produtos, Horários disponíveis, Filiais.

## Variáveis nas mensagens

```
Cabeçalho: Olá {{$user.names}}
Conteúdo: Selecione uma das seguintes opções
```

## Configuração avançada

### Seleção obrigatória

Quando habilitado, o usuário **deve** escolher uma opção da lista para continuar. Se digitar texto livre, verá uma mensagem de erro personalizável (máximo 250 caracteres).

### Variável de resposta

Salva a opção selecionada pelo usuário em uma variável de memória para uso posterior no fluxo.

**Como configurar:**

1. Habilite o toggle **Salvar resposta**.
2. Insira o nome da variável (por exemplo, `inquiry_reason`).

#### Valor salvo com opções estáticas

Quando as opções são definidas manualmente, o **nome** da opção selecionada é salvo como texto simples.

Exemplo com estas opções:

| Opção           |
| :-------------- |
| Vendas          |
| Suporte Técnico |
| Faturamento     |
| Devoluções      |

Se o usuário escolher **Suporte Técnico**:

```javascript theme={null}
// {{$memory.inquiry_reason}} contém:
const inquiry_reason = "Technical Support";
```

#### Valor salvo com opções dinâmicas

Quando as opções são geradas a partir de uma variável de origem, o **objeto completo** do array ao qual a opção selecionada pertence é salvo.

Suponha que `{{$memory.services}}` contenha:

```json theme={null}
[
  { "id": "s1", "name": "Sales", "agents": 5, "schedule": "M-F 8:00-18:00" },
  { "id": "s2", "name": "Technical Support", "agents": 3, "schedule": "M-F 9:00-17:00" },
  { "id": "s3", "name": "Billing", "agents": 2, "schedule": "M-F 8:00-16:00" }
]
```

Se o usuário escolher **Technical Support**, a variável contém o objeto completo:

```javascript theme={null}
// {{$memory.inquiry_reason}} contém o objeto completo:
const inquiry_reason = {
  id: "s2",
  name: "Technical Support",
  agents: 3,
  schedule: "M-F 9:00-17:00"
};
```

Você pode acessar cada propriedade do objeto em nodos subsequentes:

```javascript theme={null}
// Acessando propriedades de {{$memory.inquiry_reason}}:
inquiry_reason.name;     // "Technical Support"
inquiry_reason.schedule; // "M-F 9:00-17:00"
inquiry_reason.agents;   // 3
```

#### Casos de uso

<AccordionGroup>
  <Accordion title="Direcionar o fluxo com base na seleção (opções estáticas)">
    Conecte um nodo [Condicional](/pt/guias/nodos/condicional) e crie um ramo para cada opção:

    ```
    Se {{$memory.inquiry_reason}} = "Sales"             → Ramo Vendas
    Se {{$memory.inquiry_reason}} = "Technical Support" → Ramo Suporte
    Se {{$memory.inquiry_reason}} = "Billing"           → Ramo Faturamento
    ```
  </Accordion>

  <Accordion title="Usar dados do objeto selecionado (opções dinâmicas)">
    Com o objeto completo salvo, você pode informar o usuário com os dados exatos do serviço escolhido:

    ```
    Texto: "A área {{$memory.inquiry_reason.name}} opera
    {{$memory.inquiry_reason.schedule}} e tem
    {{$memory.inquiry_reason.agents}} agentes disponíveis."
    ```
  </Accordion>

  <Accordion title="Personalizar a resposta do AI Agent">
    Passe o objeto para o nodo [AI Agent](/pt/guias/nodos/ai-agent) para que adapte sua resposta:

    ```
    O usuário precisa de ajuda com: {{$memory.inquiry_reason.name}}.
    Horário de atendimento: {{$memory.inquiry_reason.schedule}}.
    Responda com informações específicas para esse serviço.
    ```
  </Accordion>

  <Accordion title="Registrar a escolha em um banco de dados">
    Use um nodo [API](/pt/guias/nodos/api) ou [Datum](/pt/guias/nodos/datum) para registrar a seleção com seu ID de serviço:

    ```json theme={null}
    {
      "userId": "{{$user.id}}",
      "serviceId": "{{$memory.inquiry_reason.id}}",
      "serviceName": "{{$memory.inquiry_reason.name}}",
      "timestamp": "{{$context.timestamp}}"
    }
    ```
  </Accordion>
</AccordionGroup>

### Lista expira

Se o usuário não selecionar nenhuma opção dentro do tempo configurado:

* **Enviar texto**: Exibe uma mensagem de expiração
* **Redirecionar para fluxo**: Leva o usuário a outro fluxo

## Exemplo

**Configuração:**

* Cabeçalho: `Como posso ajudá-lo?`
* Conteúdo: `Selecione uma opção da lista`
* Nome do botão: `Ver opções`
* Opções: Vendas, Suporte Técnico, Faturamento, Devoluções
