Sign inGet Started

Template email

Template adalah baris subjek dan isi email yang Anda simpan sekali lalu kirim berkali-kali. Anda menulis bagian yang berubah sebagai placeholder {{ variable }}, memublikasikan template, lalu mengirimnya berdasarkan slug alih-alih menempelkan HTML yang sama ke setiap panggilan API. Sebuah template milik workspace Anda.

Buat dan kelola template di Email > Templates, melalui /v1/email/templates, dengan bird CLI, atau melalui server MCP. Metode bertipe tersedia di SDK TypeScript, Python, PHP, dan Go di bawah email.templates. Skema request dan response lengkap ada di referensi API. Kirim template yang sudah dipublikasikan melalui endpoint send biasa.

Isi sebuah template

Setiap template memiliki dua nama, dan keduanya memiliki fungsi berbeda:

  • slug adalah nama yang Anda gunakan untuk mengirim template, misalnya welcome-email. Anda memilihnya saat membuat template dan tidak dapat diubah setelahnya. Slug boleh berisi huruf kecil, angka, tanda hubung, dan garis bawah, harus diawali dan diakhiri dengan huruf atau angka, dan maksimal 63 karakter. Dua awalan tidak boleh digunakan: bird_, yang dicadangkan untuk template bawaan kami, dan emt_, yang merupakan format ID template. Dashboard menyebut field ini Alias.
  • name adalah label tampilan berupa teks bebas. Nilai bawaannya adalah slug, dan Anda dapat mengubahnya kapan saja. Tidak ada yang di-resolve melalui name, jadi mengganti nama template untuk tampilan tidak pernah merusak pengiriman.

Selain itu, template memiliki ID emt_ permanen, yang tetap sepanjang masa pakainya. Template juga memiliki category, yaitu marketing atau transactional, dan source penulisan: html, markup jadi yang Anda sediakan, opsional dipersonalisasi dengan Liquid. Kategori dan sumber keduanya ditetapkan saat Anda membuat template.

Kami menyediakan katalog template bawaan, dan slug-nya selalu diawali dengan bird_. Template bawaan tidak dimiliki workspace mana pun, tidak dapat diedit, dan selalu siap dikirim apa adanya. Salin template bawaan ke workspace Anda untuk menjadikannya milik Anda, dan template tersebut menjadi template biasa yang dapat Anda edit. Salinan tersebut hadir sebagai draf belum terpublikasi yang mewarisi kategori, sumber, dan pengaturan bahasa dari aslinya, jadi publikasikan sebelum Anda mengirimnya.

Draf dan versi terpublikasi

Setiap template memiliki tepat satu draft, yaitu salinan kerja yang Anda edit. Template juga memiliki sejumlah versi terpublikasi, masing-masing bernomor (1, 2, 3, dan seterusnya) dan tidak pernah diubah lagi setelah ada. Pengeditan mengubah draft secara langsung. Publikasi mengambil snapshot dari draft saat ini, mengubahnya menjadi versi bernomor berikutnya, dan menjadikan versi tersebut yang digunakan oleh pengiriman. Draft itu sendiri tetap bisa diedit, sehingga Anda bisa terus mengerjakan versi berikutnya.

Aturan yang penting untuk pengiriman adalah ini: pengiriman selalu menggunakan versi terpublikasi dari template, dan draft tidak pernah dikirim secara langsung. Anda bisa terus mengedit draft sementara versi stabil tetap terkirim, lalu publikasikan ketika perubahan sudah siap. Mempublikasikan versi baru mengubah apa yang dirender oleh pengiriman selanjutnya. Pengiriman yang sudah diterima tidak terpengaruh oleh publikasi yang terjadi setelahnya.

Tab Versions pada template dengan baris Draft dan baris v3, v2, dan v1 yang terpublikasi beserta tanggal pembuatan dan publikasinya

Versi mendukung dua tindakan lagi. Buang perubahan draft untuk mereset draft kembali ke versi yang sedang terpublikasi. Atau roll back untuk menjadikan versi terpublikasi sebelumnya sebagai versi yang digunakan pengiriman kembali. Anda hanya bisa melakukan roll back ke versi yang sudah terpublikasi, tidak pernah ke draft itu sendiri. Roll back mengganti draft dengan konten versi tersebut, sehingga apa pun yang belum disimpan di draft akan hilang, dan pengeditan selanjutnya dimulai dari versi yang Anda roll back. Roll back tidak membuat versi baru.

