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

# Memory vs Context

> Aprende a manejar el estado de la conversación combinando Memory y Context según cada caso.

Elegir entre `$memory` y `$context` depende de una pregunta simple: **¿necesitas este dato después de que termine la conversación?**

## Usa \$context cuándo

Usa `$context` cuando el dato solo es necesario durante la conversación actual.

**Casos de uso:**

* **Consultar disponibilidad de productos:** El usuario pregunta por un producto, consultas tu inventario y guardas el stock disponible en `$context.stock` para mostrarlo y validar la cantidad que quiere comprar en los siguientes nodos
* **Validar código de descuento:** El usuario ingresa un cupón, lo validas con tu API y guardas el porcentaje en `$context.descuento` para aplicarlo al calcular el total
* **Autenticación temporal:** Obtienes un token de tu API y lo guardas en `$context.token` para usarlo en las siguientes llamadas del mismo flujo
* **Cálculos intermedios:** El usuario selecciona productos, vas sumando el subtotal en `$context.subtotal` para mostrarlo antes de confirmar la compra

**Ejemplo:**

```txt theme={null}
1. Usuario pregunta: "¿Tienen la camisa azul en talla M?"
2. Nodo API → Consulta inventario y guarda en $context.stock = 5
3. Nodo Mensaje → "Tenemos {{$context.stock}} unidades disponibles"
4. Usuario compra → Validas que la cantidad no exceda $context.stock
```

## Usa \$memory cuándo

Usa `$memory` cuando el dato debe persistir entre conversaciones. Puedes configurar el tiempo de vida (TTL) de cada variable.

**Casos de uso:**

* Recordar el nombre del usuario para saludarlo personalmente
* Guardar la última dirección de envío para ofrecerla por defecto
* Almacenar preferencias que mejoran la experiencia en futuras interacciones
* Recordar que el usuario completó un paso de verificación

**Ejemplo:**

```txt theme={null}
Conversación 1: Usuario dice "Mi nombre es María"
→ Guardas en $memory.nombre = "María"

Conversación 2 (mismo día):
→ Usas {{$memory.nombre}} para saludar: "Hola María"
```

<Note>
  Para detalles sobre tipos de datos, TTL, archivos y métodos disponibles, consulta la [guía completa de Memory](/guides/variables/memory).
</Note>

## Criterios de decisión rápida

<Steps>
  <Step title="¿Necesitas el dato en futuras conversaciones?">
    **No** → Usa `$context`

    **Sí** → Usa `$memory`
  </Step>
</Steps>

## Resumen

| Aspecto       | \$context                             | \$memory                                                                                                                                      |
| ------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Duración**  | Solo durante la conversación          | Hasta 30 días de inactividad del usuario (se renueva con cada escritura). TTL opcional por variable: hasta 1 día (JSON) o 1 semana (archivos) |
| **Tipos**     | Cualquier valor JavaScript            | Primitivos, JSON (15KB), Archivos (10MB)                                                                                                      |
| **Uso**       | Datos temporales de la conversación   | Mejorar experiencia entre conversaciones                                                                                                      |
| **Seguridad** | Ideal para datos sensibles temporales | No usar para datos sensibles                                                                                                                  |

## ¿Y si necesito guardar datos por más tiempo o compartidos entre usuarios?

`$memory` no es una base de datos: es una memoria de trabajo por usuario con vigencia limitada (30 días de inactividad, TTL máximo por variable de 1 día en JSON o 1 semana en archivos). Si tu caso pide **persistencia real, datos compartidos entre usuarios, consultas por campos o historial auditable**, usa [Datum](/guides/nodos/datum) en su lugar.

**Señales de que `$memory` no es la herramienta correcta:**

* Necesitas conservar los datos por más de 30 días, incluso si el usuario deja de escribir.
* Los datos son de negocio (pedidos, facturas, catálogos), no del turno del usuario.
* Varios usuarios o workflows del mismo proyecto tienen que leer el mismo registro.
* Necesitas filtrar, buscar por campo o auditar cambios.

| Aspecto          | \$memory                                       | Datum                                                       |
| ---------------- | ---------------------------------------------- | ----------------------------------------------------------- |
| **Alcance**      | Por usuario                                    | Global — compartido entre workflows y usuarios del proyecto |
| **Persistencia** | Hasta 30 días de inactividad; TTL por variable | Permanente hasta que lo borres                              |
| **Consultas**    | Solo por `key` exacta                          | Filtros por campo, búsqueda, paginación                     |
| **Ideal para**   | Estado de conversación, preferencias           | Pedidos, catálogos, registros históricos                    |

<Tip>
  Regla práctica: si el dato sigue teniendo valor cuando el usuario deja de hablarte por un mes, no vive en `$memory`. Vive en Datum.
</Tip>
