Saltar al contenido principal

Nodo: Script

El nodo Script ejecuta un código escrito por usted para calcular valores a partir de los datos de los nodos anteriores — respuestas de formularios, resultado de aprobaciones, salidas de otros scripts. Los resultados (texto, número, lista de correos o lista de objetos) pueden usarse en los nodos siguientes: en el texto de los correos, en condiciones, en los destinatarios y en otros campos de texto.

El nodo se ejecuta solo, sin esperar ninguna acción externa, y avanza en cuanto el código termina.


Cuándo usar​

Use el nodo Script cuando un valor que el proceso necesita no existe listo en ningún formulario. Ejemplos comunes:

  1. Cálculos — sumar ítems, aplicar un descuento, calcular un plazo o un valor total a partir de varias respuestas.
  2. Armar textos — componer un mensaje o un asunto de correo con partes de respuestas diferentes.
  3. Elegir destinatarios — devolver una lista de correos que depende de las respuestas (por ejemplo, el gerente de cada sucursal).
  4. Tablas en correos — devolver una lista de filas (ítem, cantidad, valor) para que aparezca como tabla en el cuerpo del correo.
  5. Decidir el camino — calcular un número o un texto para usar como condición en un nodo Si/Sino (If-Else).
Requiere saber programar

El código se escribe en TypeScript en un editor con autocompletado. Para reglas simples, como mostrar la respuesta de un campo, prefiera las variables normales del workflow: el nodo Script es para cuando hay que calcular.


Configuración​

Haga clic en el nodo en el canvas del editor de workflow. El panel lateral tiene tres pestañas, Inputs, Outputs y Probar, y el área Código justo debajo de ellas. Los atajos Alt+I, Alt+O y Alt+T cambian de pestaña; no funcionan mientras escribe en un campo o en el editor de código.

Inputs — lo que el script lee​

Cada input le da al script los datos de un nodo anterior del workflow. Haga clic en Agregar input y complete:

CampoDescripción
Nodo anteriorEl nodo de donde vienen los datos ("Seleccione un nodo anterior"). Solo aparecen los nodos que vienen antes del Script en el flujo.
Nombre de la variableEl nombre con el que el código accede a esos datos. Vea las reglas de nombres.

Lo que el script recibe depende del tipo del nodo elegido:

Nodo anteriorLo que el script recibe
Disparador de formulario, Solicitar Respuesta de Formulario y Solicitar SeguimientoLa respuesta del formulario, con un ítem por pregunta (número, texto, fecha, opciones elegidas, etc.) e información de la respuesta. El autocompletado del editor muestra los campos reales del formulario.
AprobaciónEl nombre del nodo, el resultado de la aprobación y el comentario de quien respondió. Antes de la respuesta, solo el nombre.
Disparador programadoEl nombre del nodo y el horario programado.
Disparador: Plan de Acción y Solicitar Plan de AcciónLos datos del plan de acción de ese nodo.
Otro nodo ScriptLos outputs que devolvió el otro script. Así un script usa el resultado de otro, incluidas las listas de objetos.
Otros nodos (Esperar, Enviar Correo, Crear PDF, etc.)El nombre del nodo y el horario en que el flujo llegó a él.
Los nodos de integración no sirven como input

Webhook, Slack, Teams, Google Sheets, Excel, Google Drive y OneDrive no pueden ser inputs, porque no producen datos para que el script los lea.

Los datos se leen en el momento de la ejecución

El formato de los datos refleja lo que el nodo anterior tiene en el momento en que el script se ejecuta. Si el formulario o el plan de acción cambian después, el dato recibido cambia con ellos.

Outputs — lo que el script devuelve​

Cada output es un valor que el script entrega a los nodos siguientes. Haga clic en Agregar output, elija el Tipo y póngale un nombre. Existen cuatro tipos:

TipoQué esDónde puede usarse
TextoUna frase o palabra. Una fecha devuelta como texto llega al destino como texto en formato ISO (por ejemplo, 2026-03-01T10:00:00.000Z).Textos en general (correos, estado, nombre de archivo) y condiciones.
NúmeroUn número válido. NaN e infinito son rechazados.Textos en general y condiciones.
Lista de correosUna lista de direcciones de correo.Destinatarios de los nodos de correo ("Agregar desde un nodo Script").
Lista de objetosUna tabla: cada ítem de la lista es una fila, y usted declara los atributos (columnas), cada uno de tipo Texto o Número.Solo en el cuerpo de un correo, como tabla, o como input de otro nodo Script.

