Registrácia
Registrácia
Všetky návody

Odosielanie upozornení o žiadostiach o dovolenku do Slacku pomocou webhookov Collabin

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.createdje podaná nová žiadosť o dovolenku
leave.status_changedje ž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-Signaturesha256=<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á:

  1. 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.
  2. Použite porovnanie v konštantnom čase (crypto.timingSafeEqual), aby kontrola neunikla informácie o časovaní.

Krok 3: Zaregistrujte webhook v Collabin

  1. V prehľade Collabin otvorte Webhooky.
  2. Pridajte nový webhook: vložte URL adresu svojho endpointu a vyberte udalosti (leave.created, leave.status_changed, alebo oboje).
  3. Collabin webhooku pridelí tajný kľúč — skopírujte ho do premennej prostredia COLLABIN_WEBHOOK_SECRET váš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.