Bot Jualan untuk Subscription Box

Cara buat bot jualan WhatsApp untuk subscription box. Recurring orders, manage subscription, auto-billing. Panduan lengkap!

Bot Jualan untuk Subscription Box
Bot Jualan untuk Subscription Box

Subscription = Recurring revenue!

Bot untuk subscription box menghandle recurring orders otomatis - customer subscribe sekali, dapat kiriman rutin setiap bulan.


Model Subscription

πŸ“¦ JENIS SUBSCRIPTION:

CURATED BOX:
- Produk berbeda setiap bulan
- Surprise element
- Beauty box, snack box

REPLENISHMENT:
- Produk sama setiap bulan
- Konsumables
- Kopi, skincare, pet food

MEMBERSHIP ACCESS:
- Akses exclusive products
- Member-only pricing
- VIP club

HYBRID:
- Core items + rotating items
- Mix replenishment + curation

Template Messages

Subscription Info:

πŸ“¦ SUBSCRIPTION BOX [BRAND]

Dapat kiriman rutin setiap bulan!

PILIHAN PAKET:
━━━━━━━━━━━━━━━━━━━━
1️⃣ MONTHLY BOX
   Rp 299.000/bulan
   β€’ 5-7 produk full size
   β€’ Surprise items setiap bulan
   β€’ Free shipping

2️⃣ QUARTERLY BOX
   Rp 799.000/3 bulan
   (Hemat Rp 98k!)
   β€’ Semua benefit Monthly
   β€’ Bonus exclusive item

3️⃣ YEARLY BOX
   Rp 2.999.000/tahun
   (Hemat Rp 589k!)
   β€’ Semua benefit Quarterly
   β€’ Anniversary gift
   β€’ Priority shipping
━━━━━━━━━━━━━━━━━━━━

Ketik angka untuk subscribe!

Subscribe Flow:

πŸ“ FORM SUBSCRIPTION

Paket: Monthly Box (Rp 299k/bulan)

Isi data berikut:

SUBSCRIBE
Nama: [Nama Lengkap]
HP: [No WhatsApp]
Email: [Email]
--
Alamat Kirim: [Alamat Lengkap]
Kota: [Kota]
Kode Pos: [Kode Pos]
--
Preferensi: [Jika ada pilihan]

Setelah submit, kami kirim
link pembayaran pertama!

Subscription Confirmed:

βœ… SUBSCRIPTION AKTIF!

Subscription ID: #SUB-20260217-001

πŸ“¦ PAKET: Monthly Box
πŸ’° Harga: Rp 299.000/bulan

πŸ“… JADWAL:
- Box pertama: 25 Feb 2026
- Billing berikutnya: 17 Mar 2026
- Kirim setiap tanggal 25

πŸ“ ALAMAT:
[NAMA]
[ALAMAT LENGKAP]

πŸ”„ Auto-renewal: ON
   (Bisa cancel kapan saja)

Manage subscription:
Ketik SUBSCRIPTION untuk opsi

Welcome to the club! πŸŽ‰

Monthly Box Preview:

πŸ“¦ SNEAK PEEK: Box Maret 2026

Hai Subscriber!

Box bulan ini SPESIAL! 🎁

πŸ” PREVIEW:
━━━━━━━━━━━━━━━━━━━━
βœ… [Product 1] - Full size
βœ… [Product 2] - Full size
βœ… [Product 3] - Travel size
βœ… [Product 4] - Full size
🎁 SURPRISE item!
━━━━━━━━━━━━━━━━━━━━

Total value: Rp 650.000+
Kamu bayar: Rp 299.000

πŸ“… Dikirim: 25 Mar 2026

Excited? 🀩

Billing Reminder:

πŸ’³ REMINDER BILLING

Hai Kak [NAMA]!

Subscription kamu akan di-charge
dalam 3 hari:

πŸ“¦ Paket: Monthly Box
πŸ’° Amount: Rp 299.000
πŸ“… Charge date: 17 Mar 2026
πŸ’³ Payment: Auto (Card ****1234)

Pastikan saldo mencukupi ya!

Mau ubah?
- PAUSE - jeda subscription
- SKIP - skip bulan ini
- CANCEL - berhenti subscribe
- PAYMENT - ubah metode bayar

Ketik opsi di atas!

Shipment Notification:

🚚 BOX BULAN INI DIKIRIM!

Subscription: #SUB-20260217-001

πŸ“¦ March 2026 Box sudah OTW!

🚚 Kurir: JNE YES
πŸ“‹ Resi: 1234567890
πŸ“… Estimasi: 2-3 hari

πŸ“ Dikirim ke:
[NAMA]
[ALAMAT]

Track: jne.co.id/track/1234567890

What's inside? Surprise! 🎁
Share unboxing kamu ya! #[BRAND]Box

Manage Subscription

Subscription Status:

πŸ“Š SUBSCRIPTION STATUS

ID: #SUB-20260217-001

πŸ“¦ PAKET: Monthly Box
πŸ’° Harga: Rp 299.000/bulan
πŸ“… Member sejak: 17 Feb 2026
πŸ”„ Status: AKTIF

BILLING INFO:
- Next billing: 17 Mar 2026
- Payment: Card ****1234

