Introducción
Las plataformas Low-code/No-code son entornos de desarrollo que permite realizar aplicaciones usando entornos gráficos, combinando componentes y sin tener que escribir código o escribiendo muy poco. Incluyen interficies gráficas con lógica sencilla de drag-and-drop, donde combinamos bloques de código para construir la solución. Estas plataformas reducen el tiempo de desarrollo, acelerando la entrega de aplicaciones. Exsiten entornos low-code self-hosted , pero mayoritariamente los encontramos en la nube.
Existe una diferencia entre low-code y no-code. En las primeras no se puede prescindir totalmente de la programación manual. Se estima que el 80% del proceso de desarrollo puede ocurrir sin necesidad de escribir código. Las plataformas no-code no requeiren introducir nada de código, permiten ahorrar más tiempo, pero no son tan flexibles como las low-code.
Ventajas del uso de estas plataformas
- Ayuda a reducir el Shadow IT La demanda en las organizaciones sobre aplicaciones es creciente. Suele pasar que los departamentos buscan soluciones al margen del TI corporativo. Para minimizar este efecto, las plataformas low-code permiten a los usuarios desarrollar soluciones al margen de TI. Estos pueden diseñarlas, mientras que el departamento TI puede gobernar los datos y los accesos de usuario.
- Entrega rápida Se estima que desarrollar con low-code incrementa la velocidad de entrega de producto entre un 50%-80%
- Minimiza riesgos Estas plataformas proporcionan funcionalidades integradas, incluido soporte multiplataforma, integración de datos y otros estandares de la indústria y prácticas de seguridad
Contras
-
Customización El nivel de customización de la plataforma debe ser conocido previamente al inicio del desarrollo. Customizar implica desarrollar, ‘tocar’ con código propio el entorno. Al usar mecanismos estandar de producción de soluciones es posible que la plataforma no permita customizar y eso a veces supone un problema.
-
Vendor Lock-in Cuando elegimos una plataforma, muchas veces nos vinculamos al proveedor que la desarrolla. Debemos conocer las posibilidadades que ofrece la solución para tomar el control y no dependender en exclusiva de un proveedor. Temas como la seguridad o el control de los datos deben estar en el centro de nuestras decisiones.
En nuestro caso eligiremos para trabajar plataformas Low-Code basadas en Opensource porque ofrecen más transparencia, control de datos, felxibilidad y también soporte comunitario.
Herramientas
Existen multitud de herramientas Low-code para diferentes ámbitos de aplicación. En el siguiente enlace se enumeran unas cuantas (comerciales y opensource)
Listado herramientas Low-Code de diferentes ámbitos.
En el entorno organizativo actual, en la AAPP, es importante atacar dos retos:
- La automatización de procesos e interoperabilidad multisistema
- Normalización de fuentes de datos
El primer caso hace referencia a que cada vez los procesos de trabajo implican a múltiples sistemas, tanto dentro como fuera de la empresa. Sería la evolución del BPM, pero enfocado a una estructrua de trabajo distribuida y no centralizada (un BPM monolítico que lo orquestre todo) El segundo caso, básicamente es la guerra contra las herramientas ofimáticas como Excel y Access, que generan cantidad de fuentes de datos departamentales, con información muy valiosa pero poco abierta o no compartida. Para ellos se debe poner en marcha herramientas que puedan gestionar esta información de manera fácil, multidispositivo, abiertas, concurrentes, con API de accesso, etc etc
En este artículo nos centraremos en el primer caso, y utilizaremos la herramienta N8N para crear un caso sencillo que muestre el potencial del producto: Un bot en Telegram que nos informa de la temperatura actual de la estación meteorológica del Ajuntament de Valls.
Dejamos el desarrollo del segundo caso, para otro artículo, en el que mostraremos el funcionamiento de Saltcorn
N8N
N8n se define como una herramienta extensible de automatización de workflows. Está basado en opensource y realizado en Javascript (TypeScript) está disponible en cloud y en self-hosting. Permite añadir customizaciones propias, lógica y aplicaciones. Tiene una interficie gráfica que facilita la gestión por nodos. Esta aproximación permite mucha versatilidad, conectando los nodos entre sí.
La tipología de nodos predefinidos es muy amplia. Este sentido encontramos integraciones con muchas aplicacionesy funcionalidades: desde una simple y genérica petición HTTP (con lo que podemos interrogar cualquier API), hasta integraciones con Google Docs, Telegram, Zoom, Mattermost …
En nuestro ejemplo mostraremos:
- Instalación del entorno
- Definición de conceptos básicos
- Caso de uso: bot meteorológico en Telegram
Instalación
Se puede utilizar la instancia cloud a través de n8n.cloud. Es un servicio de pago, pero durante 30 dias permite desarrollar nuestras pruebas. Si tenemos un entorno de desarrollo podemos instalar los paquetes a través de npm o usar la imagen de Docker.
Lanzamos la instalación usando npm
$ npm install n8n -g
Una vez instalado, podemos inicializar el servicio.
$ n8n start --tunnel
Initializing n8n process
n8n now checks for new versions and security updates. You can turn this off using the environment variable N8N_VERSION_NOTIFICATIONS_ENABLED to "false"
For more information, please refer to https://docs.n8n.io/getting-started/installation/advanced/configuration.html
Waiting for tunnel ...
Tunnel URL: https://xpadsbz9ixcets8u3a57yd0l.hooks.n8n.cloud/
IMPORTANT! Do not share with anybody as it would give people access to your n8n instance!
n8n ready on 0.0.0.0, port 5678
Version: 0.141.0
Editor is now accessible via:
http://localhost:5678/
Press "o" to open in Browser.
Se inicia con el flag –tunnel, para habilitar el trigger de Telegram y sea alcanzable por la web.
Accedemos con el navegador a la aplicación para poder trabajar con la herramienta. El entorno de trabajo es muy sencillo y podemos consultar una guía de inicio aquí para crear un primer workflow.
Componentes básicos
Los elementos principales en los que nos apoyaremos para realizar cualquier proyecto en N8N son:
-
Node Los elementos de ejecución del workflow son los nodos. Es un punto de entrada para recuperar datos, una función para procesarlos o una salida para enviar datos. Pueden usarse uno o múltiples nodos que permiten, usando conexiones, crear desde los workflows más sencillos a los más complejos. Existen nodos predefinidos para conectar con las aplicaciones más conocidas, nodos genéricos de consulta HTTP, por ejemplo o incluso podemos construir nuestros propios nodos. Los nodos genéricos para acceder a cualquier servicio web son HTTP Request o Webhook.
-
Conexión Establece un enlace entre nodos para enrutar los datos a través del workflow. Cada nodo debe tener una o múltiples conexiones.
-
Workflow Un workflow es un proyecto de automatización que consiste en una serie de nodos interconectados para realizar una tarea específica. Los workflow pueden iniciarse manualmente o disparadas (trigger) cuando un evento ocurre (temporización, cambio de datos o cualquier otro evento). La ejecución finaliza cunado todos los nodos activos y conectados han procesado sus datos.
Caso Práctico: Bot Meteorológico
Crearemos un bot de Telegram que salude a los miembros del Grupo, indique datos meteorológicos de la estación del Ajuntament de Valls o nos muestre una frase célebre si se lo pedimos. Hemos utilizado de base el ejemplo creado por la comunidad n8n en castellano Los elementos que integraremos son:
- Portal de datos abiertos, consultando el último registro de los datos de la estación meteorológica
- Servicio REST para consumir frases aleatórias via web
- BotFather, para crear bot de Telegram y obtener los datos necesarios usados por N8N.
Creación del Bot
Para la creación del bot utilizaremos BotFather. Buscamos @BotFather en Telegram Una vez abrimos chat con BotFather creamos nuestro bot. Atención al nivel de privacidad del bot. Por defecto no lee los mensajes de los grupos y por lo tanto debemos cambiar con /setprivacy el nivel (false).
De entrada, creamos un grupo privado Prueba n8n y añadimos a un usuario y al bot al mismo.
También es necesario hacer a nuestro bot, VallsMeteo_bot, administrador del grupo.
Para crear nuestro workflow se necesita el id del grupo. En los grupos públicos es fácil, ya que se puede usar @nombredegrupo pero para los grupos privados se debe encontrar el ID que usa el grupo.
ID de grupo privado
Vamos a necesitar el token que hemos creado de nuestro bot de telegram. Usaremos la API de Telegram para encontrar el id.
Token Bot |
---|
024487727:AAENDRpfCMelZSiP8Bx4M22ThwdcBi7mXtk |
Ahora, con un navegador hacemos la llamada, una vez hemos escrito alguna cosa en el Grupo de Telegram que hemos creado.
https://api.telegram.org/botTOKEN/getUpdates
Concretamente:
https://api.telegram.org/bot2024487727:AAENDRpfCMelZSiP8Bx4M22ThwdcBi7mXtk/getUpdates
El resultado:
{"ok":true,"result":[{"update_id":916481533,
"message":{"message_id":2,"from":{"id":9178241,"is_bot":false,"first_name":"Ricardo","last_name":"Gm","username":"rgonzalezmas"},"chat":{"id":-1001543814894,"title":"Prueba n8n","type":"supergroup"},"date":1632948019,"text":"Hola"}}]}
El valor que nos interesa está dentro del array chat, parámetro id
ID Grupo privado |
---|
-1001543814894 |
Ahora ya tenemos todos los datos para interactuar con el Bot en nuestro workflow.
Existe una gran variedad de nodos pero nosotros utilizaremos los siguientes elementos:
-
Node Telegram Trigger
- Referencia doc: Telegram Trigger
- Descripción: El Trigger node de telegram esta escuchando a la espera de mensajes
-
Node Telegram
- Referencia doc: Telegram
- Descripción: El node de telegram permite interactuar con telegram enviando mensajes, ficheros, audio, imágenes, etc
-
Node IF
- Referencia doc: IF
- Descripción El node if es un condicional que permite realizar acciones según las condiciones que le indicamos.
-
Node HTTP Request
- Referencia doc: HttpRequest
- Descripción El node HttpRequest realiza una petición HTTP y devuelve los datos de respuesta.
-
Node Set
- Referencia doc: Set
- Descripción El node Set inicializa valores en variables o opcionalmente borra valores.
El funcionamiento a alto nivel del Bot es:
while (escuchamos mensajes del grupo)
{
mensaje = trigger.get();
if (mensaje contiene "hola") || (mensaje contiene "Buenos días")
{
Telegram.send("Mensaje de Beinvenida y opciones")
} else
{
if (mensaje contiene "METEO")
{
datos = consulta_open_data (recurso_meteo, último);
Telegram.send(datos);
}else
{
if (mensaje contiene BOT8)
{
datos = consulta_TIP_of_the_day();
Telegram.send(datos);
}else
{
Telegram.send("Mensaje")
}
}
}
}
El JSON con el modelo realizado lo podeis encontrar en este repositorio Para importarlo, basta con copiar el fichero (CTRL+C) y cuando estamos en la consola de gestión pegar (CTRL+V)… o importar el fichero JSON descargado.
Algunos detalles de la implementación:
-
Node Telegram Trigger En los parámetros configuramos las credenciales, básicamente el TOKEN obtenido anteriormente También indicamos que el Nodo está a la escucha de TODOS (*) los mensajes que se produzcan en el grupo.
-
Node Telegram En los parámetros configuramos las credenciales, básicamente el TOKEN obtenido anteriormente. Indicamos el tipo de respuesta que haremos en el grupo: “SendMessage” o “SendPhoto” según el caso. Se configura el id de grupo que hemos obtenido con anterioridad.
Otro aspecto destacado es la facilidad con la que podemos acceder a la información obtenida por otros nodos en el workflow, a través de una estructrua basada en JSON. Por ejemplo, esta variable recupera el nombre de la persona que ha enviado un mensaje en el grupo de Telegram que estamos escuchando.
{{$node["Telegram Trigger"].json["message"]["from"]["first_name"]}}
- Node HTTP Request
Este nodo sirve para interrogar APIs de manera sencilla. En el caso del portal OpenData del Ajuntament de Valls encontramos los datos meteorológicos hora a hora, aquí
La consulta a la API que realizamos es la siguiente:
https://dadesobertes.valls.cat/api/3/action/datastore_search_sql?sql=SELECT%20*%20from%20%22de8f4295-d72c-41dc-a93b-2e21a679029d%22%20ORDER%20BY%20_id%20DESC%20LIMIT%201
La configuración es senzilla y la respuesta ya la obtenemos en formato JSON para su proceso posterior.
Para la consulta de Quote of the day usamos el servicio web https://quotes.rest/qod?language=en, que retorna a diario una nueva frase célebre.
- Node Set
Básicamente se usa para parsear la salida de los datos meteorológicos y ponerlos en variables. Este nodo es prescindible pero hemos querido probar como definir variables a partir de los resultados de otros nodos.
Ejemplos:
{
"name": "temp",
"value": "={{$json[\"result\"][\"records\"][0][\"TEMP\"]}}"
},
{
"name": "humidity",
"value": "={{$json[\"result\"][\"records\"][0][\"HUM\"]}}"
},
{
"name": "wind",
"value": "={{$json[\"result\"][\"records\"][0][\"VEL_VENT\"]}}"
},
{
"name": "wind_dir",
"value": "={{$json[\"result\"][\"records\"][0][\"DIR_VEL_VENT\"]}}"
},
{
"name": "timestamp",
"value": "={{$json[\"result\"][\"records\"][0][\"HORA\"]}}"
}
Podemos ver nuestro bot finalizado, en el entrono gráfico:
Para dejarlo funcionando, debemos marcarlo como activo
Podemos verificar el funcionamiento aquí:
Conclusiones
Hemos desarrollado una aplicación sencilla pero funcional sin tener que escribir código. Lo que se puede destacar:
- Las implementaciones son rápidas. El aprendizaje de la herramienta ha sido muy rápido. En este caso, N8N aporta mucha documentación y el entorno de desarrollo es muy intuitivo y user-friendly
- Encaja perfectamente en el modelo de trabajo Agile. Se puede prototipar muy rápido, implicando al cliente desde el inicio para la prueba de concepto realizada.
- Flexible. Permite cambios de forma muy rápida, con lo que los despliegues no son complicados a pesar de los cambios.
- Se reducen los costes de desarrollo. Para un tipo de aplicaciones concrectas puede encajar este modelo de desarrollo, reduciendo los tiempos de entrega y la necesidad de utilizar programadores expertos en una tecnología concreta
La comunidad de N8N expone multitud de ejemplos de workflows para poder probarlos o que sirvan de guía.