Saltar al contenido principal
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

TipoTamaño máximoTTLTTL máximo
String255 caracteresOpcional
Number15 dígitosOpcional
BooleanOpcional
JSON15 KBRequerido86,400s (1 día)
File10 MBRequerido604,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

  1. Crea un nuevo nodo Código (Memory V2).
  2. Copia y pega el script del nodo legacy.
  3. 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')

Input/Output (input,input, output)

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íaTipos
Textotext/plain
JSON/XMLapplication/json, application/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