Bot Jualan dengan Loyalty Points

Cara buat bot jualan WhatsApp dengan loyalty points. Earn points, redeem rewards, tier membership. Tingkatkan retention!

Bot Jualan dengan Loyalty Points
Bot Jualan dengan Loyalty Points

Loyalty program = Repeat customers!

Bot dengan loyalty points membuat customer kembali lagi karena ada insentif untuk terus belanja dan mengumpulkan rewards.


Struktur Loyalty Program

🎯 KOMPONEN LOYALTY:

EARN POINTS:
- Belanja (Rp 1.000 = 1 poin)
- Review produk (+50 poin)
- Referral (+100 poin)
- Birthday bonus (+200 poin)
- First purchase (+100 poin)

REDEEM REWARDS:
- Diskon (100 poin = Rp 10k)
- Free product
- Free shipping
- Exclusive items
- Cashback

TIER MEMBERSHIP:
- Bronze: 0-499 poin
- Silver: 500-1999 poin
- Gold: 2000-4999 poin
- Platinum: 5000+ poin

Template Messages

Points Balance:

🎁 POIN LOYALTY KAMU

Hai Kak [NAMA]!

📊 STATUS MEMBER:
━━━━━━━━━━━━━━━━━━━━
Level: Silver 🥈
Total Poin: 1,250 poin
Poin akan expired: 200 poin (30 hari)

💰 NILAI POIN:
1,250 poin = Rp 125.000 value!

🎯 NEXT LEVEL (Gold):
Progress: ████████████░░░░ 63%
Butuh: 750 poin lagi

Mau ngapain?
1️⃣ Tukar Poin (Redeem)
2️⃣ Cara Dapat Poin
3️⃣ Riwayat Poin
4️⃣ Benefit Member

Ketik angka untuk pilih!

Earn Points Info:

💰 CARA DAPAT POIN

BELANJA:
- Setiap Rp 1.000 = 1 poin
- Contoh: Belanja Rp 500k = 500 poin

BONUS POIN:
━━━━━━━━━━━━━━━━━━━━
📝 Review produk: +50 poin
👥 Referral sukses: +100 poin
🎂 Birthday month: +200 poin
🛒 First purchase: +100 poin
⭐ Upgrade level: +bonus poin

MULTIPLIER (Level):
- Bronze: 1x poin
- Silver: 1.5x poin ← Kamu!
- Gold: 2x poin
- Platinum: 3x poin

💡 Tip: Level Silver dapat 1.5x poin!
Belanja Rp 500k = 750 poin (bukan 500)

Redeem Options:

🎁 TUKAR POIN

Poin kamu: 1,250 poin

REWARDS TERSEDIA:
━━━━━━━━━━━━━━━━━━━━
1️⃣ Voucher Rp 50.000
   🎫 500 poin

2️⃣ Voucher Rp 100.000
   🎫 900 poin (hemat 100!)

3️⃣ Free Shipping
   🎫 200 poin

4️⃣ Produk Eksklusif
   🎫 1.500 poin
   [Limited: Tote Bag Member]

5️⃣ Mystery Box
   🎫 800 poin
   [Worth Rp 150k+!]
━━━━━━━━━━━━━━━━━━━━

Ketik: REDEEM [NOMOR]
Contoh: REDEEM 2

Redeem Confirmation:

✅ POIN BERHASIL DITUKAR!

Redeem ID: #RDM-20260217-001

📋 Detail:
━━━━━━━━━━━━━━━━━━━━
Reward: Voucher Rp 100.000
Poin dipakai: 900 poin
Sisa poin: 350 poin
━━━━━━━━━━━━━━━━━━━━

🎫 KODE VOUCHER:
LOYAL100K-ABCD1234

Cara pakai:
Masukkan kode saat checkout!

⏰ Berlaku: 30 hari
📅 Expired: 19 Mar 2026

Happy shopping! 🛍️

Points Earned:

🎉 SELAMAT, DAPAT POIN!

Order: #ORD-20260217-001

📊 POIN EARNED:
━━━━━━━━━━━━━━━━━━━━
Belanja Rp 350.000
Base poin: 350 poin
Multiplier Silver (1.5x): +175 poin
━━━━━━━━━━━━━━━━━━━━
TOTAL: +525 poin! 🎉

💰 SALDO POIN:
Sebelum: 725 poin
Sekarang: 1,250 poin

🎯 Progress ke Gold:
████████████░░░░ 63%
750 poin lagi!

Terus belanja untuk upgrade! 💪

Tier Upgrade:

🎉 LEVEL UP!

Selamat Kak [NAMA]!

Kamu naik ke level GOLD! 🥇

NEW BENEFITS:
━━━━━━━━━━━━━━━━━━━━
✅ Poin multiplier: 2x
   (dari 1.5x)
✅ Birthday gift eksklusif
✅ Early access sale
✅ Free shipping (min Rp 200k)
✅ Priority customer service
✅ Exclusive member price

🎁 WELCOME GIFT:
+500 bonus poin!

Saldo poin: 2,500 poin

Terima kasih sudah setia! 💕

Points Expiring:

⚠️ POIN AKAN EXPIRED!

Hai Kak [NAMA]!

Ada poin yang akan hangus:

