Bot Jualan dengan Loyalty Points
Cara buat bot jualan WhatsApp dengan loyalty points. Earn points, redeem rewards, tier membership. Tingkatkan retention!
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+ poinTemplate 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 2Redeem 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 bonusesDON'T ❌
- Complicated rules
- Points worth too little
- No reward variety
- Silent expiry
- Impossible tier targets
- Forget inactive membersFAQ
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 Loyalty | With Loyalty |
|---|---|
| One-time buyer | Repeat customer |
| No incentive | Rewarded loyalty |
| Price-focused | Value-focused |
| Easy to leave | Sticky |