Auto Reply WA untuk Membership & Loyalty

Setup auto reply WhatsApp untuk program membership dan loyalty. Cek poin, redeem reward, tier status otomatis!

Auto Reply WA untuk Membership & Loyalty
Auto Reply WA untuk Membership & Loyalty

Loyalty program via WhatsApp = Engagement tinggi!

Customer bisa cek poin, redeem reward, dan dapat exclusive deals langsung dari chat.


Fitur Membership Bot

đŸŽ¯ YANG BISA DIOTOMATISASI:

- Cek poin/saldo member
- Cek tier status
- Redeem poin ke voucher
- History transaksi
- Exclusive member promo
- Birthday rewards
- Referral tracking

Template Messages

Member Greeting:

👑 SELAMAT DATANG, MEMBER!

Hai Kak [NAMA]! 

Status: [TIER] Member ⭐
Poin: [JUMLAH] pts
Expired: [TANGGAL]

Mau ngapain hari ini?

1ī¸âƒŖ Cek Poin
2ī¸âƒŖ Tukar Poin
3ī¸âƒŖ History
4ī¸âƒŖ Promo Member
5ī¸âƒŖ Ajak Teman

Ketik angka untuk pilih! 😊

Cek Poin:

💰 SALDO POIN

Hai [NAMA]! Ini detail poinmu:

📊 Tier: [TIER] ⭐
💎 Total Poin: [JUMLAH] pts

Detail:
- Poin aktif: [AKTIF] pts
- Akan expired: [EXPIRED] pts (tgl [TANGGAL])
- Pending: [PENDING] pts

🎁 Kamu bisa tukar:
- 500 pts = Voucher Rp 25k
- 1000 pts = Voucher Rp 55k
- 2000 pts = Voucher Rp 120k

Ketik TUKAR untuk redeem!

Tukar Poin:

🎁 TUKAR POIN

Poin tersedia: [JUMLAH] pts

Pilih reward:

1ī¸âƒŖ Voucher Rp 25k (500 pts)
2ī¸âƒŖ Voucher Rp 55k (1000 pts) đŸ”Ĩ Best Deal
3ī¸âƒŖ Voucher Rp 120k (2000 pts)
4ī¸âƒŖ Free Ongkir (300 pts)
5ī¸âƒŖ Exclusive Merch (1500 pts)

Ketik angka untuk pilih!

Redemption Success:

✅ POIN BERHASIL DITUKAR!

🎁 Reward: Voucher Rp 55.000
💎 Poin digunakan: 1000 pts
📊 Sisa poin: [SISA] pts

đŸˇī¸ KODE VOUCHER:
[KODE]

📅 Berlaku sampai: [TANGGAL]
â„šī¸ Min. belanja: Rp 200.000

Gunakan saat checkout ya! 🛒

Tier Status:

⭐ STATUS TIER

Hai [NAMA]!

Current Tier: [TIER]
━━━━━━━━━━━━━━━━━━

đŸĨ‰ Bronze: 0 - 999 pts
đŸĨˆ Silver: 1,000 - 4,999 pts ← Kamu di sini!
đŸĨ‡ Gold: 5,000 - 9,999 pts
💎 Platinum: 10,000+ pts

Progress ke Gold:
████████░░ 80% (butuh 1,234 pts lagi)

Benefits tier kamu:
✅ Diskon 5% all items
✅ Early access sale
✅ Birthday double points

Belanja lagi untuk naik tier! 🚀

Birthday Reward:

🎂 HAPPY BIRTHDAY!

Hai [NAMA]! 🎉

SELAMAT ULANG TAHUN! đŸĨŗ

Ini hadiah spesial dari kami:

🎁 BIRTHDAY VOUCHER
💰 Rp 100.000
đŸˇī¸ Kode: BDAY[TAHUN][KODE]
📅 Berlaku: [TANGGAL] - [TANGGAL]

BONUS:
đŸ”Ĩ Double points untuk semua pembelian
   bulan ini!

Semoga hari ini menyenangkan! 💕

Implementation

Member Database:

javascript

const memberSchema = {
    phone: '628123456789',
    name: 'Budi Santoso',
    email: '[email protected]',
    joinDate: '2025-01-15',
    birthday: '1990-05-20',
    
    // Points
    points: {
        total: 2500,
        pending: 100,
        expiring: { amount: 500, date: '2026-03-01' }
    },
    
    // Tier
    tier: 'silver', // bronze, silver, gold, platinum
    lifetimePoints: 5000,
    
    // History
    transactions: [
        { date: '2026-01-10', type: 'earn', amount: 150, order: 'ORD-001' },
        { date: '2026-01-15', type: 'redeem', amount: -500, reward: 'Voucher 25k' }
    ],
    
    // Referral
    referralCode: 'BUDI123',
    referredBy: null,
    referralCount: 3
};

Points Calculation:

javascript

const POINTS_CONFIG = {
    earnRate: 0.01, // 1% of purchase = points
    tiers: {
        bronze: { min: 0, discount: 0, multiplier: 1 },
        silver: { min: 1000, discount: 5, multiplier: 1.25 },
        gold: { min: 5000, discount: 10, multiplier: 1.5 },
        platinum: { min: 10000, discount: 15, multiplier: 2 }
    },
    rewards: [
        { id: 'voucher25', name: 'Voucher Rp 25k', points: 500, value: 25000 },
        { id: 'voucher55', name: 'Voucher Rp 55k', points: 1000, value: 55000 },
        { id: 'voucher120', name: 'Voucher Rp 120k', points: 2000, value: 120000 },
        { id: 'freeongkir', name: 'Free Ongkir', points: 300, value: 20000 }
    ]
};

