Webhooki
RolChat dostarcza zdarzenia do Twoich systemów jako podpisane żądania HTTP POST. Ta strona opisuje webhooki wtyczek; webhooki wysyłane przez regułę Automatyzacji różnią się ponowieniami, czasem oczekiwania i rotacją sekretu, zobacz Webhooki automatyzacji. Te same zasady obowiązują w drugą stronę, gdy Twój system, wtyczka lub dostawca wysyła dane do RolChat. Zweryfikuj każde dostarczenie w poniższej kolejności, zanim na nie zareagujesz.
Jak wygląda dostarczenie
Dział zatytułowany „Jak wygląda dostarczenie”POST /your/endpoint HTTP/1.1Content-Type: application/jsonUser-Agent: RolChat-Webhook/1.0X-RolChat-Timestamp: 1713615825X-RolChat-Signature: sha256=a1b2c3…X-RolChat-Nonce: nonce_01HKQN9…X-RolChat-Event-Id: evt_01HKQN9…
{ "id": "evt_01HKQN9…", "type": "conversation.created", "occurred_at": "…", "data": { … } }| Nagłówek | Znaczenie |
|---|---|
X-RolChat-Timestamp |
Sekundy Unix w chwili wysłania. Część podpisywanej wiadomości. |
X-RolChat-Signature |
sha256=<hex>. Prefiks wskazuje algorytm, aby można go było później zmienić. |
X-RolChat-Nonce |
ULID unikalny dla tego żądania HTTP. Ponowienie dostaje nowy nonce. |
X-RolChat-Event-Id |
Własny identyfikator zdarzenia. Stały przy ponowieniach; używaj go do deduplikacji. |
Dostarczenia wychodzące trafiają tylko do endpointów HTTPS. URL HTTP jest odrzucany przy tworzeniu subskrypcji.
Podpisywana wiadomość to znacznik czasu, dosłowna kropka i surowa treść żądania, bajt w bajt:
canonical = "<timestamp>.<body>"signature = hex( HMAC-SHA256( secret, canonical ) )Podpisuj otrzymane bajty, a nie ponownie zserializowaną kopię sparsowanego JSON. Zmiany białych znaków lub kolejności kluczy psują podpis. SHA-256 to jedyny akceptowany algorytm.
Weryfikacja dostarczenia
Dział zatytułowany „Weryfikacja dostarczenia”Wykonaj te pięć kontroli w podanej kolejności. Przykłady w Pythonie, Node.js, Go, Ruby i PHP są na stronie przykładów weryfikacji.
- Świeżość. Odrzuć, jeśli
|now − X-RolChat-Timestamp| > 300sekund (400). Pięć minut toleruje rozbieżność zegarów, a przechwycone żądanie traci po tym czasie wartość. Synchronizuj serwer przez NTP. - Podpis. Oblicz oczekiwaną wartość i porównaj ją w stałym czasie (
hmac.compare_digest,crypto.timingSafeEqual,hash_equals). Przy niezgodności odrzuć z401. Zwykłe porównanie ciągów ujawnia informacje przez czas wykonania i jest niedopuszczalne. - Nonce. Zapisz
X-RolChat-Noncez TTL 10 minut, używając atomowego zapisu, jeśli klucz nie istnieje (SET NX EX 600). Jeśli już istnieje, odrzuć z409: to powtórzenie. Jeśli magazyn nonce nie działa, odmów bezpiecznie z503, aby RolChat ponowił próbę; nigdy nie przechodź do „akceptuj”. - Parsuj treść dopiero teraz.
- Deduplikuj według identyfikatora zdarzenia. Ponowienia mają nowy nonce, ale ten sam
X-RolChat-Event-Id. Jeśli ten identyfikator został przetworzony w ciągu ostatnich siedmiu dni, odpowiedz200bez ponownego przetwarzania.
Odpowiedz 2xx, gdy tylko dostarczenie zostanie bezpiecznie przyjęte; pracę wykonaj asynchronicznie. RolChat czeka na odpowiedź 15 sekund.
Sekrety
Dział zatytułowany „Sekrety”- Sekret webhooka to 64 losowe bajty zakodowane w base64url (około 86 znaków). Jest generowany przy tworzeniu subskrypcji lub wtyczki i pokazywany raz.
- Przechowuj go we własnym sejfie lub zmiennej środowiskowej; RolChat przechowuje tylko zaszyfrowaną kopię.
- Zaleca się zmianę po 90 dniach; produkt pokazuje przypomnienie, ale nigdy nie wyłącza subskrypcji z powodu braku zmiany.
- Zmiana korzysta z okna nakładania się: po
POST /api/v1/plugins/{id}/webhook-secret/rotateprzez siedem dni weryfikują się zarówno stary, jak i nowy sekret, nowe dostarczenia są podpisywane nowym, a stary jest usuwany po upływie okna. W chwili zmiany nic się nie psuje. - Jeśli sekret wycieknie,
POST /api/v1/plugins/{id}/webhook-secret/revokenatychmiast go unieważnia, wydaje nowy, wysyła e-mail do administratorów konta i zapisuje wpis w audycie.
Ponowienia i martwe wiadomości
Dział zatytułowany „Ponowienia i martwe wiadomości”Odpowiedź inna niż 2xx lub awaria sieci planuje ponowienie:
| Próba | Opóźnienie po poprzedniej |
|---|---|
| 1 | natychmiast |
| 2 | 15 sekund |
| 3 | 1 minuta |
| 4 | 5 minut |
| 5 | 30 minut |
| 6 | 2 godziny |
| 7 | 8 godzin |
| 8 | 24 godziny |
408, 429, 5xx i błędy sieci są ponawiane. 400, 401, 403, 404 i 410 nie są: dostarczenie trafia od razu do kolejki martwych wiadomości, bo ponawianie odrzuconego podpisu lub nieistniejącego endpointu nie może pomóc. Po ośmiu nieudanych próbach dostarczenie również trafia do kolejki martwych wiadomości.
Martwe wiadomości są przechowywane 30 dni i widoczne w Ustawienia → Wtyczki → {plugin} → Log webhooków → DLQ, gdzie administrator może ponownie wysłać wybraną (POST /api/v1/plugins/{id}/webhook-dlq/{entry_id}/replay).
- Treść wychodząca: domyślnie 1 MB (konfigurowalne dla każdej wtyczki). Treść przychodząca do RolChat: 5 MB. Większa daje
413. - Wtyczka może zadeklarować
allowed_source_ips; RolChat stosuje tę listę dozwolonych przed weryfikacją. - Możesz dodatkowo sprawdzać user agent
RolChat-Webhook/1.0jako kontrolę poprawności. Nie jest to mechanizm bezpieczeństwa.
Webhooki przychodzące do RolChat
Dział zatytułowany „Webhooki przychodzące do RolChat”Dostawcy wysyłają dane do RolChat na /api/v1/webhooks/{category}/{adapter}, używając własnych schematów podpisów (Twilio, Telnyx, Bandwidth, Meta dla WhatsApp, Stripe). Każdy adapter weryfikuje podpis swojego dostawcy, normalizuje treść i publikuje ją ponownie na wewnętrznej magistrali zdarzeń z podpisem RolChat. Twój własny system może wysyłać dane do RolChat z tymi samymi nagłówkami X-RolChat-* opisanymi powyżej, podpisane sekretem wtyczki, do której należy endpoint.
Webhooki automatyzacji
Dział zatytułowany „Webhooki automatyzacji”Akcja Wyślij żądanie HTTP modułu Automatyzacja ma własne zasady dostarczania:
- Jeden sekret na konto. Pokaż go lub zrotuj na ekranie Automatyzacji (Właściciel i Administrator). Rotacja działa natychmiast: nie ma okresu nakładania się, stary sekret przestaje być weryfikowany od razu, więc najpierw zaktualizuj odbiorcę albo zaakceptuj krótką lukę.
- Czas oczekiwania: RolChat czeka na odpowiedź 10 sekund.
- Ponowienia: maksymalnie 6 prób łącznie. Przerwa przed próbą 2 wynosi 30 sekund, potem około 2 minuty, 8 minut, 32 minuty i 2 godziny 8 minut, każda z odchyleniem do 20 %. Pojedyncza przerwa nigdy nie przekracza 6 godzin.
- Co jest ponawiane: błędy sieci, przekroczenia czasu,
5xx,408,425i429. Inne odpowiedzi4xx, zablokowany adres lub zbyt duża treść nie są ponawiane: dostarczenie trafia od razu do kolejki martwych wiadomości, tak samo jak po ostatniej nieudanej próbie. - Nagłówki:
X-RolChat-Signature,X-RolChat-Signature-V2,X-RolChat-Timestamp,X-RolChat-Delivery-Id,X-RolChat-Attempt.
Testowanie odbiorcy
Dział zatytułowany „Testowanie odbiorcy”POST /api/v1/webhooks/test-signature wysyła syntetyczne podpisane zdarzenie na endpoint wywołującej wtyczki, aby można było sprawdzić implementację od początku do końca, zanim pojawi się prawdziwy ruch.
Typowe błędy
Dział zatytułowany „Typowe błędy”- Weryfikacja względem sparsowanego i ponownie zakodowanego JSON zamiast surowych bajtów.
- Porównywanie podpisów operatorem
==. - Deduplikacja według nonce (każde ponowienie ma nowy) zamiast według identyfikatora zdarzenia.
- Zegar przesunięty o ponad pięć minut.
- Wykonywanie powolnej pracy przed odpowiedzią, a w efekcie przekroczenie 15 sekund i ponowne otrzymanie tego samego zdarzenia.