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
- Kliknij przycisk dodawania nad listą. Otworzy się okno Dodaj webhook.
- Wybierz Zdarzenie. Domyślnie ustawione jest Projekt utworzony.
- 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. - Opcjonalnie dodaj Opis — notatkę dla własnego zespołu, widoczną tylko na tej liście.
- 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.