WooCommerce-integratiehandleiding
Deze gids koppelt een WooCommerce-winkel aan Tajo. De integratie bestaat uit twee helften die samenwerken:
- Tajo for WooCommerce-plugin: legt realtime engagement-events (bestellingen, winkelwagens, terugbetalingen, reviews, formulierinzendingen) vast binnen WordPress en levert ze bij Tajo af via een duurzame, ondertekende outbox.
- WooCommerce REST-verbinding: Tajo leest de klanten, bestellingen, producten, kortingsbonnen, terugbetalingen en reviews van je winkel voor historische import en doorlopende synchronisatie. Zie de referentie van de WooCommerce-connector voor de opzet met alleen REST.
Marketingautomatisering zelf (e-mail, SMS, WhatsApp via Brevo en andere providers) stel je in Tajo in, niet in de plugin. De taak van de plugin is om betrouwbare events uit WordPress te krijgen.
Vereisten
- WordPress 6.3+ met beheerderstoegang
- PHP 7.4+
- WooCommerce 7.0+ (de plugin werkt ook op WordPress-sites zonder WooCommerce, de commerce-adapters blijven dan simpelweg inactief)
- Tajo-account met een aangemaakte WordPress-verbinding
- HTTPS op het Tajo-endpoint (altijd het geval bij gehost Tajo)
Stap 1: installeer de Tajo for WooCommerce-plugin
Handmatige installatie
# Download the plugincd wp-content/pluginswget https://tajo.io/downloads/woocommerce/tajo-woocommerce-latest.zip
# Verify and unzipunzip tajo-woocommerce-latest.zipActiveer de plugin daarna vanuit de WordPress-beheeromgeving:
- Ga naar Plugins → Installed Plugins
- Zoek “Tajo for WooCommerce”
- Klik op Activate
Je kunt de zip ook rechtstreeks uploaden via Plugins → Add New → Upload Plugin. Bij elke release wordt een SHA-256-checksum gepubliceerd op tajo.io/downloads/woocommerce/. De plugin staat nog niet in de WordPress.org-directory; handmatige installatie is vandaag de ondersteunde route.
Stap 2: configureer de verbinding
Ga naar WooCommerce → Tajo (op sites zonder WooCommerce: Settings → Tajo) en vul de drie waarden uit je Tajo WordPress-verbinding in:
| Veld | Waarde |
|---|---|
| Tajo-endpoint | De HTTPS-webhook-URL die in Tajo staat, bijvoorbeeld https://alto.tajo.io/api/connectors/wordpress/webhooks/engagement |
| Binding-ID | Het binding-ID van de verbinding uit Tajo |
| Ondertekeningssleutel | Het gedeelde geheim (32 tot 256 tekens). De plugin genereert bij activering een sterk lokaal geheim; plak dat in Tajo, of plak hier het geheim van Tajo |
Er zijn geen API-sleutelconstanten die je aan wp-config.php moet toevoegen. Events blijven veilig in de lokale outbox staan totdat alle drie de waarden zijn opgeslagen.
Controleer daarna de hele keten van begin tot eind:
- Klik op Queue test event en daarna op Process now.
- In de tabel met de afleveringsoutbox hoort het event als afgeleverd te staan.
- Bevestig in Tajo dat het event
connection.testop de WordPress-verbinding is aangekomen.
Wat de plugin verstuurt
Elk event is een compacte envelop met zo min mogelijk persoonsgegevens, ondertekend met HMAC-SHA256. Alleen identiteitsvelden voor engagement (e-mailadres, telefoonnummer, lokale ID’s) plus begrensde eventmetadata verlaten WordPress, nooit namen, postadressen, IP-adressen, user agents, reactieteksten, willekeurige formuliervelden, ordernotities of betaalgegevens.
WooCommerce-events
| Hook | Event |
|---|---|
woocommerce_created_customer / woocommerce_update_customer | customer.created / customer.updated |
woocommerce_new_product / woocommerce_update_product | product.created / product.updated |
woocommerce_add_to_cart, item verwijderen, kortingsbon toepassen of verwijderen | cart.updated (met winkelwagensamenvatting voor flows rond verlaten winkelwagens) |
woocommerce_cart_emptied | cart.emptied |
woocommerce_new_order / woocommerce_update_order | order.placed / order.updated |
woocommerce_order_status_changed | order.status_changed (plus order.fulfilled bij afronding) |
woocommerce_payment_complete | order.paid |
woocommerce_order_refunded | refund.created |
| Statusupdates van WooCommerce Subscriptions | subscription.status_changed |
Bestellingsevents bevatten het bestelnummer, de status, de valuta, totalen, regelitems en direct bruikbare review- en herbestel-URL’s, genoeg voor automatiseringen na aankoop en voor win-back zonder een extra API-aanroep.
WordPress-events
contact.created/contact.updated/contact.deletedvoor gebruikersaccountscontent.published/content.updated/content.unpublishedvoor openbare contentcomment.created/comment.status_changedvoor reacties van bezoekers en productreviews (interne WooCommerce-ordernotities, pingbacks en trackbacks worden nooit verstuurd)form.submittedvoor geslaagde inzendingen van Contact Form 7, WPForms, Gravity Forms en Fluent Forms. Alleen getypeerde identiteitsvelden voor e-mail en telefoon plus formuliermetadata worden eruit gehaald; willekeurig ingezonden velden worden weggegooid
Betrouwbaarheid: de afleveringsoutbox
De plugin vuurt nooit rechtstreeks vanuit een paginaverzoek events af op Tajo. Elk event wordt eerst naar een lokale outboxtabel geschreven en daarna door WP-Cron afgeleverd, met:
- Begrensde exponentiële backoff (maximaal 8 pogingen, met respect voor
Retry-After) - Dead letters met Replay dead letters in de beheeromgeving, in één klik
- Bewaarlimieten zodat een onbereikbaar endpoint nooit persoonsgegevens kan opstapelen (afgeleverd: 7 dagen; in de wachtrij: 30 dagen; dead letters: 30 dagen na de laatste wijziging)
- Idempotente event-ID’s, zodat nieuwe pogingen en replays verderop nooit dubbel aankomen
Schakelt je hostingpartij WP-Cron uit (DISABLE_WP_CRON), roep wp-cron.php dan minstens één keer per minuut aan vanuit een echte scheduler.
Toestemming wordt nooit afgeleid
Het aanmaken van een account, checkout, een aankoop en gewone formulierinzendingen gelden niet als marketingtoestemming. Ingebouwde events dragen een lege toestemmingslijst. Wil je expliciete toestemming vastleggen (bijvoorbeeld uit een aangevinkt nieuwsbriefvakje), stuur die dan via de extensiehook:
do_action( 'tajo_engagement_emit', 'consent.updated', array( 'email' => $email ), array( 'policyVersion' => '2026-07' ), array( array( 'channel' => 'email', 'status' => 'opt_in', // or 'opt_out' 'purpose' => 'marketing', 'source' => 'newsletter_checkbox', 'evidence' => array( 'formId' => 'newsletter-footer', 'field' => 'marketing_email' ), ), ), gmdate( 'c' ));Met dezelfde hook kan elke plugin of elk thema eigen events versturen; alles gaat door dezelfde sanitizer, dezelfde outbox en dezelfde ondertekening.
Stap 3: historische import
Realtime events dekken alles vanaf de installatie. Voor de geschiedenis van vóór de plugin importeert de WooCommerce REST-verbinding van Tajo bestaande klanten, bestellingen, producten, kortingsbonnen, terugbetalingen en reviews, volledig ingesteld aan de Tajo-kant met een WooCommerce REST API-sleutel (WooCommerce → Settings → Advanced → REST API, leesrechten). Zie de referentie van de WooCommerce-connector voor details.
Privacy en AVG
- De plugin registreert zich bij WordPress Tools → Export Personal Data en Tools → Erase Personal Data; bewaarde outbox-events met een overeenkomend e-mailadres worden lokaal geëxporteerd of gewist.
- Wissen en afleveren delen een fail-closed mutex, zodat een wisverzoek nooit als afgerond gemeld kan worden terwijl een payload halverwege de verzending is.
- Lokaal wissen dekt alleen de WordPress-outbox. Dien voor gegevens verderop in de keten het bijbehorende verzoek in Tajo in.
- Deactiveren pauzeert de aflevering maar behoudt de configuratie en de events in de wachtrij; de plugin verwijderen haalt de outbox, de instellingen, het geheim en de schema’s definitief weg.
Compatibiliteit
- HPOS: de plugin verklaart compatibiliteit met WooCommerce High-Performance Order Storage en gebruikt alleen CRUD-objecten en publieke hooks.
- WooCommerce Subscriptions: statuswijzigingen van abonnementen worden vastgelegd als de extensie actief is.
- Multisite: bij het verwijderen wordt elke site in het netwerk opgeruimd.
Operationele referentie
Server-naar-serverdetectie en besturing van de outbox zijn via Application Password-authenticatie beschikbaar voor beheerders:
| Methode | Route | Doel |
|---|---|---|
GET | /wp-json/tajo/v1/capabilities | Pluginversie, gedetecteerde adapters, eventinventaris, gezondheid van de outbox |
GET | /wp-json/tajo/v1/outbox | Aantallen in de outbox (payloads worden nooit prijsgegeven) |
POST | /wp-json/tajo/v1/outbox/process | Verwerk direct een batch |
POST | /wp-json/tajo/v1/outbox/replay | Speel dead letters opnieuw af |
Problemen oplossen
| Symptoom | Oorzaak en oplossing |
|---|---|
| Events blijven op “Queued” staan | Endpoint, binding-ID of geheim is nog niet opgeslagen. De aflevering staat gepauzeerd tot alle drie zijn geconfigureerd |
| Events blijven op “Retrying” staan | Het Tajo-endpoint is onbereikbaar vanaf je hosting, of WP-Cron draait niet. Controleer de foutkolom in de outboxtabel en je croninstelling |
| Dead letters stapelen zich op | Een fout waarbij opnieuw proberen niet helpt (meestal een verkeerd binding-ID of geheim). Herstel de configuratie en klik daarna op Replay dead letters |
| “Enter a valid HTTPS Tajo webhook endpoint” | Het endpoint moet HTTPS zijn, zonder ingebedde inloggegevens |
| Testevent is afgeleverd maar er staat niets in Tajo | Controleer of je het binding-ID hebt geplakt uit dezelfde Tajo-workspace of -verbinding waar het endpoint bij hoort |
Volgende stappen
- Referentie van de WooCommerce-connector: REST-synchronisatie, details van de webhookondertekening, configuratiesleutels
- Klantsynchronisatie: WooCommerce-klanten koppelen aan je system of record
- Stel automatiseringen voor verlaten winkelwagens, na aankoop en win-back in Tajo in op basis van de events
cart.updated,order.placedenorder.fulfilled