Buenas prácticas de Sub Workflow
Un Sub Workflow ejecuta otro workflow como un paso dentro del flujo actual. Bien usado, convierte flujos gigantes e imposibles de mantener en piezas pequeñas, reutilizables y fáciles de probar. Mal usado, esconde lógica y crea dependencias difíciles de seguir. Esta guía te ayuda a decidir cuándo conviene y cómo hacerlo bien.
Cuándo usarlo
Sección titulada «Cuándo usarlo»- Reutilizar lógica: una misma secuencia (facturar, notificar, calcular impuestos) que se repite en varios flujos. La escribes una vez y la llamas desde donde haga falta.
- Dividir un flujo grande: cuando un workflow tiene decenas de nodos, extraé bloques con sentido propio (“Onboarding”, “Cobro”, “Envío”) a sub-workflows. El flujo principal queda legible.
- Procesar en lote: con el modo
parallel, un array de entrada lanza una instancia por elemento (p. ej. procesar 50 pedidos en paralelo). - Separar por responsabilidad o equipo: cada sub-workflow puede tener su propio dueño, su historial y sus versiones.
- Orquestar procesos largos: con el modo
asynclanzás un sub-proceso y seguís sin esperarlo (fire & forget).
Cuándo NO usarlo
Sección titulada «Cuándo NO usarlo»- Para un solo nodo o dos: si el “sub-proceso” son dos pasos, ponelos en el mismo flujo. Un Sub Workflow añade una capa de indirección que no compensa.
- Si necesitás el resultado inmediato y el hijo es lento: en
syncel padre espera. Para tareas largas que no bloqueen, usáasynco la cola. - Como sustituto de un bucle simple: para recorrer un array a menudo alcanza con Iterator; reservá
parallelpara cuando cada elemento dispara un flujo real. - Cuando crearías un ciclo: si A llama a B y B termina llamando a A, tenés recursión infinita. El editor te avisa (ver más abajo), pero el diseño hay que corregirlo.
Elegir el modo de ejecución
Sección titulada «Elegir el modo de ejecución»| Modo | Qué hace | Cuándo usarlo |
|---|---|---|
| sync | El padre espera el resultado del hijo antes de continuar. | Necesitás el dato de salida del sub-workflow en el paso siguiente. |
| async | Lanza el hijo y continúa sin esperar (fire & forget). | Tareas que no bloquean: enviar un email, registrar un evento, avisar a un sistema. |
| parallel | Si el input es un array, lanza una instancia por elemento (máx. 5 simultáneas por defecto). | Procesamiento en lote donde cada elemento es un flujo completo. |
Pasar datos y estado
Sección titulada «Pasar datos y estado»input_data: lo que le mandás al hijo como entrada. Acepta JSON o variables dinámicas ({{...}}). Si lo dejás vacío, el hijo recibe eldatade entrada del nodo.pass_state(por defecto activado): hereda elworkflowStatedel padre para compartir contexto entre flujos. Desactivalo si querés que el hijo arranque “limpio”, sin heredar el estado del padre.
Recomendación: pasá al hijo solo lo que necesita, no todo el estado. Un contrato de entrada explícito (un input_data con los campos justos) hace que el sub-workflow sea reutilizable y fácil de probar por separado.
Demo: dividir un onboarding en sub-workflows
Sección titulada «Demo: dividir un onboarding en sub-workflows»Un alta de cliente que hace de todo (facturar, cobrar, avisar a contabilidad, dar la bienvenida) es un candidato perfecto para sub-workflows.
-
Creá los sub-workflows hoja primero: “Enviar bienvenida” y “Notificar contabilidad”. Son flujos normales, sin nada especial.
-
Encadená los intermedios: “Cobrar” llama (Sub Workflow) a “Notificar contabilidad”; “Facturar cliente” llama a “Cobrar”.
-
Armá el flujo principal “Onboarding cliente”: desde el Start, un Sub Workflow a “Facturar cliente” (
sync, porque el alta depende de que se facture) y otro a “Enviar bienvenida” (async, no hace falta esperarlo). -
Verificá el árbol desde el listado de workflows: cada padre muestra un chevron que despliega los sub-workflows que invoca, sin abrir el editor.

Resultado: “Onboarding cliente” → Facturar cliente → Cobrar → Notificar contabilidad, más Enviar bienvenida en paralelo. Cada pieza se prueba, versiona y reutiliza por separado.
Evitá la recursión
Sección titulada «Evitá la recursión»El error más común con sub-workflows es cerrar un ciclo: A llama a B, B a C, y C vuelve a llamar a A. Eso produce ejecuciones infinitas.
Al elegir el workflow hijo, el editor detecta el ciclo —directo o indirecto— y muestra el camino completo. Si ves ese aviso rojo, cambiá el diseño (normalmente el último eslabón no debería volver al primero).

Gestionarlo desde el editor
Sección titulada «Gestionarlo desde el editor»- El nodo en el lienzo muestra el workflow hijo, el modo y un enlace ↗ para abrirlo en una pestaña nueva: no hace falta memorizar a qué apunta cada Sub Workflow.
- El listado muestra el árbol de dependencias con el chevron, así detectás de un vistazo qué flujos dependen de cuáles.

Checklist
Sección titulada «Checklist»- El sub-workflow tiene una responsabilidad clara (un “verbo”: facturar, cobrar, notificar).
- Elegiste el modo correcto:
syncsi necesitás el resultado,asyncsi no,parallelpara lotes. - Pasás en
input_datasolo lo necesario, no todo el estado. - Ajustaste el
timeout_mssi el hijo puede tardar (ensync). - No hay ciclos: el panel no muestra aviso de recursión.
- Nombraste los flujos de forma que el árbol del listado se entienda solo.
Nodos relacionados
Sección titulada «Nodos relacionados»- SubWorkflow (referencia) - parámetros, salidas y notas del nodo
- Iterator - recorrer arrays sin lanzar un flujo completo por elemento
- Decision - elegir qué sub-workflow ejecutar