Shop en voorraad

WooCommerce is niet het ding dat je koppelt. Het is het ding waar al het andere aan koppelt

Elke andere pagina in deze bank beschrijft een tool en een koppeling ermee. Deze pagina is anders, want WooCommerce is zelden de bestemming — het is bijna altijd de andere kant van de koppeling, de plek waar de order, de klant en het product al bestaan voordat iets anders op deze lijst er een kopie van krijgt.

Dat maakt WooCommerce minder een product om te beoordelen en meer het fundament waar al het andere op staat. Een shop met schone orderdata en een verstandige pluginlijst maakt elke koppeling op deze site goedkoper en betrouwbaarder. Een shop die in zes jaar veertig plugins heeft verzameld, waarvan er drie hetzelfde slecht doen, maakt van elke koppeling eerst een klein archeologieproject — en daar gaat deze pagina eigenlijk over.

  • REST API, webhooks en de ordertabellen (HPOS)
  • De spil voor elke koppeling op deze site
  • Vanaf € 1.700 plus servicekosten
De tool

Wat WooCommerce is, en waarom het zich als het middelpunt van de bank gedraagt

WooCommerce is een opensource e-commerceplugin voor WordPress: producten, orders, klanten, winkelwagen en checkout, bovenop een CMS in plaats van als los platform. Die afkomst is het hele verhaal. Omdat WordPress eronder zit, is een WooCommerce-shop ook een website — dezelfde die je blog, je landingspagina's en je vacaturepagina bevat — en omdat het opensource is, kan er bijna alles aan veranderd worden, en dat is zowel de grootste kracht als de reden dat twee WooCommerce-shops elkaar nauwelijks meer hoeven te lijken.

Data zit in twee lagen die de moeite waard zijn om te kennen. Producten, categorieën en content zijn gewone WordPress-berichten. Orders staan, sinds WooCommerce overstapte op High-Performance Order Storage (HPOS), in eigen speciale databasetabellen in plaats van gepropt in de generieke berichtentabel zoals vroeger — een echt goede verandering voor snelheid en voor iedereen die orders direct bevraagt, maar een die elke oudere plugin of maatwerkcode breekt die van de oude structuur uitging. Is een shop een paar jaar niet aangeraakt, dan is dit een van de eerste dingen die het checken waard zijn voordat je er iets bovenop bouwt.

Voor koppelingen biedt WooCommerce een gedocumenteerde REST API om producten, orders en klanten te lezen en te schrijven, plus webhooks die afgaan bij dingen als een nieuwe order of een statuswijziging. Dat is een solide basis. Wat bepaalt of een koppeling een week werk is of een maand, is niet de API — het is de pluginlijst erbovenop. Een schone installatie met WooCommerce, één betaalplugin en één verzendplugin is een ander project dan een shop met veertig plugins waarvan er drie stilletjes de ordertotaal na de checkout herschrijven.

Wat er misgaat

Drie dingen die misgaan bij een WooCommerce-shop die jarenlang is gegroeid

Dit gaat niet over dat WooCommerce slechte software is. Dit is wat zich bovenop goede software opstapelt als niemand een tijdlang verantwoordelijk is geweest voor de hele shop.

Twee plugins denken allebei de prijs te bezitten, en de checkout toont een derde getal

Een plugin voor dynamische prijzen, een kortingsplugin per klantgroep en een couponsysteem worden op verschillende momenten door verschillende mensen geïnstalleerd, elk als oplossing voor een echt probleem op dat moment. Draaien ze samen, dan passen ze zich toe in een volgorde die niemand heeft ontworpen, en klopt het eindbedrag van een klant af en toe niet met wat de instellingen van welke plugin dan ook zouden voorspellen — een supportticket dat een middag kost om na te trekken en een korting die rechtstreeks uit je marge komt.

Wat je in plaats daarvan ziet

Eén duidelijke prijshiërarchie, gedocumenteerd en gebouwd als één stuk logica in plaats van drie plugins die het oneens zijn, zodat het bedrag bij de checkout altijd te verklaren is en altijd het bedrag dat je bedoelde.

Een order oogt prima in wp-admin en bereikt de koppeling helemaal nooit

