Dynamische mails — werken met variabelen en condities
Met dynamische tags maak je e-mails, sms-berichten, offerte-PDF's, scriptlogs en agreements automatisch persoonlijk. Salesdock vervangt de tags op het moment van versturen door de actuele waarden uit de sale — en met conditionele blokken kun je delen van de tekst alleen tonen wanneer aan een voorwaarde wordt voldaan.
Dit artikel beschrijft de tag-syntax die in alle Salesdock-templates werkt: variabelen invoegen, conditionele blokken (op leverancier, product, organisatie of andere velden), helper-functies en loops.
Waar gebruik je dynamische tags?
De tag-syntax werkt overal waar Salesdock een template-tekst rendert:
- E-mailtemplates — offerte-mail, bevestigings-mail, verificatie-mail, herinneringen.
- SMS-templates — offerte-sms, verificatie-sms, herinneringen.
- Scriptlogs — gespreksleidraad voor de medewerker klantcontact.
- Offerte-PDF en online offertepagina — voorpagina-tekst, voorwaarden, agreements.
- Workflow-acties — e-mailberichten en webhook-payloads in workflow automation.
Tip: in elke editor met dynamische teksten staat een + Variables-knop. Daarmee zie je de complete variabelenboom voor de huidige context (sale, product, leverancier, organisatie, agent, productvragen, extra velden enzovoort) en kun je een variabele rechtstreeks invoegen.
Variabelen invoegen
Variabelen plaats je tussen dubbele accolades. Spaties rond de naam zijn optioneel:
{{sale.firstname}}— voornaam.{{sale.email}}— e-mailadres.{{supplier.name}}— naam van de leverancier.
Voor variabelen die HTML bevatten (zoals een knop of een opgemaakt productdocument-blok) gebruik je drie accolades zodat de HTML niet wordt geëscaped:
{{{sale.accept_button}}}— geeft de actieknop weer als knop in plaats van als HTML-tekst.
Conditionele blokken
Met conditionele blokken toon je een stuk tekst alleen wanneer aan een voorwaarde is voldaan. Er zijn twee varianten:
{{#voorwaarde}}…tekst…{{/voorwaarde}}— tekst tonen als de voorwaarde waar is.{{^voorwaarde}}…tekst…{{/voorwaarde}}— tekst tonen als de voorwaarde niet waar is.
Open- en sluittag moeten exact dezelfde naam hebben. Een typefout zorgt ervoor dat het blok niet wordt herkend en als platte tekst in de uitvoer blijft staan.
Voorwaarden op leverancier, product of organisatie
Salesdock genereert voor elke variabele in de boom automatisch drie matchers waarmee je een conditie kunt opbouwen:
is— exacte match met één waarde.in— match met een van meerdere waarden (komma-gescheiden, geen spaties).contains— gedeeltelijke match: de waarde komt ergens in het veld voor.
Het patroon is altijd: {{#entiteit.matcher.veld.waarde}}.

Voorbeeld 1 — alleen tonen voor één leverancier
{{#supplier.is.name.Voorbeeldleverancier}}
Welkom bij Voorbeeldleverancier. We nemen binnen 2 werkdagen contact op.
{{/supplier.is.name.Voorbeeldleverancier}}Voorbeeld 2 — tonen voor meerdere leveranciers tegelijk
{{#supplier.in.id.123,456,789}}
Voor deze drie leveranciers geldt een aanvullende disclaimer.
{{/supplier.in.id.123,456,789}}Met in dek je in één regel een hele groep af. Dit werkt ook op product-ID's, organisatie-ID's of welk ander veld dan ook.
Voorbeeld 3 — tonen op basis van een tekstpatroon (contains)
{{#supplier.contains.name.Energie}}
Bij energieleveranciers gelden specifieke voorwaarden.
{{/supplier.contains.name.Energie}}Met contains match je elke leverancier waarvan de naam het woord Energie bevat — handig wanneer een groep producten of leveranciers een gedeelde tekst in de naam of identifier heeft.
Voorbeeld 4 — tonen op basis van een organisatie
{{#organisation.is.identifier.acquisitie-team}}
Hartelijk dank voor je aanmelding via ons acquisitie-team.
{{/organisation.is.identifier.acquisitie-team}}
Voorwaarden op productvragen of extra velden
Hetzelfde patroon werkt op productvragen en extra velden. Stel dat in de salesflow een productvraag kredietwaardigheid wordt gesteld met de antwoordopties ja of nee:

{{#productquestions.is.kredietwaardigheid.ja}}
Op basis van je gegevens accepteren we de overeenkomst direct.
{{/productquestions.is.kredietwaardigheid.ja}}
{{^productquestions.is.kredietwaardigheid.ja}}
We voeren nog een aanvullende controle uit voordat we de overeenkomst bevestigen.
{{/productquestions.is.kredietwaardigheid.ja}}
Voor extra velden op de sale, het product of de organisatie werkt het identiek: gebruik {{#sale.extrafield.is.<identifier>.<waarde>}}…{{/…}} of het equivalent voor product.extrafield, organisation.extrafield en flow.extrafield.
Let op: in alternative- en combination-templates voor mails en sms (template-varianten die door e-mailadres of telefoonnummer-domein worden gekozen) zijn condities op
productquestionsenextrafieldniet beschikbaar. Salesdock laat ze daar bewust weg om de variabelenboom binnen de geheugenlimiet te houden.
Geneste condities
Je kunt blokken nesten om een combinatie van voorwaarden af te dwingen:
{{#supplier.is.name.Voorbeeldleverancier}}
{{#organisation.is.identifier.acquisitie-team}}
Voor de combinatie van Voorbeeldleverancier en het acquisitie-team
geldt een aangepaste begroeting.
{{/organisation.is.identifier.acquisitie-team}}
{{/supplier.is.name.Voorbeeldleverancier}}
De binnenste tekst verschijnt alleen wanneer beide condities tegelijk waar zijn. Combineer dit zo diep als je nodig hebt — let er wel op dat elke open-tag zijn eigen sluit-tag heeft.
Ingebouwde booleans
Voor veelgebruikte voorwaarden bestaan kant-en-klare booleans die je direct in een conditie kunt plaatsen:
| Voorwaarde | Variabele |
|---|---|
| Klant is een man | sale.ismale |
| Klant is een vrouw | sale.isfemale |
| Sale bevat elektra (energie-flow) | energie.has-stroom |
| Sale bevat gas | energie.has-gas |
| Sale bevat zowel elektra als gas | energie.has-stroom-and-gas |
| Klant heeft een opt-in afgegeven | sale.optin.hasOptin |
| Klant heeft een double opt-in afgegeven | sale.optin.hasDoubleOptin |
Helper-functies (waarden bewerken)
Helper-functies passen een bewerking toe op een variabele. Gebruik ze als blok rond de variabele:
{{#uppercase}}{{sale.lastname}}{{/uppercase}}In dit voorbeeld krijg je de achternaam in hoofdletters. Beschikbare helpers:
| Helper | Beschrijving |
|---|---|
uppercase / lowercase | Tekst om in hoofdletters of kleine letters. |
fullTrim / trimSpecialCharacters | Witruimte of speciale tekens verwijderen. |
urlencode / urldecode | Tekst veilig maken voor gebruik in een URL, of decoderen. |
md5 / base64Encode / hmacSha256 | Versleutelen of coderen, voornamelijk gebruikt in webhook-payloads en API-integraties. |
timestamp:<format> | Het huidige moment in een opgegeven datumformaat (bijvoorbeeld timestamp:Y-m-d). |
modifyDateTime:<modifier> | Een datumvariabele optellen of aftrekken (bijvoorbeeld modifyDateTime:+14 days). |
commaDecimalToDot | Een Nederlands decimaalbedrag (komma) omzetten naar internationaal formaat (punt). |
integer / float / boolean | Forceer een waarde naar een specifiek type (vooral relevant voor JSON-payloads). |
splitLastnameFromNameForNL / splitSuffixFromNameForNL | Achternaam of tussenvoegsel uit een volledige naam halen (Nederlandse logica voor "van", "de" enzovoort). |
Loops — herhalen over een lijst
Voor lijst-variabelen (zoals alle producten in een offerte, alle bijgevoegde documenten of alle locaties van een multi-site offerte) gebruik je een loop. Het blok wordt herhaald voor elk item in de lijst:
{{#sale.products}}
- {{name}} (aantal: {{quantity}}) — € {{monthly-price}} per maand
{{/sale.products}}Binnen de loop verwijs je rechtstreeks naar de eigenschappen van het item (zonder het sale.products.-prefix). Beschikbare loops:
sale.products— alle producten in de offerte (hoofdproduct + opties).sale.documents— alle documenten die met de offerte worden meegestuurd.energie.multi-sites— alle leveradressen van een multi-site energieofferte.
Aandachtspunten
Tip: exacte gelijkheid van open- en sluittag is essentieel.
{{#supplier.is.name.X}}moet eindigen met{{/supplier.is.name.X}}, niet met een verkort label. Een typefout zorgt ervoor dat het blok niet wordt herkend en als platte tekst in de uitvoer staat.
Tip:
in-condities accepteren een komma-gescheiden lijst zonder spaties tussen de waarden — dus123,456,789, niet123, 456, 789.
Test je tags: doorloop een testverkoop in de salesflow met representatieve invoer en bekijk de gegenereerde mail, sms of PDF. Vooral bij conditionele blokken en loops zie je daarmee meteen of de juiste tekst voor de juiste klant verschijnt. Tags die niet worden gerenderd (bv. door een typefout) zie je terug als platte
{{...}}-tekst in de uitvoer.
Begrippenlijst
Variabele — een placeholder die op het moment van versturen wordt vervangen door een actuele waarde uit de sale, zoals {{sale.firstname}}.
Conditioneel blok — een stuk tekst dat alleen wordt getoond als aan een voorwaarde is voldaan, geopend met {{#…}} en gesloten met {{/…}}.
Inverted blok — omgekeerd conditioneel blok, geopend met {{^…}}. Wordt getoond als de voorwaarde niet waar is.
Matcher (is / in / contains) — manier waarop de waarde van een veld wordt vergeleken met de opgegeven waarde: exact (is), in een lijst (in) of als substring (contains).
Helper-functie (lambda) — bewerking die je rondom een variabele plaatst, bijvoorbeeld om tekst om te zetten naar hoofdletters of een datum te formatteren.
Loop — een blok dat herhaald wordt voor elk item in een lijst, zoals alle producten in een offerte of alle locaties van een multi-site offerte.
Alternative-/combination-template — alternatieve versie van een mail- of sms-template die op basis van bijvoorbeeld het e-maildomein of telefoonnummer wordt gekozen. In deze templates zijn condities op productvragen en extra velden niet beschikbaar.