Własne webhooki
Zamień własne API HTTP w narzędzia agenta — zbuduj połączenia i narzędzia w panelu, a następnie zweryfikuj podpisane żądanie na swoim serwerze.
Funkcja eksperymentalna
Webhooki niestandardowe są we wdrożeniu kontrolowanym. Jeśli w Ustawienia → Integracje nie widzisz karty Webhooki niestandardowe, poproś swój kontakt w Fibly o włączenie jej dla Twojego obszaru roboczego.
Webhooki niestandardowe pozwalają zamienić dowolne API HTTP, które już prowadzisz, w narzędzie, którego bot użyje w trakcie rozmowy — sprawdzenie statusu zamówienia, wyszukanie klienta, otwarcie zgłoszenia w systemie wsparcia albo cokolwiek innego, co potrafi Twój backend przez HTTP. W przeciwieństwie do gotowych integracji (Calendly, PrestaShop) to samoobsługowy sposób podłączenia własnych systemów, bez udziału inżynierów Fibly — wymaga jednak dewelopera po Twojej stronie, który zbuduje odbierający endpoint i — w zakresie opisanym w tym przewodniku — zweryfikuje, że wywołanie rzeczywiście pochodzi od Fibly.
Kiedy jej użyć
Sięgnij po webhook niestandardowy, gdy chcesz, aby bot wywołał system, dla którego nie ma dedykowanej integracji Fibly: własne API zarządzania zamówieniami, wewnętrzny system zgłoszeń, backend rezerwacji, CRM — cokolwiek dostępnego przez HTTPS. Jeśli dane lub akcja pasują już do istniejącej integracji (Calendly, PrestaShop), użyj jej zamiast tego — nie wymaga żadnego kodu po Twojej stronie.
Budowanie połączenia
Połączenie to jedna z Twoich usług backendowych: jej adres bazowy i statyczne dane uwierzytelniające, których bot używa do jej wywoływania. Każde zdefiniowane narzędzie należy do jakiegoś połączenia i wywołuje ścieżkę względem jego adresu bazowego.
- Otwórz Ustawienia → Integracje, znajdź kartę Webhooki niestandardowe i kliknij Zarządzaj.
- Kliknij Dodaj połączenie.
- Uzupełnij:
- Nazwa — etykieta na Twój własny użytek (np. „API sprawdzania zamówień").
- Adres URL bazowy — główny adres Twojego API, np.
https://api.example.com. Musi to być publicznie dostępny adres HTTPS — adresy lokalne lub prywatne oraz ruch nieszyfrowany (inny niż HTTPS) są odrzucane. - Uwierzytelnianie — sposób, w jaki Fibly uwierzytelnia się w Twoim API:
- Brak uwierzytelniania — żadne dane nie są wysyłane.
- Basic auth — nazwa użytkownika i hasło, wysyłane jako nagłówek
Authorization: Basic. - Token typu Bearer — pojedynczy token, wysyłany jako
Authorization: Bearer <token>.
- Wysyłaj token weryfikacyjny — domyślnie wyłączone. Włącz to ustawienie, jeśli chcesz, aby
Fibly wysyłało podpisany nagłówek
X-Fibly-Verificationprzy każdym wywołaniu na tym połączeniu (zobacz Weryfikacja wywołującego poniżej). Gdy jest wyłączone, Fibly nigdy nie dołącza tego nagłówka.
- Zapisz. Pole hasła/tokena jest tylko do zapisu: po zapisaniu nie jest już nigdy pokazywane w panelu.
Pierwsze utworzone połączenie automatycznie generuje też klucz podpisujący Twojego obszaru roboczego (zobacz Weryfikacja wywołującego poniżej).
Budowanie narzędzia
W ramach połączenia dodaj jedno lub więcej narzędzi — każde odpowiada jednemu wywołaniu HTTP:
- Kliknij Dodaj narzędzie na stronie połączenia.
- Uzupełnij:
- Nazwa narzędzia — identyfikator, którego agent używa wewnętrznie do wywołania tego
narzędzia, np.
get_order_status. Tylko litery, cyfry i podkreślenia, unikalny we wszystkich Twoich połączeniach. - Metoda HTTP —
GET,POST,PUT,PATCHlubDELETE. - Ścieżka — względem adresu bazowego połączenia, np.
/orders/{order_ref}. Ujmij fragment w{ }, aby odwołać się do parametru (zobacz niżej) — zostanie podstawiony wartością argumentu i zakodowany do URL przed wywołaniem. - Opis — podpowiedź, którą model AI czyta, aby zdecydować, kiedy i jak wywołać to narzędzie. Opisz, co robi i kiedy jest przydatne; model nigdy nie pokazuje tego tekstu klientowi.
- Parametry — argumenty, które model może uzupełnić. Dla każdego dodaj nazwę, typ
(
String,Number,Integer,BooleanlubEnumz ustaloną listą wartości), czy jest wymagany, oraz opis. - Wymaga potwierdzenia — zobacz niżej.
- Wymaga weryfikacji tożsamości — zobacz niżej.
- Nazwa narzędzia — identyfikator, którego agent używa wewnętrznie do wywołania tego
narzędzia, np.
- Edytor narzędzia ma przełącznik Angielski/Polski: opis narzędzia i opis każdego parametru są lokalizowane, dzięki czemu model rozumuje w języku, w jakim toczy się rozmowa. Angielski opis jest wymagany; pozostałe języki, jeśli puste, spadają do niego.
- Zapisz i włącz przełącznik Włączone, gdy narzędzie ma być dostępne dla bota na żywo.
Jak agent wywołuje Twój webhook
Gdy model zdecyduje się użyć narzędzia, Fibly buduje i wysyła za Ciebie żądanie HTTP:
- Każdy znacznik
{nazwa}w ścieżce jest podstawiany wartością odpowiadającego argumentu (zakodowaną do URL). - Pozostałe argumenty trafiają do query string dla
GET/DELETE, albo do treści JSON dlaPOST/PUT/PATCH. - Uwierzytelnianie Twojego połączenia (Basic/Bearer) jest stosowane automatycznie.
- Jeśli ustawienie połączenia Wysyłaj token weryfikacyjny jest włączone, dołączany jest
podpisany nagłówek
X-Fibly-Verification— zobacz kolejną sekcję. Domyślnie jest wyłączone, więc dopóki go nie włączysz, Twój webhook w ogóle nie otrzyma tego nagłówka. - Wywołanie ma stały limit czasu ok. 10 sekund, a Fibly nie podąża za przekierowaniami — jeśli Twoje API przekierowuje (30x), zaktualizuj adres bazowy połączenia zamiast polegać na przekierowaniu.
Co widzi agent w odpowiedzi
- Odpowiedź 2xx z treścią JSON trafia do modelu jako dane strukturalne, których może użyć w odpowiedzi. 2xx z treścią inną niż JSON jest przekazywane jako zwykły tekst.
- Odpowiedź inna niż 2xx, przekroczenie limitu czasu lub błąd połączenia są traktowane jako niepowodzenie narzędzia — model dowiaduje się, że wywołanie się nie powiodło, i odpowiednio dostosowuje odpowiedź (w tym przypadku nie widzi Twojego surowego kodu statusu ani treści).
Projektuj odpowiedzi sukcesu swojego webhooka tak, by były małe i bezpośrednio użyteczne — to, co zwrócisz w treści JSON 2xx, jest tym, czego model używa do odpowiedzi klientowi.
Weryfikacja wywołującego (X-Fibly-Verification)
Włącz Wysyłaj token weryfikacyjny na połączeniu (domyślnie wyłączone — zobacz
Budowanie połączenia wyżej), a każde wywołanie na tym połączeniu będzie
nieść podpisany token JWT w nagłówku X-Fibly-Verification. To część, którą musi zaimplementować
Twój deweloper, i ma znaczenie nawet jeśli Twoje API wymaga też własnych danych uwierzytelniających
Basic/Bearer: te dane dowodzą jedynie, że żądanie przyszło skądś z backendu Fibly; podpisany token
dowodzi, że przyszło z konkretnego, skonfigurowanego połączenia Twojego obszaru roboczego, i niesie
kontekst rozmowy oraz klienta potrzebny do podjęcia decyzji autoryzacyjnych. Gdy włączysz ten
przełącznik, Fibly zacznie dołączać nagłówek do każdego wywołania na tym połączeniu —
weryfikacja go po Twojej stronie to osobny krok, opisany niżej; dopóki go nie zaimplementujesz,
nagłówek po prostu dociera nieużywany.
Po co to istnieje. Fibly nie zna Twojego modelu danych, więc nie może sprawdzić na przykład, czy zamówienie, o które pyta klient, rzeczywiście do niego należy. To, co może zrobić, to przekazać Ci kryptograficznie podpisane, odporne na manipulację oświadczenie o tym, kim jest odwiedzający (na tyle, na ile sięga własna weryfikacja Fibly) i do jakiej rozmowy należy wywołanie — tak, aby Twój serwer mógł sam wykonać tę weryfikację własności.
Endpoint JWKS
Fibly generuje dla Twojego obszaru roboczego parę kluczy RSA-2048 przy pierwszym utworzeniu połączenia.
Klucz prywatny nigdy nie opuszcza Fibly; klucz publiczny jest publikowany pod endpointem JWKS
Twojego obszaru roboczego — publicznym, niewymagającym uwierzytelnienia adresem URL, który zwraca Twoje
aktywne (i niedawno zrotowane) klucze publiczne w standardowym formacie JWKS {"keys": [...]}.
Skopiuj swój adres URL JWKS z panelu — nie próbuj go samodzielnie budować. Jest on stały dla
Twojego obszaru roboczego i widoczny obok ID klucza oraz ID połączenia w panelu Klucze
podpisujące, tuż przy przycisku Pobierz klucz publiczny (PEM) oraz akcji Rotuj klucz.
Skopiuj adres URL JWKS do stałej JWKS_URL, a ID połączenia do stałej CONNECTION_ID w
przykładach kodu poniżej — obie wartości powinny być zaszytą na stałe konfiguracją po stronie
Twojego serwera, a nie czymś wyliczanym z żądania. Rotacja od razu zaczyna podpisywać nowe tokeny
nowym kluczem, ale poprzedni klucz pozostaje publikowany w JWKS przez krótkie okno zakładki, tak
aby tokeny już będące w drodze nadal się weryfikowały — pobieraj klucze po kid i nie zaszywaj
na stałe treści jednego klucza, w przeciwnym razie rotacja zepsuje Twoją weryfikację.
Tabela roszczeń (claims)
Token to zwarty JWS, algorytm RS256, z identyfikatorem klucza podpisującego w nagłówku JWT
jako kid. Jego treść (payload):
| Roszczenie | Typ | Zawsze obecne? | Znaczenie |
|---|---|---|---|
iss | string | zawsze | Zawsze literalny ciąg "fibly". |
aud | string (UUID) | zawsze | Id połączenia, do którego należy wywołanie. |
tenant_id | string (UUID) | zawsze | Id Twojego obszaru roboczego. Przydatne jako opcjonalna dodatkowa weryfikacja, że token został podpisany dla Twojego obszaru roboczego — nie używaj go do budowania adresu URL JWKS; ten adres jest stały, skopiuj go z panelu (zobacz Endpoint JWKS wyżej). |
iat | liczba (znacznik Unix) | zawsze | Kiedy token został wystawiony. |
nbf | liczba (znacznik Unix) | zawsze | To samo co iat — token nie jest ważny wcześniej. |
exp | liczba (znacznik Unix) | zawsze | Wygaśnięcie, ok. 120 sekund po iat. Token ma uwierzytelniać to jedno wywołanie, nie być użyty ponownie później. |
jti | string (hex) | zawsze | Unikalny identyfikator tokena, przydatny, jeśli chcesz odrzucać dokładne powtórzenia. |
conversation_id | string (UUID) lub null | zawsze (wartość może być null) | Wątek rozmowy, w którym nastąpiło wywołanie. null dla wywołań spoza prawdziwej rozmowy, np. akcji Test w panelu. |
language | string | zawsze | Aktywny język bota dla tego wywołania, np. en lub pl. |
tool_name | string | zawsze | Nazwa wywołanego narzędzia. |
tool_call_id | string (hex) | zawsze | Unikalny identyfikator tego konkretnego wywołania, przydatny do korelacji z własnymi logami. |
channel | string | tylko wewnątrz prawdziwej rozmowy | Kanał, na którym toczy się rozmowa: chat (widget na stronie), email, whatsapp, facebook lub instagram. |
email_verified | boolean | tylko wewnątrz prawdziwej rozmowy | Czy e-mail odwiedzającego jest ogólnie zaufany: ukończył własną weryfikację Fibly (link magiczny, w tym powracającego odwiedzającego rozpoznanego dzięki zapisanej w przeglądarce weryfikacji ważnej do 90 dni), lub rozmowa przyszła kanałem e-mail (nadawca e-maila to z natury silniejszy sygnał tożsamości). To jedyna flaga, którą sprawdza sama bramka Wymaga weryfikacji tożsamości — zobacz niżej. |
channel_data | object | tylko wewnątrz prawdziwej rozmowy | Kontekst właściwy dla danego kanału, zagnieżdżony pod kluczem odpowiadającym channel — zobacz Dane kanału niżej. |
customer_id | string (UUID) | tylko gdy rozmowa ma zidentyfikowanego klienta | Wewnętrzny identyfikator tego klienta w Fibly. |
name | string lub null | tylko gdy rozmowa ma zidentyfikowanego klienta | Imię/nazwa klienta, jeśli znane. |
email | string lub null | tylko gdy rozmowa ma zidentyfikowanego klienta | E-mail klienta zapisany w systemie. To nie to samo co zweryfikowany — zobacz ostrzeżenie niżej. |
phone | string lub null | tylko gdy rozmowa ma zidentyfikowanego klienta | Numer telefonu klienta, jeśli znany. |
Transkrypt rozmowy nigdy nie jest w nim zawarty — tylko metadane rozmowy/klienta.
Dane kanału (channel_data)
channel_data niesie kontekst właściwy dla kanału, na którym toczyła się rozmowa. Obecny jest
tylko jeden klucz — ten odpowiadający roszczeniu channel — odczytaj go jako
claims["channel_data"][claims["channel"]], zamiast sprawdzać kształt dla każdego kanału z osobna:
channel | klucz w channel_data | pola |
|---|---|---|
chat (widget na stronie) | chat | ip, user_agent, browser_name, browser_version, os_name, os_version oraz geolokalizacja country_code/country/city |
email | email | email |
whatsapp | whatsapp | phone |
facebook | facebook | psid (identyfikator użytkownika przypisany do strony Messengera) |
instagram | instagram | igsid (identyfikator użytkownika przypisany do konta Instagram) |
Tylko kanał chat niesie adres IP, user agent, przeglądarkę/system operacyjny oraz geolokalizację
— te dane pochodzą z sesji przeglądarki odwiedzającego na Twojej stronie, której nie ma dla
pozostałych kanałów. Każde pole, którego Fibly nie ma dla danego wywołania, ma wartość null
zamiast być pominięte, więc kształt dla danego kanału jest zawsze taki sam.
channel_datato dane osobowe. Adres IP, odcisk przeglądarki/systemu operacyjnego, e-mail, numer telefonu oraz identyfikatory Messenger/Instagram to w większości reżimów ochrony danych dane osobowe. Przetwarzaj, przechowuj i loguj je odpowiednio — i nie przekazuj ich dalej tam, gdzie nie przekazałbyś reszty danych kontaktowych klienta.
Roszczenie
email_verifiedma wartośćtrue. Jeśli Twoje narzędzie ma włączone Wymaga weryfikacji tożsamości w panelu, Fibly gwarantuje, żeemail_verifiedjesttrue, zanim Twój webhook zostanie w ogóle wywołany dla tego narzędzia — zobacz kolejną sekcję.
Weryfikacja tokena, krok po kroku
- Odczytaj nagłówek
X-Fibly-Verificationz przychodzącego żądania. Jeśli go brakuje, potraktuj wywołanie jako niezweryfikowane — zdecyduj o własnej polityce (odrzuć je albo udostępnij tylko dane nieistotne z punktu widzenia prywatności). - Pobierz (i cache'uj) swój stały adres JWKS — ten skopiowany z panelu Klucze podpisujące, a
nie wyliczony samodzielnie — i z nagłówka tokena wybierz klucz, którego
kidpasuje. - Zweryfikuj podpis RS256 tokena względem tego klucza.
- Zwaliduj
exp(nie wygasł),iss(równa się"fibly") orazaud(równa się ID połączenia tego połączenia, również skopiowanemu z panelu Klucze podpisujące). Sprawdzajaudzawsze, nie tylko wtedy, gdy chcesz „przypiąć” weryfikację — to on powstrzymuje token podpisany dla innego połączenia przed zweryfikowaniem się tutaj. Opcjonalnie sprawdź też, czy roszczenietenant_idrówna się Twojemu id obszaru roboczego, jako dodatkowe zabezpieczenie. - Dopiero gdy podpis i standardowe roszczenia się zgadzają, zaufaj reszcie treści.
- Wykonaj własną weryfikację własności zasobu na podstawie zweryfikowanych roszczeń — Fibly nie zna Twojego modelu danych i nie może zrobić tego za Ciebie.
Ponieważ zrotowany klucz pozostaje ważny przez krótkie okno zakładki, klient JWKS powinien
cache'ować odpowiedzi na krótko i pobierać je ponownie przy nierozpoznanym kid, zamiast
cache'ować jeden klucz na stałe.
Uwaga dotycząca bezpieczeństwa: nigdy nie pozwól tokenowi wskazać, którym kluczem go
zweryfikować. Odczytanie tenant_id (lub dowolnego innego roszczenia) z niezweryfikowanego
tokena i użycie go do zbudowania adresu URL JWKS, który następnie pobierasz, jest niebezpieczne —
token podpisany kluczem innego tenanta Fibly zostałby pobrany i zweryfikowany względem JWKS tego
tenanta, pozwalając komukolwiek, kto potrafi zdobyć podpisany token z własnego (kontrolowanego
przez atakującego) obszaru roboczego, podszyć się pod wywołania Twojego webhooka. Zawsze
weryfikuj względem jednego, stałego adresu URL JWKS skopiowanego z panelu Klucze podpisujące
Twojego połączenia — nigdy adresu zbudowanego na podstawie samego tokena.
Przykład: narzędzie statusu zamówienia
Załóżmy, że budujesz narzędzie get_order_status: GET /orders/{order_ref} na połączeniu Twojego
API zamówień, z jednym wymaganym parametrem order_ref typu string i włączonym Wymaga
weryfikacji tożsamości. Połączenie ma też włączone Wysyłaj token weryfikacyjny — bez tego
nagłówek X-Fibly-Verification w ogóle by nie dotarł, a kroki 3-4 poniżej nie byłyby możliwe.
- Klient pyta „gdzie jest moje zamówienie 12345?". Model ma
order_ref="12345", ale odwiedzający nie zweryfikował jeszcze e-maila w tej rozmowie. Ponieważ narzędzie wymaga weryfikacji, Fibly w ogóle nie wywołuje Twojego webhooka — zwraca modelowi statusverification_required, a ten prosi klienta o weryfikację e-maila (własny mechanizm linku magicznego Fibly) i ponawia próbę po jej ukończeniu. - Po weryfikacji Fibly wywołuje:
GET https://api.example.com/orders/12345 Authorization: Bearer <token Twojego połączenia> X-Fibly-Verification: <jwt> - Twój serwer weryfikuje JWT tak jak opisano wyżej. Ponieważ to narzędzie wymaga weryfikacji,
email_verifiedjest gwarantowane jakotrue, aemailto zweryfikowany adres odwiedzającego, np.[email protected]. - Twój serwer wyszukuje zamówienie
12345we własnej bazie danych i porównuje e-mail jego właściciela ze zweryfikowanymemailz tokena. Jeśli się zgadzają, zwróć status:
Jeśli się nie zgadzają — albo zamówienie nie istnieje — zwróć 404, a nie 403: 403 potwierdziłby atakującemu, że zamówienie 12345 w ogóle istnieje.{ "order_ref": "12345", "status": "shipped" }
Przykłady kodu: weryfikacja tokena
Każdy z poniższych przykładów odczytuje nagłówek, pobiera JWKS (z cache'owaniem), weryfikuje
podpis RS256 po kid, sprawdza exp/iss/aud i wykonuje tę samą weryfikację własności e-maila
co w przykładzie wyżej. Podmień JWKS_URL i CONNECTION_ID na wartości widoczne w panelu Klucze
podpisujące tego połączenia — obie to zaszyta na stałe konfiguracja, nigdy niewyliczana z tokena
(zobacz uwagę o bezpieczeństwie wyżej).
import jwt
from jwt import PyJWKClient
# Skopiuj obie wartości z panelu Klucze podpisujące tego połączenia i zaszyj je na
# stałe jako konfigurację — nigdy nie wyznaczaj JWKS_URL na podstawie roszczenia z
# (niezweryfikowanego) tokena, bo token podpisany kluczem innego tenanta mógłby się
# tu zweryfikować.
JWKS_URL = "https://app.fibly.io/api/tool-integrations/custom-webhooks/<id-Twojego-obszaru-roboczego>/jwks.json" # skopiuj z panelu
CONNECTION_ID = "c1a2e3f4-5678-4abc-9def-0123456789ab" # „ID połączenia” w panelu Klucze podpisujące
# PyJWKClient cache'uje odpowiedź JWKS i pobiera ją ponownie przy nieznanym `kid`.
_jwks_client = PyJWKClient(JWKS_URL, cache_keys=True)
def verify_fibly_token(token: str) -> dict:
signing_key = _jwks_client.get_signing_key_from_jwt(token)
claims = jwt.decode(
token,
signing_key.key,
algorithms=["RS256"],
audience=CONNECTION_ID,
issuer="fibly",
options={"require": ["exp", "iat", "iss", "aud"]},
)
return claims
def handle_get_order_status(order_ref: str, headers: dict) -> tuple[dict, int]:
token = headers.get("X-Fibly-Verification", "")
if not token:
return {"error": "missing verification token"}, 401
try:
claims = verify_fibly_token(token)
except Exception:
return {"error": "invalid verification token"}, 401
order = get_order(order_ref) # Twoje własne wyszukiwanie
if order is None:
return {"error": "not found"}, 404
verified_email = (claims.get("email") or "").lower()
if not claims.get("email_verified") or order.customer_email.lower() != verified_email:
return {"error": "not found"}, 404 # 404, nie 403 — nie potwierdzaj istnienia zamówienia
return {"order_ref": order_ref, "status": order.status}, 200
Weryfikacja tożsamości i potwierdzenie
Dwa niezależne przełączniki, ustawiane per narzędzie, kontrolują, jak ostrożnie narzędzie jest wywoływane:
Weryfikacja tożsamości (requires_verification)
Włącz Wymaga weryfikacji tożsamości dla narzędzia, które zwraca prywatne dane (szczegóły
zamówienia, informacje o koncie, cokolwiek powiązanego z jednym klientem). Gdy jest włączona,
agent może wywołać Twój webhook dopiero, gdy odwiedzający udowodni, że jest właścicielem swojego
e-maila — albo przez własny link weryfikacyjny Fibly, albo dlatego że rozmowa przyszła kanałem
zweryfikowanego e-maila. Do tego czasu wywołanie narzędzia zwraca modelowi status
verification_required, który prosi klienta o weryfikację i ponawia próbę — Twój webhook nigdy
nie jest wywoływany dla niezweryfikowanej próby.
To dowodzi jedynie, że wywołujący kontroluje jakiś adres e-mail. Nie dowodzi, że konkretny
żądany zasób (np. to konkretne zamówienie) należy do niego — ta weryfikacja zawsze należy do
Ciebie, na podstawie zweryfikowanych roszczeń email/customer_id w tokenie, jak pokazano w
przykładzie powyżej.
Potwierdzenie (requires_confirmation)
Włącz Wymaga potwierdzenia dla narzędzia, które coś zmienia (tworzy zgłoszenie, anuluje zamówienie, cokolwiek, czego nie chcesz uruchamiać po cichu). Gdy jest włączona, widget zatrzymuje się i prosi klienta o wyraźne zatwierdzenie konkretnego wywołania, zanim dotrze ono do Twojego webhooka. Gdy jest wyłączona, narzędzie uruchamia się natychmiast, gdy tylko model zdecyduje się go użyć — odpowiednie dla odczytów bez skutków ubocznych.
Testowanie narzędzia
Zanim włączysz narzędzie dla prawdziwych rozmów, otwórz je w edytorze i skorzystaj z panelu
Przetestuj to narzędzie: wprowadź przykładowe argumenty jako JSON, a następnie kliknij
Uruchom test. Wysyła to prawdziwe wywołanie dokładnie tą samą ścieżką, którą przechodzi
ruch produkcyjny — sprawdzone pod kątem SSRF, z dołączonym rzeczywistym tokenem
X-Fibly-Verification, jeśli ustawienie połączenia Wysyłaj token weryfikacyjny jest włączone
— i pokazuje zwrócony status oraz odpowiedź od razu w panelu, dzięki czemu możesz potwierdzić, że
webhook jest poprawnie podłączony, zanim go włączysz.
Lista kontrolna bezpieczeństwa
- Zawsze weryfikuj podpis. Nigdy nie ufaj roszczeniom w
X-Fibly-Verification, dopóki podpis RS256 nie zostanie potwierdzony względem Twojego JWKS. - Sprawdzaj
exp. Odrzucaj wygasłe tokeny; większość bibliotek JWT robi to automatycznie po dekodowaniu z weryfikacją. - Sam egzekwuj własność zasobu. Fibly potwierdza, kim jest zweryfikowany odwiedzający; nie zna Twojego modelu danych, więc nie może potwierdzić, że rekord, o który pyta, do niego należy.
- Nie ufaj samemu
email. Traktuj go jako zweryfikowany dopiero, gdyemail_verifiedma wartośćtrue. - Używaj HTTPS na swoim endpoincie — Fibly tego wymaga (poza własnym środowiskiem deweloperskim obszaru roboczego, które i tak nie jest dostępne z internetu).
- Chroń sekret swojego połączenia. Traktuj dane Basic/Bearer jak hasło; Fibly szyfruje je w spoczynku i nigdy nie wyświetla ponownie po zapisaniu.
- Preferuj 404 zamiast 403, gdy weryfikacja własności się nie powiedzie, aby nie potwierdzać wywołującemu, że dany zasób w ogóle istnieje.
Powiązane artykuły
- Przegląd narzędzi: wszystkie narzędzia, z których może korzystać bot.
- Rozmowy: zobacz akcje wykonane przez bota, w tym wywołania narzędzi niestandardowych.