Nastavení a zabezpečení webhooků

Konfigurace webhooků v PSB: topiky, zabezpečení HMAC SHA256 a IP whitelisting.

Webhooky jsou primární způsob přijímání notifikací v reálném čase z PSB. Při každé relevantní události, přijaté faktuře, změně stavu, potvrzení doručení, PSB odešle HTTP POST request na Váš endpoint s podrobnostmi o události.

Jak webhooky v PSB fungují?

V PSB zaregistrujete webhook ("hook") s URL a topikem. PSB následně odesílá všechny události daného topiku na Vaši URL. Každá událost obsahuje příslušná data jako JSON payload.

Vytvoření webhooku

Žádné uživatelské rozhraní k dispozici: v současné době není možné konfigurovat hook přes uživatelské rozhraní platformy. Hooky se nastavují přes API nebo přes podporu eConnect. Rozhraní samoobsluhy pro hooky je v plánu (plánované na Q4 2026) a bude součástí Control (Platform 2.0): uživatelé pak budou moci hooky sami vytvářet, upravovat a mazat. Do té doby není plánován žádný podrobný návod pro ruční konfiguraci hooků přes API.

Zaregistrujte hook přes API:

POST /api/v1/hook

Nejdůležitější konfigurační parametry:

PolePopisurlHTTPS endpoint, na který PSB odesílá událostitopicTyp události, na kterou chcete reagovat (např. InvoiceReceived)secretTajný klíč pro ověření HMAC podpisu

Poznámka: vyhněte se rychlému mazání a opětovnému vytváření hooků pro stejné partyId a topik. Kvůli race conditions při zpracování úloh to může dočasně vést k tomu, že neexistuje žádný aktivní hook, a události tak nebudou doručeny. Po smazání hooku chvíli počkejte, než vytvoříte nový, nebo místo smazání a opětovného vytvoření použijte aktualizaci.

Přidání topiku k existujícímu hooku

Chcete přidat další topik (např. InvoiceReceived) k existujícímu hooku? Aktualizujte stávající konfiguraci webhooku prostřednictvím standardního API /hook, aby požadovaný topik byl obsažen v poli topics:

{
  "topics": ["InvoiceReceived"]
}

Aktualizujte stávající hook místo jeho smazání a opětovného vytvoření. Mazání a opětovné vytváření způsobuje race condition, při které mohou být události dočasně nedoručeny (viz upozornění výše).

Není samoobslužnou pro netechnické zákazníky. Přidání topiku k existujícímu hooku je technický úkol: osoba, která jej provádí, musí vědět, kam má webhook směřovat (URL endpointu), a rozumět tomu, co je webhook. Netechnický zákazník to zpravidla nemůže udělat samostatně. Zapojte někoho s technickými znalostmi (IT zákazníka nebo podpora eConnect).

Nejpoužívanější topiky
TopikKdyInvoiceReceivedByla přijata nákupní fakturaInvoiceSentProdejní faktura byla úspěšně odeslánaInvoiceSentErrorProdejní faktura nemohla být doručenaInvoiceSentRetryByl spuštěn pokus o opětovné odesláníInvoiceResponseReceivedByla přijata Invoice Response (stavové zprávy)OrderReceivedByla přijata nákupní objednávka
Zabezpečení webhooků pomocí HMAC

PSB zabezpečuje všechna doručení webhooků pomocí HMAC SHA256 podpisů. Při každém requestu PSB odesílá hlavičku:

X-EConnect-Signature: sha256={podpis}
Implementace ověření

Pro ověření podpisu:

  1. Získejte surový JSON payload z requestu.
  2. Vypočítejte HMAC SHA256 hash pomocí Vašeho tajného klíče (stejný, který jste zadali při vytváření hooku).
  3. Porovnejte vypočítaný hash s hodnotou v hlavičce X-EConnect-Signature.
  4. Pokud se shodují, request je autentický.
Prevence replay útoků

Zkontrolujte také pole sentOn v payloadu. Pokud je tento časový údaj starší než 5 minut, request odmítněte. Tím se zabrání replay útokům, při kterých se zachycený request později opětovně přehraje.

Další bezpečnostní možnosti

Kromě HMAC ověření nabízí PSB další bezpečnostní vrstvy:

  • IP whitelisting: omezte přicházející requesty na produkční IP adresy PSB (104.40.188.59 a 104.47.148.207)
  • OAuth webhook autentizace: PSB se může autentizovat na Vašem endpointu pomocí OAuth2 credentials
  • Mutual SSL: použijte klientské certifikáty pro vzájemnou TLS autentizaci
Pořadí priorit

Pokud máte nakonfigurováno více hooků, PSB určí, který hook se použije, na základě:

  1. Hooky na úrovni PartyId mají přednost před hooky na úrovni prostředí
  2. Specifické topiky mají přednost před wildcardy
  3. Pokud více hooků s filtry odpovídá stejnému topiku: vyhrává nejdelší filtr (podle počtu znaků) -- například filtr s další klauzulí && vyhrává nad kratším filtrem bez této klauzule. To zabraňuje duplicitnímu doručení, aniž by filtry musely být vzájemně vylučující.
  4. Při stejné prioritě: hook-id jako rozhodující faktor
