n8n
W n8n węzeł „Webhook” odbiera zdarzenia stąd, a węzeł „HTTP Request” wywołuje API. Działa to w n8n Cloud i na własnym serwerze, o ile adres webhooka jest dostępny z internetu przez HTTPS.
Odbieranie zdarzeń i sprawdzanie podpisu:
- Utwórz workflow z węzłem „Webhook”, metoda POST, i skopiuj „Production URL”.
- Dodaj adres w Ustawienia, Webhooki i zanotuj sekret, jest pokazywany tylko raz.
- W węźle webhooka włącz „Raw Body” w sekcji „Options” i dołącz węzeł „Code” z poniższym przykładem. Na własnym serwerze musi być ustawione
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) }];
Sterowanie timerem z workflow:
- W Ustawienia, API i urządzenia utwórz urządzenie lub token z uprawnieniem „Wyzwalacz”.
- W n8n utwórz dane uwierzytelniające typu „Header Auth”: nazwa
Authorization, wartośćBeareri Twój token. - Dodaj węzeł „HTTP Request” i wpisz poniższe wartości.
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": "PROJEKT"}