Panduan · Terbit
Memindahkan pelanggan langganan ke Kasera Pay: tanggal tagihan berikutnya yang dihitung dari periode terakhir yang dibayar, tunggakan yang ditagih terpisah, gladi sandbox yang tidak memakan external_id, dan penagihan lama yang dimatikan lebih dulu
Pelanggan yang sudah berlangganan di tempat lain, entah tercatat di spreadsheet, ditagih lewat transfer manual, atau ditagih gateway lain, dipindahkan ke menu Langganan lewat Langganan, Impor CSV. Pekerjaannya ada lima, berurutan. Saring daftar menjadi pelanggan yang lunas sampai periode berjalan. Buat satu plan untuk setiap harga yang benar-benar dibayar. Hitung tanggal tagihan berikutnya dari akhir periode terakhir yang dibayar. Gladi di sandbox tanpa memakai id asli, lalu impor di mode live. Terakhir, matikan penagihan lama sebelum tanggal tagihan paling awal di file. Kesalahan yang paling mahal bukan baris yang ditolak, melainkan pelanggan yang ditagih dua kali untuk periode yang sama.
Kontrak kolomnya lengkap di dokumentasi API Langganan, bagian impor. Panduan ini membahas keputusan di sekitarnya, yang tidak bisa diperiksa oleh mesin impor.
1. Siapa yang masuk file, dan siapa yang tidak
Masuk: pelanggan yang sudah membayar periode yang sedang berjalan. Tagihan pertama mereka di Kasera Pay adalah periode berikutnya, dan memang hanya itu yang bisa dibuat impor.
Tidak masuk dulu: pelanggan yang menunggak. Impor menolak next_bill_date yang sudah lewat, dan itu disengaja: tanggal lampau akan membuka langganan yang periode pertamanya sudah habis, lalu menagih setiap siklus yang terlewat sekaligus. Mengisi tanggal hari ini juga bukan jalan pintas, karena invoice yang terbit adalah untuk periode yang akan datang, bukan untuk tunggakannya. Tunggakan ditagih lebih dulu dengan permintaan pembayaran biasa lewat QRIS atau Virtual Account, dan pelanggannya diimpor setelah lunas, dengan tanggal tagihan berikutnya yang wajar.
Setiap baris butuh nama dan minimal satu kontak: email yang valid atau nomor HP 10 sampai 15 digit. Kontak yang salah tulis membuat barisnya ditolak, bukan diimpor tanpa kontak. Kolom whatsapp diisi ya hanya untuk pelanggan yang memang setuju diingatkan lewat WhatsApp; nomor HP saja bukan persetujuan.
2. Satu plan per harga yang benar-benar dibayar
Daftar plan disusun dari harga di data pelanggan, bukan dari daftar harga yang dipasang sekarang. Pelanggan lama yang masih membayar harga tahun lalu diberi plan sendiri, misalnya Bulanan 2025, supaya impor tidak diam-diam menaikkan harga mereka. Plan dengan masa coba ditolak saat impor. Periode paling panjang satu tahun, dan kolom quantity mengalikan harga plan, jadi pelanggan yang mengambil dua unit cukup diberi jumlah 2. Invoice langganan dibayar lewat QRIS, sehingga harga plan dikali jumlah harus paling banyak Rp 10.000.000, batas satu pembayaran.
Kolom plan dicocokkan dengan nama, kode, atau id plan tanpa membedakan huruf besar dan kecil. Dua plan aktif yang bernama sama membuat barisnya ditolak sebagai ambigu; tulis kodenya. Nama plan di file yang belum ada di akun tidak perlu diperbaiki di spreadsheet: halaman impor menampilkan setiap nama yang tidak dikenal beserta jumlah barisnya, lalu menawarkan pilihan memetakannya ke plan yang ada atau membuatnya dari situ.
3. Menghitung next_bill_date
Kolom ini berisi tanggal tagihan berikutnya, yaitu hari pertama periode yang belum dibayar. Pelanggan bulanan yang lunas sampai 31 Oktober diisi 1 November. Pelanggan tahunan yang membayar 12 Maret 2026 untuk setahun diisi 12 Maret 2027. Tanggal ini sekaligus menjadi tanggal siklus seterusnya. Tanggal 29, 30, atau 31 tetap aman: di bulan yang lebih pendek tagihannya jatuh pada hari terakhir bulan itu, lalu kembali ke tanggal aslinya di bulan berikutnya.
Format yang diterima adalah 2026-11-01, 01/11/2026, dan 01-11-2026, selalu dibaca hari lebih dulu. Di sinilah jebakan paling berbahaya: spreadsheet yang memakai format tanggal Amerika menulis 12 Maret sebagai 03/12/2026, dan impor membacanya 3 Desember. Kalau 3 Desember masih di depan, barisnya lolos tanpa peringatan apa pun dengan tanggal yang salah. Ubah kolomnya ke format ISO sebelum diekspor, misalnya dengan =TEXT(E2;"yyyy-mm-dd") (pemisah argumennya koma atau titik koma, tergantung setelan bahasa spreadsheet), lalu bandingkan beberapa baris dengan catatan aslinya.
name,email,phone,plan,next_bill_date,quantity,external_id,whatsapp,no_email
Rina Kusuma,rina@contoh.id,081234500001,Bulanan 2025,2026-11-01,1,PLG-0007,ya,
CV Maju Jaya,admin@majujaya.contoh,,Tahunan,2027-03-12,2,PLG-0019,,
Dodi Pratama,,081234500003,Bulanan,2026-11-15,1,PLG-0023,ya,Urutan kolom bebas, dan kolom lain di spreadsheet diabaikan, jadi file kerja tidak perlu dirapikan dulu. Satu file paling banyak 500 baris dan 1 MB; daftar yang lebih panjang dipecah menjadi beberapa file.
4. Gladi di sandbox tanpa memakai id asli
Gladi di sandbox layak dilakukan: impor sandbox tidak mengirim pesan ke siapa pun, dan halaman langganan di sandbox punya Simulasi waktu untuk melihat perpanjangan pertama tanpa menunggu sebulan. Satu hal harus diubah sebelum gladi. external_id unik per akun di kedua mode sekaligus, sandbox dan live. Gladi dengan file asli membuat setiap id asli terpakai oleh langganan sandbox, dan impor live sesudahnya melaporkan seluruh baris sebagai Sudah ada tanpa membuat satu langganan pun. Menghentikan langganan sandbox tidak membebaskan id-nya.
Jadi gladi memakai salinan file dengan id berawalan, misalnya TES-PLG-0007, atau salinan tanpa kolom external_id sama sekali. File aslinya disimpan utuh untuk mode live. Kalau gladi telanjur memakai id asli, file live perlu id baru, misalnya dengan akhiran yang sama di setiap baris.
5. Cek, impor, lalu baca laporannya
Cek filenya menjalankan seluruh pemeriksaan tanpa membuat apa pun dan tanpa mengirim pesan. Setiap baris mendapat status Siap, Sudah ada, atau Perlu dibenerin, lengkap dengan nomor baris yang sama dengan spreadsheet. Nama, kontak, plan, dan tanggal yang ditolak bisa diperbaiki langsung di halaman itu. Kalau yang ditolak sangat banyak, biasanya ada satu kesalahan yang berulang, seperti kolom tertukar atau tanggal yang tidak terbaca; unduh baris yang ditolak, perbaiki di spreadsheet, dan unggah lagi.
Impor live membutuhkan akun yang sudah terverifikasi, dan baris dari akun yang belum terverifikasi ditolak satu per satu dengan alasannya. Sebelum tombol impor, halaman menampilkan kredit WhatsApp yang bisa terpakai pada siklus pertama: paling banyak empat per pelanggan yang ikut WhatsApp, yaitu tiga pengingat dan satu bukti bayar. Kredit yang kurang tidak menghentikan impor; pengingat WhatsApp berhenti saat kreditnya habis, sementara email tetap terkirim.
Langganan hasil impor sama dengan langganan biasa. Invoice pertamanya jatuh tempo pada next_bill_date, dengan pengingat tiga hari sebelumnya, pada hari itu, dan tiga hari sesudahnya kalau belum dibayar. Baris yang tanggalnya sebulan lagi tidak mengirim apa pun hari ini.
6. Mematikan penagihan lama, dan kapan
Batas waktunya adalah tanggal tagihan paling awal di file, dikurangi tiga hari untuk pengingat pertama. Sebelum itu, hentikan semua yang masih bisa menagih pelanggan yang sama: jadwal tagihan berulang di gateway lama, template pengingat di aplikasi chat, atau kebiasaan admin mengirim nomor rekening tiap awal bulan. Pelanggan yang menerima dua tagihan untuk periode yang sama sering membayar keduanya, dan pengembaliannya dikerjakan manual.
Kabari pelanggan sebelum pengingat pertama tiba: tagihan berikutnya datang dari sistem baru, dibayar lewat QRIS dari aplikasi bank atau dompet digital apa pun, dan tanggalnya tetap. Pelanggan yang selama ini membayar dengan transfer ke rekening perlu tahu bahwa caranya berubah, bukan menemukannya sendiri saat jatuh tempo. Hal lain yang tidak ikut pindah dari penyedia lama, seperti saldo yang belum dicairkan dan pengembalian dana atas pembayaran lama, dibahas di tulisan tentang migrasi dari gateway lain tanpa downtime.
Biaya setelah pindah: QRIS 0,7% + Rp 250 per pembayaran berhasil, pencairan ke rekening Rp 3.000 per pencairan, tanpa biaya bulanan. Iuran Rp 150.000 sebulan, sebagai contoh, dikenai Rp 1.300. Kapan menu Langganan lebih tepat daripada menagih manual tiap bulan dibandingkan di perbandingan menu Langganan dan tagihan manual.
Pertanyaan yang sering muncul
Apakah riwayat pembayaran lama ikut dipindahkan?
Tidak. Impor membuat langganan yang mulai menagih dari tanggal tagihan berikutnya, dan pembayaran sebelum itu tetap tercatat di sistem lama. Unduh dan simpan ekspor dari sistem lama sebelum aksesnya ditutup, karena sengketa tentang periode lama hanya bisa dijawab dari sana.
Pelanggan yang tagihan berikutnya jatuh hari ini, boleh diimpor?
Boleh. Tanggal hari ini diterima, dan invoice-nya terbit saat impor dijalankan. Yang ditolak hanya tanggal yang sudah lewat, karena tanggal seperti itu hampir selalu tanggal tagihan terakhir yang salah kolom.
Kenapa baris dengan plan yang punya masa coba ditolak?
Karena pelanggan yang diimpor bukan pelanggan baru. Plan dengan masa coba membuka langganan tanpa invoice sampai masa cobanya habis, sehingga pelanggan yang sudah membayar setahun akan mendapat periode gratis dan ditagih satu siklus terlambat. Impor ke plan tanpa masa coba; pelanggan yang memang masih dalam masa coba di sistem lama diimpor dengan tanggal tagihan berikutnya sama dengan hari masa cobanya berakhir.
Apakah impor bisa dijalankan tanpa kolom external_id?
Bisa, tetapi impor ulang file yang sama lalu membuka langganan kedua untuk setiap baris, karena tanpa id tidak ada cara membedakan pengulangan dari langganan yang memang kedua. Dengan external_id, baris yang sudah punya langganan dilaporkan Sudah ada, sehingga impor yang terputus diselesaikan dengan mengirim file yang sama lagi.