Inleiding
Via deze service is het mogelijk om notificaties te sturen vanuit het domein van de Vlaamse Overheid naar burgers, ondernemingen en organisaties.
Er zijn twee kanalen mogelijk:
-
passieve notificaties (een melding die verschijnt in de globale header van een digitaal loket en in de Brievenbus van Mijn Burgerprofiel);
-
e-mailnotificaties (rechtstreeks naar het e-mailadres van de bestemmeling).
Beide kanalen kunnen ook gecombineerd worden in één notificatie. Een notificatie versturen gebeurt in de vorm van een notificatiebundel: één boodschap, naar één of meerdere bestemmelingen, via één of meerdere kanalen. De externe dienst aanvaardt de notificatiebundel voor verwerking. Dat is geen garantie dat de notificatie ook meteen (of succesvol) afgeleverd is.
Deze service is Vlaams (beheerd door Digitaal Vlaanderen) en stuurt enkel korte statusmeldingen, geen officiële documenten. Verwar dit niet met eBox, de federale elektronische brievenbus waarin overheden op alle niveaus (federaal, Vlaams, lokaal) daadwerkelijke documenten afleveren, soms met juridische gevolgen (bv. een beroepstermijn).
Use cases
De notificaties-connector wordt gebruikt om burgers of organisaties automatisch op de hoogte te brengen van een statuswijziging, actie, of aankomende vervaldatum in hun dossier, zonder dat ze zelf actief moeten controleren of er iets veranderd is.
Typisch verloop binnen een Skryv-toepassing:
-
Er gebeurt een relevante wijziging in een dossier (bv. een beslissing, een goedkeuring, of een naderende vervaldatum van een toelating).
-
De workflow roept
sendNotificationaan met de betrokken bestemmeling(en), de gewenste categorie (bv.VrijeNotificatieofVervaldagBericht), en de bijhorende inhoud viasleutelWaardeParen. -
Je kiest via
kanalenof de bestemmeling dit als passieve melding (in Mijn Burgerprofiel), als e-mail, of via beide krijgt. -
De bestemmeling ziet de notificatie in zijn Brievenbus (Mijn Burgerprofiel) en/of ontvangt een e-mail.
Setup
Onboardingsprocedure
Neem contact op met Digitaal Vlaanderen om de onboardingsprocedure op te starten, via het aanvraagformulier ‘Starten met Notificaties’. Hierbij krijg je toegang tot de OAuth 2.0/ACM-omgeving (scope dv_notificaties_import) en moet je een JWK-sleutelpaar registreren voor de client credentials-flow.
Opgelet: als je zelf e-mailadressen doorgeeft (dus niet uitsluitend via rijksregisternummer), een uitschrijflink (opt-out) voorzien in je e-mails. Dit is een wettelijke verplichting, te configureren per afzender.
Dependency toevoegen in pom.xml bestand
Voeg onderstaande maven dependency toe in je pom.xml. Dit zorgt ervoor dat de connector code binnengehaald en meegenomen wordt in de build van je applicatie.
<dependency>
<groupId>com.skryv.connectors</groupId>
<artifactId>notification</artifactId>
<version>${skryv.version}</version>
</dependency>
Applicatie eigenschappen
Voeg onderstaande applicatie eigenschappen toe.
|
Eigenschap |
Default |
Beschrijving |
|---|---|---|
|
NotificationBusinessConnector |
||
|
|
|
Notification service URL |
|
NotificationCamundaConnector |
||
|
|
|
Sender organisation code |
|
NotificationTokenFetcher |
||
|
|
|
GeoSecure OAuth scope. |
|
|
|
GeoSecure token request path |
|
|
- |
GeoSecure app number |
|
|
- |
GeoSecure keypath |
|
|
|
Enable AWS seed for GeoSecure |
|
|
- |
AWS keypath for GeoSecure |
Services en functies
Overzicht
|
Functie |
Retourtype |
Info |
|---|---|---|
|
|
Een notificatiebundel aanbieden voor verzending naar één of meerdere bestemmelingen, via passieve en/of e-mailnotificatie. |
Naast de workflow expressie is deze functie ook rechtstreeks aanroepbaar vanuit Java-code door NotificationCamundaConnector (bean notificationService) te injecteren in je klasse.
@RequiredArgsConstructor
public class MyOwnService {
private final NotificationCamundaConnector notificationService;
}
sendNotification
Uitsturen van een notificatie.
Workflow expressie
${notificationService.sendNotification(Map<String,String> bestemmelingen, String categorieCode, boolean gelezen, String dossierId, ZonedDateTime expirationDate, List<String> kanalen, String productId, String merkCode, Map<String, String> sleutelWaardeParen)}
Java-code
NotificationResponse response = notificationService.sendNotification(
bestemmelingen, categorieCode, gelezen, dossierId,
expirationDate, kanalen, productId, merkCode, sleutelWaardeParen);
Input
|
Parameter |
Data type |
Verplicht |
Voorbeeld |
Uitleg |
|---|---|---|---|---|
|
|
Map<String,String> |
Ja |
{'80102529724': ‘RijksRegisterNummer’} |
Sleutel = identificatie of e-mailadres, waarde = het type bestemmeling. Enkel deze drie types zijn geldig: |
|
|
String |
Ja |
‘VrijeNotificatie’ |
De template die bepaalt welke |
|
|
boolean |
Ja (primitief type, dus altijd meegegeven) |
‘false’ |
Geeft aan of het bericht al gelezen is in een ander systeem. Enkel relevant voor het kanaal |
|
|
String |
Nee |
‘interne-referentie-362b1160’ |
Wordt als |
|
|
ZonedDateTime |
Nee |
2026-09-01T10:00:00+02:00 |
Wordt als |
|
|
List<String> |
Ja (min. 1 item) |
['Passief'] |
Enkel twee geldige waarden: |
|
|
String |
Ja |
'201' |
De IPDC-productcode van de dienst waarvoor genotifieerd wordt. |
|
|
String |
Ja (verplicht Java-parameter) |
- |
Volgens de officiële Digitaal Vlaanderen-documentatie wordt dit veld niet meer gebruikt. Alle productomschrijvingen komen sinds IPDC v3 uit |
|
|
Map<String,String> |
Afhankelijk van |
Zie voorbeelden onder Output |
Vrije inhoud van de notificatie, per categorie anders. Hou rekening met onderstaande beperkingen:
|
Twee velden die de externe API verplicht, maar die je hier niet zelf meegeeft:
-
id(de connector genereert zelf een verse UUID per aanroep); -
afzenderOrganisatieCode(ingesteld via de applicatie-eigenschapskryv.connectors.notification.afzender-organisatie-code). Indien niet ingesteld vult Digitaal Vlaanderen dit automatisch in op basis van je OAuth-claims.
Niet ondersteund door deze connector: uitgestelde/geplande verzending (VerzendDatum). De externe API laat toe om een notificatiebundel nu aan te maken, maar pas later te versturen. De connector heeft hiervoor geen parameter.
Output
Je krijgt een object NotificationResponse terug (met een Status-veld, bv. 'Success').
Belangrijk: dit is een bevestiging dat de notificatiebundel aanvaard is voor verwerking (HTTP 202 Accepted). Het is geen garantie dat de notificatie al effectief afgeleverd is bij de bestemmeling.
Voorbeeld sleutelWaardeParen bij categorie VrijeNotificatie
|
Sleutel |
Verplicht |
Uitleg |
|---|---|---|
|
|
Ja |
Titel van de notificatie. |
|
|
Ja |
Vrije tekst, beperkte HTML toegelaten ( |
|
|
Nee |
Deep-link naar meer info, bv. de detailpagina in het loket. |
|
|
Nee (max. 25 tekens) |
Label voor de deep-link. |
{
"Titel": "Inschrijving dienstencheques",
"Body": "Uw inschrijving tot de dienstenchequesportaal is bevestigd",
"DocumentLinkUri": "http://www.dienstencheques.vlaanderen.be/xxx",
"ExterneLinkNaam": "Meer informatie"
}
Voorbeeld sleutelWaardeParen bij categorie VervaldagBericht
|
Sleutel |
Verplicht |
Uitleg |
|---|---|---|
|
|
Ja |
Naam van het product dat vervalt, bv. "Elektronische identiteitskaart". |
|
|
Ja |
De effectieve vervaldatum. |
|
|
Nee |
Bijkomende tekst (niet de body), zelfde beperkte HTML. |
|
|
Nee |
Deep-link naar meer info. |
|
|
Nee |
Label voor de deep-link. |
{
"ArtikelNaam": "Elektronische identiteitskaart",
"Vervaldatum": "2021-06-03",
"BegeleidendeInfo": "<p>Breng mee: <ul><li>oude identiteitskaart</li><li>uitnodiging om een nieuwe identiteitskaart op te halen</li></ul></p>",
"DocumentLinkUri": "https://www.vlaanderen.be/elektronische-identiteitskaart-eid",
"ExterneLinkNaam": "Elektronische identiteitskaart (eID)"
}
Error-handling
|
Statuscode |
Betekenis |
|---|---|
|
|
Ongeldige/onverwerkbare aanvraag. Specifiek geval: foutcode |
|
|
Authenticatie ontbreekt of is mislukt (bv. verlopen of ongeldig OAuth-token). |
|
|
Onvoldoende rechten om deze actie uit te voeren. |
|
|
Ongeldige HTTP-methode voor dit endpoint. |
|
|
Het gevraagde antwoordformaat wordt niet ondersteund. |
|
|
Interne fout bij de externe dienst. |
Geen typering van fouten in de connector. NotificationBusinessConnector.sendNotification vangt élke fout op (ook een mislukte tokenaanvraag) en gooit die telkens door als een kale, ongetypeerde RuntimeException. Er bestaat een eigen NotificationException-klasse in de codebase, maar die wordt nergens gebruikt.
De productie-omgeving van de service hanteert een harde limiet van 1800 calls per minuut.