KEPLIN Docs

Pasos, decisiones y esperas

El catálogo de los nodos de un workflow — condiciones, escrituras en el registro, notificaciones, correos, scripts, esperas, ciclos, paralelismo y uniones.

Esta página recorre todos los tipos de paso que se arrastran de la paleta Nodos al lienzo. Para cada uno: qué hace, qué se rellena y qué ocurre en la ejecución.

Antes de eso, una pieza que se repite en casi todos: el origen de un valor.

De dónde viene un valor

Siempre que un paso pide un valor — el lado derecho de una condición, lo que se escribe en un campo — la interfaz ofrece los mismos cuatro orígenes:

Origen Qué trae
Valor fijo Un texto escrito a mano («Ganha», «25000»).
Campo del registro Un campo del registro del que la ejecución trata.
Variable Una de las variables del proceso.
Quien inició Quien mandó arrancar el proceso — Usuario (el username) o Id del usuario.

Por esto un proceso no necesita código para la mayor parte de lo que hace: las decisiones y las escrituras se componen con estas cuatro piezas.

Condición

Abre dos caminos a partir de una pregunta. Tiene siempre dos salidas fijas: Verdadero y Falso.

El diálogo Condiciones del paso
El diálogo Condiciones del paso

  1. Selecciona el paso y abre Condiciones en el botón ….
  2. Haz clic en Añadir condición.
  3. Elige el origen del lado izquierdo (normalmente Campo del registro), el campo, el operador y el lado derecho.

Los operadores son los mismos de los filtros y de las reglas de formato del resto de la plataforma:

Operador Significa
eq / neq Igual a / distinto de
gt / gte Mayor que / mayor o igual a
lt / lte Menor que / menor o igual a
contains Contiene el texto
startsWith / endsWith Empieza por / acaba en
isEmpty / isNotEmpty Está vacío / no está vacío

«Todas tienen que cumplirse» — varias condiciones en el mismo paso se combinan con Y, nunca con O. Para un O, usa dos pasos de condición en cadena.

Sin ninguna condición, «sigue siempre por "Verdadero"» — útil mientras se diseña, peligroso si se queda así.

Escribir en el registro

Graba campos en el registro del que la ejecución trata. Es el paso que cierra el circuito: el proceso decidió, ahora la ficha del CRM tiene que reflejarlo.

El diálogo Campos a escribir en el registro
El diálogo Campos a escribir en el registro

  1. Abre Campos a escribir en el botón ….
  2. Haz clic en Añadir campo.
  3. Elige el Campo y el origen del valor.

En el ejemplo, el paso Marcar como Ganha escribe fase = "Ganha" (valor fijo) y responsavel = Quien inició (el username de quien empezó el proceso).

Nota

La escritura se hace «por el mismo GraphQL de la app, con la autorización de quien empezó». Es decir: los permisos cuentan. Si quien inició el proceso no puede alterar esa entidad, el paso falla — y falla bien, porque un proceso no es una puerta trasera a los permisos.

Un paso sin ningún campo «no hace nada» — la interfaz lo dice en vez de esconderlo.

Notificar

Manda una notificación dentro de la app — la campana de la navegación, en tiempo real para quien tiene sesión abierta, y en el buzón para quien no.

Campo Notas
Usuarios Cuentas de la app, elegidas a mano.
Roles Todos los usuarios con ese role. Sobrevive a entradas y salidas de personas.
Título La línea que aparece en la notificación.
Texto El cuerpo.

En el título y en el texto puedes meter valores del registro o de variables entre llaves: La oportunidad {titulo} fue rechazada.

Email

Igual que Notificar, pero el destino es el correo, por el canal configurado en los ajustes de la app. Tiene dos campos más: el cuerpo es HTML, escrito en un editor propio, y puede llevar un informe adjunto.

El paso Email seleccionado, con el panel de propiedades
El paso Email seleccionado, con el panel de propiedades

Campo Notas
Usuarios / Roles Los destinatarios. Quien no tenga correo queda fuera.
Asunto Acepta {campo} como el resto de los mensajes.
Texto Abre un editor de HTML en el botón … (Cuerpo del email).
Adjuntar informe Uno de los informes de la app, o Sin adjunto.

Sobre el adjunto: «el PDF se genera en el momento del envío, para el registro de esta ejecución» — no es un archivo guardado, es el documento de ese caso, hecho en ese instante. Ver el capítulo Informes.

Atención

Sin canal de correo activo y con SMTP completo en los ajustes de la app, el paso no puede enviar. Configúralo en Ajustes de la app → Notificaciones antes de poner el proceso a correr.

Ejecutar script

Llama a un script Python de la app, a mitad del proceso. Es la válvula de escape para todo lo que el diseño no hace: llamar a un servicio externo, calcular un margen, validar contra otro sistema.

El paso Ejecutar script seleccionado
El paso Ejecutar script seleccionado

Campo Notas
Script Uno de los scripts de la app.
Guardar en La variable donde queda lo que el script devuelva. Vacío = «se descarta».

