CS Otomatis WA dengan Sentiment Analysis

Setup CS otomatis WhatsApp dengan sentiment analysis. Detect customer mood, prioritize angry customers, personalize response!

CS Otomatis WA dengan Sentiment Analysis
CS Otomatis WA dengan Sentiment Analysis

Detect mood customer sebelum terlambat!

Sentiment analysis memungkinkan bot mengenali emosi customer dan respond appropriately - prioritaskan yang marah, apresiasi yang senang.


Apa itu Sentiment Analysis?

🧠 DEFINISI:

Sentiment Analysis = AI yang menganalisis
teks untuk mendeteksi emosi/mood

INPUT: "Kok lama banget sih pesanannya!"
OUTPUT: Sentiment = NEGATIF (frustrated)

INPUT: "Wah bagus banget barangnya!"
OUTPUT: Sentiment = POSITIF (happy)

INPUT: "Kapan ya barang sampai?"
OUTPUT: Sentiment = NETRAL (inquiry)

Manfaat Sentiment Analysis

📊 BENEFITS:

1. PRIORITIZE URGENT
   • Customer marah → Eskalasi cepat
   • Customer frustrated → Extra attention

2. PERSONALIZE RESPONSE
   • Positif → Apresiasi & upsell
   • Negatif → Empati & solusi
   • Netral → Standard response

3. PREVENT ESCALATION
   • Detect frustration early
   • Intervene sebelum marah

4. MEASURE SATISFACTION
   • Track sentiment trend
   • Identify problem areas

Sentiment Categories

😊 POSITIF:
- "Bagus banget!"
- "Terima kasih, puas!"
- "Recommended seller!"
- "Fast response, mantap!"

😐 NETRAL:
- "Kapan barang sampai?"
- "Ada warna lain?"
- "Berapa harganya?"
- "Bisa COD tidak?"

😠 NEGATIF:
- "Lama banget!"
- "Kok belum sampai sih!"
- "Barangnya rusak!"
- "Mengecewakan!"

🚨 URGENT/CRISIS:
- "Mau refund!"
- "Saya akan report!"
- "Penipuan!"
- Kata-kata kasar

Response by Sentiment

Positive Response:

😊 DETECTED: POSITIF

Customer: "Wah barangnya bagus banget, 
sesuai ekspektasi! Packing juga rapi. 
Puas deh belanja di sini!"

BOT RESPONSE:
━━━━━━━━━━━━━━━━━━━━
Waaah, senangnya dengar kakak puas! 🥰

Terima kasih banyak untuk feedback-nya!
Ini bikin tim kami makin semangat! 💪

Btw, kalau kakak suka [PRODUK], 
mungkin tertarik juga dengan [PRODUK LAIN]?

🎁 Special untuk kakak:
Diskon 15% untuk next order!
Kode: THANKYOU15

Ditunggu order berikutnya ya! 💕
━━━━━━━━━━━━━━━━━━━━

ACTION:
✅ Tag sebagai happy customer
✅ Request review
✅ Offer cross-sell

Neutral Response:

😐 DETECTED: NETRAL

Customer: "Kapan ya pesanan saya sampai?
Order kemarin sore."

BOT RESPONSE:
━━━━━━━━━━━━━━━━━━━━
Hai Kak! 👋

Untuk cek status pesanan, boleh 
kirim nomor ordernya?

Contoh: INV/20260217/xxx

Nanti kami bantu cek statusnya ya! 📦
━━━━━━━━━━━━━━━━━━━━

ACTION:
✅ Standard inquiry handling
✅ No escalation needed

Negative Response:

😠 DETECTED: NEGATIF

Customer: "Udah seminggu barang belum 
sampai! Gimana sih ini, payah!"

BOT RESPONSE:
━━━━━━━━━━━━━━━━━━━━
Mohon maaf banget Kak! 🙏

Kami paham kakak pasti kecewa.
Ini bukan pengalaman yang seharusnya.

Boleh kirim nomor order?
Tim kami akan PRIORITASKAN pengecekan
dan kabari update dalam 30 menit!

Sekali lagi mohon maaf ya kak 😔
━━━━━━━━━━━━━━━━━━━━

ACTION:
⚠️ Flag sebagai priority
⚠️ Notify CS team
⚠️ Follow up dalam 30 menit

Urgent/Crisis Response:

🚨 DETECTED: URGENT/CRISIS

Customer: "INI PENIPUAN! BARANG GAK 
SESUAI, MAU REFUND SEKARANG! 
KALAU GAK SAYA REPORT!"

BOT RESPONSE:
━━━━━━━━━━━━━━━━━━━━
Kak, mohon maaf atas situasi ini! 🙏

Kami sangat serius menangani 
keluhan kakak.

SUPERVISOR kami akan LANGSUNG 
menghubungi dalam 15 MENIT.

Mohon jangan khawatir, 
kami akan pastikan masalah ini 
terselesaikan dengan baik.

Sambil menunggu, boleh kirim:
- Foto produk yang diterima
- Nomor order

Terima kasih atas kesabarannya 🙏
━━━━━━━━━━━━━━━━━━━━