HISTORY:
- Box #1 (Feb): βœ… Delivered
- Box #2 (Mar): 🚚 In transit

OPSI:
1️⃣ Skip Bulan Depan
2️⃣ Pause Subscription
3️⃣ Upgrade Paket
4️⃣ Ubah Alamat
5️⃣ Ubah Payment
6️⃣ Cancel

Ketik angka untuk pilih!

Skip Month:

⏭️ SKIP BULAN

Mau skip box bulan depan?

πŸ“¦ Yang akan di-skip:
April 2026 Box

πŸ’° Kamu TIDAK akan di-charge
   untuk bulan April.

πŸ“… Subscription lanjut otomatis
   di bulan Mei.

Konfirmasi skip?
- Ketik YA untuk skip
- Ketik TIDAK untuk batal

πŸ’‘ Bisa skip max 2x berturut-turut

Pause Subscription:

⏸️ PAUSE SUBSCRIPTION

Mau pause berapa lama?

1️⃣ 1 bulan
2️⃣ 2 bulan
3️⃣ 3 bulan

Selama pause:
- Tidak ada billing
- Tidak ada shipment
- Membership tetap aktif
- Resume kapan saja

Ketik angka untuk pilih durasi!

πŸ’‘ Bisa resume lebih awal
   dengan ketik RESUME

Cancel Flow:

😒 CANCEL SUBSCRIPTION?

Sebelum cancel, boleh tau alasannya?

1️⃣ Terlalu mahal
2️⃣ Produk tidak sesuai
3️⃣ Terlalu banyak stok
4️⃣ Pindah ke kompetitor
5️⃣ Alasan lain

Ketik angka!

πŸ’‘ Mungkin ada solusi:
   β€’ Pause sementara?
   β€’ Downgrade paket?
   β€’ Skip beberapa bulan?

Retention Offer:

🎁 SPECIAL OFFER!

Sebelum cancel, ini untuk kamu:

πŸ’° DISKON 30% untuk 3 bulan!

Normal: Rp 299.000/bulan
Promo: Rp 209.000/bulan
Hemat: Rp 270.000 total!

Mau ambil offer ini?

1️⃣ YA, lanjut dengan diskon!
2️⃣ TIDAK, tetap cancel

Offer ini hanya sekali! πŸ™

Implementation

javascript

const subscriptionPlans = {
    monthly: {
        name: 'Monthly Box',
        price: 299000,
        interval: 'month',
        intervalCount: 1
    },
    quarterly: {
        name: 'Quarterly Box',
        price: 799000,
        interval: 'month',
        intervalCount: 3
    },
    yearly: {
        name: 'Yearly Box',
        price: 2999000,
        interval: 'year',
        intervalCount: 1
    }
};

async function createSubscription(customerId, planId, paymentMethod) {
    const plan = subscriptionPlans[planId];
    
    const subscription = await db.subscriptions.insert({
        customerId,
        planId,
        status: 'active',
        currentPeriodStart: new Date(),
        currentPeriodEnd: calculatePeriodEnd(plan),
        nextBillingDate: calculateNextBilling(plan),
        paymentMethod,
        createdAt: new Date()
    });
    
    // Charge first payment
    await processPayment(subscription, plan.price);
    
    // Schedule first box
    await scheduleBox(subscription);
    
    return subscription;
}

// Process recurring billing
cron.schedule('0 9 * * *', async () => {
    const today = new Date().toISOString().split('T')[0];
    
    const dueSubs = await db.subscriptions.find({
        status: 'active',
        nextBillingDate: today
    });
    
    for (const sub of dueSubs) {
        try {
            await processRecurringPayment(sub);
            await updateBillingDate(sub);
            await scheduleBox(sub);
            await sendPaymentSuccessNotification(sub);
        } catch (error) {
            await handlePaymentFailure(sub, error);
        }
    }
});

// Handle skip/pause
async function skipMonth(subscriptionId) {
    const sub = await db.subscriptions.findOne({ id: subscriptionId });
    
    // Check skip limit
    if (sub.consecutiveSkips >= 2) {
        return { success: false, error: 'max_skips_reached' };
    }
    
    // Skip next billing
    await db.subscriptions.updateOne(
        { id: subscriptionId },
        {
            $set: {
                nextBillingDate: addMonths(sub.nextBillingDate, 1)
            },
            $inc: { consecutiveSkips: 1 }
        }
    );
    
    return { success: true };
}

Best Practices

DO βœ…

- Easy subscribe/unsubscribe
- Preview box contents
- Flexible skip/pause
- Billing reminders
- Shipment tracking
- Retention offers

DON'T ❌

- Hard to cancel
- No flexibility
- Surprise charges
- No tracking
- Ignore churn signals
- Same box every month

FAQ

Billing kapan yang ideal?

Beberapa hari sebelum ship. Beri waktu proses + customer prepare.

Perlu opsi skip?

Wajib! Flexibility reduces cancellation. Max 2-3 consecutive skips.

Bagaimana reduce churn?

Preview exciting content, retention offers, pause option sebelum cancel.


Kesimpulan

Subscription = Predictable revenue!

One-time SalesSubscription
UnpredictableRecurring
Re-acquireRetained
TransactionalRelationship
VolatileStable

Setup Subscription Box β†’


Artikel Terkait