Webhooki

Webhook pozwala FlexiProject powiadomić zewnętrzny system w chwili, gdy w organizacji coś się wydarzy. Zamiast wielokrotnie odpytywać API, czy coś się zmieniło, system odbierający dostaje żądanie HTTP z danymi zdarzenia od razu po jego wystąpieniu.

Jeden webhook łączy jedno zdarzenie z jednym adresem odbiorcy. Aby wysyłać dwa różne zdarzenia pod ten sam adres albo to samo zdarzenie do dwóch systemów, tworzy się po dwa webhooki.

Webhooki konfiguruje się w Ustawieniach systemowych > Webhooki. Sekcja jest dostępna dla administratora systemu (zobacz Użytkownicy i uprawnienia). Do odczytu danych innym kanałem służy API.

Zdarzenia

FlexiProject raportuje cztery zdarzenia. Każdy webhook nasłuchuje dokładnie jednego z nich, wybranego z listy Zdarzenie.

Okno Dodaj webhook z rozwiniętą listą Zdarzenie: Projekt utworzony, Projekt usunięty, Akceptacja rozpoczęta, Akceptacja zakończona

Zdarzenie Kiedy FlexiProject wysyła żądanie Dane właściwe dla zdarzenia
Projekt utworzony Powstał nowy projekt, w dowolny sposób: od zera, z szablonu, przez sklonowanie, przez import pliku MS Project lub Excel albo z pomocą AI. projectId, projectName, createdAt
Projekt usunięty Projekt został usunięty. projectId, projectName
Akceptacja rozpoczęta Wniosek o zmianę został przekazany do akceptacji i ruszyła jego ścieżka akceptacji. changeRequestId, changeRequestName, projectId, projectName, date
Akceptacja zakończona Ścieżka akceptacji zakończyła się decyzją: zatwierdzeniem, odrzuceniem albo anulowaniem. changeRequestId, changeRequestName, projectId, projectName, decisionDate, status

Każde żądanie niesie dodatkowo nazwę zdarzenia (event), moment jego wygenerowania (timestamp) oraz identyfikator (userId) i adres e-mail (userEmail) użytkownika, którego działanie je wywołało. Format całego żądania opisuje Format żądania HTTP. Akceptacje opisuje dział Akceptacje.

Konfiguracja webhooka

Lista webhooków

Strona Webhooki pokazuje wszystkie webhooki organizacji w trzech kolumnach: Zdarzenie, URL odbiorcy i Opis. Gdy nic nie zdefiniowano, widać komunikat Brak webhooków.

Okno Dodaj webhook z polami Zdarzenie i URL odbiorcy zaznaczonymi na czerwono

Dodawanie webhooka

  1. Po kliknięciu przycisku dodawania nad listą otworzy się okno Dodaj webhook.
  2. Należy wybrać Zdarzenie. Domyślnie jest ustawione Projekt utworzony.
  3. Następnie należy wpisać URL odbiorcy — adres, pod który FlexiProject wyśle żądanie. Pole jest obowiązkowe i wymaga pełnego adresu razem z protokołem, na przykład https://example.com/hooks/flexiproject. Niepełny adres zostaje odrzucony komunikatem o błędzie przetwarzania danych.
  4. Opcjonalnie można wpisać Opis — notatkę dla zespołu, widoczną tylko na liście.
  5. Po kliknięciu przycisku Zapisz webhook pojawi się na liście, a zaraz potem wyświetli się okno Sekret.

Sekret

Okno Sekret zawiera komunikat: Webhook został utworzony. Poniżej znajduje się sekret, który zostanie wyświetlony tylko raz. Skopiuj go i przechowaj w bezpiecznym miejscu. Po kliknięciu przycisku Kopiuj wartość trafi do schowka (komunikat Skopiowano do schowka), a stamtąd należy ją zapisać w systemie odbierającym. Sekret służy do podpisywania każdego żądania, dzięki czemu odbiorca może potwierdzić, że żądanie pochodzi z FlexiProject (zobacz Format żądania HTTP).

