E-mailsjablonen

In preview

Sjablonen met logica, gerenderd bij verzending.

Sla een e-mailsjabloon op in Bird en verwijs ernaar via id. Conditionals, loops en defaults renderen per ontvanger wanneer het bericht wordt verzonden, zodat de personalisatielogica in het sjabloon blijft in plaats van verspreid door je code. Maak het als HTML met gedeclareerde variabelen, of render je React Email-componenten.

welcome.tsx
200 · 1.2s
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { WelcomeEmail } from "./emails/welcome";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.email.send({
  from:    "Bird <hello@bird.com>",
  to:      ["ada@example.com"],
  subject: "Your invite is ready",
  html:    await render(<WelcomeEmail name="Ada" />),
}).safe();

if (error) throw error;
console.log(data.id);
// → "em_2bX91Yk8h..."

Sla een sjabloon op. Personaliseer bij verzending.

Verzend alleen de waarden die per ontvanger veranderen.

Sjablonen maken deel uit van de Bird Email API. Sla de layout en de logica ervan één keer op; bij elke verzending verwijs je naar het sjabloon en geef je een platte set waarden per ontvanger mee. Bird rendert het uiteindelijke bericht aan zijn kant, zodat hetzelfde sjabloon één e-mail of een miljoen aanstuurt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

// Store a template once. Conditionals and loops render per recipient at send.
const tpl = await bird.templates.create({
  name:    "order-confirmation",
  subject: "Order {{ order_number }} confirmed",
  html:    "<h1>Thanks, {{ first_name or 'there' }}.</h1>" +
           "{{ if is_member }}<p>You earned {{ points }} points.</p>{{ end }}",
  variables: [
    { key: "first_name",   type: "string", fallback: "there" },
    { key: "order_number", type: "string" },
    { key: "is_member",    type: "boolean" },
    { key: "points",       type: "number" },
  ],
});

// Send it. Bird fills in the blanks for each recipient.
await bird.email.send({
  from:      "orders@acme.com",
  to:        ["ada@example.com"],
  template:  tpl.id,
  variables: { first_name: "Ada", order_number: "A-1043", is_member: true, points: 120 },
});

Meer dan zoeken-en-vervangen.

Echte templating-logica, opgelost aan de kant van Bird, per ontvanger, bij verzending.

  1. 01

    Conditionals.

    Toon een blok alleen wanneer een waarde van toepassing is, zoals een notitie alleen voor leden of een banner met gratis verzending, zonder twee verschillende sjablonen te verzenden.

  2. 02

    Loops.

    Herhaal een rij voor elk item in een array, zodat één bestelbevestigingssjabloon elk regelitem opsomt dat een klant daadwerkelijk heeft gekocht.

  3. 03

    Defaults.

    Val terug op een veilige waarde wanneer een veld ontbreekt, zodat een lege voornaam nooit als een lege begroeting wordt verzonden.

  4. 04

    Geneste data.

    Reik in gestructureerde objecten met dotted paths, niet alleen platte top-level keys, zodat je bestaande datavormen er rechtstreeks in passen.

  5. 05

    Rijke variabeletypes.

    Gedeclareerde variabelen kunnen strings, getallen, booleans, arrays en objecten zijn, en dat is wat de bovenstaande loops en conditionals mogelijk maakt.

Maak het zoals je al werkt.

Verzend platte HTML met een lijst van gedeclareerde variabelen via de API, en je hebt een werkend sjabloon, geen nieuwe editor om te leren. Liever componenten? Render je React Email-sjablonen naar HTML en sla het resultaat op. Het enige dat je moet weten: laat Bird's tokens als letterlijke tekst in de JSX staan zodat ze de render overleven en bij verzending worden ingevuld, in plaats van een waarde in te bakken wanneer React rendert.

receipt.ts
React Email
import { render } from "@react-email/render";
import { Receipt } from "./emails/receipt";

// Author in React. Leave Bird's tokens as literal text so they
// survive the render and get personalized per recipient at send.
const html = await render(<Receipt firstName="{{ first_name }}" />);

await bird.templates.create({
  name:    "receipt",
  subject: "Your receipt",
  html,
  variables: [{ key: "first_name", type: "string", fallback: "there" }],
});

Geversioneerd, net als de rest van je code.

Bewerken gebeurt op een concept en raakt nooit wat live is. Publiceren bevriest een onveranderlijke, genummerde versie en pusht die; als een wijziging misgaat, draai je terug naar een eerdere versie en publiceer je opnieuw. Gelijktijdige bewerkingen worden opgevangen in plaats van stilletjes overschreven, zodat twee mensen die aan hetzelfde sjabloon werken elkaar niet overschrijven. Elke versie draagt een stabiele identiteit, en dat is wat ervoor zorgt dat rapportage per sjabloon opens en clicks correct toeschrijft.

Houd elk merk consistent.

