Automatizar tareas no solo trata de unir funcionalidades de servicios y aplicaciones entre sí. En ocasiones necesitamos incorporar cierta lógica, modificar o agregar nuevos datos como parte de una automatización.
Cuando las aplicaciones que vamos a automatizar no contemplan todas nuestras necesidades, la posibilidad de incluir pequeñas piezas de código que cubran esas carencias marca la diferencia entre limitarnos a un número reducido de automatizaciones o poder automatizar prácticamente cualquier proceso que se requiera.
En este blog ya hemos aprendido a incluir pequeñas piezas de código escrito tanto en Python como en PHP, usando para ello soluciones gratuitas y que se ejecutan en la nube, evitando así disponer de nuestros propios servidores y su consecuente mantenimiento.
En esta ocasión veremos como hacer lo propio con código Node. El objetivo es incluir de la manera más sencilla posible, pequeños fragmentos de código escrito por nosotros mismos y que se ejecute en la nube sin ningún coste.
Vas a aprender con un ejemplo cómo incluir código Node en una tarea automática, cómo leer los datos que llegan, modificarlos y entregarlos de vuelta a la tarea. En este ejemplo una tarea automática leerá las publicaciones de un canal de Telegram y las publicará en otro, sirviéndose de Node para modificar el texto original antes de publicarlo en el canal.
Lo que hagamos en este ejemplo con Node no es tan importante como el hecho de aprender con Node a leer los datos de una tarea automática, alterarlos y devolverlos; acciones además comunes a cualquier tarea y necesidad que tengas.
Código Node en la nube
Utilizaremos Google Cloud Functions para crear nuestras funciones de Node y ejecutarlas en la nube.
Si no tienes una cuenta deberás crear una gratuita, con la que podrás ejecutar hasta 2.000.000 de veces al mes el código que programes.
Una vez creada tu cuenta haz clic en «CREAR FUNCIÓN».
A continuación en el campo «Nombre de la función» por un nombre que te ayude a identificar tu nueva función (por ejemplo «Botize»), en el campo «Región» selecciona «europe-west3» y por último selecciona la opción «Permitir invocaciones sin autenticar«.
Haz clic en «Guardar» y seguidamente clic en «Siguiente«.
Esto nos llevará ya al editor de código en Node.
Reemplaza el código de ejemplo por el siguiente:
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.botize = (req, res) => {
let message = req.query.message || null;
if ((message == null)) {
res.status(400).send('');
}
else {
var new_message = message.toUpperCase();
res.status(200).send({
"meta":{
"code":200
},
"data":{
"message":new_message
}
});
}
};
Por último modifica el campo «Punto de entrada» para que tenga el mismo nombre que la función («botize» en este caso, puede cambiarlo por el nombre que consideres más adecuado).
Si examinas el código verás que lo que hace es recibir el parámetro «message», donde estará el mensaje original de Telegram, convertirlo todo a mayúsculas y finalmente devolverlo modificado con el mismo nombre.
Botize podrá trabajar con este y cualquier otro valor que devuelvas dentro del objeto «data».
Igualmente veremos que puedes enviar el parámetro «message» y cualquier otro que necesites desde Botize a la función de Node.
Finalmente haz clic en el botón «Implementar» y tu función estará lista para ser utilizada.
Nuestra nueva función tiene una dirección URL que nos servirá para invocarla desde Botize.
Para conocer la URL haz clic en la función que has creado y seguidamente clic en la pestaña «Activador».
La URL aparecerá indicada y es la que utilizaremos en Botize para invocar nuestra función.
¿Cómo incluir código Node en una tarea automática?
Lo único que necesitas saber es que una tarea automática se compone de uno o más pasos y que estos se ejecutan en el orden que tú establezcas.
Incluir Node (o cualquier otro lenguaje de programación) no es otra cosa que añadir o intercalar un paso extra en la tarea, justo en el punto en el que lo necesites.
Supongamos la siguiente tarea que puedes ver y utilizar haciendo clic en el enlace.
Como puedes ver, se activa cada hora y si hay una nueva publicación en un canal público determinado, entonces lo envía a un nuevo canal de Telegram.
Dado que hemos dicho que queremos alterar el mensaje original antes de publicarlo, lo que haremos será añadir un nuevo paso justo antes.
Para ello haz clic en el símbolo (+) que aparece al situarte entre ambos pasos. En la versión móvil de Botize este símbolo aparece siempre visible.
Ahora un nuevo paso se ha intercalado y el editor de tareas espera que selecciones una aplicación para él.
Seleccionaremos la aplicación Webhooks.
Entre las distintas operaciones que puedes automatizar con Webhooks, selecciona «Ejecutar una petición GET«.
En el campo URL indicaremos la dirección URL de nuestra función de Node.
En el campo Parámetros GET indicaremos el parámetro message seguido del valor que este tendrá y que va a venir determinado por la etiqueta «Message» de Telegram tal y como se ve en la siguiente imagen.
Terminaremos nuestra tarea haciendo clic en «Guardar cambios» y habremos terminado.
En adelante, cada nuevo mensaje que publique el canal de Telegram de origen, aparecerá publicado en el nuevo canal de acuerdo a los cambios realizados en la función de Node.