Řešení problémů

Níže jsou uvedeny běžné problémy s webhooky a jak je vyřešit.

PříznakPříčinaŘešeníWebhooky nedocházejíEndpoint nedostůpný (timeout 100 sek.)Vyżadováno HTTPS + platný SSL certifikát; deaktivovat ochranu CSRF na webhook endpointuWebhook odmítnut jako nezabezpečenýValidace X-EConnect-Signature selháZkontrolovat výpočet HMAC SHA256: payload × secret → šestnáctkový řetězec s prefixem sha256=Blokován replay útoKPole sentOn starší než 5 minutEndpoint zpracovává příliš pomalu nebo jsou špatně nastavené hodiny"No such host is known" (chyba DNS)Název hostitele webhook endpointu již nelze přeložit, např. po přejmenování prostředí ERP nebo vypršení DNS záznamuZkontrolovat a obnovit DNS záznam domény endpointu; poté získat změškané události přes batch endpointHookSentError (definitivní selhání)PSB se pokoušel 5 dní bez odpovědi 2xxZkontrolovat logy endpointu; sledovat topic HookSentError (viz níže); získat změškané události přes batch endpointStaré faktury znovu doručenyAPI při prvním příjmu nevrací 2xxEndpoint musí vždy vracet 2xx, i pro asynchronní zpracováníDuplicitní zpracování při opakováníŽádná kontrola idempotencePoužít záhlaví X-EConnect-Delivery (unikátní UUID) pro deduplikaci
Monitorování a obnova po HookSentError

PSB posílá webhook události (např. InvoiceReceived při přijetí e-faktury) na konfigurovaný endpoint. Pokud tento endpoint není dostupný — kvůli timeoutu, chybě SSL nebo chybě DNS jako No such host is known — PSB opakuje s exponenciálním zpětným krokem po dobu 5 dní (timeout 100 sek. na pokus). Každý pokus generuje událost HookSentRetry; po 5 dnech bez odpovědi 2xx je vydán HookSentError jako konečný stav a PSB přestává opakovat.

Důsledek: přijatá e-faktura nebude doručena zákazníkovi, dokud je endpoint nedostupný, aniž by to zákazník přímo zjistil. Doporučené kroky:

  • Nastavéní monitorování: přihlásit hook (např. mail-hook) k topicu HookSentError, aby bylo definitivní selhání doručení aktivně signalizováno místo tichého přeskokování. Zvážit také HookSentRetry pro včasné odhalení.
  • Odstranienie příčiny: při chybě DNS zkontrolovat a obnovit DNS záznam domény endpointu; při timeoutech zajistit rychlejší odpověď endpointu (2xx do 100 sek., náročné zpracování asynchronně).
  • Obnova změškaných událostí: události, které se během výpadku nezdařily, lze získat přes batch endpoint. Pětidenní okno opakování znamená, že včasná oprava v tomto období může ještě dohnat zásilání přes standardní doručování.
Osvědčené postupy
  • Používejte vždy HTTPS pro Váš webhook endpoint
  • Implementujte idempotentní zpracování: PSB může ve vzácných případech doručit událost vícekrát
  • Vraťte rychle 2xx stavový kód: PSB považuje každou ne-2xx odpověď za chybu a pokusí se o opětovné doručení
  • Zaznamenávejte všechny přijaté události pro účely ladění a auditingu
  • Používejte systém fronty (queue) na Vaší straně, pokud zpracování trvá déle, potvrďte přijetí nejprve a zpracujte poté
Často kladené otázky
Jak ověřím příchozí webhook pomocí HMAC SHA256?

Vezměte surové JSON tělo requestu, vypočítejte HMAC SHA256 hash pomocí secretu, který jste zadali při vytváření hooku, a porovnejte ho s hodnotou v hlavičce X-EConnect-Signature (za prefixem sha256=). Pokud se shodují, víte, že request pochází z PSB a nebyl během přenosu upraven.

Proč je třeba kontrolovat pole sentOn v payloadu?

Ověřte, že sentOn není starší než 5 minut. Pokud je časové razítko příliš staré, request odmítněte. Tím zabráníte útokům typu replay, při kterých se dříve zachycený request znovu odešle později, i když je podpis technicky správný.

Jak předejít problémům s idempotentním zpracováním a opakováním?

Implementujte idempotentní zpracování na Vaší straně, protože PSB může ve vzácných případech doručit událost vícekrát. Také rychle vraťte HTTP 2xx stavový kód: každá jiná odpověď se považuje za chybu a spustí opakování. Pro náročné zpracování nejprve potvrďte příjem a poté zpracujte přes frontu.


Chcete dokumenty raději získávat hromadně? Podívejte se na batch hook.

Podívejte se na webhook endpointy

Související