Offertes die zichzelf schrijven: zo werkt de AI-automatisatie voor een drukkerij

Een n8n-flow haalt offerteaanvragen uit de mailbox, laat Claude de gegevens aflezen, rekent de prijs uit en mailt de offerte. Zo zit het in elkaar, stap voor stap.

Onze klant, een drukkerij, krijgt vaak offerteaanvragen per mail. Geen twee mails zijn hetzelfde. De ene klant schrijft misschien "twaalf exemplaren, 160 pagina's, waarvan 24 in kleur". Een andere vertelt eerst over het project en noemt de aantallen pas in de laatste zin. Iemand moest elke mail lezen, de prijs uitrekenen en een antwoord typen.

We bouwden een flow in n8n die dit overneemt. De flow draait elk uur, leest de nieuwe aanvragen, rekent de prijs uit en stuurt de offerte, in het Nederlands of in het Engels.

Wat er elk uur gebeurt

n8n is een programma waarin je een automatisatie bouwt als een reeks blokken, nodes genoemd. Elk blok doet één ding en geeft zijn resultaat door aan het volgende. Deze flow start elk uur vanzelf en loopt dan door deze stappen:

  1. De nieuwe mails uit de emailbox ophalen.
  2. Elke mail opkuisen tot alleen de tekst overblijft die de klant schreef.
  3. Nagaan of die klant al een offerte kreeg.
  4. Claude, het taalmodel van Anthropic, de gegevens laten uitlezen.
  5. Controleren of er genoeg gegevens zijn om een prijs te maken.
  6. De prijs berekenen.
  7. De offerte mailen in de taal van de klant.
  8. Een medewerker verwittigen als er in de mail nog een andere vraag stond, of als er iets misliep.

Mails ophalen en opkuisen

De drukkerij werkt met Microsoft 365. n8n haalt de mails op via de Microsoft Graph API, met een zoekopdracht die alleen de berichten van de laatste twee dagen teruggeeft. Omdat de flow twee dagen terugkijkt, gaat er geen aanvraag verloren als hij eens een paar uur niet draait.

Een mail komt binnen als HTML en een klein stukje code haalt de HTML-tags weg, zet speciale tekens om en houdt zo enkel de relevante tekst over. Minder tekst kost ook minder: je betaalt een taalmodel per stukje tekst.

Geen twee offertes voor dezelfde aanvraag

n8n heeft ingebouwde tabellen, Data Tables. Daarin staat per contactpersoon het e-mailadres, of er al een offerte vertrok en wanneer. De flow zoekt de afzender van elke mail op en gaat alleen verder als dat adres in de tabel staat en er nog geen offerte naartoe ging. Mailt dezelfde klant later nog eens, dan krijgt hij geen tweede offerte.

Lukt het niet om een offerte te maken, dan komt ook dat in de tabel. Zo ziet de drukkerij in één oogopslag welke aanvragen nog een menselijke interventie nodig hebben.

Claude leest de aanvraag

Het lezen gebeurt in de AI Agent-node van n8n, met Claude Sonnet als taalmodel. De instructie aan het model is kort: je krijgt een ruwe e-mail in het Nederlands of het Engels, haal er deze zes dingen uit.

  • het aantal exemplaren;
  • het aantal pagina's in zwart-wit;
  • het aantal pagina's in kleur;
  • de taal van de mail;
  • of de klant een gelamineerde kaft wil;
  • of er in de mail nog een andere vraag staat.

Aan de AI Agent-node hangt een Structured Output Parser. Die legt vast in welke vorm het antwoord moet terugkomen: een JSON-object met precies die zes velden, getallen waar getallen horen. Voor een mail als "Ik wil 12 exemplaren laten drukken, 160 pagina's zwart-wit en 24 in kleur, met een gelamineerde kaft. Kunnen jullie ze ook opsturen?" komt er bijvoorbeeld dit terug:

{
  "quantity": 12,
  "blackAndWhite": 160,
  "color": 24,
  "language": "N",
  "coverPage": "Y",
  "extraQuestion": "Y"
}