Een plugin maakt een order aan via een niet-standaard pad — een abonnementverlenging, een kassasynchronisatie, een importtool — dat de normale WooCommerce-hooks overslaat waarop een koppeling luistert. De order bestaat, oogt voor een mens in het admin helemaal normaal, en triggert simpelweg nooit de webhook die hem naar de boekhouding of verzending had moeten sturen.

Wat je in plaats daarvan ziet

Koppelingen worden gebouwd tegen de orderdatalaag zelf, niet alleen de ene hook die de meeste plugins afvuren, en een periodieke controle vangt alles op wat er doorheen glipte — stilletjes, voordat een klant merkt dat zijn factuur nooit is aangekomen.

Een plugin-update breekt een koppeling waarvan niemand zich herinnert dat hij bestaat

Een shop met veertig plugins krijgt een routine-update op een van hen, die stilletjes een hooksignature of een dataformaat wijzigt. De koppeling die op het oude gedrag is gebouwd blijft draaien, maar begint stilletjes een veld te laten vallen of een order te verdubbelen, en degene die de koppeling bouwde is twee jaar geleden bij het bedrijf weg.

Wat je in plaats daarvan ziet

Plugin-updates gaan eerst via een testomgeving voordat ze naar productie gaan, en de eigen monitoring van een koppeling vangt een verandering in de vorm van de data die hij ontvangt — een ontbrekend veld is een melding dezelfde dag, geen ontdekking drie maanden later.

De rekening van het handwerk

Wat een overwoekerde WooCommerce-shop kost voordat je er überhaupt iets aan koppelt

Een shop met een schone pluginlijst en een bijgehouden WooCommerce-kern is bijna gratis om een koppeling tegen te bouwen — het grootste deel van de kosten op de andere pagina's in deze bank zit in de koppeling zelf, niet in de shop. Een shop die niet is bijgehouden schuift een flink deel van die kosten naar voren, in uren die gaan zitten in het begrijpen wat veertig plugins eigenlijk met een order doen voordat je een van de velden op de andere pagina's in deze bank kunt vertrouwen.

We hebben shops geopend waar alleen al de audit — de pluginlijst doorlopen, checken welke prijzen, voorraad of ordertotalen aanraken, en testen hoe een order er echt uitziet tegen de tijd dat hij de database bereikt — twee tot drie dagen kostte voordat er één regel koppelcode was geschreven. Dat is geen verspilde tijd; het is het verschil tussen een koppeling die in week één werkt en een die drie maanden later stilletjes data corrumpeert.

  • Een schone shop: een koppeling is vooral configureren en testen.
  • Een shop met een tiental plugins: reken op een korte audit voordat we een vaste prijs geven.
  • Een shop met veertig plugins en geen documentatie: de audit is een klein project op zich, de moeite waard ongeacht welke koppeling erna komt.
Wat we bouwen

Wij bouwen ook het ding aan de andere kant

Dit is de ene pagina in de bank waar de aantekening boven de bouwstappen iets groters moet zeggen: is de pluginstack van een shop echt ontgroeid aan wat hij zou moeten doen, dan is het eerlijke antwoord geen koppeling, maar eerst de shop herbouwen op een schoon WooCommerce-fundament — minder plugins, actuele HPOS-compatibele code, en koppelingen die er vanaf het begin in zitten in plaats van er achteraf aangeplakt.

Een koppeling heeft twee kanten. Er zijn genoeg bureaus die de API-call voor je bouwen en je een JSON-payload overhandigen; dat is de makkelijke helft. De moeilijke helft is waar die data in landt — een website, een webshop, een portaal waar je klanten op inloggen, een intern hulpmiddel dat een spreadsheet vervangt. JKC bouwt beide kanten, en daarom blijven de koppelingen die wij bouwen meestal werken: aan de ontvangende kant is voor ons niets een zwarte doos.

API-koppelingen

De koppeling zelf: authenticatie, veldmapping, rate limits, retries en een wachtrij die overleeft dat het andere systeem een uur uit de lucht is. Gebouwd op de gedocumenteerde API als die er is, en op wat de leverancier werkelijk aanbiedt als die er niet is.

Websites

WordPress-sites die uit je systemen lezen in plaats van ze met de hand na te typen: een vacaturepagina die uit je HR-systeem komt, een teampagina die je salarisadministratie volgt, prijzen en beschikbaarheid die de echte zijn.

Webshops

