Een serviceprovider instellen
Een serviceprovider configureren
Met credentials ingesteld (Een provider instellen) kiest u hoe documenten in- en uitgaan: webhook voor realtime inbound, polling voor geplande pull, of beide.
Webhook (inbound, realtime)
Een webhook laat uw serviceprovider uw ERPNext informeren zodra een document arriveert — meestal binnen seconden.
1. Configureer de webhook-URL in het dashboard van uw provider:
https://uw-domein.nl/api/method/edocument_integration.api.webhook
De webhook accepteert:
- Method: POST
- Body: rauwe PEPPOL UBL-XML
- Authenticatie: publiek (geen auth-header vereist — endpoint is
allow_guest)
2. Wat gebeurt er bij ontvangst:
- EDocument-record aangemaakt
- XML als bijlage toegevoegd
- Profiel auto-gedetecteerd uit XML-namespace (CustomizationID)
- Bedrijf auto-gedetecteerd uit EndpointID van koper
- Validatie draait
Antwoord aan provider:
{ "status": "success", "result": { "edocument": "EDOC-00001" } }
3. Beveiligings-overwegingen
Omdat de endpoint publiek is, kan iedereen met de URL XML POSTen. In de praktijk is dat acceptabel omdat:
- XML wordt gevalideerd tegen XSD + Schematron — onzin komt niet door
- EndpointID van koper moet matchen aan een Company op uw site
- Mislukte validatie geeft "Validation Failed", door een System Manager te beoordelen
Wilt u harder beveiligen:
- Plaats een WAF-regel die alleen het IP-bereik van uw provider toestaat
- Voeg een shared-secret-header-check toe in een
before_insert-hook op EDocument
Polling (inbound, gepland)
Als uw provider geen webhooks ondersteunt (of u liever pull-semantiek gebruikt), haalt polling de inbox periodiek op.
Automatische polling: de app installeert een dagelijkse scheduled task die alle actieve Integration Settings met Recommand-integrator polled. Zie scheduler_events in edocument_integration/hooks.py.
Handmatige polling: op het EDocument Integration Settings-formulier: klik Poll Incoming Documents. De app:
- Belt de provider-inbox
- Voor elk ongelezen document: dedup-check op
EDocument.reference, maakt EDocument aan, bijlage XML, validatie - Returnt een telling: "Processed 2 invoice(s)" of "Skipped 1 duplicate(s)"
Duplicaten voorkomen
Beide inbound-paden zetten EDocument.reference op het provider-document-ID. Bij re-poll of webhook-retry voorkomt de check duplicaten:
existing = frappe.db.exists("EDocument", {"reference": document_id})
if existing:
return {"skipped": True, "reason": "duplicate"}
Overgeslagen duplicaten worden in Error Log gelogd met het document-ID — audit-spoor blijft behouden.
Outbound — API-methode
Voor outbound configureert u niets extra naast credentials. De verzending gebeurt bij klikken op Transmit via API op een EDocument. Zie Verzenden & ontvangen.
Troubleshooting
| Symptoom | Waar te kijken |
|---|---|
| Webhook vuurt niet | Provider-dashboard-logs — bevestig URL en payload |
| Webhook geeft 500 | Error Log in ERPNext — volledige traceback |
| Polling levert niets op | Integration Settings: verifieer credentials; check API key niet geroteerd |
| Transmission succes maar ontvanger krijgt niets | Tracking-dashboard provider — kan in wachtrij staan bij Access Point ontvanger |
| Dubbele documenten | Check dat reference wordt gezet; oude EDocument zonder reference triggert dedup-check niet |