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.
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.
Žá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:
InvoiceReceived)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.
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).
InvoiceReceivedInvoiceSentInvoiceSentErrorInvoiceSentRetryInvoiceResponseReceivedOrderReceivedMLS (Message Level Status) je nástupcem staršího MLR a poskytuje odesílajicí straně zpětnou vazbu o přijetí a zpracování dokumentu. MLS není standardně aktivován a musí být nastaven pro každou party prostřednictvím capability reviews v konfiguraci SMP. Jakmile je MLS aktivován, PSB ho zpracovává automaticky: jako přijímající Service Provider odesílá PSB zprávu MLS zpět odesílateli po přijetí a doručení.
Když sami odesíláte dokumenty přes PSB, dostáváte zpětnou vazbu MLS od přijímající strany jako webhook událost na topicu MessageLevelStatusReceived. Jako přijímající Service Provider následuje samostatný webhook s topicem MessageLevelStatusSent, jakmile PSB vaším jménem odesle MLS odesílajícímu SP. Pomocí tohoto topicu sledujte, zda jsou vaše vlastní vydané MLS odpovědi správně doručovány.
MessageLevelStatusSent není potvrzením odeslané faktury. Topic se týká MLS, které PSB odesílá jako odpověď na přijatý dokument (Vy, jako přijímající SP, odesíláte stavovou notifikaci zpět původnímu odesílateli), nikoli o e-fakturu, kterou jste sami odeslali. Pokud vidíte mnoho notifikací MessageLevelStatusSent při málo odeslaných fakturach: zkontrolujte, zda hook poslouchá na wildcardu *sent namísto konkrétně na InvoiceSent (viz Wildcard topiky).
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}
Pro ověření podpisu:
X-EConnect-Signature.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.
Kromě HMAC ověření nabízí PSB další bezpečnostní vrstvy:
104.40.188.59 a 104.47.148.207)Pokud máte nakonfigurováno více hooků, PSB určí, který hook se použije, na základě:
&& 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í.Kromě konkrétních topiků můžete také používat wildcard vzory k zachycení více typů událostí jedním hookem.
Send*Send*sent / *SentSent: InvoiceSent, InvoiceResponseSent, OrderSent, MessageLevelStatusSent, HookSent*ReceivedInvoiceReceived, OrderReceived, InvoiceResponseReceived atd.)Invoice*Send* není to samé co *sent. Send* odpovídá topikům začínajícím na Send; tento vzor se u standardních topiků PSB nevyskytuje. Chcete-li zachytit všechny "sent" události (InvoiceSent, MessageLevelStatusSent, HookSent atd.), použijte *sent. InvoiceSentRetry a InvoiceSentError nekončí na Sent, a proto nejsou pokryty příponou *sent.
Níže jsou uvedeny běžné problémy s webhooky a jak je vyřešit.
sha256=sentOn starší než 5 minutHookSentError (viz níže); získat změškané události přes batch endpointX-EConnect-Delivery (unikátní UUID) pro deduplikaciInvoiceReceived), ale na tomto topicu není registrován žádný hook (nikdy nenastaven, nebo mezitím odstraněn)InvoiceReceived uveden v topicech? Bez hooku na tomto topicu se nezobrazí žádný HookSentError, takže absence chybových hlášení nedokazuje, že hook je aktivníMessageLevelStatusSent při málo odeslaných fakturachmailto:) nebo HTTP webhook poslouchá na wildcardu *sent namísto na InvoiceSentInvoiceSent (stejná změna na mail-hooku i na HTTP webhooku); viz Wildcard topikyInvoiceReceived)PSB může přijmout příchozí fakturu, aniž by ji předal příjemci. Topic InvoiceReceived znamená, že PSB fakturu přijal; bez hooku na tomto topicu není nic odesláno na endpoint.
HookSentError existuje pouze tehdy, když je nakonfigurován hook, který se nedoručí.Chybějící hook opravte aktualizací stávajícího hooku místo jeho smazání a znovuvytvoření.
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:
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í.První linie: výpadek na straně zákazníka vs. technický problém (akceptace a produkce)
HookSentError, opakované HTTP 404 nebo "endpoint je offline"/"akceptační prostředí je vypnuto" může také vyplývat z toho, že zákazník dočasně vypne akceptační nebo produkční endpoint (vývoj, údržba). To není incident platformy eConnect.
HookSentError, endpoint offline nebo HTTP 404 na webhook endpointu nakonfigurovaném zákazníkem. Často viditelné jako přesný text Response status code does not indicate success: 404 (Not Found) (obvykle .NET HttpRequestException při odchozím požadavku hooku). Jde o 404 z vlastního endpointu zákazníka (vypnutý nebo špatná cesta), ne o chybu Peppol PartyId not found při odeslání (SMP 404), ani o REST resource 404 z obsluhy chyb API.HookSentError výše (DNS/SSL/timeout, logy, monitorování, batch obnova).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.
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ý.
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.
HookSentError následuje po té, co se PSB pokoušel 5 dní bez odpovědi 2xx. Opakované HTTP 404 nebo zpráva, že endpoint je offline, často vyplývá z toho, že zákazník dočasně vypne akceptační nebo produkční endpoint (vývoj, údržba) -- nejde o incident platformy eConnect. Nejprve potvrdit, zda je výpadek záměrný a dočasný; pokud ano, není potřeba žádná další akce, dokud endpoint opět není dostupný. Změškané události lze stále získat přes batch endpoint během pětidenního okna opakování.
Je to očekávané chování, pokud mail-hook (mailto:) nebo HTTP webhook poslouchá na wildcardu *sent namísto konkrétně na InvoiceSent. MessageLevelStatusSent není potvrzením sami odeslané faktury, ale MLS, které PSB odesílá jako odpověď na přijatý dokument, a spadá pod vzor *sent společně s InvoiceSent, OrderSent a HookSent. Pokud chcete notifikace pouze při odesílání faktur, změňte konfiguraci topicu na InvoiceSent. InvoiceSentRetry a InvoiceSentError nekončí na Sent, a proto nejsou pokryty *sent.
Chcete dokumenty raději získávat hromadně? Podívejte se na batch hook.
Podívejte se na webhook endpointy