Een afwezigheidsmelding is geen antwoord
„Ik ben afwezig tot 22 juni, voor spoed bel 06-…” leest als een reactie en is het niet. Wie die als antwoord telt, haalt iemand uit de opvolging die nooit iets gelezen heeft.
Bergsma Interieurbouw maakt keukens en kasten op maat in Zwolle. Er komen elke week aanvragen binnen via het websiteformulier en de telefoon. De meeste worden één keer beantwoord en daarna nooit meer, want opvolgen is saai werk dat altijd wijkt voor iets dringenders.
Bergsma is een simulatieopdracht: een bedrijf dat wij zelf hebben opgezet om deze workflow op te bouwen en te testen.
Een reeks herinneringen bouwen kan iedereen. Het risico zit aan de andere kant: dat je blijft sturen naar iemand die al geantwoord heeft, die zich heeft afgemeld, of die twee keer in je systeem staat en dus alles dubbel krijgt.
Dat is niet alleen vervelend voor de ontvanger. Het is ook precies het gedrag waardoor een bedrijf besluit om dan maar helemaal niet meer op te volgen — en daarmee is het middel erger dan de kwaal.
Deze workflow draait daarom elke werkdag, leest eerst zijn eigen geheugen, en beslist per persoon opnieuw of er überhaupt iets uit hoort te gaan. Het antwoord is vaak nee.
Op elk van deze zes gaat een eenvoudige opvolgreeks onderuit. Ze zitten daarom allemaal in de testdata.
„Ik ben afwezig tot 22 juni, voor spoed bel 06-…” leest als een reactie en is het niet. Wie die als antwoord telt, haalt iemand uit de opvolging die nooit iets gelezen heeft.
Een 4.7.1 door greylisting komt vanzelf goed. Een 5.1.1 betekent dat het adres niet bestaat. Ze zien er in de mailbox hetzelfde uit; het verschil is een prospect.
Iemand vult het formulier twee keer in, één keer met een punt in het mailadres en één keer zonder. Het telefoonnummer is identiek. Zonder die koppeling lopen er twee reeksen naar één mens.
Staat het toestemmingsvinkje niet aan, dan gaat er niets uit. Ook niet als de aanvraag verder perfect is. Bellen naar aanleiding van iemands eigen aanvraag mag wel, dus het is geen dood spoor.
Niet voor de aanvraag. Wie zich afmeldt en drie maanden later opnieuw een formulier invult, komt niet vanzelf terug in een reeks.
Er zit een concurrent tussen die naar inkoopprijzen vist en een leverancier die zichzelf aanbiedt. Die laatste stond al twee mails lang in de showroomreeks voordat hij het zelf meldde.
De run gaat over vrijdag 12 juni. De vorige run was dinsdagavond; woensdag en donderdag zijn overgeslagen. Deze run moest dus zestig uur aan gebeurtenissen tegelijk inhalen. Hij deed er 25 seconden over en kostte vier en een halve cent. Dit is wat eruit kwam.
Een tweede poging bij iemand met een duidelijke vraag en geen termijn, en een eerste bij een oud-klant die zelf terugkomt. Volgende pogingen staan op 19 en 16 juni.
Onder andere een zorggroep die pantry-keukens op drie locaties vervangt: score 92 uit vier beoordeelde criteria. Daar hoort iemand te bellen, geen reeks.
Dezelfde persoon stond twee keer in het systeem, met een net ander mailadres en hetzelfde telefoonnummer. Er stonden vandaag ook twee mails gepland. Er ging er geen enkele uit — hij had die nacht namelijk geantwoord.
Eén omdat het een consumentenprovider is en een opzoeking daar niets oplevert maar wel quotum kost. Eén omdat de dienst net een storing had. Beide aanvragen zijn gewoon verder verwerkt.
Op een dag met drie nieuwe aanvragen en vier binnengekomen berichten gingen er dus twee mails uit, en kwamen er vijf dingen bij een mens terecht. Dat is geen tekortkoming van de workflow, dat is waar hij voor gebouwd is.
De workflow draait in n8n op onze eigen server en hangt daar aan een schema dat elke werkdag afgaat. Links de bronnen en het geheugen, in het midden zes stappen die allemaal in code draaien, en pas daarna de twee stappen die AI aanroepen. Rechts de vier uitkomsten.

Elke AI-stap heeft een Success- en een Error-uitgang, en ze lopen allebei naar dezelfde controlestap. Dat is met opzet: of het model nu antwoordt of omvalt, er komt hoe dan ook iets uit dat de rest van de workflow kan verwerken.
Daardoor liep de run gewoon door toen het model er tijdens het testen helemaal uitlag.

De workflow verwerkt eerst wat er binnenkwam en pas daarna wat er gepland stond. Andersom stuur je vanmorgen nog een herinnering aan iemand die vannacht heeft geantwoord. Dat is de fout die mensen het meest opvalt.
Erna samenvoegen lost niets op: de twee mails zijn dan al weg. Deze stap staat daarom vóór elke verzendbeslissing, en koppelt op telefoonnummer als het mailadres net anders geschreven is.
Het model scoort vier criteria, elk met een letterlijk citaat als bewijs. Daarna telt code na of de opgegeven score gelijk is aan de som van die criteria. Een kaal cijfer van 82 zegt niets; 82 dat optelt uit vier beoordeelde punten wel.
Te onzeker, niet beoordeeld, of een binnengekomen bericht dat niet geduid kon worden: in al die gevallen gaat er niets uit en komt het bij een mens. Niets doen is hier een geldige uitkomst, geen storing.
Tijdens het testen viel de verbinding met het model volledig weg. De run liep gewoon door: de toestemmingscontrole, het samenvoegen van identiteiten, het uitsorteren van bounces en de planning zijn allemaal code. Alleen het duiden van de antwoorden en het beoordelen van de aanvragen ontbrak, en dat stond met zoveel woorden in het dagrapport.
Dat was geen toeval maar een ontwerpkeuze: de dingen die schade kunnen aanrichten, zitten niet in de AI-laag.
Het legde ook een gat bloot. In de eerste versie kreeg iemand alsnog een herinnering, terwijl hij die nacht had geklaagd dat hij er al te veel kreeg. Zijn bericht kon niet geduid worden, dus de reeks werd niet gestopt.
Nu geldt: komt er een bericht binnen dat niet geduid kan worden, dan staat de reeks stil tot een mens het gelezen heeft. Liever een dag te laat dan een mail naar iemand die net vroeg om ermee op te houden.