Zarejestruj się
Zarejestruj się
Wszystkie przewodniki

Automatyzuj procesy urlopowe bez kodu: webhooki Collabin w n8n i Make

Nasz przewodnik o webhookach Slacka buduje mały mostek w Node.js — ale wcale nie musisz pisać kodu. Dzięki n8n lub Make zdarzenia webhooków Collabin stają się wyzwalaczami dla tysięcy aplikacji: wiadomości Slack i Teams, wiersze Google Sheets, wpisy w kalendarzu, aktualizacje systemu HR. Ten przewodnik krok po kroku buduje wersję dla n8n, włącznie z prawidłową weryfikacją podpisu, a następnie omawia Make i przykładowe scenariusze.

60-sekundowe przypomnienie o webhookach

Collabin wysyła żądanie POST na wybrany przez Ciebie adres URL zawsze, gdy wystąpi zasubskrybowane zdarzenie — leave.created (nowy wniosek) lub leave.status_changed (zatwierdzony/odrzucony). Treść zawiera nazwę event, znacznik czasu, delivery_id oraz pełny obiekt urlopu w polu data (z zagnieżdżonymi user i leave_type). Każde żądanie jest podpisane: nagłówek X-Collabin-Signature zawiera sha256=<HMAC-SHA256 surowej treści>, obliczony z użyciem tajnego klucza Twojego webhooka. Webhooki wymagają planu Pro; pełne informacje o danych znajdziesz w przewodniku o Slacku.

Konfiguracja w n8n

Krok 1: Wyzwalacz Webhook

Utwórz nowy workflow i dodaj węzeł Webhook:

  • Metoda HTTP: POST
  • Odpowiedź: Natychmiast — Collabin czeka maksymalnie 10 sekund, więc najpierw potwierdź, a pracę wykonaj później.
  • W ustawieniach węzła włącz Raw Body. To ma znaczenie: podpis jest liczony dla dokładnych bajtów wysłanych przez Collabin, a ponownie zserializowana treść JSON nie zgadzałaby się.

Skopiuj produkcyjny adres URL webhooka wyświetlany przez węzeł.

Krok 2: Zarejestruj go w Collabin

W panelu Collabin otwórz Webhooki, dodaj nowy z adresem URL z n8n i wybierz zdarzenia. Collabin pokazuje tajny klucz webhooka tylko raz — skopiuj go teraz, będzie potrzebny w następnym kroku.

Krok 3: Zweryfikuj podpis w węźle Code

Dodaj węzeł Code po wyzwalaczu (węzeł Code w n8n może korzystać z wbudowanego modułu crypto Node — to konfiguracja, nie kod aplikacji, który musisz hostować):

const crypto = require('crypto');

const secret = 'TWÓJ_TAJNY_KLUCZ_WEBHOOKA'; // lepiej: dane uwierzytelniające/zmienna środowiskowa n8n
const rawBody = $input.first().binary.data
  ? Buffer.from($input.first().binary.data.data, 'base64')
  : Buffer.from(JSON.stringify($input.first().json.body));

const expected = 'sha256=' +
  crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const received = $input.first().json.headers['x-collabin-signature'] || '';

if (received !== expected) {
  throw new Error('Nieprawidłowy podpis webhooka — dostawa odrzucona.');
}

return [{ json: JSON.parse(rawBody.toString('utf8')) }];

Jeśli podpis się nie zgadza, workflow zatrzymuje się i nic dalej nie jest wykonywane. Od tego momentu każdy węzeł może zaufać danym.

Krok 4: Kieruj i działaj

Dodaj węzeł Switch dla {{ $json.event }} z jednym wyjściem na zdarzenie, a następnie podłącz to, do czego służy workflow. Gałąź Slack to pojedynczy węzeł Slack z wiadomością podobną do:

:palm_tree: {{ $json.data.user.name }} złożył wniosek o urlop
({{ $json.data.leave_type.name }}): {{ $json.data.start_date.slice(0,10) }}
– {{ $json.data.end_date.slice(0,10) }}

Aktywuj workflow, złóż testowy wniosek o urlop w Collabin i obserwuj, jak zapala się log wykonania.

To samo w Make

W Make (dawniej Integromat) wyzwalaczem jest moduł Custom webhook: utwórz go, skopiuj adres URL i zarejestruj go w Collabin w ten sam sposób. Make automatycznie parsuje JSON, a kolejne moduły (Slack, Google Sheets, e-mail…) podłączasz na podstawie zmapowanych pól.

Jedna szczera uwaga: custom webhooki Make nie udostępniają surowej treści żądania w formułach, więc weryfikacja HMAC jest tam w praktyce niemożliwa. Sam adres URL webhooka jest długim, losowym sekretem, który naprawdę trudno odgadnąć — ale oznacza to, że każdy, kto go pozna, mógłby wysyłać fałszywe zdarzenia. Dwa rozsądne podejścia: zaakceptuj to ryzyko dla automatyzacji niskiego ryzyka (błędna wiadomość na Slacku) albo trzymaj przepływy z weryfikacją podpisu w n8n / małym mostku kodowym dla wszystkiego, co zapisuje dane w systemach źródłowych. Nie przekazuj niezweryfikowanych danych z webhooka do systemu płacowego.

Przykładowe scenariusze

  • Dziennik zatwierdzeń: leave.status_changed → filtr status = APPROVED → dodanie wiersza do Google Sheets — bezobsługowy dziennik audytu, który może odczytać office manager.
  • Kalendarz bez ICS: leave.status_changed (zatwierdzony) → utworzenie wydarzenia w Google Calendar we współdzielonym kalendarzu zespołu. (Jeśli potrzebujesz tylko kalendarza, wbudowany kanał kalendarza robi to bez żadnej automatyzacji.)
  • Reakcja na odrzucenie: leave.status_changed → filtr status = REJECTED → powiadomienie HR e-mailem z polem rejection_reason, dzięki czemu odrzucone wnioski mają ludzką reakcję.
  • Ostrzeżenie o liczbie obecnych: leave.created → wyszukanie zespołu w arkuszu → jeśli nakłada się więcej niż N osób z zespołu, wyślij wiadomość do lidera przed zatwierdzeniem.

Uwagi operacyjne

Collabin traktuje każdą odpowiedź 2xx jako sukces i nie powtarza nieudanych dostaw — zachowaj w wyzwalaczu ustawienie „odpowiedz natychmiast", aby wolne aplikacje docelowe nie powodowały strat, i pamiętaj, że nieudane próby są widoczne w dzienniku błędów systemowych Collabin. Jeszcze jedna dobra praktyka: przypisz n8n i Make osobne webhooki w Collabin, każdy z własnym tajnym kluczem, dzięki czemu możesz wycofać jednego odbiorcę bez wpływu na drugiego.