Todo output declarado debe volver en el resultado del script, con el tipo declarado. Si falta uno, viene con un tipo diferente, o si una fila de una lista no tiene algún atributo, el nodo falla y el mensaje indica qué output o fila causó el problema. Lo que el script devuelva además de los outputs declarados se descarta.

Lista de objetos solo en el cuerpo del correo

La lista de objetos aparece como tabla en el cuerpo de los cinco nodos de correo: Aprobación, Enviar Correo, Solicitar Respuesta de Formulario, Solicitar Seguimiento y Solicitar Plan de Acción. No funciona en el asunto, en el estado, ni en Slack, Teams, webhook, planilla o Drive.

Código​

El código tiene una regla fija de estructura: la función calculateValue debe ser lo primero del código, con la firma de abajo. Las funciones y constantes auxiliares van después de ella, nunca antes.

function calculateValue({ pedido, aprobacion }: Context): Result {
const total = calcularTotal(pedido);
return { total, resumen: `Total: ${total}` };
}

function calcularTotal(pedido: Context['pedido']): number {
// las funciones auxiliares van después de calculateValue
return 0;
}
  • Entre las llaves de la firma, liste los nombres de los inputs que el script usa (pedido, aprobacion).
  • La función devuelve un objeto, con una clave para cada output declarado.
  • try/catch, throw y Error están permitidos: úselos para tratar situaciones esperadas y devolver un valor por defecto.
  • Palabras bloqueadas, que impiden guardar el código: async, await, import, importScripts, eval, then, prototype, __proto__, setTimeout, setInterval, constructor, fetch y XMLHttpRequest. El script no accede a internet, archivos ni temporizadores.
  • El código puede tener hasta 100.000 caracteres.
  • Un error de sintaxis se señala con la línea del problema, y el workflow no puede publicarse mientras el código no compile.
El código se compila en el guardado automático

El código se compila cuando se guarda el borrador, lo que ocurre solo cada 30 segundos o al cerrar el panel del nodo. Si aparece el aviso "Código aún no compilado", espere el guardado automático; si el aviso continúa, corrija los errores de sintaxis.


Reglas de nombres​

NombreReglaPor qué
Input (nombre de la variable) y OutputSolo letras sin tilde, números y _; empieza con una letra; hasta 60 caracteres; no puede ser una palabra reservada de JavaScript (como class o return) ni una de las palabras bloqueadas del código (como then).El nombre se convierte en una variable del código y en una clave usada en los textos ({{script...}}). Una tilde, un guion o un espacio romperían ambas cosas.
Atributo de una lista de objetosLibre (puede tener espacio en el medio y tildes), excepto los caracteres , " & < > }, y sin espacio al inicio ni al final.Esos caracteres perjudican la lista de columnas de la tabla del correo (,), el texto HTML (& < > ") y el cierre de la variable (}). Tampoco se aceptan nombres iguales en la misma lista.

Dos inputs, o dos outputs, no pueden tener el mismo nombre.


Usando los resultados en los nodos siguientes​

Los outputs aparecen en el grupo Script del selector de variables de los campos de texto, y en otros dos lugares:

  • Textos — en el asunto y el cuerpo de los nodos de correo, en el estado del nodo Definir Estado y en el nombre del archivo y el contenido de Crear PDF. El valor entra en el texto en lugar de la variable.
  • Condiciones — en una regla de tipo Script (nodo, output, operador y valor). Sirven los outputs de tipo Texto o Número. En la flecha que sale del propio Script, la regla también puede usar los outputs de ese mismo Script. Si el output cambia de tipo o se elimina después, la regla muestra "El output cambió de tipo o fue eliminado. Revise el output, el operador y el valor de esta regla."
  • Destinatarios — en los nodos de correo, Agregar desde un nodo Script usa un output de tipo Correos. Las direcciones repetidas o inválidas se ignoran, y lo descartado queda registrado en el historial.

Enlace y tabla en el cuerpo del correo​

  • Un texto en el formato [etiqueta](url), en un output de tipo Texto, se convierte en un enlace clicable en el cuerpo del correo (solo direcciones http y https). En el asunto y en los demás campos, el texto aparece tal como fue escrito.
  • Una lista de objetos se convierte en una tabla en el cuerpo del correo, con una columna por atributo. El selector de variables siempre incluye la lista de columnas, en el orden en que usted las seleccione. Una lista vacía muestra solo el encabezado.
