---
title: "Een serviceprovider instellen"
space: "eInvoicing"
url: "https://www.prilk.com/nl/docs/edocument/integration/serviceprovider"
updated: "2026-05-14"
---

## Een serviceprovider configureren

Met credentials ingesteld ([Een provider instellen](/nl/docs/edocument/integration/aan-de-slag)) 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:**
1. EDocument-record aangemaakt
2. XML als bijlage toegevoegd
3. Profiel auto-gedetecteerd uit XML-namespace (CustomizationID)
4. Bedrijf auto-gedetecteerd uit EndpointID van koper
5. Validatie draait

Antwoord aan provider:
```json
{ "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:
1. Belt de provider-inbox
2. Voor elk ongelezen document: dedup-check op `EDocument.reference`, maakt EDocument aan, bijlage XML, validatie
3. 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:

```python
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](/nl/docs/edocument/integration/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 |
