# Usando variáveis

Na Hablla, ao configurar um fluxo de automação, você pode utilizar **variáveis** para recuperar dados de componentes anteriores e expressões **lógicas e condicionais** para tornar suas automações mais dinâmicas e inteligentes.

Isso permite que informações sejam reutilizadas automaticamente, sem precisar preenchê-las manualmente, tornando o processo mais eficiente e sem erros.

### 🎯 **O Que São Variáveis na Hablla?**

Cada componente dentro de um fluxo tem um **código único** e pode gerar **dados de saída** que podem ser usados por outros componentes no mesmo fluxo.

<figure><img src="/files/5rmAlWvKeApmpcxwZBfc" alt=""><figcaption></figcaption></figure>

Você pode acessar esses dados usando a seguinte sintaxe:

```plaintext
{{$data?.codigoDoComponente?.caminhoVariavel}}
```

➡ **Exemplo real:**\
Se um componente chamado `whatsappReceptive_tmy0de` identificou uma pessoa, e o ID dela está armazenado dentro do campo `person.id`, podemos acessar esse valor assim:

```plaintext
{{$data?.whatsappReceptive_tmy0de?.person?.id}}
```

Se esse componente não retornar um valor válido, podemos tentar um segundo componente chamado `whatsappReceptive_r2b7wr`:

```plaintext
{{$data?.whatsappReceptive_tmy0de?.person?.id ?? $data?.whatsappReceptive_r2b7wr?.person?.id}}
```

📌 Aqui, `??` significa: **se o primeiro valor for nulo ou indefinido, use o segundo.**

***

### 🔥 **Operadores e Expressões na Hablla**

Além de acessar variáveis, você pode usar **operadores lógicos** para criar regras e condições dentro dos seus fluxos.

#### 🛠 Operadores Lógicos e Condicionais

| Operador                                            | Significado                                                                            | Exemplo                                                       |
| --------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| `??` (Nullish Coalescing - "Se nulo ou indefinido") | Se o primeiro valor for nulo ou indefinido, use o segundo                              | `{{$data?.componente1?.valor ?? $data?.componente2?.valor}}`  |
| \|\| (Logical OR - "Ou")                            | Se o primeiro valor for falso (`false`, `null`, `undefined`, `0`, `""`), usa o segundo | {{$data?.status \|\| "Pendente"}}                             |
| `:` (Operador ternário - "Se... então... senão")    | Funciona como um operador ternário (if/else)                                           | `{{$data?.idade > 18 ? "Maior de idade" : "Menor de idade"}}` |
| `&&` (Logical AND - "E")                            | Retorna o segundo valor se o primeiro for verdadeiro                                   | `{{$data?.temDesconto && "Desconto Aplicado"}}`               |

***

| Operador            | Significado                 | Exemplo            |
| ------------------- | --------------------------- | ------------------ |
| `+` (Adição)        | Soma dois valores.          | `{{5 + 3}}` → `8`  |
| `-` (Subtração)     | Subtrai dois valores.       | `{{10 - 4}}` → `6` |
| `*` (Multiplicação) | Multiplica dois valores.    | `{{3 * 4}}` → `12` |
| `/` (Divisão)       | Divide dois valores.        | `{{10 / 2}}` → `5` |
| `%` (Módulo)        | Retorna o resto da divisão. | `{{10 % 3}}` → `1` |

***

#### 🔍 **Operadores de Comparação**

| Operador                       | Significado                                                       | Exemplo                   |
| ------------------------------ | ----------------------------------------------------------------- | ------------------------- |
| `==` (Igualdade)               | Compara valores sem verificar o tipo.                             | `{{5 == "5"}}` → `true`   |
| `===` (Estritamente igual)     | Compara valores e o tipo de dado.                                 | `{{5 === "5"}}` → `false` |
| `!=` (Diferente)               | Compara se os valores são diferentes.                             | `{{5 != "5"}}` → `false`  |
| `!==` (Estritamente diferente) | Compara se os valores e os tipos são diferentes.                  | `{{5 !== "5"}}` → `true`  |
| `>` (Maior que)                | Retorna `true` se o primeiro valor for maior que o segundo.       | `{{10 > 5}}` → `true`     |
| `<` (Menor que)                | Retorna `true` se o primeiro valor for menor que o segundo.       | `{{3 < 7}}` → `true`      |
| `>=` (Maior ou igual)          | Retorna `true` se o primeiro valor for maior ou igual ao segundo. | `{{8 >= 8}}` → `true`     |
| `<=` (Menor ou igual)          | Retorna `true` se o primeiro valor for menor ou igual ao segundo. | `{{6 <= 5}}` → `false`    |