El texto escrito por el usuario es seguro

Los textos provenientes de respuestas de formularios, al entrar en el correo por un script, no ejecutan código ni formato indebido: el contenido se muestra como texto.


Probar el script​

La pestaña Probar, junto a Inputs y Outputs, ejecuta el script sin disparar el workflow. Solo aparece para quien puede editar el workflow:

  1. Haga clic en Cargar contexto de ejemplo. El campo Contexto se completa con un ejemplo para cada input, en el formato real del nodo elegido, usando los formularios que están en la pantalla.
  2. Ajuste los valores del ejemplo al caso que quiere simular. Si agrega o cambia el nombre de un input después, las claves que faltan se agregan al contexto al ejecutar, sin perder lo que ya editó.
  3. Haga clic en Ejecutar. El Resultado aparece al lado, o el mensaje del error, si lo hay.

Puntos de atención:

  • La prueba usa el código que está en la pantalla, sin necesidad de guardar el borrador antes. Los errores de sintaxis, de firma o las palabras bloqueadas aparecen en el Resultado.
  • La prueba y la ejecución real tienen el mismo límite de 10 segundos por ejecución, y 64 MB de memoria. Superar el tiempo muestra "El script superó el límite de 10 segundos".
  • El servidor acepta 2 pruebas al mismo tiempo. Si hay más, aparece "Hay demasiadas pruebas en curso. Espere unos segundos e inténtelo de nuevo": basta intentarlo otra vez. Las pruebas nunca retrasan los scripts de los workflows en ejecución, que tienen sus propios cupos.
  • Si el Contexto no es un JSON válido, aparece "El contexto indicado no es un JSON válido."
  • El Contexto puede tener hasta 256 KB. Por encima de eso aparece "El contexto de la prueba supera el límite de 256 KB", y la prueba ni siquiera empieza.

Cuando el script falla​

Si el script supera los 10 segundos o los 64 MB, lanza un error no tratado, devuelve un output con tipo incorrecto, o devuelve un resultado mayor que 256 KB, el nodo falla. Con eso:

  • La instancia queda con estado Fallido, y el responsable del workflow recibe un correo avisando, con el enlace para ver los eventos.
  • El error aparece en el historial de la instancia, con la causa (por ejemplo, qué output o fila estaba incorrecto).
  • Los datos de entrada del script no se envían a herramientas de monitoreo de errores ni se registran en el log del servidor, porque pueden contener respuestas de formularios.
Trate lo esperado

Use try/catch para casos previsibles (campo vacío, división por cero) y devuelva un valor por defecto. Así la instancia sigue adelante en lugar de fallar.


Cuando el nodo anterior no se ejecutó​

El workflow solo garantiza que existe un camino del nodo anterior hasta el Script, no que el nodo ya se ejecutó. Esto ocurre, por ejemplo, cuando el Script lee un nodo del otro lado de un Si/Sino (If-Else), o cuando una aprobación todavía no fue respondida.

En esos casos el dato llega vacío (el input llega como un objeto sin datos, el texto aparece en blanco), y el nodo que leyó el dato muestra en el historial de la instancia el aviso "Datos vacíos de nodos que no se ejecutaron antes", con el nombre de cada nodo. El workflow no falla por eso: trate el caso vacío en el código.

Esto es distinto de una falla al leer el formulario o la respuesta (por ejemplo, una indisponibilidad momentánea de la base de datos): en ese caso el script no se ejecuta con datos vacíos. La instancia queda con estado Fallido, el responsable del workflow recibe el correo de aviso, y el error aparece en el historial como falla del script.


Buenas Prácticas​

  • Dé nombres que expliquen el valor: total_pedido y correos_gerentes ayudan más que x y lista.
  • Declare solo los inputs que usa: el script recibe solo lo que usted configuró, y eso deja el autocompletado más limpio.
  • Pruebe antes de publicar: use Cargar contexto de ejemplo, ajuste los valores con casos extremos (campo vacío, lista vacía) y ejecute.
  • Mantenga el script corto: cada script debe calcular un conjunto de valores. Para etapas diferentes, encadene dos nodos Script.
  • Combine con el nodo Definir Estado: un estado antes del Script ayuda a saber, en el panel de instancias, en qué etapa está la instancia.