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 van een conditie op leverancier-naam

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}}

Voorbeeld van een conditie op organisatie

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:

Productvragen-selectie in de variabelenboom

{{#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}}

Voorbeeld van een conditie op productvraag

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.extrafieldorganisation.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 productquestions en extrafield niet 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}}

Geneste condities op leverancier en organisatie

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:

VoorwaardeVariabele
Klant is een mansale.ismale
Klant is een vrouwsale.isfemale
Sale bevat elektra (energie-flow)energie.has-stroom
Sale bevat gasenergie.has-gas
Sale bevat zowel elektra als gasenergie.has-stroom-and-gas
Klant heeft een opt-in afgegevensale.optin.hasOptin
Klant heeft een double opt-in afgegevensale.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:

HelperBeschrijving
uppercaselowercaseTekst om in hoofdletters of kleine letters.
fullTrimtrimSpecialCharactersWitruimte of speciale tekens verwijderen.
urlencodeurldecodeTekst veilig maken voor gebruik in een URL, of decoderen.
md5base64EncodehmacSha256Versleutelen 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).
commaDecimalToDotEen Nederlands decimaalbedrag (komma) omzetten naar internationaal formaat (punt).
integerfloatbooleanForceer een waarde naar een specifiek type (vooral relevant voor JSON-payloads).
splitLastnameFromNameForNLsplitSuffixFromNameForNLAchternaam 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 — dus 123,456,789, niet 123, 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.