⏰ EXPIRED DALAM 7 HARI:
━━━━━━━━━━━━━━━━━━━━
200 poin (earned 17 Feb 2025)
━━━━━━━━━━━━━━━━━━━━

💡 Jangan sampai hangus!

OPSI:
1️⃣ Belanja sekarang (poin auto diperpanjang)
2️⃣ Tukar dengan reward
3️⃣ Transfer ke teman

Ketik REDEEM untuk tukar poin!

🛒 Katalog: [LINK]

Implementation

Points System:

javascript

const pointsConfig = {
    earnRate: 1, // 1 point per Rp 1,000
    multipliers: {
        bronze: 1,
        silver: 1.5,
        gold: 2,
        platinum: 3
    },
    bonusPoints: {
        firstPurchase: 100,
        review: 50,
        referral: 100,
        birthday: 200
    },
    tiers: {
        bronze: { min: 0, max: 499 },
        silver: { min: 500, max: 1999 },
        gold: { min: 2000, max: 4999 },
        platinum: { min: 5000, max: Infinity }
    },
    expiryDays: 365,
    redemptionRate: 100 // 100 points = Rp 10,000
};

async function earnPoints(customerId, orderTotal, bonusType = null) {
    const customer = await db.customers.findOne({ id: customerId });
    const multiplier = pointsConfig.multipliers[customer.tier];
    
    // Calculate points from purchase
    let points = Math.floor(orderTotal / 1000) * pointsConfig.earnRate;
    points = Math.floor(points * multiplier);
    
    // Add bonus if applicable
    if (bonusType && pointsConfig.bonusPoints[bonusType]) {
        points += pointsConfig.bonusPoints[bonusType];
    }
    
    // Update customer points
    await db.customers.updateOne(
        { id: customerId },
        {
            $inc: { totalPoints: points, lifetimePoints: points },
            $push: {
                pointsHistory: {
                    type: 'earn',
                    amount: points,
                    source: bonusType || 'purchase',
                    date: new Date(),
                    expiresAt: addDays(new Date(), pointsConfig.expiryDays)
                }
            }
        }
    );
    
    // Check tier upgrade
    await checkTierUpgrade(customerId);
    
    return points;
}

async function redeemPoints(customerId, rewardId) {
    const customer = await db.customers.findOne({ id: customerId });
    const reward = await db.rewards.findOne({ id: rewardId });
    
    if (customer.totalPoints < reward.pointsCost) {
        return { success: false, error: 'insufficient_points' };
    }
    
    // Deduct points
    await db.customers.updateOne(
        { id: customerId },
        {
            $inc: { totalPoints: -reward.pointsCost },
            $push: {
                pointsHistory: {
                    type: 'redeem',
                    amount: -reward.pointsCost,
                    reward: reward.name,
                    date: new Date()
                }
            }
        }
    );
    
    // Generate reward
    const voucherCode = generateVoucherCode(reward);
    
    return {
        success: true,
        voucherCode,
        reward: reward.name
    };
}

Tier Management:

javascript

async function checkTierUpgrade(customerId) {
    const customer = await db.customers.findOne({ id: customerId });
    const lifetime = customer.lifetimePoints;
    
    let newTier = 'bronze';
    
    if (lifetime >= 5000) newTier = 'platinum';
    else if (lifetime >= 2000) newTier = 'gold';
    else if (lifetime >= 500) newTier = 'silver';
    
    if (newTier !== customer.tier) {
        // Upgrade happened!
        const bonusPoints = getTierUpgradeBonus(newTier);
        
        await db.customers.updateOne(
            { id: customerId },
            {
                $set: { tier: newTier, tierUpgradedAt: new Date() },
                $inc: { totalPoints: bonusPoints }
            }
        );
        
        await sendTierUpgradeNotification(customer.phone, newTier, bonusPoints);
    }
}

// Check expiring points daily
cron.schedule('0 9 * * *', async () => {
    const sevenDaysLater = addDays(new Date(), 7);
    
    const customersWithExpiring = await db.customers.find({
        'pointsHistory': {
            $elemMatch: {
                type: 'earn',
                expiresAt: { $lte: sevenDaysLater, $gte: new Date() }
            }
        }
    });
    
    for (const customer of customersWithExpiring) {
        const expiringPoints = calculateExpiringPoints(customer, sevenDaysLater);
        await sendExpiryReminder(customer.phone, expiringPoints);
    }
});

Best Practices

DO ✅

- Simple earn/redeem ratio
- Multiple ways to earn
- Valuable rewards
- Expiry reminders
- Tier progression visible
- Birthday bonuses

DON'T ❌

- Complicated rules
- Points worth too little
- No reward variety
- Silent expiry
- Impossible tier targets
- Forget inactive members

FAQ

Berapa nilai 1 poin yang ideal?

Rp 100-150 per poin. Visible value, tapi sustainable untuk bisnis.

Poin perlu expired?

Ya, 12-24 bulan. Encourage redemption, reduce liability.

Tier berapa level ideal?

3-4 tiers. Achievable progression, clear benefits each level.


Kesimpulan

Loyalty points = Repeat business!

No LoyaltyWith Loyalty
One-time buyerRepeat customer
No incentiveRewarded loyalty
Price-focusedValue-focused
Easy to leaveSticky

Setup Loyalty Program →


Artikel Terkait