Waarom de prijs niet uit het taalmodel komt

Een taalmodel is sterk in het lezen van rommelige tekst. Rekenen volgens een prijslijst doet het minder betrouwbaar: het kan anders afronden of een korting vergeten, en twee keer dezelfde vraag geeft niet altijd twee keer hetzelfde antwoord. Voor een offerte is dat geen optie.

Daarom stopt het werk van Claude bij het aflezen. Eerst kijkt een gewone controle of er minstens een aantal exemplaren en een aantal zwart-witpagina's is. Zo niet, dan maakt de flow geen offerte en noteert dat in de tabel. Daarna rekent een Code-node de prijs uit met de regels van de drukkerij: een prijs per pagina in zwart-wit en in kleur, een vaste kost per boek, een toeslag voor een gelamineerde kaft en korting vanaf een bepaald aantal exemplaren.

Verandert een tarief, dan past iemand één getal aan. Niemand hoeft een prompt te herschrijven en te hopen dat het model de nieuwe prijs onthoudt.

De offerte vertrekt

De taal die Claude herkende, bepaalt welke tekst de klant krijgt: Nederlands of Engels.

De offerte zegt ook wat er daarna gebeurt: de klant stuurt zijn bestanden als pdf, de drukkerij kijkt de opmaak na, maakt een proefdruk en laat weten wanneer het eerste exemplaar klaarligt. Dat blijft mensenwerk, en zo hoort het ook.

Het versturen loopt via SMTP2GO, een dienst die mails verstuurt via een eenvoudige API.

Wat de flow aan mensen overlaat

Een goede automatisatie weet wanneer ze moet stoppen. Deze doet dat in drie gevallen.

Ontbreekt het aantal exemplaren of het aantal pagina's, dan komt er geen offerte.

Stelt de klant in dezelfde mail nog een andere vraag, over levering bijvoorbeeld, dan vertrekt de offerte gewoon. De drukkerij krijgt dan ook een interne mail met de vraag om de klant persoonlijk te antwoorden. Die mail begint met "Hallo, dit is je AI-bot."

En als er iets misloopt, omdat het taalmodel geen bruikbaar antwoord geeft of een mail niet vertrekt, wordt dit meteen gemeld via een intern chat bericht.

De tools op een rij

Onderdeel Tool Wat het doet
Automatisatie n8n Voert de flow elk uur uit en verbindt alle stappen.
Mailbox Microsoft 365, via de Microsoft Graph API Levert de nieuwe aanvragen aan.
Lezen Claude Sonnet (Anthropic), in de AI Agent-node Haalt de zes gegevens uit de mail.
Vaste vorm Structured Output Parser Dwingt het antwoord in een JSON-schema.
Geheugen n8n Data Tables Houdt bij wie al een offerte kreeg en wanneer.
Rekenen en opkuisen Code-nodes in JavaScript Kuist de mail op en berekent de prijs.
Versturen SMTP2GO Verstuurt de offerte.
Meldingen Telegram Laat weten wanneer er iets misloopt.

Is dit iets voor jouw bedrijf?

Dezelfde opzet werkt ook buiten de drukwerkwereld. Ze loont vooral wanneer:

  • aanvragen in vrije tekst binnenkomen, per mail of via een formulier;
  • je prijs volgt uit een paar gegevens en vaste regels, ook als die regels ingewikkeld zijn;
  • iemand in je team daar nu elke week uren mee bezig is;
  • een snel antwoord voor je klanten het verschil maakt.

Je hoeft er geen nieuw pakket voor te kopen. We bouwen verder op de mailbox en de programma's die je al hebt, en we beginnen met één soort aanvraag. Werkt dat, dan komt de volgende.

Wil je dit voor jouw bedrijf?

Vertel ons wat je tijd kost. We lezen elk bericht persoonlijk en antwoorden met een eerste idee van wat mogelijk is.

Bespreek het met ons