ACTION:
🚨 IMMEDIATE ESCALATION
🚨 Alert supervisor
🚨 Log crisis ticket
🚨 15-minute SLA

Implementation

Sentiment Detection:

javascript

const Sentiment = require('sentiment');
const sentiment = new Sentiment();

// Indonesian word additions
const indonesianWords = {
    'bagus': 3,
    'mantap': 3,
    'puas': 3,
    'recommended': 3,
    'kecewa': -3,
    'payah': -4,
    'lama': -2,
    'rusak': -3,
    'penipuan': -5,
    'refund': -2,
    'marah': -4,
    'report': -3
};

sentiment.registerLanguage('id', {
    labels: indonesianWords
});

function analyzeSentiment(text) {
    const result = sentiment.analyze(text, { language: 'id' });
    
    let category;
    if (result.score >= 3) {
        category = 'positive';
    } else if (result.score <= -3) {
        category = 'negative';
    } else if (result.score <= -5 || hasUrgentKeywords(text)) {
        category = 'urgent';
    } else {
        category = 'neutral';
    }
    
    return {
        score: result.score,
        category,
        words: result.words
    };
}

function hasUrgentKeywords(text) {
    const urgentKeywords = [
        'penipuan', 'report', 'polisi', 'refund sekarang',
        'tipu', 'bohong', 'lawyer', 'hukum'
    ];
    
    return urgentKeywords.some(keyword => 
        text.toLowerCase().includes(keyword)
    );
}

Response Router:

javascript

async function handleWithSentiment(phone, message) {
    const sentiment = analyzeSentiment(message);
    
    // Log sentiment
    await db.conversations.updateOne(
        { phone },
        { 
            $push: { 
                sentimentHistory: {
                    message,
                    sentiment: sentiment.category,
                    score: sentiment.score,
                    timestamp: new Date()
                }
            }
        }
    );
    
    // Route based on sentiment
    switch (sentiment.category) {
        case 'urgent':
            await escalateImmediately(phone, message);
            return getUrgentResponse(message);
            
        case 'negative':
            await flagForFollowUp(phone, 'high');
            await notifyCS(phone, sentiment);
            return getNegativeResponse(message);
            
        case 'positive':
            await tagAsHappyCustomer(phone);
            return getPositiveResponse(message);
            
        default:
            return getNeutralResponse(message);
    }
}

Escalation Logic:

javascript

async function escalateImmediately(phone, message) {
    // Create urgent ticket
    const ticket = await db.tickets.insert({
        phone,
        message,
        priority: 'urgent',
        status: 'escalated',
        sla: 15, // 15 minutes
        createdAt: new Date()
    });
    
    // Alert all available supervisors
    const supervisors = await db.staff.find({
        role: 'supervisor',
        status: 'online'
    });
    
    for (const supervisor of supervisors) {
        await sendAlert(supervisor.phone, {
            type: 'URGENT_ESCALATION',
            ticket: ticket.id,
            customer: phone,
            message: message.substring(0, 100)
        });
    }
    
    // Set auto-reminder if not resolved
    setTimeout(async () => {
        const updatedTicket = await db.tickets.findById(ticket.id);
        if (updatedTicket.status === 'escalated') {
            await sendSLABreachAlert(ticket);
        }
    }, 15 * 60 * 1000); // 15 minutes
}

Sentiment Dashboard

📊 SENTIMENT DASHBOARD

Today's Sentiment Distribution:
━━━━━━━━━━━━━━━━━━━━
😊 Positive: 45% ████████████░░░░░░░░
😐 Neutral:  38% ██████████░░░░░░░░░░
😠 Negative: 15% ████░░░░░░░░░░░░░░░░
🚨 Urgent:   2%  █░░░░░░░░░░░░░░░░░░░

Trend (vs Yesterday):
- Positive: ↑ +5%
- Negative: ↓ -3%

⚠️ Active Urgent Cases: 2
━━━━━━━━━━━━━━━━━━━━
#TKT-001 - Refund demand (10 min ago)
#TKT-002 - Product complaint (25 min ago)

Top Negative Keywords Today:
1. "lama" (15x)
2. "belum sampai" (12x)
3. "rusak" (5x)

→ Possible issue: Shipping delays

Best Practices

DO ✅

- Respond sesuai sentiment
- Prioritize negative/urgent
- Escalate early, not late
- Track sentiment trends
- Learn from negative feedback
- Appreciate positive customers

DON'T ❌

- Same response for all sentiment
- Ignore negative signals
- Delay escalation
- Argue with angry customers
- Dismiss concerns
- Over-promise to angry customers

FAQ

Seberapa akurat sentiment analysis?

80-90% untuk cases jelas. Sarcasm dan bahasa campuran lebih challenging.

Perlu AI atau cukup keyword?

Keyword untuk basic, AI untuk lebih akurat. Kombinasi keduanya ideal.

Bagaimana handle false positive?

Human review untuk cases yang di-escalate. Feedback loop untuk improve model.


Kesimpulan

Sentiment-aware CS = Better experience!

Without SentimentWith Sentiment
Same response allContextual response
Miss angry signalsEarly detection
ReactiveProactive
GenericPersonalized

Setup Sentiment Analysis →


Artikel Terkait