Cara Balas WA Otomatis untuk Lead Generation
Tutorial auto reply WhatsApp untuk lead generation. Capture leads, qualify otomatis, nurture sequence. Panduan lengkap!
WhatsApp = Lead generation machine!
Auto reply yang didesain untuk lead gen bisa capture, qualify, dan nurture leads secara otomatis 24/7.
Lead Gen Flow
📊 FLOW:
1. ATTRACT
Traffic → WhatsApp
(Ads, website, QR code)
2. CAPTURE
Bot collect info
(Nama, kebutuhan, budget)
3. QUALIFY
Bot scoring lead
(Hot, warm, cold)
4. NURTURE
Auto follow up sequence
(Education, offers)
5. CONVERT
Handover ke sales
(Hot leads only)Lead Capture Bot
Initial Greeting:
👋 HAI, SELAMAT DATANG!
Terima kasih sudah menghubungi [BRAND]!
Sebelum lanjut, boleh kenalan dulu? 😊
Siapa nama kakak?Capture Flow:
javascript
const leadCaptureFlow = {
steps: [
{
id: 'name',
message: 'Siapa nama kakak?',
validate: (input) => input.length >= 2,
errorMessage: 'Mohon masukkan nama yang valid ya kak'
},
{
id: 'interest',
message: (data) => `Hai Kak ${data.name}! 👋\n\nKakak tertarik dengan apa?\n\n1️⃣ Produk A\n2️⃣ Produk B\n3️⃣ Produk C\n4️⃣ Belum tau, mau tanya-tanya`,
validate: (input) => ['1', '2', '3', '4'].includes(input),
transform: (input) => {
const map = { '1': 'Produk A', '2': 'Produk B', '3': 'Produk C', '4': 'Exploring' };
return map[input];
}
},
{
id: 'budget',
message: 'Budget kakak untuk ini sekitar berapa?\n\n1️⃣ < Rp 1 juta\n2️⃣ Rp 1-5 juta\n3️⃣ Rp 5-10 juta\n4️⃣ > Rp 10 juta\n5️⃣ Belum tentukan',
validate: (input) => ['1', '2', '3', '4', '5'].includes(input),
transform: (input) => {
const map = {
'1': '<1M',
'2': '1-5M',
'3': '5-10M',
'4': '>10M',
'5': 'TBD'
};
return map[input];
}
},
{
id: 'timeline',
message: 'Rencananya kapan mau mulai pakai?\n\n1️⃣ Secepatnya\n2️⃣ Dalam 1 bulan\n3️⃣ 1-3 bulan\n4️⃣ Masih riset dulu',
validate: (input) => ['1', '2', '3', '4'].includes(input),
transform: (input) => {
const map = {
'1': 'ASAP',
'2': '1_month',
'3': '1-3_months',
'4': 'researching'
};
return map[input];
}
},
{
id: 'email',
message: 'Terakhir, boleh minta email kakak?\n(Untuk kirim info lengkap)\n\nAtau ketik SKIP jika tidak mau',
validate: (input) => input === 'SKIP' || /\S+@\S+\.\S+/.test(input),
transform: (input) => input === 'SKIP' ? null : input
}
]
};Lead Saved Confirmation:
✅ TERIMA KASIH, KAK [NAMA]!
Data kakak sudah kami terima 🎉
📋 Ringkasan:
━━━━━━━━━━━━━━━━━━━━
Nama: [NAMA]
Tertarik: [INTEREST]
Budget: [BUDGET]
Timeline: [TIMELINE]
━━━━━━━━━━━━━━━━━━━━
Tim kami akan menghubungi dalam
waktu dekat dengan info yang lebih
sesuai kebutuhan kakak!
Sementara itu, ada pertanyaan?
Atau ketik KATALOG untuk lihat produk!Lead Scoring
Auto Scoring:
javascript
function scoreLead(leadData) {
let score = 0;
const tags = [];
// Budget scoring
const budgetScores = {
'<1M': 10,
'1-5M': 20,
'5-10M': 30,
'>10M': 40,
'TBD': 5
};
score += budgetScores[leadData.budget] || 0;
// Timeline scoring
const timelineScores = {
'ASAP': 40,
'1_month': 30,
'1-3_months': 20,
'researching': 10
};
score += timelineScores[leadData.timeline] || 0;
// Interest scoring
if (leadData.interest !== 'Exploring') {
score += 10;
tags.push('specific_interest');
}
// Email provided
if (leadData.email) {
score += 10;
tags.push('email_provided');
}
// Determine category
let category;
if (score >= 70) {
category = 'hot';
tags.push('priority');
} else if (score >= 40) {
category = 'warm';
} else {
category = 'cold';
}
return { score, category, tags };
}Lead Routing:
javascript
async function routeLead(lead, scoring) {
// Save lead dengan scoring
lead.score = scoring.score;
lead.category = scoring.category;
lead.tags = scoring.tags;
await db.leads.insertOne(lead);
// Route berdasarkan category
switch (scoring.category) {
case 'hot':
// Immediate notification ke sales
await notifySalesTeam(lead, 'hot');
// Schedule call dalam 1 jam
await scheduleFollowUp(lead, '1_hour');
break;
case 'warm':
// Notify sales untuk follow up besok
await notifySalesTeam(lead, 'warm');
// Start nurture sequence
await startNurtureSequence(lead, 'warm_sequence');
break;
case 'cold':
// Start long-term nurture
await startNurtureSequence(lead, 'cold_sequence');
break;
}
}Nurture Sequences
Hot Lead Sequence:
javascript
const hotLeadSequence = [
{
delay: '1_hour',
message: (lead) => `
Hai Kak ${lead.name}!
Ini [NAMA] dari tim [BRAND].
Saya lihat kakak tertarik dengan ${lead.interest}
dengan budget ${lead.budget}.
Kebetulan kami ada promo khusus yang cocok!
📞 Boleh saya hubungi sebentar untuk
jelaskan lebih detail?
Reply dengan waktu yang nyaman ya kak!
`
},
{
delay: '4_hours',
condition: (lead) => !lead.responded,
message: (lead) => `
Hai Kak ${lead.name},
Mungkin tadi sibuk ya 😊
Info aja, promo yang saya mention tadi
berlaku sampai [TANGGAL].
Kalau mau, bisa langsung reply aja
kapan waktu yang enak untuk ngobrol!
`
},
{
delay: '1_day',
condition: (lead) => !lead.responded,
message: (lead) => `
Kak ${lead.name}, ini info ${lead.interest}
yang mungkin berguna:
📄 [LINK DOKUMEN/KATALOG]
Ada pertanyaan? Langsung reply aja ya!
`
}
];Warm Lead Sequence:
javascript
const warmLeadSequence = [
{
delay: '1_day',
message: (lead) => `
Hai Kak ${lead.name}! 👋
Terima kasih sudah tertarik dengan [BRAND]!
Kami punya beberapa resource yang mungkin
membantu kakak memutuskan:
📖 Panduan Lengkap ${lead.interest}
👉 [LINK]
Ada pertanyaan? Reply saja ya!
`
},
{
delay: '3_days',
message: (lead) => `
Hai Kak ${lead.name}!
FYI, banyak customer kami dengan kebutuhan
serupa sudah merasakan manfaatnya:
⭐ "[Testimoni singkat]" - [Nama Customer]
Mau tau lebih lanjut gimana mereka
sukses dengan ${lead.interest}?
`
},
{
delay: '7_days',
message: (lead) => `
Kak ${lead.name}, ada promo khusus
untuk kakak yang masih pertimbangkan:
🎁 DISKON 15%
Kode: WELCOME15
Berlaku 3 hari saja!
Mau claim? Reply YES!
`
}
];Qualification Questions
BANT Framework:
javascript
// Budget, Authority, Need, Timeline
const bantQuestions = {
budget: {
question: 'Budget yang dialokasikan untuk ini berapa kak?',
followUp: 'Kalau boleh tau, budget ini sudah approved atau masih perlu approval?'
},
authority: {
question: 'Untuk keputusan ini, kakak yang decide sendiri atau ada yang lain yang terlibat?',
followUp: 'Boleh tau siapa lagi yang perlu terlibat dalam keputusan ini?'
},
need: {
question: 'Bisa ceritakan lebih detail masalah yang ingin diselesaikan?',
followUp: 'Kalau masalah ini tidak diselesaikan, impact-nya seperti apa kak?'
},
timeline: {
question: 'Target implementasinya kapan kak?',
followUp: 'Ada deadline tertentu yang harus dipenuhi?'
}
};
async function qualifyLead(leadId, answers) {
const scores = {
budget: scoreBudgetAnswer(answers.budget),
authority: scoreAuthorityAnswer(answers.authority),
need: scoreNeedAnswer(answers.need),
timeline: scoreTimelineAnswer(answers.timeline)
};
const totalScore = Object.values(scores).reduce((a, b) => a + b, 0);
const qualified = totalScore >= 70;
await db.leads.updateOne(
{ id: leadId },
{
$set: {
bantScores: scores,
totalScore,
qualified,
qualifiedAt: qualified ? new Date() : null
}
}
);
return { scores, totalScore, qualified };
}Lead Handover to Sales
Auto Handover:
javascript
async function handoverToSales(lead) {
// Create task untuk sales
const task = await crm.createTask({
title: `Follow up HOT lead: ${lead.name}`,
description: buildLeadSummary(lead),
priority: 'high',
dueDate: addHours(new Date(), 2),
assignedTo: await getAvailableSalesRep()
});
// Notify sales via WA/Slack
await notifySalesRep(task.assignedTo, lead);
// Inform lead
await sendWhatsApp(lead.phone, `
Hai Kak ${lead.name}!
Tim sales kami, [NAMA SALES], akan
menghubungi kakak dalam waktu dekat.
📞 ${getSalesPhone(task.assignedTo)}
Atau kakak bisa langsung WA ke nomor
tersebut jika lebih urgent ya!
`);
}
function buildLeadSummary(lead) {
return `
📋 LEAD SUMMARY
━━━━━━━━━━━━━━━━━━━━
Nama: ${lead.name}
Phone: ${lead.phone}
Email: ${lead.email || 'N/A'}
Interest: ${lead.interest}
Budget: ${lead.budget}
Timeline: ${lead.timeline}
Score: ${lead.score} (${lead.category.toUpperCase()})
Conversation History:
${lead.conversationSummary}
`;
}Lead Source Tracking
javascript
// Track dari mana lead datang
async function trackLeadSource(phone, source, campaign = null) {
const leadSource = {
phone,
source, // 'facebook_ads', 'google_ads', 'website', 'referral', 'organic'
campaign,
landingPage: getLastLandingPage(phone),
firstContact: new Date(),
utmParams: getUTMParams(phone)
};
await db.leadSources.insertOne(leadSource);
}
// Attribution reporting
async function getLeadAttribution(startDate, endDate) {
const pipeline = [
{
$match: {
firstContact: { $gte: startDate, $lte: endDate }
}
},
{
$group: {
_id: '$source',
count: { $sum: 1 },
converted: {
$sum: { $cond: ['$converted', 1, 0] }
}
}
}
];
return await db.leadSources.aggregate(pipeline).toArray();
}Best Practices
DO ✅
- Keep capture form short
- Score leads immediately
- Personalize nurture messages
- Fast follow up for hot leads
- Track source attribution
- A/B test sequencesDON'T ❌
- Too many questions
- Generic follow ups
- Slow response to hot leads
- Ignore cold leads completely
- No tracking
- Same message to everyoneFAQ
Berapa pertanyaan ideal untuk capture?
3-5 pertanyaan. Lebih dari itu, completion rate turun drastis.
Follow up berapa kali sebelum give up?
5-7 touchpoints dalam 2-4 minggu untuk warm leads.
Hot lead harus difollow up dalam berapa lama?
Maksimal 1 jam. Speed to lead sangat penting untuk conversion.
Kesimpulan
Auto reply + Lead gen = Sales machine!
| Manual Lead Gen | Automated |
|---|---|
| Miss leads | Capture 24/7 |
| Slow follow up | Instant |
| Inconsistent | Systematic |
| No scoring | Auto qualified |