# 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="https://1879311494-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrmxWrIrMauHcIrsuqfGq%2Fuploads%2FWpztEh7gCvaKUGA9aENC%2Fimage.png?alt=media&#x26;token=f7845359-1265-4bad-91a6-7b747e789e21" 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!**
