# Entrada y Salida

En Hablla, **toda entrada y salida de un componente se realiza en formato JSON**. Esto significa que cada acción dentro del flujo de automatización recibe información (entrada), procesa esos datos y devuelve un resultado (salida). Vamos a entender mejor cómo funciona esto y cómo puedes utilizar esta información en tu día a día.

***

### 🏗 **Flujo de Datos en Hablla**

1️⃣ **Entrada** → El componente recibe un conjunto de datos en JSON, provenientes de otras etapas del flujo.\
2️⃣ **Procesamiento** → El componente manipula los datos y realiza solicitudes internas o externas.\
3️⃣ **Salida** → El componente devuelve un JSON con la información procesada, incluyendo estado, detalles de la solicitud y resultados obtenidos.

📌 **Ejemplo real en Hablla:**\
Imagina que un componente recibe datos de un contacto de WhatsApp y necesita crear una tarjeta de atención en el sistema.

***

### 📥 **Entrada de Datos**

La entrada contiene toda la información disponible para el componente. Esa información proviene de componentes anteriores en el flujo.

**Ejemplo de entrada (JSON):**

```json
{
  "whatsapp": {
    "name": "Marcus Barboza",
    "phone_number": "5517997275046"
  },
  "person": {
    "name": "Marcus Barboza",
    "customer_status": "lead",
    "id": "675c7667dc2708736e804575"
  },
  "service": {
    "type": "whatsapp",
    "status": "in_bot",
    "id": "67c7503f15788872a1f61328"
  },
  "content": {
    "body": "Hablla, buenas tardes!"
  }
}
```

Los datos en Hablla se generan a partir de interacciones del usuario, capturados de sistemas externos o añadidos por componentes anteriores en el flujo de automatización. Las automatizaciones en Hablla pueden iniciarse por eventos disparados desde **componentes receptivos** como **WhatsApp, Instagram, Messenger, Telegram, Email, Teléfono**, además de integraciones vía **Webhooks, CRON** y **Trigger**.

Esos eventos (trigger) pueden activarse por diferentes tipos de acciones dentro de la plataforma, como:\
✅ **Interacciones con Personas** → Leads, clientes o usuarios realizando acciones en el sistema.\
✅ **Organizaciones** → Actualizaciones en empresas registradas.\
✅ **Tarjetas** → Movimientos dentro de tableros y pipelines.\
✅ **Bot y Chat** → Mensajes enviados o recibidos por IA u operadores humanos.\
✅ **Llamadas Telefónicas y Correos** → Registros y actualizaciones de comunicaciones.\
✅ **Campos Personalizados (Custom Fields)** → Cambios en datos específicos dentro del CRM.\
✅ **Eventos de Sesión** → Inicio de sesión, cierre de sesión, sesión expirada, estado en línea/desconectado.\
✅ **Servicios y Transferencias** → Asignaciones de atenciones y movimientos entre sectores.\
✅ **Etiquetas y Usuarios** → Acciones relacionadas con segmentación y permisos de usuarios.\
✅ **Tareas y Diccionario de Datos** → Actualizaciones en tareas o información estructurada.\
✅ **Conversiones y Cambios de Estado** → Cambios en etapas del embudo de ventas y atención.

Siempre que uno de estos eventos se activa en Hablla, dispara un **trigger** que recibe los datos del evento y ejecuta acciones configuradas, como: **Crear, Actualizar, Eliminar, Fusionar**, entre otras. 🚀

***

### ⚙ **Procesamiento de Datos**

Entre la **entrada** y la **salida**, el componente manipula los datos recibidos. Puede:\
✅ **Consultar una base de datos** → Buscar información de clientes, pedidos, etc.\
✅ **Realizar una llamada a una API externa** → Como integrar un ERP u otro sistema con API abierta.\
✅ **Aplicar reglas de automatización** → Crear, actualizar o eliminar registros en Hablla según las reglas del flujo.

***

### 📤 **Salida de Datos**

La salida contiene el resultado de la operación del componente. Siempre sigue el mismo formato e incluye:

1️⃣ **value** → Resultado de la operación (ejemplo: éxito o error).\
2️⃣ **headers** → Encabezados de la solicitud (útil para depuración y seguridad).\
3️⃣ **config** → Configuración de la solicitud, como URL y tiempo de respuesta.\
4️⃣ **request** → Ruta de la llamada realizada por el componente.\
5️⃣ **data** → El resultado final de la operación.

**Ejemplo de salida (JSON):**

```json
{
  "status": "fulfilled",
  "value": {
    "status": 200,
    "statusText": "OK",
    "headers": {
      "content-type": "application/json; charset=utf-8",
      "date": "Tue, 04 Mar 2025 19:10:56 GMT"
    },
    "config": {
      "method": "GET",
      "url": "https://api.hablla.com/v3/workspaces/643d802021b6aa9234eb9797/cards"
    },
    "request": {
      "method": "GET",
      "path": "/v3/workspaces/643d802021b6aa9234eb9797/cards?person=675c7667dc2708736e804575"
    },
    "data": {
      "results": [],
      "count": 0,
      "totalItems": 0
    }
  }
}
```

🔹 **¿Qué significan estos datos?**\
✅ **status**: Indica si la operación fue exitosa (`fulfilled`) o si hubo un error.\
✅ **value.status**: El código de respuesta HTTP (`200` significa éxito, `400` error de solicitud, etc.).\
✅ **config.url**: La URL utilizada en la solicitud.\
✅ **request.path**: La ruta exacta de la API llamada.\
✅ **data**: El resultado de la solicitud (en este caso, no encontró ninguna tarjeta para esa persona).

***

### 🛠 **Cómo Usar Estos Datos en el Flujo**

💡 Puedes acceder a cualquier valor de la **entrada** o de la **salida** del componente dentro del flujo usando la sintaxis:

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

📌 Hay ejemplos en [**Usando variables**](https://docs.hablla.com/hablla-docs-es/flujos-de-automatizaciones/usando-variables)

***

### 🚀 **Conclusión**

🔹 **La entrada** contiene los datos disponibles antes de que el componente se ejecute.\
🔹 **El componente** procesa esos datos, realiza solicitudes y aplica reglas de automatización.\
🔹 **La salida** muestra el resultado de la operación, permitiendo que el flujo continúe automáticamente.

💡 **Consejo:** Siempre analiza la **entrada** y la **salida** para entender cómo los datos están fluyendo dentro de la automatización. ¡Esto facilita identificar errores y configurar tus reglas correctamente! 🚀
