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.
El nodo Código te permite ejecutar JavaScript personalizado dentro de tu flujo. Es útil para operaciones que no se pueden lograr con los nodos estándar: transformar datos, hacer cálculos, manipular textos o integrar lógica de negocio personalizada.
Acceso a variables
Dentro del nodo Código puedes leer y escribir variables del flujo usando objetos globales predefinidos.
Contexto ($context)
Variables que persisten solo durante la ejecución actual del flujo:
// Leer
const nombre = $context.get('nombre')
const nombre = $context.get('nombre', 'Juan') // con valor por defecto
// Escribir
$context.set('ultimoPedido.estado', 'entregado')
$context.set('usuario', { nombre: 'Juan', plan: 'gold' })
Memoria ($memory)
Variables que persisten entre workflows, tools y nodos. Soportan tiempo de vida (TTL):
// Primitivos (string, number, boolean) - TTL opcional
$memory.set('nombre', 'Juan')
$memory.set('intentos', 3, 3600) // expira en 1 hora
// JSON - TTL requerido (en segundos, máximo 86,400 = 1 día)
$memory.setJson('usuario', { nombre: 'Juan', plan: 'gold' }, 86400)
// Archivos - async, TTL requerido (máximo 604,800 = 1 semana)
await $memory.setFile('comprobante', base64String, 604800, 'application/pdf')
Lectura
const nombre = $memory.get('nombre')
const usuario = $memory.getJson('usuario')
const url = $memory.getFile('comprobante').toUrl() // URL temporal
const base64 = await $memory.getFile('comprobante').toBase64()
Eliminación
$memory.delete('temporal')
$memory.delete(['tmp1', 'tmp2', 'cache']) // múltiples claves
Límites por tipo de dato
| Tipo | Tamaño máximo | TTL | TTL máximo |
|---|
| String | 255 caracteres | Opcional | — |
| Number | 15 dígitos | Opcional | — |
| Boolean | — | Opcional | — |
| JSON | 15 KB | Requerido | 86,400s (1 día) |
| File | 10 MB | Requerido | 604,800s (1 semana) |
Los métodos $memory.setFile(), $memory.getFile().toBase64() y $memory.getFile().toRaw() son asincrónicos. Debes usar await al llamarlos.
Migración desde nodos legacy
- Crea un nuevo nodo Código (Memory V2).
- Copia y pega el script del nodo legacy.
- Usa los nuevos métodos disponibles (
$memory.setJson, $memory.setFile, etc.) si lo necesitas.
Usuario ($user)
Información del contacto que interactúa con tu flujo:
const userId = $user.get('id')
const userName = $user.get('names')
Mensaje ($message)
El último mensaje que envió el usuario:
const texto = $message.get('text')
const tipo = $message.get('type') // TEXT, IMAGE, AUDIO, VIDEO, LOCATION, FILE
const urlAdjunto = $message.get('mediaUrl')
const lat = $message.get('lat')
const lng = $message.get('lng')
Para comunicación entre tools y workflows:
const ciudad = $input.get('ciudad', 'Quito') // con valor por defecto
$output.set('data', resultado)
Respuestas HTTP
Si guardaste la respuesta de un nodo API:
let apiResponse = $context.getHttpResponse('apiResponse')
apiResponse = apiResponse.json()
$memory.set('nombre', apiResponse.data.usuario.nombre)
La llave en $context.getHttpResponse() debe coincidir exactamente con la que configuraste en el campo “Guardar respuesta” del nodo API.
Utilidades disponibles
Logger
Registra valores para depuración en formato clave-valor. Los logs aparecen en el historial de ejecuciones:
// Primitivos se almacenan tal cual
$utils.logger.log('userId', 1245)
$utils.logger.log('estado', 'activo')
// Objetos y arrays se convierten a string (truncado a 2,000 caracteres)
$utils.logger.log('orderData', { id: 1, nombre: 'cristian' })
Cada nodo permite un máximo de 5 registros. El valor de cada registro tiene un límite de 2,000 caracteres.
Crypto
Funciones criptográficas estándar:
$utils.crypto.createHash('sha256')
$utils.crypto.createHmac('sha256', key)
$utils.crypto.randomBytes(32)
Lodash
Utilidades para manipular arrays, objetos y strings:
$utils._.get(objeto, 'ruta.anidada', valorPorDefecto)
$utils._.uniq(array)
$utils._.chunk(array, tamano)
$utils._.merge(objeto1, objeto2)
Tipos MIME permitidos para $memory.setFile():| Categoría | Tipos |
|---|
| Texto | text/plain |
| JSON/XML | application/json, application/xml, text/xml |
| Imágenes | image/jpeg, image/png, image/gif |
| Videos | video/mp4, video/ogg, video/webm, video/x-msvideo, video/mpeg |
| Audios | audio/mpeg, audio/wav, audio/ogg, audio/aac, audio/flac |
| Documentos | application/pdf |