Untuk memilih gambar yang sudah ada, Anda memerlukan akses baca ke pustaka media workspace. Untuk mengunggah, menempel, atau menjatuhkan gambar baru, Anda memerlukan akses tulis. Jika Insert image dinonaktifkan atau Anda tidak bisa menelusuri atau mengunggah, minta administrator workspace untuk memberikan izin pustaka media yang sesuai. Izin pengeditan template saja tidak memberikan akses pustaka media.

Di dashboard, pilih Visual > Insert image untuk mencari di pustaka media Anda atau mengunggah gambar PNG, JPEG, GIF, atau WebP hingga 5 MB. Unggahan WebP statis dikonversi ke PNG atau JPEG. Pilih gambar untuk mengatur Image description, lebar tampilan, perataan, dan tautan. Tandai gambar sebagai Decorative image hanya jika gambar tersebut tidak menambahkan informasi; gambar yang ditautkan memerlukan deskripsi yang menjelaskan tujuannya. Setiap bahasa menyimpan deskripsi gambar dan tata letaknya sendiri.

Gunakan Replace image untuk mengganti gambar yang dipilih sambil mempertahankan deskripsi, tautan, lebar, dan perataannya. Anda juga bisa menempel atau menjatuhkan satu file gambar ke editor visual. Tunggu hingga unggahan selesai, atau batalkan, sebelum menyimpan atau mengirim tes. Periksa pratinjau, lalu buka More actions > Test email untuk mengirim konten saat ini ke diri Anda sendiri. Code tetap tersedia untuk mengedit HTML.

Menghapus gambar dari pustaka media tidak menghapusnya dari email yang sudah terkirim. Mengganti gambar menggunakan URL baru, sehingga pesan sebelumnya tetap menampilkan gambar aslinya.

Penyimpanan dijaga oleh nomor revisi. Kirimkan revision yang terakhir Anda baca untuk bahasa yang sedang Anda simpan. Jika orang lain mengubah bahasa tersebut dalam waktu bersamaan, penyimpanan ditolak sebagai konflik alih-alih menimpa pekerjaan mereka. Jangan sertakan revision untuk menyimpan tanpa syarat. Publikasi dan roll back menggunakan revision milik draft dengan cara yang sama.

Konten dalam lebih dari satu bahasa

Sebuah template menyimpan konten dalam hingga 25 bahasa, masing-masing dengan subjek dan body-nya sendiri, ditandai dengan kode BCP-47 seperti en atau pt-BR. Satu bahasa menjadi bahasa default template. Mempublikasikan template mempublikasikan semua bahasa yang dimilikinya secara bersamaan. Anda tidak bisa mempublikasikan satu bahasa saja, sehingga semuanya harus selesai terlebih dahulu. Setiap bahasa memerlukan subjek dan body, dan bahasa default template harus merupakan salah satu bahasa yang sudah Anda isi. Jika ada yang kurang, tidak ada yang dipublikasikan, dan error memberi tahu Anda apa yang kurang di setiap bahasa sehingga Anda bisa memperbaiki semuanya sekaligus. Anda tidak harus menyelesaikan semua bahasa di awal: publikasikan yang sudah siap, dan tambahkan sisanya nanti.

Sebuah bahasa memerlukan body HTML. Anda bisa mengosongkan text: publikasi kemudian membuat alternatif teks polos dari HTML secara otomatis, sehingga Anda mendapatkan kedua bagian tanpa harus menulis yang kedua sendiri.

Setiap bahasa juga dapat memuat teks pratinjau, kadang disebut preheader: baris yang ditampilkan kotak masuk setelah subjek dalam daftar pesan. Teks ini opsional, maksimal 255 karakter, dan menerima placeholder {{ variable }} yang sama seperti subjek. Jika Anda tidak mengisinya, kotak masuk akan menampilkan baris pertama dari isi email, yang jarang merupakan baris yang Anda inginkan. Penerbitan menolak teks pratinjau pada bahasa yang isinya tidak memiliki bagian HTML, karena klien email hanya membaca baris pratinjau dari markup HTML tersembunyi, dan menolak {{ bird.unsubscribe_url }} di dalamnya karena alasan yang sama subjek tidak bisa memuatnya: keduanya bukan tempat untuk meletakkan tautan.

Dua pengaturan mengatur pengiriman yang tidak menyebutkan bahasa yang dimiliki template, dan keduanya menjaga dari kesalahan yang berbeda:

