Penagihan berbasis kursi memungkinkan Anda menagih pelanggan berdasarkan jumlah pengguna, anggota tim, atau lisensi yang mereka perlukan. Ini adalah model harga standar untuk alat kolaborasi tim, perangkat lunak perusahaan, dan produk SaaS B2B.
Implementation Tutorial
Panduan langkah demi langkah dengan contoh kode.
Add-ons Documentation
Pelajari tentang sistem add-on yang mendukung penagihan berbasis kursi.
Subscription Management
Kelola langganan berbasis kursi dan perubahan paket.
Webhooks
Lacak perubahan kursi dengan webhook langganan.
Apa itu Penagihan Berdasarkan Kursi?
Penagihan berbasis kursi (juga disebut harga per pengguna atau per kursi) mengenakan biaya kepada pelanggan berdasarkan jumlah pengguna yang mengakses produk Anda. Alih-alih biaya tetap, harga akan meningkat seiring dengan ukuran tim.Kasus Penggunaan Umum
| Industri | Contoh | Model Harga |
|---|---|---|
| Kolaborasi Tim | Slack, Notion, Asana | Per pengguna aktif/bulan |
| Alat Pengembang | GitHub, GitLab, Jira | Per kursi/bulan |
| Perangkat Lunak CRM | Salesforce, HubSpot | Per lisensi pengguna |
| Alat Desain | Figma, Canva | Per kursi editor |
| Perangkat Lunak Keamanan | 1Password, Okta | Per pengguna/bulan |
| Konferensi Video | Zoom, Teams | Per lisensi host |
Manfaat Harga Berdasarkan Kursi
Untuk Bisnis Anda:- Pendapatan berkembang secara alami seiring pertumbuhan pelanggan
- Harga yang dapat diprediksi yang dapat dianggarkan oleh pelanggan
- Jalur peningkatan yang jelas dari individu ke tim hingga perusahaan
- Nilai seumur hidup yang lebih tinggi seiring tim berkembang
- Bayar hanya untuk apa yang mereka gunakan
- Mudah dipahami dan memprediksi biaya
- Fleksibilitas untuk menambah/menghapus pengguna sesuai kebutuhan
- Harga yang adil yang sesuai dengan ukuran tim
Bagaimana Penagihan Berdasarkan Kursi Bekerja di Dodo Payments
Dodo Payments menerapkan penagihan berbasis kursi menggunakan sistem Add-ons. Berikut cara kerjanya:Ikhtisar Arsitektur
Langganan Team Pro seharga 15/bulan tambahan untuk setiap kursi ekstra. Misalnya, jika tim Anda membutuhkan 15 kursi:- Paket Dasar: $99/bulan (termasuk 5 kursi)
- Add-on: 10 kursi tambahan × 150/bulan
- Total biaya bulanan: 150 = $249 untuk 15 kursi
Komponen Utama
| Komponen | Tujuan | Contoh |
|---|---|---|
| Produk Dasar | Langganan inti dengan kursi yang termasuk | ”Rencana Tim - $99/bulan (5 kursi termasuk)“ |
| Add-on Kursi | Biaya per kursi untuk pengguna tambahan | ”Kursi Tambahan - $15/bulan masing-masing” |
| Kuantitas | Jumlah kursi tambahan yang dibeli | 10 kursi tambahan |
Strategi Penetapan Harga
Pilih strategi penetapan harga berbasis kursi yang sesuai untuk bisnis Anda:Strategi 1: Dasar + Add-on Per-Kursi
Sertakan sejumlah kursi dalam rencana dasar, kenakan biaya untuk kursi tambahan. Contoh:Strategi 2: Harga Per-Kursi Murni
Kenakan tarif tetap per kursi tanpa biaya dasar. Contoh:Strategi 3: Penetapan Harga Kursi Bertingkat
Rencana dasar yang berbeda dengan tarif per-kursi yang berbeda. Contoh:Strategi 4: Paket Kursi
Jual kursi dalam paket daripada secara individu. Contoh:Menyiapkan Penagihan Berdasarkan Kursi
Langkah 1: Rencanakan Penetapan Harga Anda
Sebelum implementasi, tentukan struktur harga Anda:Define Base Plan
Putuskan apa yang termasuk dalam langganan dasar:
- Harga dasar (bisa $0 untuk model murni per-kursi)
- Jumlah kursi yang disertakan
- Fitur yang tersedia pada tingkat ini
Set Seat Pricing
Tentukan biaya add-on per kursi:
- Harga per kursi tambahan
- Diskon volume (melalui beberapa add-on)
- Maksimal kursi yang diperbolehkan (jika berlaku)
Langkah 2: Buat Add-on Kursi
Di dasbor Dodo Payments Anda:- Navigasi ke Produk → Add-Ons
- Klik Buat Add-On
- Konfigurasikan add-on:
| Field | Value | Notes |
|---|---|---|
| Nama | ”Kursi Tambahan” atau “Anggota Tim” | Nama yang jelas dan ramah pengguna |
| Deskripsi | ”Tambahkan anggota tim lain ke ruang kerja Anda” | Jelaskan apa yang didapat pelanggan |
| Harga | Harga per kursi Anda | misalnya, $10.00 |
| Mata Uang | Sesuaikan dengan produk dasar Anda | Harus sama dengan mata uang yang sama |
| Kategori Pajak | Sama dengan produk dasar | Memastikan penanganan pajak yang konsisten |
Langkah 3: Buat Produk Langganan Dasar
Buat produk langganan Anda:- Navigasi ke Produk → Buat Produk
- Pilih Langganan
- Konfigurasikan harga dan detail
- Di bagian Add-Ons, lampirkan add-on kursi Anda
Langkah 4: Lampirkan Add-on ke Produk
Tautkan add-on kursi ke langganan Anda:- Edit produk langganan Anda
- Gulir ke bagian Add-Ons
- Klik Tambahkan Add-Ons
- Pilih add-on kursi Anda
- Simpan perubahan
Produk langganan Anda sekarang mendukung harga berbasis kursi. Pelanggan dapat membeli jumlah kursi tambahan berapa pun saat checkout.
Mengelola Kursi
Menambahkan Kursi ke Langganan Baru
Saat membuat sesi checkout, tentukan jumlah kursi:Mengubah Jumlah Kursi pada Langganan yang Ada
Gunakan API Ubah Rencana untuk menyesuaikan kursi:Menghapus Kursi
Untuk mengurangi jumlah kursi, tentukan kuantitas yang lebih rendah:Menghapus Semua Kursi Tambahan
Kirim array addons kosong untuk menghapus semua add-on:Prorasi untuk Perubahan Kursi
Ketika pelanggan menambah atau menghapus kursi di tengah siklus, prorasi menentukan bagaimana mereka ditagih.Mode Prorata
| Mode | Menambah Kursi | Mengurangi Kursi |
|---|---|---|
prorated_immediately | Charge for remaining days in cycle | Credit for unused days |
difference_immediately | Charge full seat price | Credit applied to future renewals |
full_immediately | Charge full seat price, reset billing cycle | No credit |
Contoh Prorata
Skenario: Siklus penagihan 15 hari tersisa, menambahkan 5 kursi seharga $10/kursi- prorated_immediately
- difference_immediately
- full_immediately
Pratinjau Sebelum Mengubah
Selalu pratinjau prorata sebelum melakukan perubahan:Melacak Kursi dengan Webhook
Pantau perubahan kursi dengan mendengarkan webhook langganan:Event yang Relevan
| Event | Kapan Dipicu | Kasus Penggunaan |
|---|---|---|
subscription.active | Langganan baru diaktifkan | Sediakan kursi awal |
subscription.plan_changed | Kursi ditambahkan/dihapus | Perbarui jumlah kursi di aplikasi Anda |
subscription.renewed | Langganan diperpanjang | Pastikan jumlah kursi tidak berubah |
subscription.cancelled | Langganan dibatalkan | Hapus semua kursi |
Contoh Handler Webhook
Menegakkan Batas Kursi
Aplikasi Anda harus menegakkan batas kursi. Dodo Payments melacak penagihan, tetapi Anda mengendalikan akses.Strategi Penegakan
- Hard Limit
- Soft Limit with Warning
- Auto-Upgrade
Tegas mencegah penambahan pengguna di luar jumlah kursi.
Pola Lanjutan
Jenis Kursi yang Berbeda
Tawarkan jenis kursi berbeda dengan harga berbeda:Diskon Kursi Tahunan
Tawarkan harga kursi tahunan dengan diskon:Persyaratan Kursi Minimum
Tuntut jumlah kursi minimum untuk paket tertentu:Praktik Terbaik
Praktik Terbaik Penetapan Harga
- Komunikasi Jelas: Tampilkan harga per kursi secara mencolok di halaman harga Anda
- Kursi yang Disertakan: Pertimbangkan menyertakan beberapa kursi dalam harga dasar untuk mengurangi hambatan
- Diskon Volume: Tawarkan tarif per kursi lebih rendah untuk tim besar guna memenangkan kesepakatan perusahaan
- Insentif Tahunan: Diskon paket tahunan untuk meningkatkan arus kas dan retensi
Praktik Terbaik Teknis
- Cache Jumlah Kursi: Cache jumlah kursi langganan secara lokal untuk menghindari panggilan API setiap permintaan
- Sinkronisasi Secara Berkala: Sinkronkan jumlah kursi lokal Anda secara berkala dengan Dodo Payments via API
- Tangani Kegagalan: Jika perubahan kursi gagal, tampilkan pesan kesalahan yang jelas dan opsi coba ulang
- Jejak Audit: Catat semua perubahan kursi untuk sengketa penagihan dan kepatuhan
Praktik Terbaik Pengalaman Pengguna
- Umpan Balik Waktu-nyata: Tampilkan dampak biaya segera saat menyesuaikan kursi
- Langkah Konfirmasi: Minta konfirmasi sebelum perubahan penagihan
- Transparansi Prorata: Jelaskan dengan jelas biaya prorata sebelum diterapkan
- Penurunan Tingkat yang Mudah: Jangan membuatnya sulit untuk mengurangi kursi (ini membangun kepercayaan)
Pemecahan Masalah
Seat count mismatch between app and billing
Seat count mismatch between app and billing
Gejala: Aplikasi Anda menampilkan jumlah kursi berbeda dari langganan.Penyebab:
- Webhook tidak diterima atau diproses
- Kondisi balapan saat perubahan kursi
- Data cache tidak diperbarui
- Terapkan handler webhook untuk
subscription.plan_changed - Tambahkan tombol “Sinkronkan dengan penagihan” yang mengambil langganan saat ini
- Tetapkan TTL cache untuk memastikan penyegaran reguler
Proration charges unexpected
Proration charges unexpected
Gejala: Pelanggan bingung dengan jumlah tagihan di tengah siklus.Penyebab:
- Mode prorata tidak dikomunikasikan dengan jelas
- Pelanggan tidak melihat pratinjau sebelum mengonfirmasi
- Selalu gunakan
previewChangePlansebelum melakukan perubahan - Tampilkan rincian yang jelas: “Menambah X kursi = $Y hari ini (prorata untuk Z hari)”
- Dokumentasikan kebijakan prorata Anda di pusat bantuan
Add-on not appearing in checkout
Add-on not appearing in checkout
Gejala: Add-on kursi tidak tersedia saat checkout.Penyebab:
- Add-on tidak terpasang ke produk
- Add-on diarsipkan atau dihapus
- Ketidaksesuaian mata uang antara produk dan add-on
- Verifikasi add-on terpasang di pengaturan produk
- Periksa status add-on di dasbor Add-Ons
- Pastikan mata uang cocok persis
Cannot reduce seats below current usage
Cannot reduce seats below current usage
Gejala: Pelanggan ingin mengurangi kursi tetapi memiliki pengguna yang ditetapkan.Solusi:
- Tunjukkan pengguna mana yang harus dihapus sebelum mengurangi kursi
- Terapkan alur kerja: Hapus pengguna → Kurangi kursi
- Pertimbangkan masa tenggang sebelum memberlakukan pengurangan kursi