Keď niekto požiada o dovolenku, ľudia, ktorí to potrebujú vedieť, by sa o tom mali dozvedieť tam, kde už pracujú — v Slacku. Tento návod pripojí webhooky Collabin ku kanálu Slack, od začiatku do konca: prihlásite sa na odber udalostí o dovolenkách, kryptograficky overíte každé doručenie a odošlete naformátovanú správu. Rovnaký vzor funguje aj pre Microsoft Teams, Discord, n8n, Make alebo akýkoľvek interný systém.
Ako fungujú webhooky Collabin
Webhook je HTTPS endpoint, ktorý hostujete vy; Collabin ho volá požiadavkou POST vždy, keď nastane odoberaná udalosť. K dispozícii sú dve udalosti:
| Udalosť | Spustí sa, keď |
|---|---|
leave.created | je podaná nová žiadosť o dovolenku |
leave.status_changed | je žiadosť schválená alebo zamietnutá |
Každé doručenie je obálka JSON:
{
"event": "leave.created",
"timestamp": "2026-06-13T09:30:00Z",
"delivery_id": "f3a91c0d2b8e4a17",
"organization_id": 42,
"data": {
"id": 1337,
"user_id": 7,
"user": { "id": 7, "name": "Ján Novák" },
"leave_type_id": 1,
"leave_type": { "id": 1, "name": "Dovolenka" },
"start_date": "2026-07-01T00:00:00Z",
"end_date": "2026-07-05T00:00:00Z",
"is_half_day": false,
"status": "PENDING"
}
}
Každú požiadavku doprevádzajú tri hlavičky:
X-Collabin-Event— názov udalosti, takže môžete smerovať bez parsovania tela požiadavky.X-Collabin-Delivery— unikátne ID doručenia, užitočné na deduplikáciu a korelovanie logov.X-Collabin-Signature—sha256=<hex>, HMAC-SHA256 surového tela požiadavky, vypočítaný pomocou tajného kľúča vášho webhooku. Vždy ho overte, skôr než dátam dôverujete.
Collabin čaká maximálne 10 sekúnd a akúkoľvek odpoveď 2xx považuje za úspech — odpovedajte rýchlo a náročnejšiu prácu vykonajte asynchrónne.
Čo budete potrebovať
- Účet Collabin v pláne Pro (správa webhookov to vyžaduje).
- Pracovný priestor Slack, v ktorom môžete vytvoriť incoming webhook.
- Miesto na spustenie ~40 riadkov Node.js: malý VPS, Cloud Run, serverless funkcia — čokoľvek s verejnou HTTPS URL adresou.
Krok 1: Vytvorte incoming webhook v Slacku
V Slacku vytvorte aplikáciu (alebo použite existujúcu), zapnite Incoming Webhooks a pridajte jeden pre kanál, do ktorého majú prichádzať upozornenia. Slack vám vygeneruje URL adresu v tvare https://hooks.slack.com/services/T000/B000/XXXX. Uchovávajte ju ako tajnú.
Krok 2: Nasaďte mostík
Tento malý Express server overí podpis Collabin a preposlie čitateľnú správu do Slacku:
const crypto = require('crypto');
const express = require('express');
const COLLABIN_SECRET = process.env.COLLABIN_WEBHOOK_SECRET;
const SLACK_URL = process.env.SLACK_WEBHOOK_URL;
const app = express();
// Zachovávame surové telo — podpis sa počíta z presných bajtov.
app.use(express.raw({ type: 'application/json' }));
app.post('/collabin-webhook', async (req, res) => {
const expected = 'sha256=' + crypto
.createHmac('sha256', COLLABIN_SECRET)
.update(req.body)
.digest('hex');
const received = req.get('X-Collabin-Signature') || '';
const valid = received.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
if (!valid) {
return res.status(401).send('invalid signature');
}
// Okamžite potvrdíme; Collabin potrebuje iba 2xx.
res.status(200).send('ok');
const payload = JSON.parse(req.body.toString('utf8'));
const leave = payload.data;
const who = leave.user ? leave.user.name : `používateľ #${leave.user_id}`;
const type = leave.leave_type ? leave.leave_type.name : 'Dovolenka';
const from = leave.start_date.slice(0, 10);
const to = leave.end_date.slice(0, 10);
const text = payload.event === 'leave.created'
? `:palm_tree: *${who}* požiadal o *${type}* od *${from}* do *${to}*`
: `:bell: žiadosť *${who}* (${type}, ${from} – ${to}) má teraz stav *${leave.status}*`;
await fetch(SLACK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text })
});
});
app.listen(process.env.PORT || 3000);
Dva detaily sú dôležitejšie, než sa zdá:
- Overujte voči surovému telu. Ak váš framework najprv spracuje JSON a vy ho znova serializujete, zmena poradia kľúčov alebo bielych znakov poruší HMAC. Čítajte presné bajty.
- Použite porovnanie v konštantnom čase (
crypto.timingSafeEqual), aby kontrola neunikla informácie o časovaní.
Krok 3: Zaregistrujte webhook v Collabin
- V prehľade Collabin otvorte Webhooky.
- Pridajte nový webhook: vložte URL adresu svojho endpointu a vyberte udalosti (
leave.created,leave.status_changed, alebo oboje). - Collabin webhooku pridelí tajný kľúč — skopírujte ho do premennej prostredia
COLLABIN_WEBHOOK_SECRETvášho mostíka.
Odošlite testovaciu žiadosť o dovolenku a správa by sa mala v Slacku zobraziť do jednej až dvoch sekúnd.
Prevádzkové poznámky
- Bez automatických opakovaní. Doručenie funguje na princípe „odoslať a zabudnúť": ak je váš endpoint nedostupný alebo vráti iný stav ako 2xx, udalosť sa znova neodošle — avšak neúspešný pokus sa zaznamená do systémového logu chýb Collabin, takže presne vidíte, čo a kedy sa nepodarilo.
- Pri debugovaní deaktivujte, nemažte: webhook môžete prepnúť na neaktívny a neskôr ho znova zapnúť bez nutnosti opätovného zadávania konfigurácie.
- Jeden webhook na jedného odberateľa. Každý webhook má vlastný tajný kľúč; každému následnému systému vytvorte vlastnú registráciu, nezdieľajte jeden endpoint.
Viac než len Slack
Vyššie uvedený mostík je zámerne minimálny. S rovnakými overenými dátami môžete automaticky označiť ľudí ako neprítomných, synchronizovať s interným HR systémom alebo napájať no-code nástroj — nasmerujte spúšťač webhooku v n8n alebo Make na Collabin a overenie podpisu vykonajte v kroku typu function.