PengaturanFungsinya
on_missing_languageApa yang terjadi ketika pengiriman meminta bahasa yang tidak dimiliki template. fallback, nilai default, menyajikan kecocokan terdekat. Ia mencoba bentuk yang lebih umum dari bahasa yang sama terlebih dahulu, sehingga pt yang tersimpan dapat melayani permintaan untuk pt-BR. Kemudian ia kembali ke bahasa default template. fail menolak pengiriman, untuk konten yang lebih buruk dikirim dalam bahasa yang salah daripada tidak dikirim sama sekali.
language_source_requiredApakah pengiriman harus menyebutkan bahasa. Pengaturan ini nonaktif secara default, sehingga pengiriman tanpa bahasa mendapatkan bahasa default. Aktifkan, dan pengiriman tersebut ditolak. Broadcast menyebutkan satu bahasa untuk seluruh audiensnya, sehingga template dengan pengaturan ini aktif memerlukan bahasa yang dipilih sebelum broadcast dapat dikirim.

Anda dapat mengatur keduanya secara independen. Dengan sendirinya, fail hanya berlaku ketika pengiriman menyebutkan bahasa yang tidak kita miliki, sehingga pengiriman tanpa bahasa tetap lolos. Aktifkan kedua pengaturan bersamaan jika Anda ingin setiap pengiriman menyebutkan bahasa secara eksplisit.

Personalisasi dengan variabel

Tulis placeholder {{ variable }} di subjek, teks pratinjau, dan isi email. Kami mendeteksinya secara otomatis, digabungkan dari semua bahasa, sehingga Anda tidak perlu mendeklarasikannya secara terpisah. Awalan placeholder membedakan dua jenisnya. Path yang dimulai dengan bird. membaca dari data kami, baik catatan kontak maupun tautan berhenti berlangganan. Selain itu adalah parameter yang Anda berikan nilainya saat mengirim.

Nama parameter adalah satu kata, seperti {{ animal }}. Nama bertitik mengacu pada struktur yang tidak dimiliki parameter, sehingga menerbitkannya ditolak: tulis nilainya sebagai parameter tersendiri, atau baca data kontak dengan bird.contact.<attribute>.

Pada pengiriman tunggal atau batch, nilai parameter berasal dari objek template.parameters pengiriman tersebut, dicocokkan berdasarkan namanya. Satu set nilai berlaku untuk semua penerima pengiriman itu. bird adalah satu-satunya nama yang tidak dapat Anda gunakan di sana: kunci template.parameters bernama bird ditolak dengan 422.

Broadcast tidak memiliki objek parameters, sehingga kontennya hanya dapat menggunakan placeholder bird.. bird.contact.<attribute> diisi dari properti kontak masing-masing penerima, yang menjadikan konten personal per penerima. Setiap properti kontak tersedia berdasarkan kuncinya sendiri, begitu juga tiga field bawaan: first_name, last_name, dan email.

Contoh kode
Hi {{ bird.contact.first_name }},

Setiap parameter dalam template membutuhkan nilai saat Anda mengirim. Jika tidak, API mengembalikan 422 yang menyebutkan parameter yang hilang. Berikan nilai untuk parameter di semua bahasa karena bahasa yang dipilih dapat bergantung pada pengaturan fallback. Properti kontak yang tidak ada di-render sebagai nilai kosong, jadi tambahkan fallback untuk konten yang dilihat pelanggan: {{ bird.contact.first_name | default: "there" }}.

Broadcast lebih ketat soal nama yang diterimanya, karena properti kontak adalah satu-satunya sumber untuk mengisi placeholder. Placeholder bird.contact.*-nya hanya dapat menyebutkan field bawaan, atau properti kontak yang telah didaftarkan workspace. Placeholder lain, termasuk parameter, tidak dapat diisi oleh broadcast. Pengiriman ditolak, dan error menyebutkan placeholder tersebut.

Mengarsipkan properti menghapusnya dari pemilih properti di editor. Versi template baru yang membacanya tidak dapat dipublikasikan, dan error menyebutkan properti tersebut. Template yang sudah dipublikasikan tetap terkirim. Batalkan arsip properti tersebut untuk menggunakannya kembali di versi baru.

Placeholder menggunakan Liquid, sehingga filter dan kontrol alur berfungsi bersama substitusi biasa. Kondisional {% if %} dan loop {% for %} atas nilai array keduanya diizinkan. Sejumlah konstruk ditolak saat Anda mempublikasikan, dan error menyebutkan persis apa yang perlu diubah:

  • Partial include, menggunakan {% include %} atau {% render %}.
  • Tag increment, decrement, dan ifchanged.
  • Filter money, format_date, format_time, json, inspect, dan type.
  • Perbandingan terhadap empty atau blank. Gunakan .size == 0 sebagai gantinya.
  • Block bersarang jauh lebih dalam dari yang dibutuhkan markup email sebenarnya.

