Automatisatie en e-mail personalisatie
MailJet en personalisatie via Coda
Het versturen van een gepersonaliseerde email blijkt voor velen nog te hoog gegrepen. Niettemin is het gebruik van de voornaam in een email eenvoudig. Ik leg stap voor stap uit hoe je dit zelf kan doen vanuit Coda.
Ik maak gebruik van MailJet, een email platform met een zeer goede score qua het succesvol afleveren van emails vanaf dat ze in grote volumes gaat verzenden. Dan zijn er nog twee belangrijke voordelen:
- je kunt mooie templates maken en dat op eenvoudige wijze en dat voor elke doelgroep.
- je kunt de templates gebruiken als drager van informatie vanuit een database om personalisatie en opmaak
Met dat het versturen van een gepersonaliseerde email één van de basis ingrediënten is van automatisatie, is dit een wat langer artikel geworden.
Handmatige personalisatie binnen Mailjet
Recentelijk ontving ik een email van MailJet waarin ze wijzen op de vele voordelen van personalisatie. Om email te personaliseren met een voornaam heb je een paar elementen nodig voor de hand liggen. We overlopen de elementen één voor één :
email adres + voornaam + email template + afzender
Email adres : dat spreekt voor zich met de toevoeging dat de bestemmeling akkoord is vanaf dat het om een marketing email gaat. Dit vanwege goed fatsoen en omdat GDPR dit afdwingt.
Voornaam : met of zonder spaties, met of zonder koppelteken, dat doet er niet toe omdat het geheel aan letters wordt samengenomen. ‘Jean’ gaat dus evengoed als ‘Marie-Louise’ of ‘Paul 123’. Belangrijk is dat je de voornaam aanmaakt als contact eigenschap. Dit is stap 1. Hieronder zie hoe dit gaat via deze link . Geen ervaring? Kies voor datatype ‘String’ en Field Type ‘static’.
Stap 2 is een lijst te maken waarin dat je de contacteigenschappen in verband brengt met de bestemmeling via een contactlijst . In MailJet zijn er een paar manieren (file uploaden, handmatig en via een API). Ik beperk me hier tot de handmatige manier. Hieronder zie je wat men verwacht. De eerste regel bevat de namen van de eigenschappen die je bij Stap 1 hebt aangemaakt, regel 2 en verder staat dan de data.
In ons geval wordt dit dan met drie contacten het volgende
email,firstname
christiaan@huizer.be,christiaan
aard.olie@gmail.com,aard
peter.olie@gmail.com,peter
Eenmaal dit ingevoerd, is MailJet zo slim om te vragen of het klopt in stap 3. Mocht het niet kloppen, dan kun je via deze stap de nodige wijzigingen aanbrengen.
Dan is er de laatste stap (stap 4) waarover we eerder spraken en waarmee je verklaart dat je wat je doet, okay is:
Vanaf nu heb je een lijst met email en voornaam (firstname) die je kan samenvoegen met een template. Voor alle duidelijkheid, een email platform is niet de plaats waar je gegevens van je contacten bewaart en bewerkt. Dit doe je beter in Coda. In dit voorbeeld dien je wel een contactlijst op te bouwen voor het versturen van je email en MailJet is zo vriendelijk de gegevens voor ons te bewaren, echter Mailjet is daarmee nog geen Database, hoewel ze wel allerhande pogingen doet er op te lijken via bijvoorbeeld ‘segmentatie’.
Hoe bewaren we gegevens in Coda?
In een tabel zoals hieronder. De handigheid die we hier toepassen is de gebruikmaking van de RowID() om elk contact uniek te maken. Als één persoon zich twee keer inschrijft met twee verschillende email adressen dan zijn dat in onze tabel twee unieke personen, ook als daar één mens van vlees en bloed achter schuil gaat. Eens je een CRM opbouwt, kun je deze gegevens bij elkaar brengen, bijvoorbeeld op basis van een geboortedatum en een ID van de overheid. In deze tabel zijn het twee rijen. De formule die ik hier gebruik begint met de Find() functie om altijd een oplopende getalswaarde te verkrijgen, ook als er rijen verdwijnen. Het nummertje aan het einde is de RowID.
Concatenate(Find(thisRow,thisTable)," - ",thisRow.Voornaam," ",thisRow.Achternaam, " - ",thisRow.[Row ID])
De logica waarmee dat je er voor zorgt dat gegevens mooi over en weer gaan tussen MailJet en PaperForm beschrijf ik in dit artikel. Hieronder hoe je via Zapier de gegevens binnen Mailjet mooi vult.
Mailjet VAR vs DATA
Eens we vanuit Coda de gegevens kunnen aanbieden aan MailJet via Zapier, dient de Template op punt te staan. In de template gebruiken we de eigenschappen op zo’n wijze dat MailJet ‘het snapt. In deze is er een belangrijk verschil tussen twee formaten, zie hieronder:
1. [[data:firstname:""]],
2. [[var:firstname:""]],
Het ‘data’ formaat is nodig om gegevens die uit de MailJet database komen, te verbinden met de template. De ‘var’ (variable) gebruik je als je gegevens vanuit een andere database injecteert, zoals Coda. Dit is bij ons het geval.
Zapier — Coda
Eens we een tabel hebben in Coda kunnen we in Zapier de brug bouwen en dat gebeurt op basis van een nieuwe rij in Coda.
Een tabel bouwen en dan op een knop drukken om een lijst (van bijv 100 gebruikers) direct te versturen, dat zit er niet in. Er dient iets te bewegen en te veranderen alvorens de Zap haar werk kan doen. We hebben met andere woorden een tabel nodig die zich (aan)vult. Hoe we dat voor elkaar krijgen bespreken we verderop in dit artikel.
Wat MailJet aanbiedt via Zapier is best indrukwekkend. We beperken ons hier tot optie drie: Send Email Using a MailJet Template. Via deze weg kunnen we mooie emails opbouwen en versturen. Binnen MailJet zelf spreken ze over campaigns waar zowel de lijst met contacten als de template toe behoort. In een volgend artikel kom ik nog terug op de campaing logica omdat je via deze weg ook informatie kan vinden over ‘opens’ bounced en zo verder.
Nieuwe rijen opbouwen in Coda
We hebben een formule nodig die de eerste rij overloopt, de taak uitvoert en dan begint aan rij twee en zo verder. Daar heb je een FormulaMap() voor nodig. Verder wilde ik alleen maar de gegevens van gebruikers waar een vinkje bij staat. En voor een selectie heb je een filter nodig. Hoe we die selectie opbouwen, leg ik verderop uit.
De T1 is Tabel waar de inschrijvingen in binnenkomen en T2 is de tabel die we gebruiken voor de brug met Zapier, dus de tabel waarin we nieuwe rijen toevoegen en deze nieuwe rijen zijn dan de trigger om de emails te versturen. Ik heb me gebaseerd op een vraag op het Coda Forum voor deze oplossing en hier de filter aan toegevoegd.
T1.Filter(Checkbox=True()).email.FormulaMap(AddRow(T2,T2.[email in T2],CurrentValue))
Met bovenstaande formule injecteer ik via de knop in de tweede Tabel (T2) de emailadressen en via een lookup voeg ik dan de eigenschappen toe aan T2. De lookup is een bewuste keuze om de formule in de button eenvoudig te houden en om snel aanpassingen door te voeren. Bijvoorbeeld als er nieuwe ‘properties’ gecommuniceerd dienen te worden. Ik zie op fora deze info vaak in een button en daarmee in een formule staan, maar ik vind dat niet handig.
Met bovenstaande kunnen we vanuit een bestaande tabel een volgende tabel laten vollopen en ook nog eens rekening houden met welke rijen aangevinkt zijn. Dat is best een sterk resultaat.
Tabel T0 — de selectie
Mijn inzet is om een niet getrainde Coda gebruiker het zo makkelijk als mogelijk te maken. Iemand die zich eigenlijk niet wil bezighouden met het versturen van emails, zou het moet zelfs met een milde vorm van tegenzin toch tot een goed eind moeten kunnen brengen.
Hierboven ontvouwt zich de eenvoud. in T0 staan er buttons. Je kiest ér één, de anderen worden automatisch inactief en in T1 vindt een selectie plaats. Via de rode button create mailing list worden de twee rijen uit T1 toegevoegd aan T2 en zo verzonden. Vanaf dat je een reset uitvoert gebeuren er twee dingen:
- in T1 worden alle vakjes ‘unchecked’ zodat je opnieuw een keuze kan maken
- Tabel T2 wordt leeggemaakt, dus alle rijen daar worden verwijderd.
Stel nu dat je nog criteria hebt zoals leeftijdsgroep, land, taal etc. Dan kun je die selecties op vergelijkbare wijze toevoegen. Niet door ze allemaal binnen te laten lopen in de kolom checkbox, maar door voor elke subset een eigen kolom met checkbox te voorzien om dan alles bij elkaaar te brengen in één finale kolom en hierop de button te laten werken. Dat zal even wat puzzelen zijn, maar met onderstaande bij de hand gaat dat zeker lukken.
Groene Reset buttonRunActions(T1.ModifyRows(T1.Checkbox,false()),DeleteRows(T2))"Once a week" action (en deze geldt M.M. ook voor de anderen)T1.filter(Frequency="Once a week").ModifyRows(T1.Checkbox,True())"Once a week" disableT1.Checkbox.Contains(True())Create mailing listT1.Filter(Checkbox=True()).email.FormulaMap(AddRow(T2,T2.[email in T2],CurrentValue))
De uitleg
Deze bevat twee acties, vandaar de RunActions waarmee we eerst alles uitvinken in T1 ,dat is de reset en ten tweede de rijen verwijderen uit T2.
De paarse selectie button bevat twee acties. De eerste is dat we het vinkje op de juiste plaats zetten in T1. De ModifiedRows spreekt voor zich, het handigheidje staat ervoor en dit is de Filter. Hier filteren we op basis van de tekstuele waarde. Dit is hoofdletter en spatiegevoelig, oppassen dus. Dit stukje kun je best zo eenvoudig mogelijk houden met zinnetjes als: weekly update, monthly update, etc. Echter eens er ‘iets’ staat in T1, mag je er niet nog een selectie aan kunnen toevoegen en dat voorkom je door de formule waarbij je zegt als in T1 de kolom checkbox een ‘true’ bevat, dan deze knop inactief zetten. Deze disable functie is voor alle knoppen gelijk.
Hoeveel tijd kost dit geheel?
Het is een lang artikel geworden met veel informatie. De stappen zijn helder en met enige volharding kun je zoiets nabouwen. Zelf heb ik een paar keer dit soort opzetjes gemaakt om echt voeling te krijgen met het proces. Je brengt immers verschillende vaardigheden samen die her en der een net wat andere mind-set vragen. Een email template opbouwen voelt anders dan een PaperForm en weer totaal anders dan de formules binnen Coda en de logica binnen Zapier.
Een project als dit voor een klant opzetten kost me ongeveer tussen de 12 en 20 uur (of meer). Daarin zit ook de tijd dat ik overleg met de klant. Deze tijd loop bovendien over meerdere dagen heen en veronderstelt dat er iemand is die de vormgeving op zich neemt, net als de teksten. De delta van 8 uur wordt bepaald door hoe uitgebreid men het wil hebben. Als je direct segmentaties wil bouwen in Coda, dan kost dat extra tijd.
Mijn naam is Christiaan Huizer en ik ben eigenaar van Huizer Automatisatie. In mijn rol als bedrijfsadviseur ben ik actief in het midden en klein bedrijf in Wallonië, Brussel, Vlaanderen en Nederland. Mijn klanten vragen me vooral om hun bedrijf voordelig te vereenvoudigen en versnellen. Ik maak daarbij gebruik van tools als AirTable, Coda, Zapier, MailJet en PaperForm.