Skip to main content

Introducción

Memory te permite guardar variables que persisten entre conversaciones, skills y nodos. A diferencia de Context (que solo está disponible durante la conversación actual), Memory mantiene los datos disponibles para futuras interacciones con el usuario.

Características principales

CaracterísticaDescripción
TTL configurableDefine el tiempo de vida de cada variable en segundos
Múltiples tiposSoporta primitivos, JSON y archivos
Almacenamiento de archivosGuarda imágenes, videos, audios y documentos hasta 10MB
Métodos específicosAPI diferenciada para cada tipo de dato

Tipos de datos

TipoTamaño máximoTTLTTL máximo
String255 caracteresOpcional-
Number15 dígitosOpcional-
Boolean-Opcional-
JSON5KBRequerido86.400s (1 día)
File10MBRequerido604.800s (1 semana)
TTL (Time To Live): Tiempo de vida en segundos. Transcurrido el TTL, la variable se elimina automáticamente. Por ejemplo, 3600 = 1 hora, 86400 = 1 día.

Guardar variables

Usando el nodo Variable

Para guardar variables sin código, usa el nodo Variable dentro de la sección Lógica. En Variable coloca el nombre y en Valor lo que quieres guardar; puede ser texto plano, otra variable o un dato del contexto.
Variable: nombre
Valor: {{$user.names}}
El nodo Variable es ideal para guardar primitivos (string, number, boolean) de forma rápida y visual.

Usando nodos de código

Para mayor control sobre TTL y tipos de datos complejos, usa los métodos de $memory en nodos de código:
// Primitivos (string, number, boolean) - TTL opcional
$memory.set('nombre', 'Juan')
$memory.set('intentos', 3)
$memory.set('verificado', true)

// Primitivo con TTL (expira en 1 hora)
$memory.set('codigoTemporal', 'ABC123', 3600)

// JSON - TTL requerido (máximo 1 día)
$memory.setJson('preferencias', {
  idioma: 'es',
  notificaciones: true
}, 86400)

// Archivo - async, TTL requerido, MIME requerido (máximo 1 semana)
await $memory.setFile('comprobante', base64String, 604800, 'application/pdf')

Leer variables

En cualquier nodo

Dentro de cualquier nodo puedes acceder a Memory con la sintaxis {{$memory.nombreVariable}}. Por ejemplo, si las variables en memoria son:
{
  "nombre": "Juan",
  "ultimoPedido": { "id": "PED-123", "estado": "en camino" }
}
Entonces:
  • {{$memory.nombre}} muestra Juan
  • {{$memory.ultimoPedido.estado}} muestra en camino

En nodos de código

Usa los métodos específicos según el tipo de dato:
// Primitivos
const nombre = $memory.get('nombre')
const nombre = $memory.get('nombre', 'Invitado') // con valor por defecto

// JSON
const prefs = $memory.getJson('preferencias')
const prefs = $memory.getJson('preferencias', {}) // con valor por defecto

// Archivos - devuelve FileHandle
const archivo = $memory.getFile('comprobante')

Trabajar con archivos

Al guardar un archivo en Memory, debes proporcionar el contenido en base64, el TTL y el tipo MIME:
// Guardar un archivo
await $memory.setFile('documento', base64Content, 604800, 'application/pdf')
Al leer un archivo con $memory.getFile() obtienes un FileHandle con tres métodos para acceder al contenido:
MétodoDescripciónAsync
.toUrl()URL temporal para descargar (S3)No
.toBase64()Contenido en string base-64
.toRaw()Contenido parseado (JSON si aplica, string de lo contrario)
// Obtener URL temporal
const url = $memory.getFile('comprobante').toUrl()

// Obtener contenido en base64
const base64 = await $memory.getFile('comprobante').toBase64()

// Obtener contenido del archivo
const contenido = await $memory.getFile('comprobante').toRaw()

Tipos MIME permitidos

CategoríaTipos MIME
Textotext/plain
JSONapplication/json
XMLapplication/xml, text/xml
Imágenesimage/jpeg, image/png, image/gif
Videosvideo/mp4, video/ogg, video/webm, video/x-msvideo, video/mpeg
Audiosaudio/mpeg, audio/wav, audio/ogg, audio/aac, audio/flac
Documentosapplication/pdf
Los métodos $memory.setFile(), $memory.getFile().toBase64() y $memory.getFile().toRaw() son asincrónicos. Debes usar await al llamarlos.

Eliminar variables

Puedes eliminar variables antes de que expire su TTL:
// Eliminar una variable
$memory.delete('temporal')

// Eliminar múltiples variables
$memory.delete(['cache', 'sesion', 'temporal'])

Seguridad

No almacenes datos sensibles en Memory:
  • Contraseñas o números de tarjeta de crédito
  • Tokens de autenticación de larga duración
  • Información de identificación personal (PII) altamente sensible
Para persistencia a largo plazo, usa Datum.