Cara Balas WA Otomatis untuk Lead Generation

Tutorial auto reply WhatsApp untuk lead generation. Capture leads, qualify otomatis, nurture sequence. Panduan lengkap!

Cara Balas WA Otomatis untuk Lead Generation
Cara Balas WA Otomatis untuk Lead Generation

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 sequences

DON'T ❌

- Too many questions
- Generic follow ups
- Slow response to hot leads
- Ignore cold leads completely
- No tracking
- Same message to everyone

FAQ

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 GenAutomated
Miss leadsCapture 24/7
Slow follow upInstant
InconsistentSystematic
No scoringAuto qualified

Setup Lead Gen Bot →


Artikel Terkait