***

#### 🔄 **Operadores de String**

| Operador           | Significado         | Exemplo                                    |
| ------------------ | ------------------- | ------------------------------------------ |
| `+` (Concatenação) | Junta duas strings. | `{{"Olá, " + "mundo!"}}` → `"Olá, mundo!"` |

***

#### 🔀 **Operadores de Arrays**

| Operador      | Significado                                  | Exemplo                                    |
| ------------- | -------------------------------------------- | ------------------------------------------ |
| `.length`     | Retorna o tamanho de um array.               | `{{$data?.nomes.length}}`                  |
| `.includes()` | Verifica se um valor existe no array.        | `{{$data?.cidades.includes("São Paulo")}}` |
| `.map()`      | Itera sobre os elementos e modifica o array. | `{{$data?.numeros.map(n => n * 2)}}`       |
| `.filter()`   | Filtra elementos do array.                   | `{{$data?.numeros.filter(n => n > 5)}}`    |

### 🔍 **Como Usar Condições IF/ELSE**

Na Hablla, você pode criar **regras condicionais** dentro dos fluxos. Veja como funciona:

#### ✅ **Exemplo 1: Verificar se um cliente está qualificado**

```plaintext
{{$data?.lead?.score > 50 ? "Lead Qualificado" : "Lead Não Qualificado"}}
```

Se o score do lead for **maior que 50**, o resultado será `"Lead Qualificado"`, caso contrário, `"Lead Não Qualificado"`.

#### ✅ **Exemplo 2: Definir um status padrão**

```plaintext
{{$data?.pedido?.status ?? "Em processamento"}}
```

Se o status do pedido existir, ele será utilizado. Caso contrário, o status padrão `"Em processamento"` será aplicado.

#### ✅ **Exemplo 3: Combinar múltiplas condições**

```plaintext
{{$data?.usuario?.idade >= 18 ? "Maior de idade" : $data?.usuario?.idade > 0 ? "Menor de idade" : "Idade não informada"}}
```

🔹 Se a idade for maior ou igual a **18**, o resultado será `"Maior de idade"`.\
🔹 Se a idade for maior que **0**, mas menor que **18**, o resultado será `"Menor de idade"`.\
🔹 Se a idade não estiver informada, o resultado será `"Idade não informada"`.

***

### 🎯 **Como Utilizar Essas Expressões na Configuração de um Componente**

Sempre que estiver configurando um componente na Hablla, você pode usar essas expressões nos campos onde deseja inserir valores dinâmicos.

📌 **Exemplo prático:**\
Suponha que estamos criando um novo cartão no fluxo e queremos associar a ele uma pessoa identificada em um componente anterior. Podemos fazer isso assim:

```plaintext
{{$data?.whatsappReceptive_tmy0de?.person?.id ?? $data?.whatsappReceptive_r2b7wr?.person?.id}}
```

Isso garante que, se um componente não encontrar a pessoa, o outro será usado automaticamente.

***

### 🔥 **Resumo: Como Usar Variáveis e Expressões na Hablla**

✅ **Use `{{$data?.codigoDoComponente?.caminhoVariavel}}`** para acessar dados de componentes anteriores.\
✅ **Use `??` para definir um valor alternativo caso o primeiro seja nulo ou indefinido.**\
✅ **Use `||` para definir um valor alternativo caso o primeiro seja falso.**\
✅ **Use `:` para criar regras `if/else` dentro dos campos.**\
✅ **Use `&&` para definir um valor somente se a condição for verdadeira.**

🚀 **Com essas técnicas, você pode criar fluxos inteligentes e personalizados sem precisar programar!**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hablla.com/fluxos-de-automacoes/usando-variaveis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
