← Blog

E-commerce

Abandoned-cart chat agent: €38k terug in één kwartaal

Een Maastrichts speciaalmerk gooide een Klaviyo-recoveryflow van vier mails eruit voor een chat agent die sms't vanaf een echt 06-nummer. Een kwartaal later: €38.400 terug.

Jacob Molkenboer· Oprichter · A Brand New Company· 6 nov 2024· 9 min
Pakketje van ambachtspapier met linnen touw en groen lint, koperen weegschaal, opgevouwen bon op ivoorpapier.

Het was 21:47 op een dinsdagavond in februari. Een klant in Utrecht had een Shopify-cart open staan: een speciaalfles van €92, twee accessoires, gratis verzending gehaald. Ze keek even naar een notificatie, sloot het tabblad, en ging slapen. Drieënveertig minuten later vuurde de Klaviyo-flow voor abandoned carts zijn eerste mail af. Die belandde in een Gmail Promotions-tab tussen zeventien andere dingen, en daar bleef hij liggen, samen met vier vervolgmails over vijf dagen. De cart kwam nooit meer terug.

Zo zag ongeveer 78% van de carts eruit bij een Maastrichts speciaal-e-commercemerk van 26 mensen. Ze draaiden zo'n €4,2M per jaar, groeiden 30% YoY, en verloren tussen de €140k en €160k per kwartaal aan abandoned checkouts. De Klaviyo-flow die ze twee jaar eerder hadden opgezet ving daar misschien 3% van terug, en de marketing lead kon je vooraf vertellen welke mails geopend zouden worden (die met de code van 10%) en welke niet (de rest).

In Q1 2026 vervingen we die flow van vier mails door een chat agent die klanten een sms stuurt vanaf een echt Nederlands 06-nummer. Drie maanden later was de teruggewonnen omzet uit abandoned carts met €38.400 gestegen ten opzichte van het kwartaal ervoor. Hier is wat we gebouwd hebben, wat het bijna sloopte, en welke onderdelen je kunt overnemen zonder iemand in te huren.

Wat de Klaviyo-flow daadwerkelijk deed

Vóór de herbouw was de abandoned-cartsequentie een tekstboekopstelling: Klaviyo's aanbevolen flow van vier stappen, met vertragingen van 43 minuten, 24 uur, 72 uur en 120 uur. Onderwerpregels werden A/B-getest. De derde mail bevatte een code van 10%. De vierde was een zachte 'last chance'-framing. Hier was niets mis mee. Het stootte alleen tegen het plafond van het kanaal aan.

De gemeten cijfers, over Q4 2025:

  • Openpercentage: 24,1% op mail 1, gezakt naar 11,3% bij mail 4.
  • Click rate: 2,9% op mail 1, gezakt naar 0,6%.
  • Toegerekende teruggewonnen omzet: ongeveer €15.200 per kwartaal.
  • Getriggerde carts: zo'n 280 per week, gemiddelde verlaten waarde €148.

De flow was niet kapot. Hij stootte alleen tegen het plafond dat elk Nederlands consumer-emailkanaal raakt: bijna niemand leest nog marketingmail. Zeker niet iemand die op een dinsdagavond om 21:47 voor €184 aan niche-producten in een cart legt en zonder te betalen naar bed gaat. Het merk had twee maanden besteed aan het optimaliseren van onderwerpregels voor wat fundamenteel het verkeerde kanaal was.

Het 06-nummer als de echte sleutel

Openpercentages van sms'jes in Nederland liggen rond de 95% binnen drie minuten. Daar valt geen zinnige discussie over te voeren. Het is de realiteit van messaging-kanalen waar elk Nederlands consumentenmerk tegenaan loopt zodra ze het echt proberen. De beperking ligt niet bij deliverability. De beperking is dat de meeste 'SMS-marketing' eruitziet als ruis vanaf een shortcode, en Nederlandse consumenten filteren die op dezelfde manier als reclamefolders in de brievenbus.

Wat de respons verandert, is het nummer. Geen 1456-shortcode. Geen lang alfanumeriek sender-ID als 'BRANDNAME'. Een echt, belbaar, beantwoordbaar Nederlands 06-nummer. Zo'n nummer als een vriend zou hebben. Het merk regelde er een via Bird (voorheen MessageBird), met zowel SMS als WhatsApp Business API gekoppeld aan dezelfde MSISDN, zodat een gesprek van het ene kanaal naar het andere kon lopen zonder dat de klant er iets van merkte.

Het eerste bericht ging 35 minuten na het verlaten van de cart de deur uit, net voordat de Klaviyo-flow zou hebben afgevuurd. De tekst was kort, met kleine letters, en nadrukkelijk niet-marketing:

hoi marieke, zag dat de tualet bottle in je mandje stond. iets waar je nog over twijfelt?

Eerste bericht, opgesteld door de agent, verzonden vanaf een +316-nummer

Ongeveer 31% van de ontvangers antwoordde binnen vier uur. Dat is het cijfer dat het project open trok. Een emailflow haalt geen 31% replyrate omdat email geen gesprek is. Een echt 06-nummer met een menselijk geschreven zin wel.

