n8n
En n8n, el nodo «Webhook» recibe eventos de aquí y el nodo «HTTP Request» llama a la API. Funciona en n8n Cloud y alojado por ti, siempre que la dirección del webhook sea accesible desde internet por HTTPS.
Recibir eventos y comprobar la firma:
- Crea un flujo con el nodo «Webhook», método POST, y copia la «Production URL».
- Añade la dirección en Ajustes, Webhooks y anota el secreto; solo se muestra una vez.
- En el nodo de webhook, activa «Raw Body» en «Options» y conecta un nodo «Code» con el ejemplo de abajo. Si lo alojas tú, debe estar definido
NODE_FUNCTION_ALLOW_BUILTIN=crypto.
const crypto = require('crypto');
const secret = 'whsec_YOUR_SECRET';
const header = $json.headers['x-horaka-signature'] ?? '';
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
const body = Buffer.from($binary.data.data, 'base64').toString('utf8');
const expected = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${body}`)
.digest('hex');
if (expected !== parts.v1) {
throw new Error('Signature does not match');
}
return [{ json: JSON.parse(body) }];
Controlar el temporizador desde un flujo:
- En Ajustes, API y dispositivos, añade un dispositivo o un token con el permiso «Disparar».
- En n8n, crea una credencial del tipo «Header Auth»: nombre
Authorization, valorBearery tu token. - Añade el nodo «HTTP Request» e introduce los valores de abajo.
Method: POST
URL: https://api.horaka.com/v1/track/toggle
Authentication: Generic Credential Type, Header Auth
Send Body: on, Body Content Type JSON
JSON: {"project": "PROYECTO"}