function calculateEarnedPoints(orderTotal, memberTier) {
    const basePoints = Math.floor(orderTotal * POINTS_CONFIG.earnRate);
    const multiplier = POINTS_CONFIG.tiers[memberTier].multiplier;
    return Math.floor(basePoints * multiplier);
}

function getTierFromPoints(lifetimePoints) {
    if (lifetimePoints >= 10000) return 'platinum';
    if (lifetimePoints >= 5000) return 'gold';
    if (lifetimePoints >= 1000) return 'silver';
    return 'bronze';
}

Bot Handler:

javascript

client.on('message', async msg => {
    const member = await db.members.findOne({ phone: msg.from.replace('@c.us', '') });
    
    if (!member) {
        // Non-member
        await msg.reply(getNonMemberMessage());
        return;
    }
    
    const text = msg.body.toUpperCase();
    
    switch (text) {
        case '1':
        case 'CEK POIN':
        case 'POIN':
            await msg.reply(getPointsMessage(member));
            break;
            
        case '2':
        case 'TUKAR':
        case 'REDEEM':
            await msg.reply(getRedeemOptionsMessage(member));
            break;
            
        case '3':
        case 'HISTORY':
            await msg.reply(getHistoryMessage(member));
            break;
            
        case '4':
        case 'PROMO':
            await msg.reply(await getMemberPromoMessage(member));
            break;
            
        case '5':
        case 'REFERRAL':
        case 'AJAK':
            await msg.reply(getReferralMessage(member));
            break;
    }
});

Redeem Handler:

javascript

async function handleRedeem(phone, rewardId) {
    const member = await db.members.findOne({ phone });
    const reward = POINTS_CONFIG.rewards.find(r => r.id === rewardId);
    
    if (!reward) {
        return 'Reward tidak ditemukan.';
    }
    
    if (member.points.total < reward.points) {
        return `Poin tidak cukup. Butuh ${reward.points} pts, kamu punya ${member.points.total} pts.`;
    }
    
    // Deduct points
    await db.members.updateOne(
        { phone },
        { 
            $inc: { 'points.total': -reward.points },
            $push: { 
                transactions: {
                    date: new Date(),
                    type: 'redeem',
                    amount: -reward.points,
                    reward: reward.name
                }
            }
        }
    );
    
    // Generate voucher
    const voucher = await generateVoucher(phone, reward);
    
    return getRedemptionSuccessMessage(reward, voucher, member.points.total - reward.points);
}

Referral System

Referral Message:

đŸ‘Ĩ AJAK TEMAN

Hai [NAMA]!

Ajak teman dapet bonus poin! 🎁

Kode referral kamu:
đŸˇī¸ [KODE]

Share link ini:
🔗 wa.me/628xxx?text=DAFTAR%20[KODE]

Bonus:
- Kamu dapat: 200 pts per teman
- Teman dapat: 100 pts welcome bonus

Progress:
✅ 3 teman sudah join (+600 pts)
đŸŽ¯ Target: 5 teman = Bonus 500 pts

Share sekarang! 🚀

Referral Tracking:

javascript

async function processReferral(newMemberPhone, referralCode) {
    // Find referrer
    const referrer = await db.members.findOne({ referralCode });
    
    if (!referrer) {
        return { success: false, message: 'Kode referral tidak valid' };
    }
    
    // Award points to referrer
    await db.members.updateOne(
        { phone: referrer.phone },
        { 
            $inc: { 'points.total': 200, referralCount: 1 },
            $push: {
                transactions: {
                    date: new Date(),
                    type: 'referral',
                    amount: 200,
                    note: `Referral: ${newMemberPhone}`
                }
            }
        }
    );
    
    // Notify referrer
    await sendWhatsApp(referrer.phone,
        `🎉 Temanmu baru join pakai kode kamu!\n\n+200 poin sudah ditambahkan.\nTotal referral: ${referrer.referralCount + 1} orang`
    );
    
    return { success: true, referrerId: referrer.phone };
}

Automated Notifications

Points Expiring Soon:

javascript

// Cron: Check every day
cron.schedule('0 10 * * *', async () => {
    const expiringMembers = await db.members.find({
        'points.expiring.date': {
            $lte: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000) // 7 days
        },
        'points.expiring.amount': { $gt: 0 }
    });
    
    for (const member of expiringMembers) {
        await sendWhatsApp(member.phone,
            `âš ī¸ [NAMA], ${member.points.expiring.amount} poin akan expired tanggal ${member.points.expiring.date}!\n\nTukar sekarang sebelum hangus! Ketik TUKAR`
        );
    }
});

Birthday Automation:

javascript

// Cron: Check every day at 8 AM
cron.schedule('0 8 * * *', async () => {
    const today = new Date();
    const todayStr = `${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;
    
    const birthdayMembers = await db.members.find({
        birthday: { $regex: todayStr }
    });
    
    for (const member of birthdayMembers) {
        const voucher = await generateBirthdayVoucher(member);
        await sendWhatsApp(member.phone, getBirthdayMessage(member, voucher));
    }
});

Best Practices

DO ✅

- Easy point checking (1 keyword)
- Clear tier benefits
- Reminders before points expire
- Birthday automation
- Simple redemption process

DON'T ❌

- Complicated redemption
- Points expire without notice
- No tier progress visibility
- Boring rewards
- Ignore member milestones

FAQ

Bagaimana encourage member engagement?

Gamification! Progress bars, tier challenges, limited-time bonus points, leaderboards.

Points ratio yang ideal?

1-2% of purchase value. Rp 100k belanja = 100-200 pts. Sesuaikan dengan margin bisnis.


Kesimpulan

Loyalty bot = Repeat purchases!

Without LoyaltyWith Loyalty Bot
One-time buyersRepeat customers
No engagementActive members
Price-sensitiveValue-loyal

Setup Loyalty Bot →


Artikel Terkait