# Usando variables

En Hablla, al configurar un flujo de automatización, puedes utilizar **variables** para recuperar datos de componentes anteriores y expresiones **lógicas y condicionales** para hacer tus automatizaciones más dinámicas e inteligentes.

Esto permite que la información se reutilice automáticamente, sin necesidad de completarla manualmente, haciendo el proceso más eficiente y sin errores.

### 🎯 **¿Qué son las Variables en Hablla?**

Cada componente dentro de un flujo tiene un **código único** y puede generar **datos de salida** que pueden ser usados por otros componentes en el mismo flujo.

<figure><img src="/files/d91b9e3669f6d4fe629ccca913cfd4da372e6e99" alt=""><figcaption></figcaption></figure>

Puedes acceder a esos datos usando la siguiente sintaxis:

```plaintext
{{$data?.codigoDelComponente?.rutaVariable}}
```

➡ **Ejemplo real:**\
Si un componente llamado `whatsappReceptive_tmy0de` identificó a una persona, y su ID está almacenado dentro del campo `person.id`, podemos acceder a ese valor así:

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

Si ese componente no devuelve un valor válido, podemos intentar con un segundo componente llamado `whatsappReceptive_r2b7wr`:

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

📌 Aquí, `??` significa: **si el primer valor es nulo o indefinido, usa el segundo.**

***

### 🔥 **Operadores y Expresiones en Hablla**

Además de acceder a variables, puedes usar **operadores lógicos** para crear reglas y condiciones dentro de tus flujos.

#### 🛠 Operadores Lógicos y Condicionales

| Operador                                           | Significado                                                                           | Ejemplo                                                      |
| -------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `??` (Nullish Coalescing - "Si nulo o indefinido") | Si el primer valor es nulo o indefinido, usa el segundo                               | `{{$data?.componente1?.valor ?? $data?.componente2?.valor}}` |
| \|\| (Logical OR - "O")                            | Si el primer valor es falso (`false`, `null`, `undefined`, `0`, `""`), usa el segundo | {{$data?.status \|\| "Pendiente"}}                           |
| `:` (Operador ternario - "Si... entonces... sino") | Funciona como un operador ternario (if/else)                                          | `{{$data?.idade > 18 ? "Mayor de edad" : "Menor de edad"}}`  |
| `&&` (Logical AND - "Y")                           | Devuelve el segundo valor si el primero es verdadero                                  | `{{$data?.temDesconto && "Descuento Aplicado"}}`             |

***

| Operador             | Significado                       | Ejemplo            |
| -------------------- | --------------------------------- | ------------------ |
| `+` (Adición)        | Suma dos valores.                 | `{{5 + 3}}` → `8`  |
| `-` (Sustracción)    | Resta dos valores.                | `{{10 - 4}}` → `6` |
| `*` (Multiplicación) | Multiplica dos valores.           | `{{3 * 4}}` → `12` |
| `/` (División)       | Divide dos valores.               | `{{10 / 2}}` → `5` |
| `%` (Módulo)         | Devuelve el resto de la división. | `{{10 % 3}}` → `1` |

***

#### 🔍 **Operadores de Comparación**

| Operador                        | Significado                                                         | Ejemplo                   |
| ------------------------------- | ------------------------------------------------------------------- | ------------------------- |
| `==` (Igualdad)                 | Compara valores sin verificar el tipo.                              | `{{5 == "5"}}` → `true`   |
| `===` (Estrictamente igual)     | Compara valores y el tipo de dato.                                  | `{{5 === "5"}}` → `false` |
| `!=` (Diferente)                | Comprueba si los valores son diferentes.                            | `{{5 != "5"}}` → `false`  |
| `!==` (Estrictamente diferente) | Comprueba si los valores y los tipos son diferentes.                | `{{5 !== "5"}}` → `true`  |
| `>` (Mayor que)                 | Devuelve `true` si el primer valor es mayor que el segundo.         | `{{10 > 5}}` → `true`     |
| `<` (Menor que)                 | Devuelve `true` si el primer valor es menor que el segundo.         | `{{3 < 7}}` → `true`      |
| `>=` (Mayor o igual)            | Devuelve `true` si el primer valor es mayor o igual que el segundo. | `{{8 >= 8}}` → `true`     |
| `<=` (Menor o igual)            | Devuelve `true` si el primer valor es menor o igual que el segundo. | `{{6 <= 5}}` → `false`    |

