Konfigurácia webhookov v PSB: topiky, zabezpečenie HMAC SHA256 a IP whitelisting.
Webhooky sú primárny spôsob prijímania notifikácií v reálnom čase z PSB. Pri každej relevantnej udalosti, prijatej faktúre, zmene stavu, potvrdení doručenia, PSB odošle HTTP POST request na Váš endpoint s podrobnosťami o udalosti.
V PSB zaregistrujete webhook ("hook") s URL a topikom. PSB následne odosiela všetky udalosti daného topiku na Vašu URL. Každá udalosť obsahuje príslušné dáta ako JSON payload.
Žiadne používateľské rozhranie k dispozícii: v súčasnosti nie je možné konfigurovať hook prostredníctvom používateľského rozhrania platformy. Hooky sa nastavujú cez API alebo prostredníctvom podpory eConnect. Rozhranie samoobsluhy pre hooky je v pláne (plánované na Q4 2026) a bude súčasťou Control (Platform 2.0): používatelia budú môcť hooky sami vytvárať, upravovať a mazať. Dovtedy nie je plánovaný žiadny podrobný návod na manuálnu konfiguráciu hookov cez API.
Zaregistrujte hook cez API:
POST /api/v1/hook
Najdôležitejšie konfiguračné parametre:
InvoiceReceived)Poznámka: vyhnite sa rýchlemu mazaniu a opätovnému vytváraniu hookov pre rovnaké partyId a topik. Kvôli race conditions pri spracovaní úloh to môže dočasne viesť k tomu, že neexistuje žiadny aktívny hook, a udalosti tak nebudú doručené. Po zmazaní hooku chvíľu počkajte, kým vytvoríte nový, alebo namiesto zmazania a opätovného vytvorenia použite aktualizáciu.
Chcete pridať ďalší topik (napr. InvoiceReceived) k existujúcemu hooku? Aktualizujte existujúcu konfiguráciu webhooku prostredníctvom štandardného API /hook, aby požadovaný topik bol zahrnutý v poli topics:
{
"topics": ["InvoiceReceived"]
}
Aktualizujte existujúci hook namiesto jeho zmazania a opätovného vytvorenia. Zmazanie a opätovné vytvorenie spôsobuje race condition, pri ktorej môžu byť udalosti dočasne nedoručené (pozri upozornenie vyššie).
Nie je samoobslužné pre netechnických zákazníkov. Pridanie topiku k existujúcemu hooku je technická úloha: osoba, ktorá ju vykonáva, musí vedieť, kam má webhook smerovať (URL endpointu), a rozumieť tomu, čo je webhook. Netechnický zákazník to spravidla nemôže urobiť samostatne. Zapojte niekoho s technickými znalosťami (IT zákazníka alebo podpora eConnect).
InvoiceReceivedInvoiceSentInvoiceSentErrorInvoiceSentRetryInvoiceResponseReceivedOrderReceivedMLS (Message Level Status) je nástupcom staršieho MLR a poskytuje odosielajúcej strane spätnú väzbu o prijatí a spracovaní dokumentu. MLS nie je štandardne aktivovaný a musí byť nastavený pre každú party prostredníctvom capability reviews v konfigurácii SMP. Hneď ako je MLS aktivovaný, PSB ho spracováva automaticky: ako prijímajúci Service Provider odosiela PSB správu MLS späť odosielateľovi po prijatí a doručení.
Keď sami odosielate dokumenty cez PSB, dostávate spätnú väzbu MLS od prijímajúcej strany ako webhook udalosť na topicu MessageLevelStatusReceived. Ako prijímajúci Service Provider nasleduje samostatný webhook s topicom MessageLevelStatusSent, hneď ako PSB vo vašom mene odošle MLS odosielajúcemu SP. Pomocou tohto topiku sledujte, či sú vaše vlastné vydané MLS odpovede správne doručované.
MessageLevelStatusSent nie je potvrdením odoslanej faktúry. Topic sa týka MLS, ktoré PSB odosiela ako odpoveď na prijatý dokument (Vy, ako prijímajúci SP, odosielate stavovú notifikáciu späť pôvodnému odosielateľovi), nie o e-faktúru, ktorú ste sami odoslali. Pri mnohých notifikáciách MessageLevelStatusSent pri málo odoslaných faktúrach: skontrolujte, či hook počúva na wildcarde *sent namiesto konkrétne na InvoiceSent (pozri Wildcard topiky).
PSB zabezpečuje všetky doručenia webhookov pomocou HMAC SHA256 podpisov. Pri každom requeste PSB odosiela hlavičku:
X-EConnect-Signature: sha256={podpis}
Na overenie podpisu:
X-EConnect-Signature.Skontrolujte tiež pole sentOn v payloade. Ak je tento časový údaj starší ako 5 minút, request odmietnite. Tým sa zabráni replay útokom, pri ktorých sa zachytený request neskôr opätovne prehrá.
Okrem HMAC overenia ponúka PSB ďalšie bezpečnostné vrstvy:
104.40.188.59 a 104.47.148.207)Ak máte nakonfigurovaných viacero hookov, PSB určí, ktorý hook sa použije, na základe:
&& vyhráva nad kratším filtrom bez tejto klauzuly. Zabraňuje to duplicitnému doručeniu bez toho, aby sa filtre musely vzájomne vylučovať.Okrem konkrétnych topikov môžete tiež používať wildcard vzory na zachytenie viacerých typov udalostí jedným hookom.
Send*Send*sent / *SentSent: InvoiceSent, InvoiceResponseSent, OrderSent, MessageLevelStatusSent, HookSent*ReceivedInvoiceReceived, OrderReceived, InvoiceResponseReceived atď.)Invoice*Send* nie je to isté ako *sent. Send* zodpovedá topikom začínajúcim na Send; tento vzor sa v štandardných topikoch PSB nevyskytuje. Na zachytenie všetkých "sent" udalostí (InvoiceSent, MessageLevelStatusSent, HookSent atď.), použite *sent. InvoiceSentRetry a InvoiceSentError nekončia na Sent, a preto nie sú pokryté prípanou *sent.
Nižšie sú uvedené bežné problémy s webhookmi a ich riešenia.
sha256=sentOn staršie ako 5 minútHookSentError (pozri nižšie); získat zmeškané udalosti cez batch endpointX-EConnect-Delivery (unikátne UUID) na deduplikáciuInvoiceReceived), ale na tomto topicu nie je registrovaný žiaden hook (nikdy nenastavený, alebo medzitým odstránený)InvoiceReceived uvedený v topicoch? Bez hooku na tomto topicu sa nezobrazí žiadny HookSentError, takže absencia chybových hlásení nedokazuje, že hook je aktivnyMessageLevelStatusSent pri málo odoslaných faktúrachmailto:) alebo HTTP webhook počúva na wildcarde *sent namiesto na InvoiceSentInvoiceSent (rovnaká zmena na mail-hooku aj na HTTP webhooku); pozri Wildcard topikyInvoiceReceived)PSB môže prijať dochádzajúcu faktúru bez toho, aby ju odovzdal prijímajúcej strane. Topic InvoiceReceived znamená, že PSB faktúru prijal; bez hooku na tomto topicu sa nič neodosiela na endpoint.
HookSentError existuje iba vtedy, keď je nakonfigurovaný hook, ktorý zlyháva pri doručení.Chýbajúci hook opravte aktualizáciou existujúceho hooku namiesto jeho vymazania a opätovného vytvorenia.
PSB posiela webhook udalosti (napr. InvoiceReceived pri prijíaní e-faktúry) na konfigurovaný endpoint. Ak tento endpoint nie je dostupný — kvôli timeoutu, chybe SSL alebo chybe DNS ako No such host is known — PSB opakuje s exponenciálnym spätným krokom po dobu 5 dní (timeout 100 sek. na pokus). Každý pokus generuje udalosť HookSentRetry; po 5 dňoch bez odpovede 2xx je vydaný HookSentError ako konečný stav a PSB prestáva opakovať.
Dôsledok: prijatá e-faktúra nebude doručená zákazníkovi, kým je endpoint nedostupný, bez toho aby si to zákazník priamo všimol. Odporúčané kroky:
HookSentError, aby definitlvne zlyhanie doručovania bolo aktlvne signalizované namiesto tichého prechodzenia. Zvážiť aj HookSentRetry pre skoré odhalenie.Prvá línia: výpadok na strane zákazníka vs. technický problém (akceptácia a produkcia)
HookSentError, opakované HTTP 404 alebo "endpoint je offline"/"akceptačné prostredie je vypnuté" môže tiež vyplývať z toho, že zákazník dočasne vypne akceptačný alebo produkčný endpoint (vývoj, údržba). To nie je incident platformy eConnect.
HookSentError, endpoint offline alebo HTTP 404 na webhook endpointe nakonfigurovanom zákazníkom. Často viditeľné ako presný text Response status code does not indicate success: 404 (Not Found) (zvyčajne .NET HttpRequestException pri odchodzom požiadavku hooku). Ide o 404 z vlastného endpointu zákazníka (vypnutý alebo nesprávna cesta), nie o chybu Peppol PartyId not found pri odosielaní (SMP 404), ani o REST resource 404 zo spracovania chýb API.HookSentError vyššie (DNS/SSL/timeout, logy, monitorovanie, batch obnova).Vezmite surové JSON telo requestu, vypočítajte HMAC SHA256 hash pomocou secretu, ktorý ste zadali pri vytváraní hooku, a porovnajte ho s hodnotou v hlavičke X-EConnect-Signature (za prefixom sha256=). Ak sa zhodujú, viete, že request pochádza z PSB a nebol počas prenosu upravený.
Overte, či sentOn nie je starší ako 5 minút. Ak je časová značka príliš stará, request odmietnite. Tým zabránite útokom typu replay, pri ktorých sa skôr zachytený request znova odošle neskôr, aj keď je podpis technicky správny.
Implementujte idempotentné spracovanie na Vašej strane, pretože PSB môže v zriedkavých prípadoch doručiť udalosť viackrát. Taktiež rýchlo vráťte HTTP 2xx stavový kód: každá iná odpoveď sa považuje za chybu a spustí opakovanie. Pre náročné spracovanie najprv potvrďte príjem a potom spracujte cez front.
HookSentError nasleduje po tom, čo sa PSB pokúšal 5 dní bez odpovede 2xx. Opakované HTTP 404 alebo správa, že endpoint je offline, často vyplýva z toho, že zákazník dočasne vypne akceptačný alebo produkčný endpoint (vývoj, údržba) -- nejde o incident platformy eConnect. Najprv potvrdiť, či je výpadok zámerný a dočasný; ak áno, nie je potrebná žiadna ďalšia akcia, kým endpoint opäť nie je dostupný. Zmeškané udalosti možno stále získať cez batch endpoint počas päťdňového okna opakovaní.
Je to očakávané správanie, ak mail-hook (mailto:) alebo HTTP webhook počúva na wildcarde *sent namiesto konkrétne na InvoiceSent. MessageLevelStatusSent nie je potvrdením sami odoslanej faktúry, ale MLS, ktoré PSB odosiela ako odpoveď na prijatý dokument, a spadá pod vzor *sent spolu s InvoiceSent, OrderSent a HookSent. Ak chcete notifikácie iba pri odosielaní faktúr, zmeňte konfiguráciu topiku na InvoiceSent. InvoiceSentRetry a InvoiceSentError nekončia na Sent, a preto nie sú pokryté *sent.
Chcete dokumenty radšej získavať hromadne? Pozrite sa na batch hook.
Pozrite si webhook endpointy