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 skills, 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 skills:
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 |