El script «recibe el registro, la clave y las variables en los argumentos» — no hace falta pasarlos a mano. Lo que devuelva queda en la variable indicada y pasa a estar disponible para los pasos siguientes.

Si el script falla, la ejecución queda en Falló en ese paso, con el error guardado en el historial.

Esperar

Aplaza el proceso por un tiempo fijo: Días y Horas. «Cero en ambos = no espera nada.»

Es la pieza de «avísame dentro de tres días si aún no hay respuesta». La ejecución duerme y se retoma automáticamente a la hora exacta, aunque el servidor se haya reiniciado por el medio.

Esperar evento

Aplaza el proceso hasta que alguien mande una señal con un nombre acordado.

El paso Esperar evento seleccionado
El paso Esperar evento seleccionado

El único campo es el Nombre de la señal (en el ejemplo, dados-completos). «Quien manda la señal escribe este nombre. Sin hora marcada: si nadie la manda, el proceso se queda esperando.»

La señal se manda de dos formas:

  • en un evento de pantalla (TypeScript): keplin.workflow.signal("dados-completos", id)
  • en un script (Python): workflow.signal("dados-completos", key=id)

Sin indicar el registro, la señal despierta a todos los procesos parados en ese nombre; con el registro, solo a los de ese. Cero despertados no es error — quiere decir que nadie estaba esperando.

Consejo

Es común combinar Esperar evento con una flecha de vuelta a una tarea: la persona devuelve el caso pidiendo más datos, el proceso se queda esperando la señal, y cuando el comercial completa la ficha la señal trae el caso de vuelta a la misma tarea. Es exactamente lo que hace el ejemplo de esta documentación.

Ciclo

Recorre una lista, un valor cada vez. Tiene dos salidas: Cada (el cuerpo del ciclo, que corre una vez por valor) y Al final (cuando la lista se acaba).

Campo Notas
Lista La variable con los valores a recorrer. «Un paso de script suele ser quien la produce.»
Guardar cada en La variable que se queda con el valor de la vuelta actual.

Sin lista elegida, el diseño avisa: «Este ciclo no dice qué lista recorrer: sale directamente por "Al final".»

Paralelo

Arranca varios caminos al mismo tiempo. Cada rama es una salida del nodo.

El diálogo Ramas en paralelo
El diálogo Ramas en paralelo

  1. Abre Ramas en paralelo en el botón ….
  2. Cada fila es una rama, con una Etiqueta (lo que se lee en el diseño) y un Identificador.
  3. Conecta cada salida al primer paso de la rama respectiva.

En el ejemplo, el paso Fechar e comunicar abre dos ramas: Registo (que graba la fase) y Cliente (que envía el correo). Ninguna espera por la otra.

Unión

Vuelve a juntar las ramas de un Paralelo. Es el paso que responde a «¿por cuántas se espera?».

La Unión seleccionada, con el panel de propiedades
La Unión seleccionada, con el panel de propiedades

Esperar por Qué hace
Todas las ramas El proceso solo sigue cuando llegue la última rama.
La primera decide Sigue con la primera que llegue — «las otras ramas se cancelan cuando una llega».
Un número de ellas Sigue al cabo de Cuántas ramas indiques.

Sub-workflow

Llama a otro proceso, sobre el mismo registro.

Campo Notas
Proceso a ejecutar Uno de los workflows de la app.
Esperar a que acabe Activado, este proceso para hasta que el otro termine. «Desactivado, este proceso sigue adelante y el otro corre por su cuenta.»

«Corre sobre el MISMO registro, y por eso tiene que tratar de la misma entidad» — un proceso sobre oportunidades no puede llamar a un proceso sobre cuentas. Y un proceso no puede llamarse a sí mismo: «sería una recursión sin fin», y el diseño lo acusa.

Con Esperar a que acabe activado, este proceso sigue cuando el otro termina — por el nodo de Fin, por quedarse sin camino, o por fallar. El historial de este proceso dice cómo acabó el otro; un proceso llamado que falla no hace fallar al que lo llamó.

Fin

Termina la ejecución. Tiene un único campo, Resultado, un texto corto como aprovado, ganha o perdida. «Queda en el historial y es lo que el widget de estado muestra.»

Un proceso puede tener varios nodos de Fin — uno por desenlace — y eso es lo que se debe hacer: en vez de un Fin genérico, uno por resultado, para que el historial le diga algo a quien lo lea meses después.

Cómo se lee un paso en el lienzo

Cada caja en el lienzo muestra tres cosas: el nombre del paso (lo que escribiste en Nombre del paso, y lo que aparece en el historial), el tipo en letras pequeñas debajo, y las salidas a la derecha, con el nombre de cada una. Un triángulo ámbar en la esquina señala un paso con problemas.

Consejo

Da nombres de negocio a los pasos — «Aprobación de la dirección», «Marcar como Ganha» — y no nombres técnicos. Ese texto es el que vas a leer en el historial de cada ejecución cuando alguien pregunte «¿dónde está parado este caso?».