Ejecutar
Errores y reintentos
En un run pueden ir mal dos cosas distintas: un paso informa de un problema, o el propio motor falla. Se tratan de forma diferente, y la diferencia es lo más importante de esta página.
| Qué ha ido mal | Qué hace el motor |
|---|---|
Un paso fallaHTTP 404 o 500, un valor del tipo incorrecto, un valor ausente, un permiso denegado | La ejecución termina como `failed` de inmediato. El paso fallido se muestra con su error.Sin reintento automático. Arregla la causa y pulsa «Reintentar». Dentro de un paso Intentar, el run continúa después del Intentar. |
El motor se rompeun error inesperado, un fallo puntual de la base de datos | La ejecución espera 30 segundos, luego 60 segundos, y lo intenta de nuevo, hasta tres intentos en total.Solo se repite el trabajo fallido; los pasos terminados se reproducen desde el diario. |
La definición no se puede ejecutarversión no válida, un límite superado, un paso que esta compilación no conoce | La ejecución termina como `failed` sin reintento: el intento siguiente fallaría igual.Reintentar a mano reproduce el mismo error. |
Un worker muere a mitad de ejecución | Cuando vence el lease (300 segundos), el tick del minuto siguiente retoma la ejecución. Retomarla cuesta un intento.Tras tres intentos termina como failed. |
Un paso falla: la ejecución falla
Enlace a esta sección: Un paso falla: la ejecución fallaCuando un paso informa de un error, como un HTTP 404, un permiso denegado, un valor del tipo equivocado, un valor ausente o un límite que el paso supera, el run termina como fallido al instante. No hay reintento del paso ni opción en el paso para continuar. La única forma de seguir tras un fallo es poner el paso dentro de un «Intentar» ; consulta Seguir adelante tras un fallo.
- Un paso fallido no se cobra.
- El motor no reintenta ante un 500 de tu servidor ni ante un timeout. Corrige la causa y pulsa Reintentar en la ejecución.
- El error se guarda en el paso, así que el visor de ejecuciones muestra exactamente qué paso se detuvo y por qué.
Seguir adelante tras un fallo: el paso Intentar
Enlace a esta sección: Seguir adelante tras un fallo: el paso IntentarEl «Intentar» ("Si un paso falla, continúa") no tiene campos y tiene un cuerpo, como un bucle. Ejecuta los pasos de dentro. Si uno de ellos falla, los pasos que le siguen dentro del cuerpo se omiten y el run continúa con el paso que sigue al Intentar, en lugar de terminar como fallido.
Qué publica
Enlace a esta sección: Qué publicaUn Intentar publica solo su resultado, como «Resultado del intento». Las variables que crearon los pasos de dentro no salen: tras un fallo, algunas pueden no existir.
| Campo | Tipo | Valor |
|---|---|---|
«Ha fallado» (failed) | Verdadero o falso | Falso si todos los pasos de dentro se completaron, verdadero si uno falló. |
«Mensaje de error» (errorMessage) | Texto | El mensaje del paso que falló. Vacío cuando nada falló, así que siempre puedes compararlo como texto. |
Qué captura
Enlace a esta sección: Qué captura- Captura los fallos de los pasos: una respuesta HTTP que no es 2xx, el error que devuelve una acción, un valor no válido y un crédito agotado. Un bucle que supera sus vueltas también es un fallo de paso.
- No captura lo que no es un fallo de paso. Una avería del motor (se reintenta como se describe en la sección siguiente), un error fatal (listado después) y un Salto lo atraviesan, y también una espera: una espera dentro de un Intentar aparca el run como siempre.
- Pasos Intentar anidados: el más interno captura el fallo.
- El propio paso Intentar no gasta crédito ni ocupa posición en el run. Los pasos de dentro cuentan como siempre; un paso que falló no se cobra.
- En «Desarrollo a medida», el mensaje de un fallo dentro de un Intentar es el genérico.
El patrón: Intentar y luego una condición sobre failed
Enlace a esta sección: El patrón: Intentar y luego una condición sobre failedEnvuelve los pasos que pueden fallar
Añade un «Intentar» y suelta dentro los pasos que pueden fallar, como una petición HTTP a un sistema que a veces está caído.
Comprueba el resultado
Después del Intentar, añade una «Condición» en «Resultado del intento» «Ha fallado» (es igual a verdadero).
Indica qué hacer
En la rama del fallo, avisa a alguien, crea una tarea o toma otro camino, usando el mensaje de error en el texto. En la otra rama, sigue adelante.
- Si no compruebas el resultado, el fallo es silencioso: el run continúa y nadie se entera. Pon la comprobación después del Intentar.
- Un run en el que se capturó cada fallo termina como completado, y no se envía ningún aviso de fallo.
- En el visor de runs, el paso que falló dentro del Intentar aparece marcado como error capturado (rojo atenuado, discontinuo). El propio panel del Intentar muestra el mensaje, o "Sin errores".
- Cuando un run se reanuda tras una espera, un fallo capturado se repite en el mismo punto a partir del registro: el paso que falló no se vuelve a ejecutar.
Pulsar Reintentar en un run fallido nunca vuelve a ejecutar un fallo capturado: solo se vuelven a ejecutar los fallos que terminaron el run.
El motor se rompe: reintenta
Enlace a esta sección: El motor se rompe: reintentaSi el propio motor lanza un error (una excepción inesperada, un problema de base de datos), la ejecución no se marca como fallida de inmediato. Espera y lo vuelve a intentar, tres intentos en total:
| Intento | Si falla | Esperar antes del siguiente |
|---|---|---|
| 1st | Estado «En espera» | 30 segundos |
| 2nd | Estado «En espera» | 60 segundos |
| 3rd | Estado «Fallido» | Ninguno: es definitivo |
- Las esperas son mínimos: la ejecución la despierta el siguiente tick de un minuto, así que cada una puede durar hasta aproximadamente un minuto más.
- Solo se repite el trabajo fallido. Los pasos completados se reproducen desde el registro y no cuestan nada.
- Un paso de espera no es un intento fallido y no gasta uno. Un workflow con tres esperas no se queda sin intentos.
- Un worker que muere a mitad de ejecución se detecta cuando caduca su lease de cinco minutos. El relevo cuenta como un intento. Si la ejecución ya estaba en el tercero, termina como fallida con "the run died 3 times without completing; it is not retried again".
Errores que el motor nunca reintenta
Enlace a esta sección: Errores que el motor nunca reintentaAlgunos errores fallarían igual cada vez y solo repetirían de paso los efectos de un paso, así que terminan la ejecución como fallida de inmediato:
| Código | Mensaje (traducido) | Causa |
|---|---|---|
invalid_definition | La versión congelada no es una definición válida | Una versión publicada antes de que la validación fuese más estricta, o una que el motor no puede leer. |
unknown_action, unknown_step_type | La definición usa una acción o un paso que esta versión no conoce | El workflow lo guardó una versión del motor más nueva o más antigua. |
jump_target_not_found | El salto apunta a un paso que no está en el ámbito | Un paso «Saltar a un paso anterior» cuyo destino ya no existe. |
task_budget_exceeded | La ejecución superó el presupuesto de 1000 pasos | Demasiados pasos en un run, normalmente por un bucle. |
replay_too_large | El registro de la ejecución tiene más de 1000 pasos; no se puede reanudar | Un run que creció demasiado para reanudarse tras una espera. |
feeder_collection_too_large | La iteración resolvió más de 500 elementos | Un paso Iterar sobre una colección demasiado grande. No se procesa nada. |
El límite del bucle es un fallo de paso, no un error del motor: termina el run como fallido (salvo que el bucle esté dentro de un Intentar) con "el bucle superó las N vueltas permitidas", y Reintentar lo reproduce.
Leer un error
Enlace a esta sección: Leer un error- En la tarjeta de la ejecución, una ejecución fallida muestra el mensaje de error en rojo. El código de error no aparece ahí. Si no hay mensaje, la tarjeta dice "Algo ha fallado durante la ejecución".
- Haz clic en el paso fallido. Su panel se abre en el «Error» pestaña con, cuando existen: «Estado HTTP» (para HTTP), «Respuesta» (el cuerpo), «Campos» (qué campo y por qué), «Detalles» y «Código».
- Un paso que ha fallado porque un impuesto no está asignado en un paquete de contabilidad muestra un botón, «Asignar el impuesto en {{provider}}», que abre el mapa. Después de guardarlo, la app ofrece reintentar las ejecuciones que quedaron bloqueadas.
- Los mensajes que escribe el motor están en español sea cual sea el idioma de la app. Los mensajes de esta documentación son traducciones.
Los códigos de error de los pasos de capacidad
Enlace a esta sección: Los códigos de error de los pasos de capacidad| Código | Significado |
|---|---|
forbidden | El creador del workflow no tiene el permiso, o la acción está bloqueada por un plan, un add-on, un proveedor que no está conectado o los créditos de IA. El mensaje nombra la acción. |
invalid_input | Las entradas no cumplen lo que exige la acción, con una línea por cada campo que falla. |
not_found | La acción no existe, o no existe el registro sobre el que trabaja. |
execution_error | Falló la propia acción; el mensaje es el que produjo. |
Reintentar a mano
Enlace a esta sección: Reintentar a manoPulsar «Reintentar» en una ejecución fallida. Usa la misma ejecución, reinicia sus intentos a cero, elimina solo los registros fallidos y empieza de nuevo: los pasos completados se reproducen y el paso fallido se ejecuta en vivo. Ejecuta la versión con la que empezó la ejecución, así que editar el workflow no la cambia. No comprueba tu crédito antes de ponerla en cola; si no hay, la ejecución se pausa en el paso que lo necesita. No hay forma de aportar una entrada distinta.
Repeticiones y efectos secundarios de los pasos
Enlace a esta sección: Repeticiones y efectos secundarios de los pasosUn run no repite los pasos ya terminados. Pero si un worker muere después de que ocurriera el efecto de un paso y antes de que Filmo registrara que el paso terminó (una ventana muy breve), el paso se ejecuta de nuevo. Filmo reduce esa ventana en tres capas y no afirma cerrarla:
| Capa | Protege contra |
|---|---|
| La clave de la ejecución | Dos runs por un mismo hecho: la misma entrega de webhook, el mismo evento, la misma ocurrencia de la programación. |
| El registro de la ejecución | Rehacer trabajo ya hecho dentro de una ejecución. |
| Una clave por paso | Hacer un efecto dos veces entre intentos. Las peticiones HTTP que no son GET la llevan como Idempotency-Key; el email enviado desde Filmo y los eventos de calendario pasan una clave al proveedor. Otras escrituras, incluidos los envíos desde el buzón y los envíos a paquetes de contabilidad, las protege Filmo durante 24 horas y, en contabilidad, el enlace entre el documento de Filmo y el del paquete. Anular en Xero usa una clave propia por enlace. |
Al menos una vez
Considera los efectos de un paso como al menos una vez, no exactamente una. Haz que el extremo receptor ignore una repetición cuando importe, usando la cabecera Idempotency-Key que envía el paso HTTP.
A quién se avisa cuando falla una ejecución
Enlace a esta sección: A quién se avisa cuando falla una ejecuciónEn los ajustes del workflow, «Avisar si falla» ofrece «Notificación interna y email» (el valor por defecto), «Solo notificación interna», «Solo email» y «No notificar».
- Las personas avisadas son el creador del workflow, si todavía tiene acceso a la empresa; si no, todos los administradores (propietarios y administradores; el rol de soporte de Filmo nunca recibe el aviso). Nunca la persona que pulsó el botón.
- Se envía un aviso interno en cada fallo, con el nombre del workflow y el principio del error (cortado a 200 caracteres), enlazando a la ejecución.
- Se envía como máximo un email por hora y por workflow, sea cual sea el fallo que llegue primero. El email nombra el workflow y enlaza a la ejecución; no incluye el motivo. La hora se gasta aunque el email falle al enviarse.
- Una pausa, una cancelación y un intento fallido que se va a reintentar no envían nada. El aviso se envía cuando el run ha terminado como fallido. Un run cuyos fallos capturó todos un Intentar termina como completado y no envía ninguno.
- Como el email se limita a uno por hora, una ráfaga de fallos produce un email y muchos avisos internos.
Combina un workflow que no debe fallar en silencio con la notificación interna, que no tiene límite de frecuencia, y con un vistazo rápido a la ejecución.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasEjecutar
Runs
Un run es una ejecución de un workflow. Cada run guarda lo que hizo, paso a paso, para que puedas ver dónde se detuvo y por qué.
Ejecutar
Límites y créditos
El motor aplica cada uno de los límites siguientes. La última columna dice qué ocurre cuando lo alcanzas, porque esa suele ser la pregunta.
Ejecutar
Resolución de problemas
Empieza por lo que ves: el workflow no se ejecutó, una ejecución falló o una ejecución no avanza. Cada sección enumera las causas probables en el orden en que conviene comprobarlas.
¿Te ha resultado útil esta página?