WooCommerce-shops waarin de order de laatste keer is dat iemand hem intypt: hij wordt een factuur in je boekhoudpakket, een label bij je vervoerder, een voorraadmutatie in je warehouse en een regel in je CRM, uit zichzelf.

Webapplicaties

Als het proces in geen enkel standaardproduct past: een klantportaal, een offertetool, een planbord, een dashboard dat drie systemen tegelijk uitleest. Gebouwd op jouw data, met jouw systemen als bron in plaats van een kopie ervan.

Wat er gekoppeld kan worden

Wat er via WooCommerce naar elke andere koppeling in deze bank loopt

Dit is niet de veldenlijst van één koppeling — dit is het verkeer dat vanuit WooCommerce naar boekhoud-, verzend-, CRM- en betaaltools stroomt, allemaal afkomstig van dezelfde handvol objecten.

  • Orders naar de boekhouding (uit het gereedschap)

    Elke order die een verkoopfactuur of -order wordt in Exact Online, Moneybird, Jortt of e-Boekhouden.nl, op het moment van de order in plaats van bij de maandafsluiting.

  • Orders naar verzending en fulfilment (uit het gereedschap)

    Adres, gewicht en gekozen dienst naar Sendcloud, MyParcel of een fulfilmentpartner als Monta, zodat een label of pickverzoek bestaat voordat iemand een tweede scherm opent.

  • Voorraad en prijzen, terug naar WooCommerce (in de tool)

    Vrije voorraad en, bij B2B-shops, klantspecifieke prijzen uitgelezen uit een ERP of fulfilmentpartner en op de productpagina getoond als het echte getal, niet dat van vorige week.

  • Klanten en orders naar een CRM (uit het gereedschap)

    Nieuwe klanten en hun orderhistorie naar HubSpot, Pipedrive of vergelijkbaar CRM, zodat een verkoopgesprek niet vanuit nul context begint.

  • Betaalstatus vanuit Mollie of vergelijkbaar (in de tool)

    Een order op betaald gezet zodra de betaalprovider dat meldt, via de eigen webhook van WooCommerce — de koppeling die de meeste shops al hebben, en die het checken waard is of hij echt betrouwbaar is.

  • Nieuwsbrieftoestemming naar Mailchimp of vergelijkbaar (uit het gereedschap)

    Een klant die toestemming geeft wordt op het moment zelf aan de juiste lijst toegevoegd, met het toestemmingstijdstip erbij — niet later in bulk gesynchroniseerd, als het niet meer scherp is wanneer iemand precies akkoord ging.

Met andere woorden: bijna elke pagina in deze bank heeft een WooCommerce-vormig gat, en dit is de pagina die de shopkant van ze allemaal in één keer beschrijft.

Hoe het werkt

Hoe een koppeling bij JKC gebouwd wordt

Elke keer dezelfde vier stappen, om welke tool het ook gaat. Niets hiervan is een workshop waar je voor betaalt: stap één bestaat omdat een koppeling verkeerd afbakenen het duurste is wat er met zo'n koppeling kan gebeuren.

  1. 1. We kijken wat er nu écht wordt overgetypt

    Niet "welke velden bestaan er" maar "welke velden verplaatst iemand nu met de hand, hoe vaak, en wat gaat er stuk als het misgaat". De meeste projecten blijken twee of drie stromen nodig te hebben, geen volledige tweerichtingssync van alles. Dat gesprek is wat de offerte laag houdt.

  2. 2. We kiezen de route, en zeggen waarom

    Een onderhouden connector van de leverancier, een platform als Make of Zapier, of een maatwerkkoppeling op de API. Goedkoopste eerst, niet maatwerk eerst: als een ondersteunde plugin precies doet wat je nodig hebt, dan is dat het antwoord en zeggen we dat ook. Maatwerk is voor de gevallen waarin de kant-en-klare optie zoveel configuratie vraagt dat hij juist het fragiele onderdeel wordt.

  3. 3. We bouwen hem zo dat hij het andere systeem overleeft

    Elke koppeling krijgt retries, een wachtrij en een idempotency-sleutel mee, zodat een order die binnenkomt terwijl de andere kant eruit ligt later wordt afgeleverd in plaats van verdwijnt, en een retry geen tweede factuur aanmaakt. Eerst op een testomgeving waar de leverancier die aanbiedt, zodat het eerste wat je echte administratie ziet een werkende koppeling is.

  4. 4. We dragen hem over met de faalgevallen opgeschreven

    Welke meldingen je krijgt, wat elke melding betekent, wat je eraan doet en wie je belt. Plus de inloggegevens op jouw naam, in jouw eigen kluis — niet in de onze. Een koppeling die niemand behalve wij kan onderhouden is een koppeling die niet van jou is.

