Tareas automáticas
¿Cuántos pasos puede tener una tarea?
Botize tiene una limitación de solo 10 pasos en cada tarea para evitar malas prácticas en el diseño de automatizaciones, como la excesiva complejidad. Esta limitación está hecha para obligar a dividir un problema complejo en automatizaciones más sencillas. De esta manera, el mantenimiento de una automatización es más sencillo, hay menos tolerancia a fallos y es más fácil también determinar anomalías si se producen.
Sin embargo, esta limitación no impide crear tareas grandes de muchos pasos. Puedes, desde dentro de una tarea, llamar a otras y así terminar creando automatizaciones mayores. En lugar de crear una tarea con 100 pasos, se pueden crear 10 tareas de 10 pasos cada una, lo cual hace que sea más fácil entender y depurar el proceso. Esto ayuda a mantener la automatización limpia y organizada, lo que facilita el mantenimiento y la resolución de problemas.
Más información: Simplificar y reutilizar tareas.
Sin embargo, esta limitación no impide crear tareas grandes de muchos pasos. Puedes, desde dentro de una tarea, llamar a otras y así terminar creando automatizaciones mayores. En lugar de crear una tarea con 100 pasos, se pueden crear 10 tareas de 10 pasos cada una, lo cual hace que sea más fácil entender y depurar el proceso. Esto ayuda a mantener la automatización limpia y organizada, lo que facilita el mantenimiento y la resolución de problemas.
Más información: Simplificar y reutilizar tareas.
¿Puedo crear tareas donde se ejecuten unos pasos u otros dependiendo de distintas circustancias?
Sí, a través de las reglas. En cada paso de una tarea puedes definir reglas para que se ejecuten o no dependiendo de ciertas circunstancias.
Aquí encontrarás varios ejemplos explicados paso a paso: REGLAS: Qué hacer y cuándo.
Aquí encontrarás varios ejemplos explicados paso a paso: REGLAS: Qué hacer y cuándo.
¿Qué es Mustache y cómo usarlo en Botize?
Botize admite el uso de plantillas Mustache en los textos, lo que te permite crear contenido dinámico basado en las etiquetas de los pasos anteriores de una tarea.
Puedes insertar el valor de una etiqueta simplemente escribiendo su nombre entre llaves. Por ejemplo:
Controlar la lógica condicional:
Mustache permite jugar con bloques condicionales para mostrar texto u otros valores en función de si una etiqueta existe o tiene un valor. Por ejemplo:
Este bloque imprimirá "Ver imagen:" junto con su correspondiente URL solo si la etiqueta image_url tiene un valor.
Este bloque imprimirá "No hay imagen disponible." si la etiqueta image_url no existe o está vacía.
Creación de contenido condicional avanzado:
Usando combinaciones de etiquetas y bloques, puedes generar texto más complejo adaptado a las circunstancias de cada tarea.
¿Qué puedes hacer con Mustache?
Referenciar etiquetas de pasos anteriores:Puedes insertar el valor de una etiqueta simplemente escribiendo su nombre entre llaves. Por ejemplo:
{{image_url}}Mostrará el valor almacenado en la etiqueta image_url.Controlar la lógica condicional:
Mustache permite jugar con bloques condicionales para mostrar texto u otros valores en función de si una etiqueta existe o tiene un valor. Por ejemplo:
{{#image_url}}Ver imagen: {{.}}{{/image_url}}Este bloque imprimirá "Ver imagen:
{{^image_url}}No hay imagen disponible.{{/image_url}}Este bloque imprimirá "No hay imagen disponible." si la etiqueta image_url no existe o está vacía.
Creación de contenido condicional avanzado:
Usando combinaciones de etiquetas y bloques, puedes generar texto más complejo adaptado a las circunstancias de cada tarea.
¿Qué sucede al eliminar una tarea en Botize? ¿Puedo recuperar una automatización eliminada?
Cuando eliminas una tarea en Botize, esta se borra de forma permanente. Aunque no es posible recuperar tareas eliminadas, siempre puedes hacer un backup de todas tus automatizaciones en cualquier momento desde el tu área de usuario.
¿Puedo compartir o copiar tareas entre distintas cuentas de Botize?
Sí, en la sección Cuenta tienes el botón "Exportar" que te permite exportar todas tus tareas de Botize, y el botón "Importar" que permite importarlas. De esta manera puedes exportar tus tareas tanto para mantener una copia de seguridad como para importarlas en otra cuenta distinta de Botize.
¿Qué pasa si un paso de mi tarea falla? ¿Puede la tarea continuar y reaccionar al error?
Por defecto, si un paso falla la tarea se detiene ahí: los pasos siguientes no llegan a ejecutarse.
Si prefieres que continúe, abre ese paso en el editor y busca el apartado Comportamiento. Ahí tienes dos casillas:
Combinando eso con las reglas puedes montar dos caminos en la misma tarea: un paso que solo se ejecute si error_message no está vacío (el camino del fallo) y otro que solo se ejecute si está vacío (el camino normal). Así una tarea puede intentar algo y, si no sale, probar otra cosa o avisarte, en lugar de pararse en silencio.
Ten en cuenta que la casilla no distingue un error de otro: hace continuar la tarea ante cualquier fallo de ese paso. Si solo quieres reaccionar a un error concreto, comprueba su texto en la regla del paso siguiente.
Si prefieres que continúe, abre ese paso en el editor y busca el apartado Comportamiento. Ahí tienes dos casillas:
- Continuar incluso si este paso genera un error: el paso falla, pero la tarea sigue adelante.
- Continuar incluso si este paso no devuelve resultados: el paso no encuentra nada, pero la tarea sigue adelante.
Combinando eso con las reglas puedes montar dos caminos en la misma tarea: un paso que solo se ejecute si error_message no está vacío (el camino del fallo) y otro que solo se ejecute si está vacío (el camino normal). Así una tarea puede intentar algo y, si no sale, probar otra cosa o avisarte, en lugar de pararse en silencio.
Ten en cuenta que la casilla no distingue un error de otro: hace continuar la tarea ante cualquier fallo de ese paso. Si solo quieres reaccionar a un error concreto, comprueba su texto en la regla del paso siguiente.
¿Qué diferencia hay entre pausar, reiniciar y activar una tarea?
Una tarea solo tiene dos estados: activa o pausada. Las acciones están en tu lista de tareas, cada una con sus botones.
- Pausar: la tarea deja de atender su disparador, pero conserva todo su estado interno (por dónde iba, contadores, datos temporales).
- Activar: vuelve a atender su disparador y continúa donde se quedó.
- Reiniciar: la deja como recién creada — borra punteros, contadores y datos temporales. No borra la tarea, solo su memoria de ejecución. Es lo que hay que usar cuando una tarea "se ha quedado enganchada" y quieres que empiece de cero.
¿Cómo pasan los datos de un paso al siguiente? ¿Y si dos pasos devuelven una variable con el mismo nombre?
Cada paso publica sus variables de salida y Botize las va acumulando: cualquier paso puede usar las variables de todos los pasos anteriores, no solo del inmediatamente anterior. Se escriben entre dobles llaves, por ejemplo {{title}}.
El detalle que da problemas: si dos pasos publican una variable con el mismo nombre, la del paso posterior pisa a la anterior. Es fácil que ocurra, porque nombres como title, url o text los usan muchas aplicaciones.
La solución es renombrar. En cada paso tienes la opción Personalizar etiquetas, que te permite darle otro nombre a las variables que ese paso publica. Si el paso 2 devuelve url y el paso 4 también, renombra la del paso 2 a algo como url_producto y las dos convivirán sin pisarse.
El detalle que da problemas: si dos pasos publican una variable con el mismo nombre, la del paso posterior pisa a la anterior. Es fácil que ocurra, porque nombres como title, url o text los usan muchas aplicaciones.
La solución es renombrar. En cada paso tienes la opción Personalizar etiquetas, que te permite darle otro nombre a las variables que ese paso publica. Si el paso 2 devuelve url y el paso 4 también, renombra la del paso 2 a algo como url_producto y las dos convivirán sin pisarse.
¿Qué tipos de disparador puede tener una tarea?
El disparador es lo que decide cuándo se ejecuta la tarea, y siempre es el primer paso. Hay tres formas:
- Cada cierto tiempo: la tarea se ejecuta sola con la frecuencia que elijas.
- Cuando ocurre algo en una aplicación: por ejemplo, cuando llega un correo, cuando alguien escribe a tu bot de Telegram o cuando se publica algo en un canal. La tarea duerme hasta que ese servicio avisa. Es el disparador de la propia aplicación: no hay nada más que configurar para que sea instantánea.
- Bajo petición: la tarea se queda esperando a que alguien la llame desde fuera (una dirección web a la que se envían los datos), o a que tú la lances a mano.
¿Cuál es la diferencia entre poner reglas en un paso y usar el paso de Filtros?
Las dos cosas son condiciones, pero no hacen lo mismo, y confundirlas es una fuente clásica de sorpresas:
En ambos casos las condiciones se agrupan: dentro de un grupo se tienen que cumplir todas (Y), y basta con que se cumpla uno de los grupos (O). Así puedes montar caminos distintos en la misma tarea: un paso que solo se ejecute en un caso y otro que solo se ejecute en el contrario.
- Reglas dentro de un paso (el apartado Reglas que ves al configurarlo): si no se cumplen, se salta ese paso y la tarea continúa con los siguientes.
- El paso de Filtros: si no se cumple, la tarea muere ahí y no se ejecuta nada de lo que viene después.
En ambos casos las condiciones se agrupan: dentro de un grupo se tienen que cumplir todas (Y), y basta con que se cumpla uno de los grupos (O). Así puedes montar caminos distintos en la misma tarea: un paso que solo se ejecute en un caso y otro que solo se ejecute en el contrario.
¿Qué pasa con las variables de un paso que se ha saltado por sus reglas?
Un paso que se salta no publica nada. Y una variable que nadie ha publicado no se comporta como "inexistente": se lee como vacía.
Eso tiene una consecuencia que sorprende: una regla del tipo «tal cosa está vacía» también se cumple en los caminos donde el paso que produce esa variable ni siquiera llegó a ejecutarse.
El caso típico. Una tarea busca un producto y, si no lo encuentra, busca alternativas. El último paso —el que avisa de que no hay nada— lleva la regla «alternativa está vacía». Cuando el producto sí aparece, el paso de alternativas se salta, «alternativa» nunca se publica, se lee vacía… y ese último paso responde igual. El usuario recibe el producto y, justo detrás, un mensaje diciéndole que no se ha encontrado nada.
Cómo se evita. Cada camino lleva además la condición que lo identifica a él, no solo la ausencia de los demás. En el ejemplo, el paso que avisa de que no hay nada tiene que pedir dos cosas a la vez: que la búsqueda del producto fallara y que no haya alternativa. Recuerda que dos reglas dentro del mismo grupo se cumplen a la vez (Y) y que en grupos distintos basta con una (O).
Antes de dar por buena una tarea con varios caminos, recórrelos uno a uno y comprueba que a cada situación le responde exactamente un paso. Si a un caso le responden dos, es un error; si no le responde ninguno, también.
Eso tiene una consecuencia que sorprende: una regla del tipo «tal cosa está vacía» también se cumple en los caminos donde el paso que produce esa variable ni siquiera llegó a ejecutarse.
El caso típico. Una tarea busca un producto y, si no lo encuentra, busca alternativas. El último paso —el que avisa de que no hay nada— lleva la regla «alternativa está vacía». Cuando el producto sí aparece, el paso de alternativas se salta, «alternativa» nunca se publica, se lee vacía… y ese último paso responde igual. El usuario recibe el producto y, justo detrás, un mensaje diciéndole que no se ha encontrado nada.
Cómo se evita. Cada camino lleva además la condición que lo identifica a él, no solo la ausencia de los demás. En el ejemplo, el paso que avisa de que no hay nada tiene que pedir dos cosas a la vez: que la búsqueda del producto fallara y que no haya alternativa. Recuerda que dos reglas dentro del mismo grupo se cumplen a la vez (Y) y que en grupos distintos basta con una (O).
Antes de dar por buena una tarea con varios caminos, recórrelos uno a uno y comprueba que a cada situación le responde exactamente un paso. Si a un caso le responden dos, es un error; si no le responde ninguno, también.
¿Qué condiciones puedo poner en una tarea, y dónde funciona cada una?
Una condición se puede poner en cuatro sitios distintos de una tarea, y no todos entienden lo mismo. Esta tabla dice, para cada condición, dónde funciona. Se genera a partir del motor, así que no se queda vieja.
Si pones una condición en un sitio donde no está disponible, la tarea falla al ejecutarse. Por eso conviene mirar la columna antes.
| Condición | Nombre técnico | Pide un valor | Regla en un paso | Paso «Filtros» | Paso «Filtrar una lista» | Rama de un flujo |
|---|---|---|---|---|---|---|
| debe haber variado | change | — | sí | sí | sí | — |
| debe contener todas estas palabras | contains_all | sí | sí | sí | sí | sí |
| debe contener alguna de estas palabras | contains_certain | sí | sí | sí | sí | sí |
| debe contener alguna de estas palabras (distingue mayúsculas/minúsculas) | contains_certain_cs | sí | sí | sí | sí | sí |
| El día del mes debe ser | containsdaymonths | — | sí | sí | sí | — |
| el día de la semana debe ser | containsdays | — | sí | sí | sí | — |
| la hora debe ser | containshours | — | sí | sí | sí | — |
| El mes debe ser | containsmonths | — | sí | sí | sí | — |
| debe haber disminuido | decreases | — | sí | sí | sí | — |
| no contiene ningún valor | empty | — | sí | sí | sí | sí |
| debe ser igual a | equal | sí | sí | sí | sí | sí |
| la fecha es | equal_date | sí | sí | sí | sí | — |
| debe estar especificado | exists | — | sí | sí | sí | sí |
| Falso | false | — | sí | sí | sí | sí |
| Cambia de Falso a Verdadero | false_to_true | — | — | — | sí | — |
| ↥ debe ser mayor que | greaterthan | sí | sí | sí | sí | sí |
| debe haber aumentado | grows | — | sí | sí | sí | — |
| debe figurar en esta lista | in_array | sí | sí | sí | — | sí |
| No tiene un valor | is_null | — | sí | sí | — | sí |
| el número de caracteres es mayor que | len_greaterthan | sí | sí | sí | sí | sí |
| el número de caracteres es menor que | len_lessthan | sí | sí | sí | sí | sí |
| ↧ debe ser menor que | lessthan | sí | sí | sí | sí | sí |
| una sola vez transcurrido un día | newday | — | sí | sí | sí | — |
| una sola vez transcurrido un día y una determinada hora | newdaytime | sí | sí | sí | sí | — |
| no debe estar especificado | non_existent | — | sí | sí | sí | sí |
| debe ser distinto de | not_equal | sí | sí | sí | sí | sí |
| no debe figurar en esta lista | not_in_array | sí | sí | sí | — | sí |
| no ha aparecido en el último día | not_seen_1d | — | — | — | sí | — |
| no ha aparecido en la última hora | not_seen_1h | — | — | — | sí | — |
| no ha aparecido en los últimos 30 días | not_seen_30d | — | — | — | sí | — |
| no ha aparecido en los últimos 7 días | not_seen_7d | — | — | — | sí | — |
| no debe empezar por ninguna de estas palabras | not_starts_with | sí | sí | — | sí | sí |
| no debe contener ninguna de estas palabras | notcontains | sí | sí | sí | sí | sí |
| contiene un valor | notempty | — | sí | sí | sí | sí |
| debe empezar por alguna de estas palabras | starts_with_certain | sí | sí | — | sí | sí |
| debe hacer menos de | timeafterlessthan | sí | sí | sí | sí | — |
| debe hacer más de | timeaftermorethan | sí | sí | sí | sí | — |
| la hora debe ser posterior a | timeafterthan | — | sí | sí | sí | — |
| la hora debe ser anterior a | timebeforethan | — | sí | sí | sí | — |
| El número total de elementos es | total_items_equal | sí | sí | sí | — | — |
| El número total de elementos es mayor que | total_items_greater_than | sí | sí | sí | — | — |
| El número total de elementos es menor que | total_items_less_than | sí | sí | sí | — | — |
| Verdadero | true | — | sí | sí | sí | sí |
| Cambia de Verdadero a Falso | true_to_false | — | — | — | sí | — |
| no debe haber variado | unchanged | — | sí | sí | sí | — |
| el número de palabras es mayor que | words_greaterthan | sí | sí | sí | — | — |
| el número de palabras es menor que | words_lessthan | sí | sí | sí | — | — |
«Regla en un paso» es el apartado Reglas de cualquier paso. «Filtros» y «Filtrar una lista» son los dos métodos del paso Filtros. «Rama de un flujo» es cada camino de una tarea dibujada con ramas: ahí sólo funcionan las condiciones que dependen únicamente de lo que llega, no de lo que pasó en ejecuciones anteriores.