---
title: "Handleiding voor de Shopify-integratie | Tajo"
description: "Hoe Tajo een Shopify-winkel met Brevo verbindt: de webhooksynchronisatie van de Shopify-app, synchronisatieregels die een agent bouwt en een mens goedkeurt, en de Shopify-tools via MCP."
url: https://tajo.io/nl/docs/ecommerce-platforms/shopify/
markdown: https://tajo.io/nl/docs/ecommerce-platforms/shopify.md
lang: nl-NL
author: "Set Noa"
author_url: https://tajo.io/nl/set-noa/
robots: noindex
---

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

# Handleiding voor de Shopify-integratie

[Set Noa](https://tajo.io/nl/set-noa/)

Tajo verbindt Shopify op twee plekken met Brevo. De Tajo Shopify-app zet Shopify-webhooks om in schrijfacties naar Brevo zodra ze binnenkomen. Synchronisatieregels, die een agent bouwt en een mens goedkeurt, zetten records volgens een schema over naar Brevo. Deze pagina behandelt beide, en daarna de Shopify-tools die Tajo via MCP aanbiedt.

## Vereisten

Zorg dat je het volgende hebt voordat je met de integratie begint:

- **Shopify-winkel** met elk abonnement (Basic, Shopify, Advanced of Plus)
- **Tajo-account** (Tajo is in early access)
- **Brevo-account**, de bestemming van de synchronisatie
- **Beheerderstoegang** tot je Shopify-winkel

## Stap 1: verbind je Shopify-winkel

Tajo is in early access. De Shopify-app staat niet in de Shopify App Store en er is geen selfservice-installatielink. [Neem contact op met het team](https://tajo.io/nl/contact) om aan de slag te gaan. Zodra je Tajo-werkruimte klaar is:

1. Open in Tajo **Connections**.
2. Vul het myshopify.com-domein van je winkel in en kies **Connect Shopify**. Shopify toont de scopes die Tajo aanvraagt en stuurt je terug naar Tajo zodra je ze goedkeurt.
3. Lees in [Shopify-machtigingen uitgelegd](https://tajo.io/nl/resources/help/integrations/shopify-permissions-explained/) waarvoor elke scope dient en wat Tajo terugschrijft naar Shopify.

## Stap 2: wat de Tajo Shopify-app naar Brevo stuurt

De app verifieert elke Shopify-webhook, slaat hem op, zet hem in de wachtrij en verwerkt hem meteen. Klant- en producttopics wachten eerst ongeveer vier seconden. Er is geen batchvenster. Een mislukte job wordt opnieuw geprobeerd met backoff.

### Webhooktopics

De Tajo Shopify-app abonneert zich op deze Shopify-webhooktopics:

| Webhooktopics | Doel |
| --- | --- |
| `customers/create`, `customers/update`, `customers/delete` | Brevo-contacten actueel houden |
| `orders/create`, `orders/updated`, `orders/fulfilled`, `orders/cancelled` | Orderevents en ordermetrics voor Brevo |
| `orders/paid`, `refunds/create` | Loyaltypunten toekennen en aftrekken |
| `checkouts/create`, `checkouts/update` | Herstel van verlaten checkouts in Brevo |
| `products/create`, `products/update`, `products/delete` | De productcatalogus in Brevo actueel houden |
| `inventory_levels/update` | Productvoorraad in Brevo actueel houden |
| `collections/create`, `collections/update`, `collections/delete` | Collecties actueel houden |
| `companies/*`, `company_contacts/*`, `company_locations/*` (create, update, delete) | B2B-bedrijfssynchronisatie |
| `app/uninstalled`, `app/scopes_update`, `app_subscriptions/update` | Levenscyclus van de app |

Ook de verplichte privacywebhooks van Shopify (verzoek om klantgegevens, klantgegevens wissen, winkelgegevens wissen) worden afgehandeld. De app abonneert zich niet op `carts/*`. Verlaten winkelwagens komen uit de `checkouts/*`-topics.

Wat er in Brevo terechtkomt:

| Shopify-event | In Brevo |
| --- | --- |
| Klant aangemaakt of bijgewerkt | Het contact wordt aangemaakt of bijgewerkt met naam, e-mailadres en marketingtoestemming. Bij betaalde abonnementen voegt de app tags, aantal bestellingen, besteed bedrag en laatste bestelling toe. |
| Klant verwijderd | Het contact wordt afgemeld, niet verwijderd |
| Bestelling aangemaakt, bijgewerkt, betaald, verzonden of geannuleerd | De bestelling via de orders-API van Brevo, en de events `order_paid`, `order_completed` en `order_cancelled` |
| Terugbetaling aangemaakt | Het event `order_refunded`. Als je via Tajo een Brevo-loyaltyprogramma draait, worden punten naar verhouding afgetrokken. |
| Bestelling betaald, met een Brevo-loyaltyprogramma | Punten toegekend volgens jouw aantal punten per dollar |
| Checkout aangemaakt of bijgewerkt, met een e-mailadres en artikelen | De events `cart_updated` en `cart_abandoned`. Je Brevo-automatisering bepaalt wanneer er verstuurd wordt. |
| Product of collectie aangemaakt, bijgewerkt of verwijderd | De productcatalogus en categorieën van Brevo |
| Voorraadniveau bijgewerkt | De voorraad van het product in de catalogus van Brevo. Gaat een variant van 0 naar meer dan 0, dan krijgt elke shopper die om een melding vroeg een `back_in_stock`-event, één keer per aanvulling. |

De app voegt geen knop “Houd me op de hoogte” aan je thema toe. Een verzoek om een melding bij nieuwe voorraad moet uit je storefront komen, bijvoorbeeld via een knop die je zelf toevoegt.

### Bestaande gegevens

Bij installatie importeert de app je bestaande klanten als Brevo-contacten. Een volledige historische synchronisatie start je vanaf de synchronisatiepagina van de app. Bij betaalde abonnementen importeert die ook producten, collecties, bedrijven en bestellingen.

## Stap 3: bouw een synchronisatieregel met de agent

Een synchronisatieregel is een declaratieve definitie van één synchronisatie: een bronresource, een Brevo-actie, een veldmapping en een filter. Je schrijft hem niet met de hand. Jij beschrijft hem, een agent bouwt hem en een mens keurt hem goed.

1. Open in Tajo **Agents** en vraag de **Brevo Integration Architect** in gewone taal om de synchronisatie. Bijvoorbeeld: “Stuur Shopify-klanten die e-mailmarketing hebben geaccepteerd als contacten naar Brevo.”
2. De agent inspecteert de Shopify-connector. Zijn steekproef geeft veldnamen en typen terug, nooit klantwaarden.
3. Hij stelt een regel voor met een veldmapping en een filter, valideert de veldmapping tegen de actie van Brevo en doet een dry run van het concept. Geen van beide stappen leest klantrecords.
4. Hij slaat de regel op als concept. Je kunt ook beginnen met een sjabloon onder **Connections > Syncs and mappings > New sync from template**.
5. **Request publish approval** voert een preview uit op je winkel. Die leest maximaal 10 records, schrijft niets naar Brevo en verplaatst de cursor niet. Hij legt alleen aantallen vast: opgehaalde, in aanmerking komende, gemapte en door het filter afgewezen records, plus mappingfouten. Mislukt de preview, dan wordt er geen goedkeuringsverzoek aangemaakt.
6. Een mens keurt het verzoek goed op de pagina **Approvals**, met een schriftelijke onderbouwing. De goedkeuring is gekoppeld aan een SHA-256-digest van de regel en verloopt na 30 minuten. De pagina van de regel toont daarna **Publish approved version**.

Bewerk je een gepubliceerde regel, dan wordt hij weer een concept. Hij gaat opnieuw door preview en goedkeuring voordat hij weer draait.

### Een echte regel

Dit is het sjabloon **Shopify customers -> Brevo contacts** zoals Tajo het definieert:

```ts
sourceSlug: "shopify",
sourceResource: "customers",
destinationSlug: "brevo",
destinationAction: "upsert_contact",
fieldMap: [
  { source: "email", destination: "email", transform: "toLowerCase" },
  { source: "first_name", destination: "attributes.FIRSTNAME" },
  { source: "last_name", destination: "attributes.LASTNAME" },
  { source: "phone", destination: "attributes.PHONE" },
  { source: "total_spent", destination: "attributes.TOTAL_SPENT", transform: "toNumber" },
  { source: "orders_count", destination: "attributes.ORDERS_COUNT", transform: "toNumber" },
  { source: "tajo_email_marketing_consent", destination: "attributes.OPT_IN", transform: "toBoolean" },
  { source: "tags", destination: "attributes.SHOPIFY_TAGS" },
  { source: "id", destination: "attributes.SHOPIFY_ID", transform: "toString" },
  { source: "created_at", destination: "attributes.SHOPIFY_CREATED_AT" },
  { source: "updated_at", destination: "attributes.SHOPIFY_UPDATED_AT" },
],
filterExpression:
  "($json.tajo_email_marketing_consent === true) && ($json.tajo_email_suppressed === false)",
```

Het filter is de toestemmingscontrole. Tajo leidt beide waarden af uit `email_marketing_consent.state` van Shopify, of uit de oudere vlag `accepts_marketing`. Een regel die contacten naar Brevo schrijft, kan zonder dit filter niet gepubliceerd worden. Het andere Shopify-sjabloon, **Shopify orders → Brevo orders**, registreert bestellingen in Brevo voor kopers die bij de checkout marketing hebben geaccepteerd.

### Wanneer een regel draait

- Regels voor contactsynchronisatie draaien standaard elke 15 minuten. Elke run begint bij de cursor van de regel.
- De pagina van een actieve regel heeft een knop **Test run (1 batch)**.
- Een actieve, gepubliceerde regel **Shopify orders → Brevo orders** draait ook elke 15 minuten. De eerste geplande run begint een paar minuten vóór dat moment en verstuurt geen oudere bestellingen. Elke volgende run verstuurt de bestellingen die sinds de vorige run zijn bijgewerkt.
- Eerdere bestellingen komen alleen in Brevo terecht als je de regel zelf draait: met **Test run (1 batch)**, of door de agent **Sync Operator** te vragen hem te draaien.
- Een bestellingenregel draait alleen volgens schema met het filter uit het sjabloon voor de marketing-opt-in van de koper. Een regel waarvan het filter is bewerkt, draait alleen als je hem zelf start.
- Na vijf mislukte runs op rij pauzeert de regel zichzelf en toont de pagina de laatste fout. Los de oorzaak op en publiceer opnieuw.

Elke run staat in de runhistorie van de regel, met gelezen, geschreven en mislukte records en de duur.

## Wat de Shopify-connector leest en schrijft

Synchronisatieregels schrijven alleen naar de bestemming, hier Brevo. Ze schrijven nooit naar Shopify.

De Tajo Shopify-app vraagt 12 scopes aan en doet een korte lijst schrijfacties naar Shopify, zoals afmeldingen voor toestemming en loyaltytags. [Shopify-machtigingen uitgelegd](https://tajo.io/nl/resources/help/integrations/shopify-permissions-explained/) noemt elke scope en elke schrijfactie, met wat die in gang zet.

Agents en MCP-hosts bereiken de winkel via de Shopify-connector:

| Lezen | Schrijven |
| --- | --- |
| Winkelgegevens, klanten (lijst en zoeken), bestellingen, producten, klantmetavelden, voorraadniveaus, status van bulkexports | Klantmetavelden en klanttags, en het starten van een bulkexport. Elke schrijfactie wordt als voorstel klaargezet en draait pas na goedkeuring. |

De connector declareert ook een voorraadaanpassing. Die vereist de scope `write_inventory`, die de Tajo Shopify-app niet aanvraagt.

## Stap 4: gebruik de Shopify-tools via MCP

Tajo biedt de Shopify-connector aan als MCP-server op `https://alto.tajo.io/mcp/connectors/shopify`. Voeg hem toe aan Claude Code:

```bash
claude mcp add --transport http tajo-shopify https://alto.tajo.io/mcp/connectors/shopify
```

De host vindt de OAuth-server van Tajo en opent de Tajo-aanmelding. Toegang is beperkt tot early-access-accounts. De server biedt 12 tools:

| Tool | Wat hij doet |
| --- | --- |
| `preview_tajo_shopify_app` | Interactieve preview van de Tajo Shopify-app, weergegeven als MCP UI |
| `get_shop` | De gegevens van de winkel |
| `search_customers` | Klanten zoeken met de querysyntaxis van Shopify, zoals `tag:tajo-vip` of `total_spent:>100` |
| `list_customers` | Klanten weergeven, gepagineerd |
| `list_orders` | Bestellingen weergeven, gepagineerd |
| `list_products` | Producten weergeven met varianten, afbeeldingen en voorraad |
| `get_customer_metafields` | De metavelden van een klant lezen |
| `get_inventory_levels` | De voorraad van een variant over alle locaties lezen |
| `poll_bulk_export` | Een bulkexport controleren en de downloadlink ophalen zodra die klaar is |
| `calculate_rewards_profile` | Het niveau, de punten en het beloningssaldo van een klant berekenen uit gesynchroniseerde commercegegevens |
| `shopify_propose` | Eén schrijfactie naar Shopify als voorstel klaarzetten. Er wordt niets verstuurd. |
| `shopify_apply` | Een goedgekeurd voorstel uitvoeren |

## Problemen oplossen

- Contacten verschijnen niet in Brevo: zie [contacten ontbreken in Brevo](https://tajo.io/nl/resources/help/troubleshooting/contacts-missing-in-brevo/).
- Een regel die niet draait of zichzelf heeft gepauzeerd: zie [gegevens synchroniseren niet](https://tajo.io/nl/resources/help/troubleshooting/data-not-syncing/).

## Volgende stappen

- [Gegevenssynchronisatie begrijpen](https://tajo.io/nl/resources/help/getting-started/understanding-data-sync/), hoe synchronisatieregels werken
- [Shopify-machtigingen uitgelegd](https://tajo.io/nl/resources/help/integrations/shopify-permissions-explained/), elke scope en elke schrijfactie
- [Shopify + Brevo](https://tajo.io/nl/docs/integrations/shopify-brevo), de integratiehandleiding
- [Neem contact op met het team](https://tajo.io/nl/contact) om aan de slag te gaan