Template broadcast tidak dapat menggunakan loop {% for %} sama sekali, karena broadcast mengisi satu nilai per properti kontak dan tidak memiliki apa pun untuk diiterasi. Jika konten Anda membutuhkan loop, kirim melalui API messages sebagai gantinya.

Setiap template menggunakan Liquid, termasuk yang hanya berisi placeholder {{ variable }}. Sebelum dipublikasikan, kami memvalidasi subjek, teks pratinjau, HTML, dan konten plain-text sebagai Liquid. Kami juga menambahkan filter escape ke setiap output HTML yang belum diakhiri dengan escape atau escape_once, sehingga nilai yang mengandung & atau < tidak dapat mengubah markup di sekitarnya. Output unsubscribe yang dicadangkan tetap tidak diubah agar pengiriman dapat menggantinya. Baris subjek dan body plain-text dibiarkan apa adanya. Karena publikasi menambahkan filter ini, HTML yang Anda baca dari versi yang dipublikasikan mungkin tidak identik byte per byte dengan yang Anda kirimkan.

Masukkan URL lengkap langsung di dalam href, misalnya <a href="{{ sign_in_url }}">Sign in</a>. Jangan menambahkan url_encode ke seluruh nilai. Filter ini melakukan percent-encode pada https://, /, ?, dan &, sehingga hasilnya tidak berfungsi sebagai tautan absolut. Kami menambahkan HTML escaping sambil mempertahankan struktur URL. Jika parameter menyediakan satu komponen URL, encode komponen tersebut secara eksplisit: <a href="https://example.com/search?q={{ query | url_encode }}">Search</a>.

Pratinjau sebelum publikasi

Render template dengan nilai sampel dan dapatkan baris subjek serta body HTML dan plain-text yang akan dikirimkan oleh sebuah pengiriman. Pratinjau menggunakan renderer Liquid lokal kami dan secara default me-render draft, sehingga Anda dapat memeriksa perubahan sebelum ditayangkan. Pratinjau juga dapat me-render versi yang sudah dipublikasikan. Fitur ini berfungsi untuk template Anda sendiri maupun template bawaan kami, dan tidak ada yang dikirim.

Anda juga dapat memberikan konten sendiri alih-alih membiarkannya membaca draft. Kirimkan subjek dan body, lalu keduanya di-render dan diperlakukan persis seperti draft, sehingga editor dapat menampilkan perubahan saat diketik tanpa perlu menyimpan terlebih dahulu.

Personalisasi diisi untuk Anda, sehingga yang dikembalikan terbaca sebagai salinan final, bukan placeholder {{ }}. Tentukan contact dan setiap bird.contact.<attribute> di-resolve berdasarkan properti kontak tersebut, sehingga Anda dapat memeriksa kata-kata Anda terhadap data nyata sebelum ada yang menerimanya. Nilai-nilai tersebut berasal dari proyeksi yang sama yang digunakan broadcast untuk mengisi placeholder-nya, sehingga pratinjau memberikan jawaban yang sama dengan yang akan diberikan pengiriman.

Jangan sertakan contact dan nilai pengganti akan disubstitusikan: Bird dan Test untuk nama depan dan belakang, bird.test@example.com untuk email, dan fallback terdaftar milik setiap properti lainnya. Properti yang direferensikan tanpa fallback di-render sebagai kuncinya dalam tanda kurung, seperti [loyalty_tier], yang memberi tahu Anda bahwa nilai tersebut adalah placeholder sekaligus properti mana yang masih membutuhkan fallback.

Kontak dibaca sesuai kondisinya saat ini. Ini menjadikan pratinjau alat yang tepat untuk memeriksa konten yang akan Anda kirim, dan bukan alat yang tepat untuk mengetahui isi pengiriman sebelumnya. Untuk membaca apa yang benar-benar dikirimkan oleh suatu pengiriman, buka pesan tersebut di log email, yang me-render-nya dari nilai yang dibawa pengiriman tersebut.

Tambahkan language untuk me-render satu bahasa tertentu, atau jangan sertakan untuk bahasa default template. Respons memberi tahu Anda bahasa mana yang di-render, yang penting saat bahasa yang Anda minta tidak tersedia dan on_missing_language template menyajikan kecocokan terdekat.

