Template email

In anteprima

Template con logica, renderizzati al momento dell'invio.

Store a subject and body once, publish it as an immutable version, then send it by slug. Liquid conditionals, loops, and filters run when the message is generated, so the personalization logic lives in the template instead of scattered through your code. Author it in the dashboard builder, from the bird CLI, or let an agent do it over MCP.

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..."

Memorizza un template. Personalizza all'invio.

Il markup è già in Bird.

I template fanno parte della Bird Email API. Salvate layout e logica una sola volta; ogni invio indica il template tramite slug o id e passa i valori richiesti dai suoi token. Il messaggio finale viene renderizzato lato nostro, così lo stesso template supporta una singola ricevuta, un batch di cento o un broadcast verso un intero pubblico.

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

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

// No subject and no html: the template's published version supplies both.
const { data, error } = await bird.email
  .send({
    from:     "orders@acme.com",
    to:       ["delivered@messagebird.dev"],
    category: "transactional",
    template: {
      slug:       "order-confirmation",
      parameters: {
        first_name: "Ada",
        order:      { number: "A-1043", total: "$42.00" },
      },
    },
  })
  .safe();

More than find-and-replace.

Liquid, risolto lato Bird quando il messaggio viene generato.

  1. 01

    Condizionali.

    Un blocco if Liquid viene mostrato solo quando il suo valore è applicabile, come una nota riservata ai membri o un banner di spedizione gratuita: un unico template copre entrambi i casi.

  2. 02

    Loop.

    Un ciclo for ripete una riga per ogni elemento di un array, così un unico template di conferma ordine elenca ogni articolo effettivamente acquistato dal cliente. Un limite da conoscere in anticipo: un broadcast trasporta un singolo valore per proprietà del contatto e non ha nulla da iterare, quindi un template con cicli viene inviato tramite l'API messages anziché tramite broadcast.

  3. 03

    Filters.

    Pipe a value through a Liquid filter before it renders. The default filter catches a missing first name before it ships as an empty greeting.

  4. 04

    Nested data.

    I token con notazione a punti accedono a oggetti strutturati, così potete passare un intero oggetto ordine e riferirvi al suo numero e totale direttamente dal markup, senza doverlo appiattire prima.

  5. 05

    Niente da dichiarare.

    The token list is read off your markup, combined across every language, so there's no separate variable schema to keep in step with the body. Values can be any JSON: strings, numbers, booleans, arrays, objects.

Crealo nel modo in cui già lavori.

Tre modi per accedere, tutti verso lo stesso template. Il builder della dashboard è quello visuale. La bird CLI gestisce l'intero ciclo di vita da uno script o uno step di deploy, e un agente accede alle stesse operazioni tramite MCP. Avete già componenti React Email? Renderizzateli in HTML e salvate il risultato, lasciando i token di Bird come testo letterale nel JSX, così sopravvivono al rendering invece di essere sostituiti con un valore quando React viene eseguito.

publish-receipt.sh
bird CLI
# Render React Email to HTML, then publish it as a template version.
node scripts/render-receipt.mjs > receipt.json

bird email templates create receipt --category transactional --source html
bird email templates versions languages set "$TEMPLATE" "$DRAFT" en \
  --body-file receipt.json --yes

# --validate-only reports every problem across every language, freezing nothing.
bird email templates versions submit "$TEMPLATE" "$DRAFT" --validate-only --yes
bird email templates versions submit "$TEMPLATE" "$DRAFT" --yes

Versioned, like the rest of your code.

Le modifiche avvengono su una bozza e non toccano mai ciò che è live, perché un invio risolve sempre la versione pubblicata corrente e le bozze non vengono mai inviate. La pubblicazione congela una versione immutabile e numerata e la rende live; se una modifica va storta, si torna a una versione precedente. I salvataggi portano con sé la revisione letta per ultima, così se nel frattempo un collega ha modificato quella lingua, il salvataggio viene rifiutato come conflitto anziché sovrascrivere il suo lavoro. Le statistiche di consegna e coinvolgimento sono suddivise per template, così potete vedere quale sta effettivamente funzionando.

Un template, fino a 25 lingue.

Un template contiene contenuti in fino a 25 lingue, ciascuna con il proprio oggetto e corpo, identificata da un tag BCP-47 come en o pt-BR. Un invio indica la lingua desiderata, oppure la omette e ottiene quella predefinita del template. Quando un invio richiede una lingua non presente nel template, on_missing_language decide cosa succede: fallback serve la corrispondenza più vicina, così una richiesta per pt-BR ottiene risposta da un pt disponibile, e fail rifiuta l'invio del tutto, per contenuti dove la lingua sbagliata è peggio di nessun invio.

Visualizza in anteprima esattamente ciò che verrà inviato.

Fill a template with sample values and get back the subject and the HTML and text bodies a send would deliver. Preview renders the draft, which is how you check a change before it goes live, or a published version when you want to see what is going out right now. Nothing is sent. It also runs the same personalization checks as publishing, so a construct that would be rejected shows up here first.

Dove sono diretti i template.

Il builder visuale e una libreria iniziale di quaranta template integrati sono già disponibili: potete copiarne uno nel vostro workspace e modificarlo da lì. Prossimamente: descrivete un template in un prompt e ottenete una bozza da perfezionare, una superficie di composizione più snella per gli agenti e i brand kit, che conterranno colori, tipografia e tono di voce a livello di workspace e stilizzeranno un template a partire da essi. Ognuno di questi estende lo stesso modello versionato, quindi ciò che integrate oggi è la base su cui costruiranno.

Approfondisci nei docs.

La guida ai template copre bozze, versioni pubblicate, contenuti multilingua e le regole Liquid. La guida all'invio contiene il contratto lato invio, e eventi email e webhook vi permette di ricevere aperture e clic.

I template sono integrati con la piattaforma che li circonda.

Store, version, and personalize templates on the same Email API that handles sending, deliverability, suppression, and analytics. One set of keys.

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor