Auto Reply WA untuk Membership & Loyalty
Setup auto reply WhatsApp untuk program membership dan loyalty. Cek poin, redeem reward, tier status otomatis!
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 trackingTemplate 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 processDON'T â
- Complicated redemption
- Points expire without notice
- No tier progress visibility
- Boring rewards
- Ignore member milestonesFAQ
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 Loyalty | With Loyalty Bot |
|---|---|
| One-time buyers | Repeat customers |
| No engagement | Active members |
| Price-sensitive | Value-loyal |