Jika draft memiliki personalisasi yang akan ditolak saat Anda mempublikasikan, pratinjau mengembalikan kesalahan yang sama, sehingga berfungsi sekaligus sebagai cara menemukan masalah lebih awal.

Di template builder dashboard, Preview with contact data di bagian bawah panel kiri menampilkan email yang di-render di samping apa pun yang sedang Anda edit, baik di editor visual maupun editor kode. Pemilih di bawahnya menentukan data siapa yang mengisi placeholder, dan Sample data adalah nilai pengganti di atas.

Mengirim dengan template

Atur field template pada pengiriman ke objek yang menyebut template, baik dengan id (emt_...) maupun dengan slug, gunakan tepat salah satu dari keduanya. Masukkan nilai variabelnya di template.parameters. Tambahkan language untuk memilih bahasa tertentu, atau jangan sertakan untuk mengirim dalam bahasa default template, kecuali template mengharuskan setiap pengiriman menyebutkan bahasa. Jangan sertakan subject, html, dan text sepenuhnya, karena template sudah menyediakannya.

Contoh kode
{
  "from": "hello@yourdomain.com",
  "to": ["delivered@messagebird.dev"],
  "category": "transactional",
  "template": {
    "slug": "welcome-email",
    "parameters": { "first_name": "Jane" }
  }
}

Satu perilaku yang perlu Anda antisipasi: kategori template adalah nilai default, dan category milik pengiriman menimpanya. Jangan sertakan category, dan pengiriman mewarisi kategori template, sehingga template operasional terkirim sebagai transaksional tanpa perlu Anda ulangi di setiap panggilan. Atur category, dan nilai Anda yang berlaku. Detail lengkap kontrak sisi pengiriman ada di mengirim dengan template.

Penulisan di luar dashboard

Seluruh siklus hidup tersedia di luar dashboard: melalui API, SDK di bawah email.templates, bird CLI, dan tools email_templates_* MCP. Di SDK, operasi versi dan bahasa berada di bawah email.templates.versions dan email.templates.versions.languages. Langkah publikasi dinamai submit di sana, dan langkah ini mengubah draf menjadi versi terpublikasi berikutnya.

Anda dapat menyimpan template di repositori sendiri dan menyinkronkannya dari langkah build. Draf dan versi terpublikasi menghasilkan HTML yang berbeda saat dibaca, jadi pilih pembacaan yang sesuai dengan kebutuhan alat Anda:

  • Draf dibaca persis seperti yang Anda simpan. HTML yang Anda simpan ke bahasa draf dikembalikan byte per byte dari pembacaan bahasa tersebut (GET /v1/email/templates/{id}/versions/{draft_version_id}/languages/{language}) dan dari pembacaan versi, termasuk doctype, blok <style>, komentar, spasi, akhir baris, dan teks non-ASCII. Penyimpanan tidak mengembalikan konten, jadi baca kembali bahasanya jika Anda perlu mengonfirmasi apa yang tersimpan.
  • Versi terpublikasi dibaca dalam bentuk siap kirim. Publikasi menulis ulang HTML dalam tiga cara: setiap output {{ }} yang belum diakhiri dengan escape atau escape_once mendapat filter escape, kecuali {{ bird.unsubscribe_url }} yang tetap apa adanya; teks pratinjau dilipat ke dalam blok tersembunyi tepat setelah tag pembuka <body>, atau di paling awal jika HTML tidak memilikinya; dan text yang kosong diisi dengan alternatif teks biasa yang diturunkan dari HTML. Membaca versi tersebut mengembalikan konten yang sudah ditulis ulang, sehingga tidak akan cocok dengan file sumber Anda.

Untuk mengekspor sumber yang Anda tulis, baca draf. Membaca template atau menampilkan daftar template mengembalikan metadata dan status per bahasa, tetapi bukan HTML.

Contoh di bawah menggunakan {{ first_name }}, yang merupakan parameter: pengiriman menyediakan nilainya di template.parameters, seperti "parameters": {"first_name": "Jane"}. Ini cocok untuk pengiriman ke alamat email. Placeholder {{ bird.contact.first_name }} membaca catatan kontak penerima, yang diisi broadcast dari properti kontak masing-masing penerima. Pengiriman ke alamat email tidak memiliki catatan kontak, sehingga menolak template yang membaca bird.contact.* dengan 422 (EmailTemplateContactUnavailable).