Een brand kit bevat je kleuren, typografie, spacing, logo en tone of voice, en past die toe op een sjabloon zodat de output eruitziet en leest als jij, zonder elk sjabloon met de hand opnieuw te stylen. Kits leven op werkruimteniveau en een werkruimte kan er meerdere bijhouden, omdat een hoofdmerk, een submerk en je gewone transactionele mail zelden dezelfde look willen. Een kit gebruiken is optioneel: een sjabloon zonder kit valt terug op nette defaults.

Bekijk precies wat er verzonden wordt.

Vul een sjabloon met voorbeeldwaarden en zie het gerenderde bericht voordat iemand het ontvangt. De preview loopt door hetzelfde renderpad als de echte verzending, zodat wat je goedkeurt ook is wat eruitgaat, niet een benadering die afdrijft zodra tokens en logica voor echte ontvangers worden opgelost.

Waar sjablonen naartoe gaan.

Het opgeslagen-sjabloonmodel is de basis voor wat hierna komt: beschrijf een sjabloon in een prompt en genereer een concept om te verfijnen, bouw er een visueel zonder HTML te schrijven, en laat coding agents on-brand-sjablonen samenstellen via MCP, plus een bibliotheek met startsjablonen om mee te beginnen. Deze bouwen voort op hetzelfde geversioneerde, merkbewuste model, geen apart spoor, zodat de API die je vandaag integreert dezelfde is die zij uitbreiden.

Ga dieper in de docs.

Zie hoe sjablonen passen in de verzendgids, inclusief het renderen van React Email, en stel e-mailgebeurtenissen en webhooks in zodat opens en clicks per sjabloon terugstromen.

Veelgestelde vragen sjablonen

Moet ik een visuele builder gebruiken?+
Nee. Je kunt sjablonen volledig via de API maken en beheren: verzend je HTML met een lijst van gedeclareerde variabelen, en verwijs naar het sjabloon via id wanneer je verzendt. De builder is één manier, niet de enige.
Hoe verschilt een opgeslagen sjabloon van het meegeven van HTML bij elke verzending?+
Een opgeslagen sjabloon wordt aangeroepen via id en is geversioneerd, en de personalisatie ervan rendert aan de kant van Bird bij verzending. Je verzendt dus alleen de waarden per ontvanger, niet elke keer de hele body, en de layout en logica leven op één plek in plaats van bij elke aanroep opnieuw te worden opgebouwd in je code.
Wat kan de personalisatie meer dan zoeken-en-vervangen?+
Conditionals, loops over arrays, geneste velden en defaults per veld, allemaal per ontvanger opgelost bij verzending. Een lidmaatschapsblok kan alleen voor leden worden getoond; een bestelling kan zijn regelitems opsommen. De logica zit opgeslagen in het sjabloon, dus een platte key-value-payload per ontvanger is genoeg om het aan te sturen.
Werkt React Email?+
Ja. Render je React Email-componenten naar HTML en sla het resultaat op als de sjabloonbody. Laat voor waarden per ontvanger Bird's tokens als letterlijke tekst in de JSX staan zodat ze de render overleven en bij verzending worden ingevuld, in plaats van een waarde in te bakken wanneer React rendert.
Kan ik een sjabloon terugdraaien dat ik kapot heb gemaakt?+
Publiceren bevriest een onveranderlijke, genummerde versie. Bewerken gebeurt op een concept en raakt nooit wat live is tot je publiceert, en je kunt terugdraaien naar elke eerder gepubliceerde versie en die opnieuw publiceren. Elke versie behoudt een stabiele identiteit, en dat is wat ervoor zorgt dat rapportage per sjabloon verzendingen correct toeschrijft.
Is er AI-generatie of een drag-and-drop-builder?+
Daar bouwen we naartoe, maar dat wordt niet als eerste geleverd. De API (HTML met gedeclareerde variabelen) en React Email zijn de authoring-paden die vandaag beschikbaar zijn; een visuele builder, prompt-to-template-generatie en een agent compose-oppervlak komen bovenop hetzelfde opgeslagen-sjabloonmodel.
Hoe verzend ik daadwerkelijk een opgeslagen sjabloon?+
De send-aanroep is ongewijzigd: verwijs naar het sjabloon via id en geef de waarden per ontvanger mee, en de bestaande email send-API handelt de rest af. Er is geen apart template-send-endpoint om te leren.

Sjablonen zijn deel van een platform, geen losse tool.

Sla sjablonen op, versioneer en personaliseer ze op dezelfde Email API die verzending, deliverability, suppressie en analyses afhandelt. Eén set keys.

Begin met één kanaal.
Voeg de rest toe wanneer je er klaar voor bent.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra je een betaalmethode toevoegt en een afzender verifieert.

Gebruik je Claude Code, Cursor of Codex? Kopieer een setup-prompt en je agent installeert de Bird CLI en skills voor je. Kies de jouwe:

Cursor