Nadat hij live is

Een koppeling die stil faalt is erger dan geen koppeling

Dit is het deel dat in de meeste offertes ontbreekt. Een koppeling die stopt met werken zonder dat iemand het merkt is erger dan handwerk, want bij handwerk merkt iemand het tenminste als het niet gedaan is. Elke koppeling die JKC bouwt wordt gemonitord, en die monitoring is geen bijverkoop — die zit in de servicekosten.

Een melding per mislukt bericht, geen maandrapport

Een bericht dat niet doorkomt geeft binnen het uur een melding, met de regel waar het over ging. Geen dashboard dat je moet onthouden om te bekijken.

Opnieuw versturen, niet opnieuw invoeren

Wat mislukt is blijft in een wachtrij staan en kan opnieuw verstuurd worden zodra de oorzaak weg is, in de juiste volgorde. Niemand hoeft gisteren door te spitten op zoek naar de vier orders die niet zijn aangekomen.

Wij volgen de wijzigingen van de leverancier, zodat jij dat niet hoeft

API's krijgen nieuwe versies, worden uitgefaseerd en gaan op rate limits. Kondigt een leverancier een wijziging aan die jouw koppeling raakt, dan is meebewegen onderdeel van de servicekosten en geen nieuw project.

Wat het kost

Vanaf € 1.700, en de grootste variabele is wie de andere kant heeft gebouwd

Er is geen vaste prijs voor WooCommerce, want het bedrag hangt volledig af van welke van de stromen hierboven je nodig hebt en in welke staat de shop al verkeert. Wat we wel kunnen beloven is de audit: voordat we een vaste prijs geven op welke koppeling dan ook, kijken we wat er echt geïnstalleerd staat en zeggen we eerlijk of dit een configuratieklus, een koppelproject, of een geval voor eerst herbouwen is.

Een koppeling begint vanaf € 1.700 plus maandelijkse servicekosten, waar de monitoring, de wachtrij en het bijhouden van API-wijzigingen van de leverancier in zitten. Werk buiten een vaste scope is € 95 per uur.

Wat het bedrag beweegt is niet de tool — het is hoe goed het systeem aan de andere kant bekend is. Heeft JKC je website, je webshop of je webapplicatie gebouwd, dan kennen we het datamodel, de uitzonderingen en waar de voorraadaantallen echt vandaan komen, en is een koppeling erin vooral configureren en testen. Is het een systeem dat we nooit hebben opengeslagen, dan beginnen we met een korte technische check aan beide kanten en offreren we daarna, zodat je niet op uurbasis betaalt voor ons uitzoekwerk.

Twee dingen die het bedrag verder bewegen, in onze ervaring meer dan al het andere: of de tool een echte API heeft of alleen een CSV-export, en of de sync twee kanten op moet. Eenrichting is ruwweg de helft van het werk van tweerichting, want tweerichting betekent per veld beslissen welk systeem wint als ze het oneens zijn — en die beslissing is het dure deel, niet de code.

Vragen

Veelgestelde vragen over WooCommerce koppelen

Allebei, en welke van de twee je nodig hebt is meestal binnen het eerste gesprek duidelijk. Een shop die grotendeels werkt krijgt koppelingen erbovenop. Een shop waarbij de pluginlijst het probleem is geworden wordt herbouwd op een schoon WooCommerce-fundament, met de koppelingen die hij nodig heeft er vanaf dag één in ontworpen in plaats van er later ingeperst.

We zeggen liever eerlijk in welke situatie je zit dan een koppelproject te verkopen op een shop die er sowieso onder blijft breken.

Gratis, 10 minuten

Geen idee waar de handmatige uren echt naartoe gaan?

Daar is de Groeicheck voor. Tien minuten, zonder verkoopgesprek eraan vast: je krijgt terug waar het dubbele werk zit, welke koppeling zich als eerste terugverdient, en welke eerlijk gezegd niet.