Construir
Datos y expresiones
No escribes fórmulas en un workflow. Eliges valores de listas, y Filmo guarda lo que elegiste como una expresión estructurada. Esta página explica qué ofrece el selector y cómo se comportan los valores al ejecutarse.
Hacer referencia a un valor
Enlace a esta sección: Hacer referencia a un valorEn cualquier campo que acepte un valor, «Insertar variable» abre un selector con las variables disponibles en ese paso. Una variable pertenece a un grupo:
| Grupo | Variable | Procede de |
|---|---|---|
| «Sistema» | system_today | El motor, en cada ejecución: la fecha en que la ejecución se puso en cola. |
| Trigger | trigger_… | El trigger. Consulta la página de triggers para ver las variables de cada uno. |
| El nombre o la descripción del paso | variables_<step id> | Cada paso que publica un valor. La clave es el id del paso, no un nombre que hayas escrito. |
| Variables | variables_<step id> | Los pasos «Definir variable», agrupados. El nombre que les das es solo una etiqueta. |
| Local | $<name>, $value, $this, $first, $second | Solo dentro de una función que recorre una lista: el nombre que das en map, filter, find, every y some; $value y $this en reduce; $first y $second en sort. |
- Profundizas en las estructuras: Pedido > Email del contacto. El selector muestra la ruta como migas de pan.
- El selector solo ofrece variables cuyo tipo encaja con el campo. Una variable del tipo Desconocido no encaja con ningún campo tipado.
- Un paso ve las variables del sistema, el trigger, los pasos anteriores al mismo nivel y los pasos de los niveles superiores.
- Como la clave es el id del paso, renombrar un paso Definir variable no rompe nada, y eliminar un paso rompe todas las referencias a él. Una referencia rota se pinta en rojo en el editor y bloquea poner el workflow en Live. El servidor no comprueba las referencias al guardar.
- El editor no ofrece los valores creados dentro de una rama o de un bucle una vez terminan, aunque sí existen en tiempo de ejecución si esa rama se ejecutó. Calcula el valor antes del paso compuesto si lo necesitas después.
- A «Intentar» publica solo su resultado, como «Resultado del intento»: «Ha fallado» (verdadero o falso) y «Mensaje de error» (texto, vacío cuando nada falló). Lo que crearon los pasos de dentro nunca sale, porque tras un fallo parte de ello puede no existir. Consulta el paso Intentar.
Tipos de valor
Enlace a esta sección: Tipos de valor| Tipo | Ejemplo | Notas |
|---|---|---|
| Texto | "El pedido {Order > number} está listo" | Texto plano con variables insertadas como chips. Es la forma normal de construir un texto. |
| Número | 42 | Solo números enteros donde se pide un recuento de días o de vueltas. |
| True/false | true | Estricto: solo true o false, nunca "yes" ni 1. |
| Fecha | 2026-10-15, o un instante | Una fecha sin hora, o un instante con zona. Los editores guardan los instantes en UTC. |
| Lista, Objeto | Construido a partir de otros valores. | |
| Variable | Pedido > email del contacto | Un puntero a un valor. |
| «Función» | Sumar días | Solo dentro de un paso Definir variable. |
Un valor tiene un tipo. El editor conoce el tipo de cada variable que ofrece. Los tipos los declaras tú en cinco sitios: el cuerpo de un webhook, la respuesta de una petición HTTP, los datos de una señal, y el formulario de un trigger manual y el de un trigger "desde otro workflow". La referencia de tipos lista los once tipos con sus operadores (texto, number, true/false, fecha, enumeración, registro, estructura, lista, tupla, archivo y desconocido). Qué hace cada uno cuando la ejecución comprueba datos con él:
- Un número es un número JSON: el texto "42" no lo es. Verdadero/falso es estricto.
- Una fecha es un día o un instante. Debes indicar cuál al declararla; en la ejecución se aceptan ambos, y una fecha declarada es por defecto un instante.
- Una enumeración guarda el valor de la opción, no su etiqueta.
- Una estructura tiene campos con nombre y todos los campos declarados son obligatorios; los campos de más se ignoran. En una lista se comprueba cada elemento; en una tupla, solo las posiciones declaradas.
- Un texto puede decir que es el id de un tipo de registro; eso solo ayuda al selector.
- Un archivo lo produce un paso y no se puede escribir a mano.
- Desconocido acepta cualquier cosa, también un valor ausente o nulo, y una variable de ese tipo no encaja en ningún campo tipado del selector.
Sin campos opcionales
No hay tipo opcional ni anulable. Un campo que declaras es obligatorio, y un valor null o ausente no pasa la comprobación ("expected a text and received a null"). Declara un campo como Desconocido para aceptar cualquier cosa, incluido null.
Cuando los datos no coinciden con su tipo declarado, el paso (o el trigger) falla con la ruta de los primeros campos que no coinciden, por ejemplo customer.. Un cuerpo de webhook se valida después de que Filmo haya respondido; consulta la página sobre webhooks entrantes.
Funciones
Enlace a esta sección: FuncionesLas funciones están disponibles en el «Definir variable» paso. Elige «Función» como tipo de valor, elige la función y rellena sus argumentos, que pueden ser funciones a su vez. Usa después el resultado como variable. Los datos de un paso Lanzar una señal también aceptan funciones.
Las funciones se dividen en ocho grupos: aritméticas, booleanas, de comparación, de texto, de fecha, de listas, condicionales y de objetos. referencia de funciones lista cada una con sus argumentos y dónde se puede usar.
Tres ejemplos de las comprobaciones del propio motor:
| Función | Resultado |
|---|---|
Sumar días(2026-08-24, 7) | 2026-08-31; con un instante, conserva la hora |
Days between(2026-08-24, 2026-08-31) | 7; al revés, -7 |
Format date(2026-08-24, dd) | 24 |
- Format date usa letras de date-fns, como
dd(no/MM /yyyy DD, que se rechaza); los nombres de mes y de día que escribe están siempre en español, sea cual sea el idioma de la app./MM /YYYY - Empieza por, Termina por y Contiene distinguen mayúsculas de minúsculas y solo aceptan texto. Un texto vacío para buscar siempre coincide.
- La aritmética usa números de coma flotante normales, con sus artefactos de redondeo habituales. No hay tipo de moneda ni función de formato de números. Para totales de dinero exactos usa el paso Agregar valores, que suma con exactitud.
- No hay una función de valor por defecto ("coalesce"). Puedes construir una con Condición (si, entonces, si no).
Valores vacíos
Enlace a esta sección: Valores vacíosEl comportamiento de un valor vacío o ausente depende de dónde se use. Estas reglas explican la mayoría de los fallos que verás.
| Dónde | Un valor que no existe | Un valor que es null |
|---|---|---|
| Dentro de un texto | Todo el texto queda vacío y el paso falla con "the field has no value". No hay texto parcial. | Se imprime como una cadena vacía. |
| Como campo completo (obligatorio) | El paso falla, "the field has no value". | El paso falla. |
| Como campo completo (opcional) | Se omite, sin decir nada. | Se omite, sin decir nada. |
| Cero, false y el texto vacío | Son valores reales: 0 se imprime como "0" y false como "false". | |
| En una condición | Consulta la página de condiciones: igual es falso, distinto es verdadero, el resto falla. | |
| Definir variable | El paso falla: una variable no puede contener "nada". | Lo mismo. |
| Un paso que no se ha ejecutado | Sus variables no existen. Una rama que no se tomó no deja nada, y no hay marca de "omitido". |
No es lo mismo
Una referencia cuya ruta pasa por un padre null cuenta como "no existe" (falla todo el texto), mientras que un campo que existe y es null cuenta como "vacío" (se imprime en blanco). Si un valor puede faltar, pruébalo antes con una condición.
Fechas y zonas horarias
Enlace a esta sección: Fechas y zonas horariassystem_todayes una fecha sin hora, en la zona horaria de la empresa. Las fechas del trigger, comotrigger_createdAtytrigger_scheduledAt, son instantes en UTC. Compara elementos del mismo tipo.- Sumar días, Días entre y Formatear fecha mantienen la precisión de lo que les das: una fecha da una fecha, un instante da un instante. Una fecha con un día imposible, o un instante sin zona, no produce ningún valor.
- Las operaciones sobre instantes pueden usar la zona horaria del servidor en lugar de la de la empresa. Prefiere las fechas sin hora, que son exactas, cuando importe el día.
- Cambia la zona horaria de la empresa en «Fecha y formatos» («Zona horaria de la empresa») en los ajustes del negocio.
Comprobaciones al guardar
Enlace a esta sección: Comprobaciones al guardar- Guardar comprueba solo la forma del workflow: que cada campo contenga un tipo de valor que acepta y que la definición no tenga más de 100 niveles de profundidad. Una comprobación fallida es un 422 que nombra la ruta y los tres primeros problemas.
- Los campos obligatorios en blanco se permiten en un borrador. Impiden poner el workflow en Live.
- En el servidor no se comprueba si existe una variable, si los argumentos de una función tienen sentido ni si un valor tiene valor al ejecutarse.
No hay barra de fórmulas ni mención con "@": en un campo de texto escribes texto e insertas variables con el selector, nada más.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasConstruir
Condiciones y operadores
Una condición compara una variable con un valor. El paso Condición lleva el run por uno de dos caminos; el paso Switch elige el primero de varios.
Construir
Pasos
Los pasos se ejecutan en orden, uno tras otro. Cada uno puede leer lo que produjeron el trigger y los pasos anteriores, y cada uno puede publicar un valor para los pasos siguientes.
Construir
Peticiones HTTP
El paso HTTP llama a una URL desde una ejecución: para enviar un cambio a tu propio sistema, o para leer de uno. Es deliberadamente simple, y esa simplicidad tiene consecuencias que conviene conocer antes de construir sobre él.
¿Te ha resultado útil esta página?