***

#### 🔄 **Operadores de Cadena**

| Operador            | Significado      | Ejemplo                                       |
| ------------------- | ---------------- | --------------------------------------------- |
| `+` (Concatenación) | Une dos strings. | `{{"Hola, " + "mundo!"}}` → `"¡Hola, mundo!"` |

***

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

| Operador      | Significado                                    | Ejemplo                                     |
| ------------- | ---------------------------------------------- | ------------------------------------------- |
| `.length`     | Devuelve el tamaño de un array.                | `{{$data?.nombres.length}}`                 |
| `.includes()` | Verifica si un valor existe en el array.       | `{{$data?.ciudades.includes("São Paulo")}}` |
| `.map()`      | Itera sobre los elementos y modifica el array. | `{{$data?.numeros.map(n => n * 2)}}`        |
| `.filter()`   | Filtra elementos del array.                    | `{{$data?.numeros.filter(n => n > 5)}}`     |

### 🔍 **Cómo Usar Condiciones IF/ELSE**

En Hablla, puedes crear **reglas condicionales** dentro de los flujos. Mira cómo funciona:

#### ✅ **Ejemplo 1: Verificar si un cliente está calificado**

```plaintext
{{$data?.lead?.score > 50 ? "Lead Calificado" : "Lead No Calificado"}}
```

Si el score del lead es **mayor que 50**, el resultado será `"Lead Calificado"`, de lo contrario, `"Lead No Calificado"`.

#### ✅ **Ejemplo 2: Definir un estado por defecto**

```plaintext
{{$data?.pedido?.status ?? "En proceso"}}
```

Si el estado del pedido existe, se utilizará. De lo contrario, el estado por defecto `"En proceso"` será aplicado.

#### ✅ **Ejemplo 3: Combinar múltiples condiciones**

```plaintext
{{$data?.usuario?.idade >= 18 ? "Mayor de edad" : $data?.usuario?.idade > 0 ? "Menor de edad" : "Edad no informada"}}
```

🔹 Si la edad es mayor o igual a **18**, el resultado será `"Mayor de edad"`.\
🔹 Si la edad es mayor que **0**, pero menor que **18**, el resultado será `"Menor de edad"`.\
🔹 Si la edad no está informada, el resultado será `"Edad no informada"`.

***

### 🎯 **Cómo Utilizar Estas Expresiones en la Configuración de un Componente**

Siempre que estés configurando un componente en Hablla, puedes usar estas expresiones en los campos donde deseas insertar valores dinámicos.

📌 **Ejemplo práctico:**\
Supongamos que estamos creando una nueva tarjeta en el flujo y queremos asociarle una persona identificada en un componente anterior. Podemos hacerlo así:

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

Esto garantiza que, si un componente no encuentra a la persona, se usará automáticamente el otro.

***

### 🔥 **Resumen: Cómo Usar Variables y Expresiones en Hablla**

✅ **Use `{{$data?.codigoDelComponente?.rutaVariable}}`** para acceder a datos de componentes anteriores.\
✅ **Use `??` para definir un valor alternativo en caso de que el primero sea nulo o indefinido.**\
✅ **Use `||` para definir un valor alternativo en caso de que el primero sea falso.**\
✅ **Use `:` para crear reglas `if/else` dentro de los campos.**\
✅ **Use `&&` para definir un valor solo si la condición es verdadera.**

🚀 **Con estas técnicas, puedes crear flujos inteligentes y personalizados sin necesidad de 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/hablla-docs-es/flujos-de-automatizaciones/usando-variables.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.
