Skip to main content
Biarkan Sentra menulis kode integrasi Anda.
Gunakan asisten AI kami di VS Code, Cursor, atau Windsurf untuk menghasilkan kode SDK/API, penangan webhook, dan lainnya, hanya dengan mendeskripsikan apa yang Anda inginkan.
Coba Sentra: Integrasi Ditenagai AI →
Dalam tutorial ini, Anda akan membangun MailKit, sebuah platform email transaksional di mana pelanggan membayar di muka untuk sejumlah kredit email. Rencana ini memberikan alokasi email bulanan; ketika pelanggan kekurangan, mereka dapat membeli paket top-up alih-alih menunggu siklus berikutnya. Setiap pengiriman secara otomatis mengurangi satu kredit.
Tutorial ini menggunakan Resend sebagai penyedia email. Tingkat gratisnya (3.000 email/bulan) cukup untuk membangun dan menguji seluruh alur tanpa akun berbayar. Pola ini bekerja dengan penyedia mana pun; ganti resend.emails.send dengan SendGrid, Postmark, SES, atau SMTP relay Anda sendiri.
Pada akhir tutorial ini, Anda akan mengetahui cara untuk:
  • Membuat hak kredit kustom (email) di dashboard Anda
  • Menambahkan kredit ke rencana berlangganan dan produk top-up satu kali
  • Mengirim email nyata melalui Resend dan mendebit satu kredit per pengiriman melalui entri buku besar
  • Menanyakan saldo kredit langsung dari frontend Anda
  • Memverifikasi webhook Dodo dengan benar dan menangani credit.balance_low untuk mengingatkan pelanggan sebelum mereka mencapai nol

Apa yang Kami Bangun

Berikut adalah model harga untuk MailKit: Unitnya adalah satu email = satu kredit. Pelanggan tidak perlu memikirkan token, batch, atau unit berbobot. Mereka hanya melihat “Anda memiliki 4.231 email yang tersisa bulan ini.”
Sebelum Anda mulai, pastikan Anda memiliki:
  • Akun Dodo Payments (mode uji tidak apa-apa)
  • Akun gratis Resend dan kunci API
  • Node.js 18+ dan pemahaman dasar TypeScript

Langkah 1: Buat Hak Kredit Email Anda

Hak kredit mendefinisikan unit yang dijual platform Anda: dalam hal ini, satu pengiriman email.
Halaman daftar kredit

The Credits tab under Products lists all your credit entitlements.

1

Open the Credits section

  1. Masuk ke dashboard Dodo Payments Anda
  2. Klik Produk di sidebar kiri
  3. Pilih tab Kredit
  4. Klik Buat Kredit
2

Configure the credit unit

Isi detail kredit:Nama Kredit: Email CreditsJenis Kredit: Pilih Unit KustomNama Unit: emailPresisi: 0 (email selalu merupakan unit utuh; Anda tidak dapat mengirim setengah email)Kedaluwarsa Kredit: 30 days (alokasi siklus setiap kali direset)
Presisi tidak dapat diubah setelah pembuatan. Untuk unit diskret seperti email, pesan, atau sesi, 0 adalah benar.
3

Leave the other defaults as-is

Kami tidak akan mengaktifkan rollover atau kelebihan dalam buku masak ini; tujuannya adalah alur CBB sesederhana mungkin. Anda dapat meninjau kembali hal ini pada lampiran kredit nanti.
4

Save and copy the credit ID

Klik Buat Kredit. Buka kredit dan salin ID-nya. Anda membutuhkannya untuk kueri saldo backend. Tampak seperti cent_xxxxxxxxxxxx.
Hak Email Credits Anda sudah siap. Selanjutnya: produk yang memberikan kredit kepada pelanggan.

Langkah 2: Buat Paket dan Paket Top-Up

Anda akan membuat dua produk: rencana Berlangganan berulang dan top-up Pembayaran Tunggal. Rencana ini memberikan 5.000 email setiap siklus; top-up menambahkan 5.000 lainnya sesuai permintaan. Kedua produk menambahkan hak Email Credits yang sama.
Buku masak ini mengurangi kredit dengan entri buku besar langsung alih-alih meter berbasis penggunaan. Entri buku besar bersifat langsung (saldo diperbarui dalam milidetik), tidak memerlukan pengaturan tambahan, dan cocok ketika satu tindakan pengguna sama dengan satu kredit. Jika Anda lebih suka pengurangan otomatis dari peristiwa penggunaan yang dimasukkan (berguna untuk unit berbobot seperti “token” atau “MB yang diproses”), lihat Penagihan Berbasis Kredit → Penagihan Penggunaan dengan Kredit untuk pola berbasis meter.