Po zamknięciu okna pełna wartość nie jest już dostępna nigdzie w aplikacji. W otwartym później webhooku pole Sekret pokazuje tylko pierwsze i ostatnie cztery znaki, a środek zastępują gwiazdki; pola nie można edytować.

Edycja webhooka

Po kliknięciu nazwy zdarzenia na liście otworzy się okno Edytuj webhook. Można w nim zmienić zdarzenie, adres odbiorcy i opis, a następnie kliknąć Zapisz. Sekret pozostaje bez zmian — edycja nigdy nie wystawia nowego. Zamknięcie okna z niezapisanymi zmianami wywołuje pytanie Czy chcesz przejść dalej i porzucić zmiany?.

Testowanie webhooka

Po kliknięciu przycisku Testuj w oknie edycji zapisanego webhooka zostanie wysłane pod skonfigurowany adres żądanie w formacie wybranego zdarzenia, wypełnione przykładowymi danymi (na przykład projektem Test Project), a aplikacja potwierdzi to komunikatem Pomyślnie wysłano żądanie testowe. Komunikat potwierdza wysłanie, nie przyjęcie przez odbiorcę — wynik trzeba sprawdzić po stronie odbierającej.

Usuwanie webhooka

Po kliknięciu przycisku Usuń w oknie webhooka należy potwierdzić pytanie Czy na pewno chcesz usunąć webhook?. Webhook zostanie usunięty i od tej chwili zdarzenie nie będzie wysyłane pod ten adres. Usunięcia nie można cofnąć; wznowienie wysyłki to nowy webhook, a więc i nowy sekret.

Format żądania HTTP

FlexiProject wysyła pod skonfigurowany adres żądanie POST z treścią w formacie JSON.

Nagłówki

Nagłówek Zawartość
X-FlexiProject-Event Nazwa zdarzenia: ProjectCreated, ProjectDeleted, AcceptanceStarted albo AcceptanceCompleted.
X-FlexiProject-Delivery Identyfikator doręczenia. Jest taki sam we wszystkich ponowieniach tego samego zdarzenia, więc po nim rozpoznaje się duplikaty.
X-FlexiProject-Timestamp Moment wysłania żądania.
X-FlexiProject-Signature Podpis treści żądania w postaci sha256=<wartość>.

Weryfikacja podpisu

Podpis to HMAC-SHA256 z surowej treści żądania, policzony z sekretem webhooka jako kluczem i zapisany szesnastkowo małymi literami. Odbiorca liczy tę samą wartość z otrzymanej treści i porównuje ją z częścią nagłówka X-FlexiProject-Signature po sha256=. Jeśli wartości się różnią, żądanie trzeba odrzucić — nie pochodzi z tej organizacji w FlexiProject.

Przykładowa treść

{
  "projectId": "6712f0a1c3d4e5f601234567",
  "projectName": "Modernizacja magazynu",
  "createdAt": "2026-09-21T08:14:02Z",
  "userId": "a3f1c7de-1b20-4f9e-9a55-0c2d8e7b41aa",
  "userEmail": "anna.kowalska@example.com",
  "event": "ProjectCreated",
  "timestamp": "2026-09-21T08:14:02Z"
}

Odpowiedź i ponowienia

Odbiorca odpowiada statusem powodzenia (2xx), gdy tylko przyjmie żądanie. Każda inna odpowiedź albo jej brak liczy się jako nieudane doręczenie.

Nieudane doręczenie jest ponawiane automatycznie z rosnącym odstępem: po 1, 2, 4, 8, 16, 32, 64, 128, 256 i 512 minutach. Próby rozkładają się na mniej więcej siedemnaście godzin, więc odbiorca niedostępny przez pewien czas nie traci zdarzenia. Każda próba powtarza tę samą wartość X-FlexiProject-Delivery, dlatego obsługa po stronie odbiorcy musi znosić otrzymanie tego samego zdarzenia więcej niż raz.