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→ filtrstatus = 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→ filtrstatus = REJECTED→ powiadomienie HR e-mailem z polemrejection_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.