De beslissingslogica van de agent

De kern-handler draait op een Bird-inbound webhook voor het checkouts/update-event van Shopify, gedebounced zodat hij per cart één keer afgaat, 35 minuten na de laatste activiteit. De interessante beslissingen vallen vóórdat er een bericht verstuurd wordt:

// abandoned-cart-agent/src/handlers/cart-abandoned.ts
import { sendSMS } from "../channels/bird";
import { draftOpener } from "../agent";
import { Cart } from "../types";
import { withinQuietHours, alreadyMessaged, orderHistory } from "../guards";

const MIN_VALUE_EUR = 60;
const QUIET = { from: 21, to: 9, tz: "Europe/Amsterdam" };

export async function onCartAbandoned(cart: Cart) {
  if (cart.totalEur < MIN_VALUE_EUR) return "skip:low-value";
  if (!cart.customer.smsConsent) return "skip:no-consent";
  if (!cart.customer.phoneE164?.startsWith("+316")) return "skip:non-nl-mobile";
  if (await alreadyMessaged(cart.customer.id, { days: 7 })) return "skip:cooldown";
  if (withinQuietHours(QUIET)) return "defer:quiet-hours";

  const opener = await draftOpener({
    cart,
    history: await orderHistory(cart.customer.id),
    tone: "dutch, casual, lowercase, one short sentence, no emoji, no exclamation",
  });

  await sendSMS({
    from: process.env.BIRD_06_NUMBER!,
    to: cart.customer.phoneE164,
    body: opener,
    tags: { cartId: cart.id, kind: "abandoned-cart-opener" },
  });

  return "sent";
}

De gates doen meer werk dan de agent zelf. De ondergrens van €60 zeeft impulsverlatingen weg die toch nooit hadden geconverteerd. De cooldown van zeven dagen zorgt dat een klant die drie keer in een week zijn cart laat staan zich niet bekeken voelt. Het 06-only filter voorkomt dat we naar internationale nummers sturen waar de SMS-economie niet meer klopt. De quiet-hours check is niet onderhandelbaar. Een merkbericht om 22:30 leest als intimidatie, ongeacht wat erin staat.

Zodra de klant antwoordt, schakelt het gesprek over naar een andere modus. De agent heeft read-only Shopify-toegang (productteksten, voorraad, levertijden, eerdere bestellingen van de klant) en een strak afgekaderde set acties: hij kan een kortingscode mailen, voorraad 24 uur reserveren, of binnen kantoortijden overdragen naar een menselijke inbox. Hij kan geen kortingen direct toepassen, geen adressen wijzigen, geen refunds verwerken. De reden voor die grens staat in de volgende sectie.

Het kwartaal in cijfers

Q1 2026, gemeten tegen Q4 2025 als baseline:

  • Carts getriggerd voor messaging: 3.114 (vs. 3.640 verzonden mails. Het verschil is het werk van de consent-, waarde- en cooldownfilters).
  • Replyrate op de opener: 31,4%.
  • Teruggewonnen omzet toe te schrijven aan het SMS-kanaal: €53.600.
  • Teruggewonnen omzet uit de vergelijkbare Klaviyo-flow het kwartaal ervoor: €15.200.
  • Delta: +€38.400.
  • Kanaalkosten (Bird SMS + WhatsApp + 06-huur + LLM-tokens): €1.840.
  • Overdrachten naar de support-inbox: 84, waarvan er 51 converteerden.

Twee effecten die we niet hadden voorspeld. Eén: een niet te verwaarlozen deel van de teruggewonnen carts kwam terug op een hogere AOV dan waarop ze waren verlaten, omdat de agent een vraag kon beantwoorden ('past dit op een fles van 750ml?') die de productpagina niet had afgevangen. Twee: de support-inbox werd rustiger, niet drukker. De agent ving zo'n 60 vragen per week op die anders de volgende ochtend om 09:00 als tickets waren binnengekomen. De eerste reactie van de marketing lead was dat de customer-service lead haar wel zou bedanken, wat geen zin is die die twee normaal tegen elkaar uitspreken.

AVG, opt-in en de stukken die het project bijna sloopten

Drie dingen hebben dit project bijna gesloopt voordat het live ging.

Het eerste was consent. Onder de AVG en de richtlijnen van de Autoriteit Persoonsgegevens vereist SMS-marketing een expliciete, los gegeven, granulaire opt-in. Het bestaande nieuwsbrief-vinkje van het merk in de checkout dekte geen SMS, en we mochten geen toestemming met terugwerkende kracht aannemen omdat een klant ooit een mailadres had achtergelaten. We hebben in de checkout een aparte, niet-aangevinkte checkbox toegevoegd: 'ja, ik wil updates via SMS van [merk]'. Ongeveer 38% van de nieuwe klanten geeft die opt-in. Bestaande klanten zonder opt-in zitten volledig buiten de flow. Hier is geen shortcut. De terugwinning van €38k telt alleen als de klanten die we hebben aangeschreven ook echt toestemming hadden gegeven.

