Ejecutar JavaScript
Usa esta acción cuando un paso necesite lógica personalizada que CEL no puede expresar — reformatear datos, calcular valores o llamar a una API con código.
Mejor para
- Transformar JSON de pasos anteriores exactamente a la forma que un paso posterior necesita
- Cálculos, parsing y validaciones más allá de lo que pueden hacer las expresiones CEL
- Pequeñas integraciones usando
fetchcuando la acción Solicitud HTTP no es lo bastante flexible
Campos principales
| Campo | Qué hace |
|---|---|
| Código JavaScript | El código a ejecutar. Se envuelve en una IIFE asíncrona, así que puedes usar await en el nivel superior y terminar con return <valor> para producir el resultado del paso |
| Datos de entrada | Expresión CEL opcional evaluada antes de la ejecución. El resultado está disponible dentro del código en la variable input |
| Propósito | Etiqueta opcional de lo que hace el código, mostrada en los logs |
| Tiempo límite (ms) | Límite de tiempo de ejecución en milisegundos. Por defecto es 5000 y está limitado a 30000 — el código que lo supera (incluidos los bucles infinitos) se termina |
| Límite de memoria (MB) | Límite de memoria del sandbox. Por defecto es 128 MB, entre 8 y 256 |
El código se ejecuta en un sandbox V8 aislado en un servicio de ejecución separado. No hay acceso a APIs de Node.js (require, process, sistema de archivos) — solo los recursos estándar de JavaScript más tres puentes:
input— el valor evaluado de Datos de entradaconsole.log/info/warn/error— capturados y devueltos en la salidalogs(hasta 200 entradas de 2.000 caracteres cada una)fetch(url, options)— HTTP con protección SSRF (las direcciones privadas e internas están bloqueadas) que devuelve{ok, status, statusText, body}, conbodyinterpretado como JSON cuando es posible y devuelto como texto en caso contrario
Qué pueden usar los pasos posteriores
step(N).data— el valor que devolviste conreturnstep(N).logs— la salida de consola capturadastep(N).executionTimeMs— cuánto tiempo se ejecutó el código
Consejos
- Siempre usa
return— el valor de retorno se copia fuera del sandbox, así que mantenlo compatible con JSON. - Usa
console.logmientras construyes el paso; la salidalogses la forma más fácil de depurar. - Si el código lanza una excepción, el paso falla con
code_execution_failed; superar el tiempo límite falla concode_execution_timeout. - Cada llamada a
fetchtambién está limitada por el tiempo del paso, así que mantén las llamadas a terceros bien dentro del presupuesto de tiempo.