Webhooki

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

Jeden webhook łączy jedno zdarzenie z jednym adresem odbiorcy. Jeśli chcesz wysyłać dwa różne zdarzenia pod ten sam adres, utwórz dwa webhooki. Jeśli chcesz wysyłać to samo zdarzenie do dwóch systemów — również utwórz dwa webhooki.

Webhooki konfigurujesz w Ustawienia systemowe → Webhooki. Sekcja jest dostępna dla użytkowników, którzy mogą zarządzać ustawieniami organizacji.

Obsługiwane zdarzenia

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

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 projektu, przez sklonowanie istniejącego projektu, przez import pliku MS Project lub Excela, albo z pomocą AI. identyfikator projektu, nazwa projektu, data utworzenia
Projekt usunięty Projekt został usunięty. identyfikator projektu, nazwa projektu
Akceptacja rozpoczęta Wniosek o zmianę został przekazany do akceptacji i ruszyła jego ścieżka akceptacji. identyfikator i nazwa wniosku o zmianę, identyfikator i nazwa projektu, data rozpoczęcia
Akceptacja zakończona Ścieżka akceptacji zakończyła się decyzją — zatwierdzeniem, odrzuceniem lub anulowaniem. identyfikator i nazwa wniosku o zmianę, identyfikator i nazwa projektu, data decyzji, status decyzji

Każde żądanie, niezależnie od zdarzenia, niesie dodatkowo nazwę zdarzenia, moment jego wygenerowania oraz identyfikator i adres e-mail użytkownika, którego działanie je wywołało.

Dokładne nazwy pól opisuje sekcja Format żądania HTTP.

Konfiguracja webhooka

Gdzie znajdziesz webhooki

Wejdź w Ustawienia systemowe → Webhooki. Lista pokazuje wszystkie webhooki zdefiniowane w organizacji, w trzech kolumnach: Zdarzenie, URL odbiorcy i Opis. Dopóki nic nie zdefiniowano, lista wyświetla komunikat Brak webhooków.

Dodawanie webhooka

  1. Kliknij przycisk dodawania nad listą. Otworzy się okno Dodaj webhook.
  2. Wybierz Zdarzenie. Domyślnie ustawione jest Projekt utworzony.
  3. Wpisz URL odbiorcy — adres, pod który FlexiProject wyśle żądanie. Pole jest obowiązkowe i musi zawierać pełny adres razem z protokołem, na przykład https://example.com/hooks/flexiproject. Niepełny adres zostanie odrzucony komunikatem Wystąpił błąd przetwarzania danych. Spróbuj ponownie lub skontaktuj się z administratorem systemu.
  4. Opcjonalnie dodaj Opis — notatkę dla własnego zespołu, widoczną tylko na tej liście.
  5. Kliknij Zapisz.

Sekret

Zaraz po zapisaniu pojawia się okno Sekret z komunikatem: Webhook został utworzony. Poniżej znajduje się sekret, który zostanie wyświetlony tylko raz. Skopiuj go i przechowaj w bezpiecznym miejscu.

Przyciskiem Kopiuj przenieś wartość do schowka — aplikacja potwierdzi komunikatem Skopiowano do schowka — i zapisz ją w systemie odbierającym. Sekret służy do podpisywania każdego żądania, dzięki czemu odbiorca może potwierdzić, że żądanie faktycznie pochodzi z FlexiProject; patrz Format żądania HTTP.

Po zamknięciu tego okna pełna wartość nie jest już dostępna nigdzie w aplikacji. Gdy otworzysz webhook później, pole Sekret pokaże tylko pierwsze i ostatnie cztery znaki, a środek zastąpi gwiazdkami; pola nie da się edytować.

Edycja webhooka

Kliknij nazwę zdarzenia na liście, aby otworzyć okno Edytuj webhook. Możesz zmienić zdarzenie, adres odbiorcy i opis, a następnie kliknąć Zapisz. Sekret pozostaje bez zmian — edycja webhooka nigdy nie wystawia nowego.

Jeśli zamkniesz okno z niezapisanymi zmianami, aplikacja zapyta Czy chcesz przejść dalej i porzucić zmiany? — wybierz Porzuć, aby wyjść bez zapisywania, albo Anuluj, aby wrócić do edycji.

Testowanie webhooka

Przycisk Testuj jest dostępny w oknie edycji zapisanego webhooka. Wysyła pod skonfigurowany adres żądanie w formacie wybranego zdarzenia, wypełnione przykładowymi danymi (na przykład projektem o nazwie Test Project). Aplikacja potwierdza komunikatem Pomyślnie wysłano żądanie testowe.

Komunikat potwierdza, że FlexiProject wysłał żądanie — nie mówi, czy odbiorca je przyjął. Wynik sprawdź po stronie odbierającej.

Usuwanie webhooka

Otwórz webhook i kliknij Usuń. Aplikacja zapyta Czy na pewno chcesz usunąć webhook?; potwierdź, aby go skasować. Od tego momentu zdarzenie nie jest już wysyłane pod ten adres. Usunięcie jest nieodwracalne — aby wznowić wysyłkę, tworzysz nowy webhook, co oznacza również 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, na przykład ProjectCreated.
X-FlexiProject-Delivery Identyfikator doręczenia. Pozostaje taki sam we wszystkich ponowieniach tego samego zdarzenia, więc możesz po nim rozpoznawać 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. Po stronie odbierającej policz tę samą wartość z otrzymanej treści i porównaj ją z częścią nagłówka X-FlexiProject-Signature następującą po sha256=. Jeśli wartości się różnią, odrzuć żądanie — nie pochodzi z Twojej 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

Odpowiedz statusem powodzenia (2xx), gdy tylko przyjmiesz żą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ę więc na mniej więcej siedemnaście godzin, dzięki czemu odbiorca niedostępny przez jakiś czas nie traci zdarzenia. Ponieważ każda próba powtarza tę samą wartość X-FlexiProject-Delivery, przygotuj swoją obsługę na to, że może otrzymać to samo zdarzenie więcej niż raz.