Het tweede was toon. De eerste versie van de agent schreef in net, met hoofdletters, licht enthousiast Nederlands. Het testte verschrikkelijk. Replyrate was 11%. We hebben de system prompt herschreven om lowercase af te dwingen, één korte zin, geen uitroeptekens, geen emoji, geen naam van een rep, en de replyrate verdrievoudigde. De les is dat een 06-nummer een mens signaleert, en mensen schrijven niet als marketingmails. Als de copy niet klopt, verspil je het kanaal.

Waarschuwing

Een echt Nederlands 06-nummer signaleert een echt persoon. Leest de copy van je agent als een Mailchimp-template, dan heb je het slechtste van beide kanalen gebouwd: SMS-prijzen met email-responsrates.

Het derde was de actiegrens. In het eerste prototype mocht de agent op eigen gezag kortingscodes uitdelen. Binnen twee dagen had een klant door dat het noemen van de prijs van een concurrent betrouwbaar een code van 15% opleverde. We hebben die bevoegdheid teruggetrokken naar een deterministische regel: codes alleen voor carts boven €120, alleen na een tweede antwoord, maximaal één keer per klant per 30 dagen. De agent doet een aanbeveling. De rule engine geeft toestemming. Zo hoort elke consumer-facing agent bedraad te zijn. Het model is niet het beleid. Behandel het als de gesprekslaag en houd geldbeslissingen in code die je op vrijdagmiddag kunt lezen.

Wat je deze week kunt overnemen

Draai je vandaag een Klaviyo-flow voor abandoned carts en wil je de SMS-route testen zonder alles om te bouwen: regel een echt 06-nummer via Bird, CM.com of een vergelijkbare Nederlandse gateway. Voeg in de checkout een niet-aangevinkte SMS opt-in toe. Stuur 35 minuten na verlating één simpele opener in lowercase. Lees de eerste twee weken zelf de antwoorden, vóórdat je iets automatiseert. Het signaal zit in de berichten die terugkomen, en dat zie je niet vanuit een dashboard.

Toen we deze agent voor het Maastrichtse merk bouwden, was het bijna-fatale stuk niet het model of de SMS-gateway. Het was de ontdekking, drie weken erin, dat Shopify's checkouts/update-webhook bij elke cartwijziging afgaat, niet alleen bij verlating, waardoor de agent zichzelf bleef hertriggeren op dezelfde cart. Uiteindelijk hebben we gedebounced op het cart-token en pas gevuurd zodra de cart 35 minuten ongewijzigd was. Die debounce is het verschil tussen een chat agent en een stalker. Dit soort werk doen wij als AI-agents voor ABN-klanten, en de playbook hierboven is degene die wij gebruiken.

Een audit van vijf minuten die je vóór dit alles kunt draaien: pak de abandoned-carttriggers van de laatste 90 dagen, filter op carts boven €60, en tel hoeveel daarvan van Nederlandse mobiele nummers kwamen. Dat getal, keer een plausibele opt-in van 38%, keer een recoverydelta van 3%, is ongeveer de kwartaalomzet die je nu in de wachtrij van Klaviyo laat liggen.

Kern

Een echt Nederlands 06-nummer met tweezijdig antwoord is in het hoofd van de klant een ander soort bericht. Daarin zit de winst, niet in het model.

FAQ

Waarom werkte SMS beter dan email voor abandoned carts?

Het was niet SMS dat werkte. Het was een echt Nederlands 06-nummer met een opener van één zin in lowercase. Klanten lazen dat als een mens, niet als een merk, en 31% antwoordde binnen vier uur.

Mag je klanten een sms sturen onder de AVG?

Ja, mits je een expliciete, los gegeven opt-in hebt specifiek voor SMS. Een nieuwsbrief-vinkje dekt het niet. We hebben in de checkout een aparte, niet-aangevinkte SMS-checkbox toegevoegd. Ongeveer 38% geeft opt-in.

Heb ik een echt 06-nummer nodig, of werkt een shortcode ook?

Een shortcode leest als marketing en wordt weggefilterd. De volledige winst in deze case study kwam voort uit het gebruik van een echt, beantwoordbaar Nederlands mobiel nummer, geregeld via Bird. Shortcodes leveren geen gesprekken op.

Wat kost het SMS- en WhatsApp-kanaal?

Voor dit merk ongeveer €1.840 in Q1 voor SMS, WhatsApp Business, de huur van het 06-nummer en LLM-tokens samen, tegen €53.600 aan teruggewonnen omzet. De rekensom werkt alleen als je filtert op cartwaarde.

Wat houdt de agent tegen om kortingen weg te geven?

Het model geeft nooit toestemming voor geld. Het kan een code voorstellen, maar een deterministische rule engine beslist: cart boven €120, alleen na een tweede antwoord, maximaal één keer per klant per 30 dagen. De agent is de gesprekslaag, niet het beleid.

ai agentschat agentse-commerceautomationcase studyintegrations

Iets bouwen?

Start een project