Rencana MailKit ($19/bulan, 5.000 email)

1

Create the subscription

  1. Pergi ke Produk → Buat Produk
  2. Isi detail produk:
Nama Produk: MailKit PlanDeskripsi: 5,000 transactional emails per month.
  1. Pilih Berlangganan sebagai jenis produk
  2. Tetapkan harga berulang:
Harga Berulang: 19.00Siklus Penagihan: MonthlyMata Uang: USD
2

Attach the email credit entitlement

Gulir ke Hak → Kredit → Lampirkan dan konfigurasikan:Hak Kredit: Email CreditsKredit yang diterbitkan per siklus penagihan: 5000Ambang Batas Saldo Rendah: 20 (persen; memicu credit.balance_low ketika saldo turun di bawah 20% dari alokasi siklus, yaitu 1.000 email)Impor Pengaturan Kredit Default: diaktifkan (menggunakan kedaluwarsa 30 hari dari Langkah 1)Klik Tambahkan ke Produk, lalu Simpan produk tersebut. Salin ID produk (pdt_xxxxxxxxxxxx).
Rencana: $19/bulan → 5.000 email diperbarui setiap siklus.

Paket Top-Up ($9 satu kali, 5.000 email)

1

Create a one-time product

  1. Pergi ke Produk → Buat Produk
  2. Isi detail produk:
Nama Produk: Email Top-Up PackDeskripsi: Add 5,000 emails to your MailKit balance instantly.
  1. Pilih Pembayaran Tunggal sebagai jenis produk
  2. Tetapkan harga:
Harga: 9.00Mata Uang: USD
2

Attach the credit grant

Di Hak → Kredit → Lampirkan:
  • Hak Kredit: Email Credits
  • Kredit yang diterbitkan: 5000
Produk satu kali memberikan kredit dengan kedaluwarsa mereka sendiri (30 hari setelah pembelian, per Langkah 1). Top-up ditumpuk di atas kredit berlangganan; mereka tidak menggantikannya.
Simpan dan salin ID produk.
Paket Top-Up: $9 → +5.000 email, tersedia segera.

Langkah 3: Siapkan Backend

Sekarang bangun server Express yang menangani checkout, pengiriman, kueri saldo, dan webhook.
1

Initialize the project

Tambahkan skrip dev ke package.json:
tsx menjalankan TypeScript langsung tanpa langkah build atau tsconfig.json, yang sempurna untuk tutorial. Untuk produksi, tambahkan tsconfig.json dan skrip build.
2

Configure environment variables

Buat .env:
.env
Anda akan mengisi DODO_WEBHOOK_KEY di Langkah 4 setelah membuat endpoint. Kunci API Resend berasal dari resend.com/api-keys.
Tambahkan .env ke .gitignore segera. Jangan sekali-kali menge-commit kunci API.
3

Build the server

Buat server.ts di root proyek:
Body webhook harus mentah. express.json() mengurai dan men-serial ulang body, yang merusak verifikasi tanda tangan. Definisikan /webhooks/dodo dengan express.raw() sebelum baris app.use(express.json()).
Backend siap: berlangganan, top-up, saldo, pengiriman, dan handler webhook semua terhubung.
4

Add a demo UI

Buat public/index.html:

Langkah 4: Sambungkan Endpoint Webhook

Acara credit.balance_low adalah yang memungkinkan Anda mengingatkan pelanggan sebelum mereka kehabisan. Tanpanya, pertama kali mereka menyadari masalah adalah ketika email gagal dikirim.
1

Expose your local server

Webhook memerlukan URL publik. Gunakan ngrok (atau terowongan apa pun) saat mengembangkan:
Salin URL penerusan HTTPS (misalnya https://1234abcd.ngrok-free.app).
2

Register the endpoint in Dodo

  1. Pergi ke Pengembang → Webhook → Tambah Endpoint
  2. URL: https://1234abcd.ngrok-free.app/webhooks/dodo
  3. Acara: berlangganan ke credit.added, credit.balance_low, dan credit.rolled_over
  4. Simpan, lalu salin kunci tanda tangan ke .env Anda sebagai DODO_WEBHOOK_KEY
  5. Nyalakan ulang server Anda

Langkah 5: Uji Alur Lengkap

1

Start the server

Anda seharusnya melihat MailKit running on http://localhost:3000. Buka di browser Anda.
2

Subscribe a test customer

  1. Di bagian 1, masukkan email dan nama uji, klik Dapatkan tautan checkout
  2. Buka tautan tersebut, lengkapilah checkout dengan kartu ujian
  3. Setelah pembayaran, temukan customer_id di dashboard Anda di bawah Pelanggan
Pelanggan sekarang seharusnya memiliki 5.000 email dalam saldo mereka. Periksa Pelanggan → [Pelanggan] → Kredit.
3

Send a real email

  1. Tempel customer_id di bagian 3
  2. Biarkan to disetel ke delivered@resend.dev (kotak masuk sandbox Resend yang menerima semuanya)
  3. Klik Kirim
Anda akan mendapatkan kembali id pesan Resend. Segarkan saldo di bagian 2 dan hitungan langsung turun menjadi 4.999. Setiap debit buku besar tercermin dalam saldo langsung begitu ia ditulis.
4

Trigger the low-balance webhook

Ambang batas adalah 20% (1.000 dari alokasi 5.000-email). Untuk memicunya tanpa mengirim 4.000 email nyata, debit saldo secara manual dari dashboard:
  1. Pergi ke Pelanggan → [Pelanggan] → Kredit → Kredit Email
  2. Klik Sesuaikan Saldo dan debit 4000
  3. Kirim satu email lagi melalui demo
Server Anda akan mencatat dalam beberapa detik:
Server Anda telah menerima dan memverifikasi webhook. Dalam produksi, di sini Anda akan mengirim email kepada pelanggan atau menampilkan banner dalam aplikasi.
5

Buy a top-up pack

  1. Tempel customer_id di bagian 4
  2. Klik Beli 5.000 email, dan selesaikan checkout uji
  3. Segarkan saldo, dan saldo akan melonjak sebesar 5.000
Acara credit.added ditandai dengan grant_source: one_time. Top-up ditumpuk di atas kredit berlangganan; kedua kolam tersebut diambil FIFO (hibah non-kedaluwarsa tertua terlebih dahulu).
6

Test the hard stop

Debit saldo secara manual hingga nol, lalu coba kirim satu email lagi. Anda akan mendapatkan:
Itu adalah 402 dari penegakan tingkat aplikasi Anda. API saldo Dodo adalah sumber kebenaran; jangan pernah menyimpannya pada klien.

Pemecahan Masalah

Tanda tangan dihitung atas body HTTP mentah. express.json() mengurai dan men-serial ulang payload, yang merusak HMAC. Pastikan /webhooks/dodo terdaftar dengan express.raw({ type: 'application/json' }) di atas baris app.use(express.json()), dan bahwa DODO_WEBHOOK_KEY sesuai dengan kunci tanda tangan yang ditampilkan di halaman detail endpoint.
Tiga hal yang harus diperiksa, dalam urutan ini:
  1. Pelanggan menyelesaikan checkout (kredit dikeluarkan setelah pembayaran berhasil, bukan saat pembuatan sesi)
  2. CREDIT_ENTITLEMENT_ID dalam .env sesuai dengan kredit yang dilampirkan ke produk (ID tidak sesuai secara sunyi menuliskan ke kredit yang salah)
  3. customer_id yang Anda lewati berasal dari Dodo (tabel customers di dashboard), bukan database Anda sendiri
Pengirim sandbox onboarding@resend.dev hanya mengirim ke email di akun Resend Anda atau ke delivered@resend.dev. Untuk mengirim ke orang lain, verifikasi domain dan gunakan alamat from di dalamnya.

Apa yang Anda Bangun

One reusable credit unit

Email Credits, didefinisikan sekali dan dilampirkan ke rencana berlangganan dan paket top-up.

Subscription with prepaid allowance

$19/bulan memberikan 5.000 email per siklus. Pelanggan tahu apa yang mereka bayar, Anda tahu biaya terburuk Anda.

Top-up pack

Produk satu kali yang memberikan 5.000 email. Ditumpuk di atas kredit berlangganan tanpa perlu mengubah rencana.

Instant ledger debits

Satu panggilan createLedgerEntry setelah setiap pengiriman. Tidak ada meter, tidak ada penundaan agregasi, idempoten pada pengulangan melalui id pesan Resend.

Credit-Based Billing Reference

Baca dokumentasi CBB lengkap untuk mode rollover, overage, manajemen buku besar, dan permukaan API lengkap.
Butuh bantuan? Need help?
Terakhir diubah pada 13 Mei 2026