Afspraken maken in WordPress
zonder spooktijdsloten.
OW Agenda regelt het online reserveren, de bevestiging, de herinneringen en de dagelijkse agenda van de praktijk. Elke aanvraag van een bezoeker moet eerst bevestigd worden via een link in zijn mailbox voor ze een plaats inneemt: een bot raakt nooit tot in je planning. Gratis, GPL, geen Pro-versie.
Waarom alweer een afsprakenplugin?
Op de website van een praktijk kost een reservatieformulier zonder vangnet meer werk dan het uitspaart. Om het even welke bot vult een publieke planning, en wie de telefoon opneemt, is de hele dag bezig echte afspraken te scheiden van aanvragen die nooit hebben bestaan.
De gevestigde plugins werken, maar ze zijn allemaal op hetzelfde model gebouwd: een bewust afgeknepen gratis versie — één medewerker, één locatie, een handvol diensten — en een jaarabonnement om de software gewoon te kunnen gebruiken. Wie alleen werkt, betaalt vooral het recht om uit de demo te stappen.
OW Agenda vertrekt van een echte praktijk en van drie randvoorwaarden: een aanvraag bestaat pas na bevestiging per e-mail, twee bezoekers kunnen niet hetzelfde tijdslot boeken, en de agenda moet rechtstaand tussen twee patiënten door te bedienen zijn, op een telefoon. De rest — klantenbestand, uitnodigingen, ICS, herinneringen — volgt uit die drie regels.
Zonder bevestiging per e-mail is een open formulier een planning die bots gratis volzetten. Hier blijft de aanvraag in afwachting, houdt ze het tijdslot 45 minuten vast en verdwijnt ze vanzelf als er nooit op de link geklikt wordt.
Twee bezoekers op hetzelfde tijdslot met drie seconden verschil: een gewone MySQL-transactie legt geen enkele rijvergrendeling en registreert ze allebei. OW Agenda serialiseert de reservatie met een named lock — de tweede krijgt een bericht, geen duplicaat.
Tussen twee patiënten door opent niemand wp-admin op een telefoon. Het beheer gebeurt op een pagina van je eigen site achter een login: dagoverzicht, openstaande aanvragen, verplaatsen, statussen gedaan / afwezig, met een paar duimbewegingen.
Wat er concreet verandert
Geen slogans. Dit zijn de technische keuzes die dit product onderscheiden.
De shortcode [ow_agenda] toont de eerstvolgende 14 beschikbare dagen en daarna de vrije uren: dag kiezen, tijdslot kiezen, kort formulier (naam, telefoon, e-mail, bericht) en een AVG-toestemmingsvakje. Jij bepaalt het interval, de duur van een consultatie, de buffertijd tussen twee afspraken, de minimale termijn vooraf en hoe ver vooruit er geboekt kan worden. Elk item in je agenda — een online reservatie, een telefonische afspraak die je zelf inbrengt, een geblokkeerd tijdslot — haalt zijn tijdsspanne uit de beschikbaarheden.
De aanvraag van een bezoeker blijft ongeverifieerd zolang er niet op de link in de e-mail geklikt is. Ze houdt het tijdslot 45 minuten vast en wordt daarna automatisch opgeruimd. Daarvoor al zijn het honeypotveld en de tijdstempel van het formulier verplicht — ze weglaten schakelt niets meer uit —, wordt het uurquotum geteld per IPv4-adres en per /64-prefix in IPv6, en beperkt een plafond het aantal onbevestigde aanvragen op eenzelfde dag.
De meldingsmail bevat twee knoppen, Bevestigen en Weigeren, met links die ondertekend zijn met HMAC-SHA256: jij beslist met één tik, zonder WordPress te openen of in te loggen. Handmatige bevestiging is de aanbevolen modus; automatische bevestiging blijft beschikbaar voor activiteiten waar niets af te wegen valt.
De shortcode [ow_agenda_admin] maakt een pagina “Agenda” op je site, beveiligd met een login en met een eigen capability: dagoverzicht, openstaande aanvragen, een telefonisch gemaakte afspraak toevoegen, tijdsloten blokkeren, verplaatsen, statussen gedaan en afwezig. Zet je ze op het startscherm van je telefoon, dan gedraagt ze zich als een app.
Klantfiches zoeken, aanmaken, bewerken en verwijderen, automatisch aangevuld door de bevestigde afspraken. Voor een opvolgsessie laat een persoonlijke privélink de klant zelf zijn datum kiezen, voor een dienst en een duur die jij vastlegt: de uitnodiging vervalt, is eenmalig bruikbaar en wordt opnieuw bruikbaar als de afspraak geannuleerd wordt.
Verzorgde HTML-e-mails bij elke stap, met een ICS-bestand in bijlage: je klant zet de afspraak met één beweging in de agenda van zijn telefoon, een verplaatsing werkt het item bij en een annulering wist het. De herinnering de dag voordien vertrekt in een schuivend venster van 12 tot 36 uur en haalt zichzelf in bij de volgende uitvoering; de uurlijkse taak plant zichzelf opnieuw in als ze verdwijnt.
Tegenover alternatieven
Verifieerbare data. Alleen aanvinken wat bij de concurrent echt bestaat.
| Criterium | OW Agenda | Amelia | Bookly | Simply Schedule Appointments |
|---|---|---|---|---|
| Verdienmodel | Gratis, GPL-2.0 | Freemium (betalende Pro) | Freemium (betalende Pro) | Freemium (betalende Pro) |
| Beperkingen van de gratis versie | Geen: alles zit erin | Lite: 1 medewerker, 1 locatie | 5 diensten, 1 medewerker | Basisfuncties |
| Licentiesleutel te activeren | Geen | Voor de Pro-versie | Voor de Pro-versie | Voor de Pro-versie |
| Dubbele e-mail-opt-in voor het tijdslot bezet raakt | Standaard actief | Niet vermeld | Niet vermeld | Niet vermeld |
| Bevestigen / weigeren vanuit de e-mail, zonder in te loggen | Links ondertekend met HMAC-SHA256 | Ja | Niet vermeld | Niet vermeld |
| ICS-bestand in bijlage bij de e-mails van de klant | REQUEST, updates en CANCEL | |||
| Automatische anonimisering van afgelopen afspraken | Inbegrepen, instelbare termijn | Niet vermeld | Niet vermeld | Niet vermeld |
| Dagelijks beheer | Pagina op de site, mobile-first | WordPress-back-office | WordPress-back-office | WordPress-back-office |
Drie manieren om een formulier in te bouwen
Geen opgelegde proprietary page builder. Kies de aanpak die bij jouw stack past.
[ow_agenda]
// La page « Prendre rendez-vous » est créée automatiquement à l'activation.
// Le même shortcode sert aux invitations de séance : le lien privé envoyé
// à un client existant pointe vers cette page avec son jeton en paramètre.
//
// https://ton-site.be/prendre-rendez-vous/?owag_invite=<jeton>Redelijke twijfels, directe antwoorden
Ja. Alles wat in je agenda staat, neemt de tijd in die het nodig heeft: een online reservatie, een afspraak die je na een telefoontje zelf hebt ingebracht, een blok dat je voor een vergadering vrijhoudt. De berekening van de beschikbaarheden vertrekt van je openingsuren, haalt die blokken eruit en past daarna de duur van de prestatie toe, de buffertijd tussen twee afspraken, de minimale termijn vooraf en de maximale horizon. Een getoond tijdslot is een écht vrij tijdslot.
Met een aanvraag die pas bestaat zodra ze bevestigd is. De bezoeker krijgt een bevestigingslink; zonder klik houdt zijn aanvraag het tijdslot 45 minuten vast en wordt ze daarna gewist. Daarbovenop komen een honeypotveld en een tijdstempel die voortaan verplicht zijn — een verzending die ze weglaat, wordt geweigerd in plaats van ongecontroleerd door te gaan —, een uurquotum per IP-adres (samengeteld per /64-prefix in IPv6, waar één machine anders over miljarden adressen beschikt) en een dagplafond op onbevestigde aanvragen, zodat eenzelfde bezoeker niet je hele agenda kan bevriezen.
Er komt maar één reservatie door. De kritieke sectie wordt geserialiseerd door een named MySQL-lock: de controle op beschikbaarheid en het wegschrijven gebeuren onder die lock, iets wat een gewone transactie niet garandeerde — een kale lees-query legt onder REPEATABLE READ geen enkele rijvergrendeling. De naam van de lock is afgeleid van de database en van het tabelprefix, zodat twee sites op dezelfde gedeelde hosting elkaar niet blokkeren. De tweede bezoeker krijgt de uitnodiging om een ander tijdslot te kiezen.
Ja, via de link in zijn e-mails, tot aan de opzegtermijn die jij vastlegt (standaard 24 uur); daarna vraagt de pagina hem om je te bellen. De annulering stuurt een ICS-annuleringsbestand mee dat het item uit zijn agenda haalt, en als de afspraak uit een privé-uitnodiging kwam, wordt die opnieuw bruikbaar in plaats van definitief opgebruikt te blijven.
Open de pagina “Agenda” van je site op je telefoon, log in en gebruik dan “Toevoegen aan startscherm”. De interface gedraagt zich vanaf dat moment als een app: de lopende dag, aanvragen om te bevestigen, een telefonische afspraak toevoegen, een tijdslot blokkeren, verplaatsen, statussen gedaan en afwezig. Geen installatie, geen store, en niets dat je hosting verlaat.
De volledige interface is vertaalbaar. Sinds 1.3.1 lopen alle zichtbare teksten — instellingen, reservatie- en annuleringspagina’s, API-berichten, e-mailsjablonen en de JavaScript-interface — via het vertaaldomein ow-agenda, met het Engels als brontaal. Het sjabloon languages/ow-agenda.pot wordt meegeleverd voor vertalers, en een volledige Franse vertaling is gemaakt en ingediend bij translate.wordpress.org; een Nederlandse vertaling kan langs dezelfde weg toegevoegd worden.
Geen Pro-versie, geen licentiesleutel.
OW Agenda wordt uitgebracht onder de GPL-2.0-licentie. Alles wat deze pagina beschrijft, zit in de .zip die je downloadt: geen enkele functie achter slot, geen abonnement, geen limiet op het aantal afspraken, medewerkers of prestaties.
- Alles zit erin: online reserveren, dubbele opt-in, sessie-uitnodigingen, klantenbestand, ICS-e-mails en herinneringen.
- De .zip download je op optionweb.dev. De plugin staat niet op wordpress.org: installeer hem via Plugins → Nieuwe plugin → Plugin uploaden.
- Geen enkele externe dienst, geen licentiecontrole, geen tracker: de gegevens van je klanten blijven op je eigen hosting.
- De code staat onder GPL-2.0, leesbaar en aanpasbaar: je kan hem auditen, aanpassen en verder laten evolueren, met of zonder ons.