Langsung ke konten utama

Pendahuluan

Eksekusi fungsi serverless dan pekerjaan latar belakang secara otomatis ketika peristiwa pembayaran terjadi. Proses pembayaran, kirim notifikasi, perbarui basis data, dan jalankan alur kerja yang kompleks dengan platform eksekusi fungsi Inngest yang andal.
Integrasi ini memerlukan URL webhook Inngest Anda dari konfigurasi fungsi Anda.

Memulai

1

Open the Webhook Section

Di dasbor Dodo Payments Anda, buka Webhooks → + Add Endpoint dan perluas dropdown integrasi.
Add Endpoint and integrations dropdown
2

Select Inngest

Pilih kartu integrasi Inngest.
3

Create Inngest Function

Di Inngest, buat fungsi baru dan salin URL webhook dari konfigurasi fungsi.
4

Paste Webhook URL

Tempelkan URL webhook Inngest ke dalam konfigurasi endpoint.
5

Configure Transformation

Edit kode transformasi untuk memformat event sesuai fungsi Inngest Anda.
6

Test & Create

Uji dengan payload contoh dan klik Create untuk mengaktifkan integrasi.
7

Done!

🎉 Event pembayaran kini akan memicu fungsi Inngest Anda secara otomatis.

Contoh Kode Transformasi

Payload Peristiwa Dasar

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Penangan Acara Langganan

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

Penangan Acara Sengketa

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Kasus Penggunaan Inngest yang Umum

  • Kirim email konfirmasi
  • Perbarui catatan pelanggan
  • Proses pengembalian dana
  • Buat faktur
  • Perbarui inventaris
  • Sambut pelanggan baru
  • Proses pembatalan
  • Kirim pengingat perpanjangan
  • Perbarui siklus penagihan
  • Tangani pembayaran gagal
  • Perbarui metrik pendapatan
  • Lacak perilaku pelanggan
  • Buat laporan
  • Sinkronkan data ke platform analitik
  • Hitung tingkat churn

Tips

  • Gunakan nama peristiwa yang deskriptif untuk organisasi fungsi yang lebih baik
  • Sertakan konteks pengguna untuk eksekusi fungsi
  • Atur cap waktu yang tepat untuk urutan peristiwa
  • Struktur data secara konsisten di seluruh peristiwa
  • Gunakan fitur pengulangan dan penanganan kesalahan Inngest

Pemecahan Masalah

  • Verifikasi URL webhook sudah benar dan aktif
  • Periksa bahwa fungsi Inngest telah dideploy dan aktif
  • Pastikan nama event sesuai pemicu fungsi
  • Tinjau log fungsi Inngest untuk mencari kesalahan
  • Periksa struktur payload sesuai harapan Inngest
  • Verifikasi nama event diformat dengan benar
  • Pastikan semua field wajib disertakan
  • Uji dengan alat pengujian webhook Inngest