Buat template beserta bahasa pertamanya. Respons membawa id template dan draft_version_id, yang digunakan oleh operasi versi dan bahasa. Contoh ini juga mengatur preview_text, teks pratinjau yang ditampilkan kotak masuk setelah subjek di daftar pesannya. Publikasi melipatnya ke dalam HTML sebagai blok tersembunyi, yang merupakan salah satu alasan versi terpublikasi menghasilkan HTML yang berbeda dari draf:

const template = await bird.email.templates.create({
  slug: "welcome-email",
  category: "transactional",
  source: "html",
  languages: {
    en: {
      subject: "Welcome, {{ first_name }}",
      preview_text: "Your account is ready",
      html: "<!DOCTYPE html>\n<html>\n<body>\n<p>Hi {{ first_name }}, thanks for signing up.</p>\n</body>\n</html>\n",
    },
  },
});
console.log(template.id, template.draft_version_id);

Untuk mengubah bahasa nanti, simpan lagi dengan bird email templates versions languages set atau PUT ke path bahasa yang sama. Isi body bersifat datar: subject yang wajib, ditambah preview_text, html, dan text. Field yang tidak Anda sertakan akan dikosongkan. Tambahkan revision yang terakhir Anda baca untuk menolak penyimpanan jika orang lain mengubah bahasa tersebut sementara itu.

Layout editor visual di dashboard adalah salah satu field yang dikosongkan dengan cara ini, karena API, SDK, dan CLI tidak dapat mengirimkannya. Menyimpan bahasa yang Anda buat di editor visual mempertahankan HTML-nya tetapi menghapus layout, sehingga dashboard membuka kembali bahasa tersebut di editor kode.

Langkah-langkah berikutnya menggunakan TEMPLATE_ID dan DRAFT_VERSION_ID untuk id dan draft_version_id yang dikembalikan oleh panggilan create. Baca kembali bahasa draft untuk mendapatkan HTML persis seperti yang tersimpan:

const language = await bird.email.templates.versions.languages.get(
  "TEMPLATE_ID",
  "DRAFT_VERSION_ID",
  "en",
);
console.log(language.content?.html);

jq -j menulis string tanpa menambahkan baris baru di akhir, sehingga file menyimpan byte yang sama persis dengan yang disimpan oleh API.

Kirim draft dengan validate_only terlebih dahulu. Proses ini menjalankan pemeriksaan yang sama seperti submit sesungguhnya di semua bahasa dan melaporkan masalah yang ditemukan dalam satu respons, tanpa memublikasikan apa pun. Kemudian kirim tanpa validate_only untuk memublikasikan versi berikutnya, yang akan digunakan oleh pengiriman selanjutnya:

const templateId = "TEMPLATE_ID";
const draftVersionId = "DRAFT_VERSION_ID";
const check = await bird.email.templates.versions.submit(templateId, draftVersionId, {
  validate_only: true,
});
for (const problem of check.errors) {
  console.log(problem.language, problem.field, problem.message);
}
if (check.valid) {
  const result = await bird.email.templates.versions.submit(templateId, draftVersionId);
  console.log(result.version?.version_number);
}

Body submit menerima validate_only dan expected_revision. Berikan revision template sebagai expected_revision untuk menolak publikasi jika draft berubah sejak terakhir Anda membacanya.

Daftar template di workspace Anda untuk menemukan slug yang digunakan oleh pengiriman:

for await (const tpl of bird.email.templates.list({ scope: "workspace" })) {
  console.log(tpl.slug, tpl.name);
}

Kirim template yang sudah dipublikasikan berdasarkan slug, dengan nilai di template.parameters untuk setiap parameter yang digunakan, dalam contoh ini first_name:

const msg = await bird.email.send({
  from: { email: "onboarding@messagebird.dev", name: "Bird" },
  to: ["delivered@messagebird.dev"],
  category: "transactional",
  template: {
    slug: "welcome-email",
    parameters: { first_name: "Jane" },
  },
});
console.log(msg.id, msg.status);

Langkah selanjutnya

  • Mengirim email: payload pengiriman lengkap, dan bagaimana pengiriman berbasis template cocok di dalamnya
  • Kategori: memilih marketing vs transactional pada setiap pengiriman
  • bird email templates: mengelola template dari terminal
  • Referensi API: skema request dan response lengkap untuk semua delapan belas operasi template
  • SDK: metode email.templates bertipe di TypeScript, Python, PHP, dan Go
  • MCP server: memungkinkan agen membuat dan menerbitkan template
  • Cara membuat template email: video yang membuat template di dashboard, lalu meminta agen membuat template lainnya

Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini.