Diseñador de flujos

Introducción

Con esta herramienta se crean flujos para un plan de marcado, webhooks, proveedores de SMS y Whatsapp y blacklist.

Es una herramienta HTML5 y Javascript de arrastrar y soltar, cada actividad es una aplicación del plan de marcado, y es posible cambiar su comportamiento vía sus propiedades.

Se genera código que es activado (deploy) en el servidor. Pueden cargarse flujos del servidor para editarlos y activarlos al momento.

Una vez un flujo es activado, queda inmediatamente activo.

Al cargar un flujo del servidor se entra en modo edición, el cual permite hacer modificaciones y activarlos al momento de realizar la activación (deploy).

En la esquina inferior derecha muestra si nos encontramos en modo edición o en la creación de un flujo nuevo.

A tener en cuenta:

Las flechas verdes son el camino verdadero y las flechas rojas el camino falso cuando hay condiciones.

Manejo de Flujos

Carga

Esta ventana permite cargar flujos del servidor, están agrupados en contextos y dentro de ellos se encuentran las extensiones.

Toda llamada originada desde un dispositivo va a buscar flujos que mapeen contra las extensiones que existen en su contexto, si mapea una extensión se ejecutan los pasos de ese flujo. Todos los flujos juntos son el plan de marcado del sistema.

Controla todas las llamadas que pasan por el sistema. Se configura todo el comportamiento del sistema, ya existen flujos estándar que hacen más sencillo las configuraciones. 

  • Historial: Registra las acciones realizadas en cada Flujo.

  • Los diferentes tipos de acciones son:

  • INSERT(creación de un flujo),

  • UPDATE(actualización de un flujo)

  • y DELETE(flujo borrado).
    La gran ventaja del historial es la recuperación de flujos borrados para volver a trabajar sobre ellos sin haber perdido datos.
    Se pueden aplicar filtros de búsqueda tales como por columna de Contexto o Exten, escribiendo lo deseado y haciendo clic en el logo de la lupa de búsqueda.

  • Borrar: Borra el flujo seleccionado en la lista.

  • Cargar: Carga el flujo seleccionado.

  • Abrir en pestaña adicional: Permite abrir el flujo seleccionado en una pestaña aparte a la actual. Facilitando el trabajo con varios flujos a la vez.

Activar

En esta ventana se activa (deploy) de un flujo y se le agrega una descripción para luego saber que hace, una vez ejecutado, ya comienza a tomar los cambios en el sistema.

Si cargamos un Flujo al Activar nos va a sugerir el comentario previo.

Guardar

Es posible guardar en disco en un archivo flujos por si se requieren luego activar en otro servidor o instalación.

Barra de herramientas

Nuevo: Crea un nuevo flujo (se pierden los cambios que no fueron salvados o activados).

Abrir: Carga un Flujo que previamente fue guardado en un archivo JSON.

Guardar: Guarda en un Archivo JSON.

Deshacer: Deshace la última acción.

Rehacer: Rehace la última acción deshecha.

Copiar: Copia una parte del dibujo que esté seleccionado (es posible copiar y pegar entre pestañas del explorador).

Pegar: Pega cualquier actividad/es copiadas o cortadas (incluye conexiones y propiedades).

Zoom entrante: Acerca la vista del dibujo.

Zoom saliente: Aleja la vista del dibujo.

Bloquear: Bloquea una selección del dibujo, no la deja mover. 

Eliminar: Eliminar Actividad o Conexión, es posible usar Ctrl V, C, X.

Agrupar: Agrupa partes del dibujo para poder trasladarlas en conjunto.

Alinear: Opciones para alinear el dibujo.

Buscar en el diagrama: Encuentra actividades en el diagrama marcando su nombre en rojo.

Activar, Cargar y Debug:

Permiten activar cambios o nuevos flujos, o cargarlos del servidor o mostrar el código generado en consola.

 

Al iniciar el Workflow Designer podemos ver las Start Activities.

 

Estas son la actividad inicial de cualquier flujo, al arrastrar una hacia la mesa de trabajo, se define qué tipo de flujo es.

Tipos de start activities:

  1. StartActivity - Para flujos de Telefonía.

  2. BotStartActivity - Para flujos de bots.

  3. BotFunctionStartActivity - Para crear extensiones de bots.

  4. ChannelProviderStartActivity - Para enviar información hacia un tercero.

  5. WebhookStartActivity - Para recibir información desde un tercero.

  6. BlacklistStartActivity - Actividad que inicia el flujo de blacklist.

 


Descripción de Start Activities

StartActivity

Es necesaria esta actividad para darle el inicio a un flujo de telefonía, en la misma se indicará para que contexto y extensión se realizará el flujo.

  • context: Indica el contexto en el que se aplica el flujo.

  • exten: Indica la extensión en la que se aplica el flujo.


BotStartActivity

Esta actividad es la primera del flujo, siempre debe estar incluida en todos los flujos creados, la misma indica al bot por dónde comienzan las actividades.

  • name incluye el nombre que posee el bot.

  • botTimeout es el tiempo en minutos que espera el bot sin recibir respuesta para terminar la interacción y darla por abandonada, por defecto son 30 minutos.

  • msgBotTimeout es el mensaje que se muestra luego de que se de el botTimeout.


BotFunctionStartActivity

Para poder crear un bot function se cuenta con la actividad BotFunctionStartActivity. 

Esta actividad, a diferencia de la BotStartActivity, únicamente posee el campo ‘nombre’.

Es decir, la actividad inicial de un bot function no posee el campo ‘bot_timeout’, ni tampoco el campo ‘timeout_message’, lo que significa que el timeout que se tomará en cuenta es el del bot que llama al bot function.


ChannelProviderStartActivity

  • name
    Va a ser el nombre del proveedor, el mismo va a aparecer en las campañas de SMS/WhatsApp y en los discadores del mismo canal.


WebhookStartActivity

  • name
    Es el nombre del webhook que al mismo tiempo se va a corresponder con la ruta para poder ejecutar el flujo.

En el siguiente link se puede ver una guia de creación de webhooks salientes.https://integra-scm.atlassian.net/wiki/spaces/UVE/pages/1399062544


BlacklistStartActivity

Actividad que inicializa el flujo de blacklist.


Ejecución de javascript

Para los flujos de bot, proveedores, webhook y blacklist, existe la posibilidad de ejecutar javascript. Cada ejecución mantiene un contexto que posee variables que se mantienen durante toda la ejecución. De la misma manera que ya vienen seteadas al principio de la ejecución variables, se pueden setear nuevas variables que se van a mantener toda la ejecución. La única actividad para ejecutar código es Procedure, en las otras actividades es posible ejecutar código o acceder a variables utilizando la convención “template strings“ de javascript.

Otra posible ejecución de javascript es para tomar decisiones acerca de qué camino puede seguir el flujo. Para esto existe la actividad Evaluate, la cual recibe una expresión que debe retornar true o false, y permite conectar dos caminos posibles de actividades.


Log de flows

Se emplea log4j2 como librería para el log de flows, y el archivo donde se puede ver todo lo relacionado con los bots se encuentra en var/log/ucontact/flows.log

Este archivo no solo loguea los errores, sino que de manera similar a lo que se hace en el https://integra-scm.atlassian.net/l/c/nY4voq0m, loguea todas las actividades que se van recorriendo a medida que se recorre el flow.

El formato en que se imprime la información en flows.log es el siguiente:

AAAA-MM-DD HH:mm:ss - [Número de thread] - [Nombre del flow - guid del flow] [Número de pasos de la actividad]

Primero se va a loguear la ejecución de la actividad y luego se loguean los parámetros de la actividad que se ejecutó.

Cuando el flow finaliza se imprime el mensaje FINISH.

Ejemplo:


Logger

Una vez que se carga un flujo con contexto bots, channel providers o webhooks en Workflow Designer, se puede visualizar la opción Logger, la cual permite ver el log de todas las ejecuciones del flow que está cargado.

 

Por defecto, el logger está desactivado, para activarlo hay que presionar en el interruptor que se encuentra en la esquina superior izquierda.

También cuenta con la posibilidad de filtrar los mensajes en la consola del workflow según nivel de error. Los niveles disponibles son Info, Warning y Severe.

 

Ejemplo de Logger: