Webhooks im PSB konfigurieren: Topics, HMAC SHA256-Sicherheit und IP-Whitelisting.
Webhooks sind die primäre Methode, um Echtzeit-Benachrichtigungen vom PSB zu empfangen. Bei jedem relevanten Ereignis (eine empfangene Rechnung, eine Statusänderung, eine Zustellbestätigung) sendet der PSB eine HTTP POST-Anfrage an Ihren Endpoint mit den Details des Events.
Sie registrieren einen Webhook (einen "Hook") im PSB mit einer URL und einem Topic. Der PSB sendet dann alle Events für dieses Topic an Ihre URL. Jedes Event enthält die relevanten Daten als JSON-Payload.
Keine UI verfügbar: Es ist derzeit nicht möglich, einen Hook über die Benutzeroberfläche der Plattform zu konfigurieren. Hooks werden über die API oder über den eConnect-Support eingerichtet. Eine Hook-Self-Service-UI ist in der Roadmap (geplant für Q4 2026) und wird Teil von Control (Platform 2.0): Benutzer können Hooks dort dann selbst erstellen, ändern und löschen. Bis dahin ist kein Schritt-für-Schritt-Artikel für die manuelle Hook-Konfiguration über die API geplant.
Registrieren Sie einen Hook über die API:
POST /api/v1/hook
Die wichtigsten Konfigurationselemente:
InvoiceReceived)Achtung: Vermeiden Sie das schnelle Hintereinander-Löschen und Neuanlegen von Hooks für dieselbe partyId und dasselbe Topic. Durch Race Conditions in der Aufgabenverarbeitung kann es vorkommen, dass vorübergehend kein aktiver Hook existiert und Events nicht zugestellt werden. Warten Sie nach dem Löschen eines Hooks einen Moment, bevor Sie einen neuen anlegen, oder verwenden Sie ein Update statt Löschen und Neuanlegen.
Möchten Sie einem bestehenden Hook ein weiteres Topic (z. B. InvoiceReceived) hinzufügen? Aktualisieren Sie die bestehende Webhook-Konfiguration über die reguläre /hook-API, sodass das gewünschte Topic im topics-Array enthalten ist:
{
"topics": ["InvoiceReceived"]
}
Aktualisieren Sie den bestehenden Hook, anstatt ihn zu löschen und neu anzulegen. Löschen und Neuanlegen führt zu einer Race Condition, bei der Events vorübergehend nicht zugestellt werden können (siehe Warnung oben).
Kein Self-Service für nicht-technische Kunden. Das Hinzufügen eines Topics zu einem bestehenden Hook ist eine technische Aufgabe: Die ausführende Person muss wissen, wohin der Webhook gehen soll (die Endpoint-URL), und verstehen, was ein Webhook ist. Ein nicht-technischer Kunde kann dies in der Regel nicht eigenständig durchführen. Ziehen Sie jemanden mit technischem Know-how hinzu (kunden-IT oder eConnect-Support).
InvoiceReceivedInvoiceSentInvoiceSentErrorInvoiceSentRetryInvoiceResponseReceivedMessageLevelStatusReceivedMessageLevelStatusSentOrderReceivedMLS (Message Level Status) ist der Nachfolger des älteren MLR und gibt der sendenden Partei Feedback über den Empfang und die Verarbeitung eines Dokuments. MLS ist nicht standardmäßig aktiviert und muss pro Party über die reviews-Capability in der SMP-Konfiguration konfiguriert werden. Sobald MLS aktiviert ist, handhabt der PSB es automatisch: als empfangender Service Provider sendet der PSB eine MLS-Nachricht an den Absender zurück nach Empfang und Zustellung.
Wenn Sie selbst Dokumente über den PSB versenden, erhalten Sie MLS-Feedback von der empfangenden Partei als Webhook-Event zum Topic MessageLevelStatusReceived. Der Payload enthält unter anderem:
documentIdrefToDocumentIddetails.statusCodeAP (accepted), RE (rejected), AB (acknowledged)details.descriptionUm MLS-Nachrichten zu empfangen, muss der Peppol-Hook das Feld mlsType enthalten. Die möglichen Werte sind ALWAYS_SEND (immer MLS zurücksenden) und FAILURE_ONLY (nur bei Ablehnungen).
Tipp: Das vollständige MLS-Dokument können Sie über
GET /api/v1-beta/{partyId}/generic/{documentId}/downloadabrufen, aber der Webhook-Payload enthält in der Regel ausreichend Informationen.
Der PSB sichert alle Webhook-Zustellungen mit HMAC SHA256-Signaturen. Bei jeder Anfrage sendet der PSB den Header:
X-EConnect-Signature: sha256={Signatur}
Um die Signatur zu verifizieren:
X-EConnect-Signature-Header.Prüfen Sie auch das sentOn-Feld im Payload. Wenn dieser Zeitstempel älter als 5 Minuten ist, lehnen Sie die Anfrage ab. Dies verhindert Replay-Attacks, bei denen eine abgefangene Anfrage später erneut abgespielt wird.
Neben der HMAC-Verifizierung bietet der PSB zusätzliche Sicherheitsebenen:
104.40.188.59 und 104.47.148.207)Wenn Sie mehrere Hooks konfiguriert haben, bestimmt der PSB den zu verwendenden Hook anhand folgender Kriterien:
&&-Klausel gewinnt beispielsweise gegen einen kürzeren Filter ohne diese Klausel. So wird eine doppelte Zustellung vermieden, ohne dass Filter sich gegenseitig ausschliessen müssen.Nachfolgend sind häufige Webhook-Probleme und deren Lösungen aufgeführt.
sha256=sentOn-Feld älter als 5 MinutenHookSentError-Topic überwachen (siehe unten); fehlende Events über den Batch-Endpunkt abrufenX-EConnect-Delivery-Header (eindeutige UUID) für Deduplizierung verwendenDer PSB sendet Webhook-Events (z.B. InvoiceReceived bei einer eingegangenen E-Rechnung) an den konfigurierten Endpunkt. Ist dieser Endpunkt nicht erreichbar — durch ein Timeout, einen SSL-Fehler oder einen DNS-Fehler wie No such host is known — wiederholt der PSB mit exponentiellem Backoff für 5 Tage (Timeout 100 Sek. pro Versuch). Bei jedem Versuch wird ein HookSentRetry-Event gesendet; nach 5 Tagen ohne 2xx-Antwort folgt HookSentError als Abschlussstatus und der PSB stellt die Versuche ein.
Folge: Eine eingegangene E-Rechnung wird nicht an den Kunden weitergeleitet, solange der Endpunkt nicht erreichbar ist, ohne dass der Kunde dies direkt bemerkt. Empfohlene Maßnahmen:
HookSentError abonnieren, damit ein endgültiger Zustellungsfehler aktiv gemeldet wird statt unbemerkt zu bleiben. Optional auch HookSentRetry für frühzeitige Erkennung.Nehmen Sie den rohen JSON-Body des Requests, berechnen Sie den HMAC SHA256-Hash mit dem Secret, das Sie beim Erstellen des Hooks angegeben haben, und vergleichen Sie ihn mit dem Wert im Header X-EConnect-Signature (nach dem Präfix sha256=). Stimmen sie überein, wissen Sie, dass der Request vom PSB stammt und unterwegs nicht verändert wurde.
Prüfen Sie, ob sentOn nicht älter als 5 Minuten ist. Ist der Zeitstempel zu alt, weisen Sie den Request ab. So verhindern Sie Replay-Angriffe, bei denen ein zuvor abgefangener Request später erneut eingereicht wird, selbst wenn die Signatur technisch korrekt ist.
Implementieren Sie eine idempotente Verarbeitung auf Ihrer Seite, da die PSB ein Event in seltenen Fällen mehrfach zustellen kann. Geben Sie außerdem schnell einen HTTP 2xx-Status zurück: Jede andere Antwort gilt als Fehler und löst einen Retry aus. Für aufwändige Verarbeitung können Sie zuerst den Empfang bestätigen und danach über eine Queue weiterverarbeiten.
Möchten Sie Dokumente lieber in großen Mengen abrufen? Sehen Sie sich Batch Hooks an.
Webhook-Endpoints ansehen