La situación actual nos ha llevado a buscar la forma de automatizar procesos que antes no consideramos necesarios o que nos pueden simplemente hacer la vida más sencilla y hay una cantidad infinita de herramientas a nuestro alcance para lograrlo. Hoy usaremos algunas de estas herramientas para realizar un ejercicio que espero sea útil al menos como inspiración de lo que podemos lograr, la gestión de tiempo con un botón programable de https://bt.tn y el servicio de https://toggl.com acompañado de un poco de node.js.
Configurar el botón
Lo primero que debemos hacer es configurar el botón, tenemos que entrar al sitio de configuración de bt.tn https://my.bt.tn y seguir los pasos que ahí muestra para dar de alta el botón en nuestras cuenta.
Una vez que aparece en la parte inferior presionamos en Acción y elegimos un evento de tipo HTTP:
En el campo HTTP URL debemos especificar la URL donde se ejecutará el API, por ejemplo un servidor de pruebas. Ej: https://bttn-toggl.inmediatum.dev:9090
El MÉTODO HTTP puede ser GET ya que para este ejemplo no necesitamos ningún dato.
En ENCABEZADOS HTTP vamos agregar un header para un apikey, esto servirá para agregarle una capa de seguridad a nuestra aplicación:
apikey:1c89c0f71ac97754ffc5…
El resto de campos no son necesarios, terminamos la configuración y la guardamos.
Esto es todo lo que necesitamos hacer con el botón, podemos probar precionandolo y en el log del mismo veremos que hay un error ya que aun no esta corriendo el API en el dominio y puerto que especificamos en HTTP URL.
Obtener acceso a toggl.
Lo siguiente para gestionar el tiempo será crear una cuenta gratuita en toggl una vez que estemos dentro del panel de nuestra cuenta, daremos click en la parte inferior izquierda donde dice nuestro nombre y correo electrónico y en la opción Profile Settings. En la parte del final de nuestro perfil esta la sección API Token donde podemos obtener nuestro token para hacer llamadas a toggle. Necesitaremos ese token enseguida.
API en node.js
Ahora para generar el API que obtendrá la llamada al presionar el botón y enviará la información necesaria a toggl, vamos a nuestra carpeta de desarrollo y creamos un nuevo proyecto de node:
$ mkdir bttn-toggl
$ cd bttn-toggl
$ npm init
Respondemos las preguntas de inicialización de NPM, y enseguida instalamos nuestras dependencias:
$ npm install –save express toggl-api
Al terminar creamos el archivo index.js y agregamos el siguiente código:
const PORT = 9090; // Puerto en donde se ejecutará nuestra API.
const APIKEY = ‘1c8…’; // El apikey que pusimos en el header del botón.
const TOGGL_APIKEY = // El API Token que obtenemos de toggl.
Inicializamos la aplicación:
const express = require(‘express’);
const toggl = new (require(‘toggl-api’))({ apiToken : TOGGL_APIKEY });
const app = express();
Agregamos un middleware que revise el apikey que especificamos en los headers del botón para asegurarnos que esa es la fuente de la llamada:
app.use(function(req, res, next){
if(req.headers.apikey != APIKEY)
return res.status(403).end();
next();
});
Agregamos las llamadas necesarias a la API de Toggl:
app.get(‘/’, (req, res) => {
toggl.getCurrentTimeEntry((err, currentEntry) => {
if(err)
return res.status(500).json({ error : err });
if(currentEntry == null){
let entry = { description : “blue bttn” }
toggl.startTimeEntry(entry, function(err, timeEntry) {
if(err)
return res.status(500).json({ error : err });
res.json(timeEntry.id);
});
}
else {
toggl.stopTimeEntry(currentEntry.id, function(err) {
if(err)
return res.status(500).json({ error : err });
res.end();
});
}
});
});
Y terminamos con ejecutar nuestra API de node:
app.listen(PORT, () => { console.log(`listening at http://localhost:${PORT}`) })
Como el botón que estamos usando solo tiene un tipo de evento, estaremos usando el mismo método para comenzar y detener los cronómetros, hay botones que tienen más eventos (presionado, doble presionado, presionado largo, etc) y se podrían usar cada uno por separado, solo se tendría que cambiar ligeramente el código.
Si publicamos esta pequeña API en el dominio que configuramos en la acción del botón tendremos completo nuestro sistema y al presionar el botón una vez deberá comenzar un cronómetro en toggle (se pueden ver los cronómetros activos en el panel web), al volver a presionarlo se detendrá.
Así de sencillo logramos la gestión de tiempo con un botón, espero que sirva de inspiración para la automatización de algún proceso o proyecto interesante, podríamos hacer lo mismo con nuestro móvil con envios de SMS y llamadas automatizadas y etiquetas NFC, con Beacons, usando reconocimiento facial en nuestra laptop para contar las horas que trabajamos frente a ella, etc… las posibilidades son infinitas.