Cara Balas WA Otomatis untuk Customer Service
Tutorial auto reply WhatsApp untuk customer service. FAQ otomatis, ticket system, escalation. Panduan lengkap CS automation!
CS automation = Happy customers + Happy team!
Auto reply untuk customer service bukan mengganti manusia, tapi membantu handle pertanyaan umum agar tim bisa fokus ke yang kompleks.
CS Automation Flow
📊 FLOW IDEAL:
TIER 1 - BOT (Otomatis):
- Greeting & menu
- FAQ umum
- Status order
- Info produk basic
→ Solve 60-70% inquiries
TIER 2 - AGENT (Semi-manual):
- Pertanyaan spesifik
- Komplain ringan
- Custom requests
→ Handle 20-25%
TIER 3 - SUPERVISOR (Manual):
- Komplain berat
- Refund/return
- Escalation
→ Handle 5-10%Setup CS Auto Reply
Menu Utama CS:
📞 CUSTOMER SERVICE [BRAND]
Hai Kak [NAMA]! 👋
Ada yang bisa kami bantu?
Pilih topik:
1️⃣ Cek Status Pesanan
2️⃣ Informasi Produk
3️⃣ Pengiriman & Ongkir
4️⃣ Pembayaran
5️⃣ Komplain/Retur
6️⃣ Pertanyaan Lain
Ketik angka atau langsung ceritakan
masalahmu ya kak! 😊
⏰ CS Online: 09:00-21:00 WIBSub-Menu Cek Pesanan:
📦 CEK STATUS PESANAN
Untuk cek pesanan, kirim:
No. Order (contoh: ORD-123456)
ATAU
No. HP yang dipakai saat order
Kami akan carikan info pesananmu! 🔍Response Status Pesanan:
📦 STATUS PESANAN
Order: #ORD-123456
📊 Status: DALAM PENGIRIMAN
📋 Detail:
━━━━━━━━━━━━━━━━━━━━
📅 Order: 15 Feb 2026
📦 Produk: Facial Wash x 2
💰 Total: Rp 178.000
━━━━━━━━━━━━━━━━━━━━
🚚 Pengiriman:
Kurir: JNE REG
Resi: 1234567890
Status: Di perjalanan
📅 Estimasi tiba: 18-19 Feb 2026
Track: jne.co.id/track/1234567890
Ada pertanyaan lain? 😊FAQ Automation
FAQ Database:
javascript
const faqDatabase = [
{
keywords: ['berapa lama', 'estimasi', 'kapan sampai', 'pengiriman'],
category: 'shipping',
answer: `🚚 ESTIMASI PENGIRIMAN
Jabodetabek: 1-2 hari
Jawa: 2-3 hari
Luar Jawa: 3-5 hari
Indonesia Timur: 5-7 hari
*Tergantung kurir yang dipilih dan kondisi.`
},
{
keywords: ['cara bayar', 'pembayaran', 'transfer', 'rekening'],
category: 'payment',
answer: `💳 METODE PEMBAYARAN
1. Transfer Bank:
• BCA: 1234567890
• Mandiri: 0987654321
a.n. PT [BRAND]
2. E-Wallet:
• GoPay
• OVO
• DANA
3. Virtual Account (otomatis)
Setelah bayar, kirim bukti ya!`
},
{
keywords: ['retur', 'return', 'tukar', 'kembalikan'],
category: 'return',
answer: `🔄 KEBIJAKAN RETUR
Retur diterima jika:
✅ Produk cacat/rusak dari kami
✅ Produk tidak sesuai pesanan
✅ Lapor dalam 3x24 jam
Caranya:
1. Foto produk & kemasan
2. Kirim ke CS dengan no order
3. Tunggu konfirmasi
4. Kirim balik (ongkir kami tanggung)
Ada yang mau di-retur kak?`
}
];
function findFAQAnswer(message) {
const lowerMessage = message.toLowerCase();
for (const faq of faqDatabase) {
const matchCount = faq.keywords.filter(k =>
lowerMessage.includes(k)
).length;
if (matchCount >= 1) {
return faq.answer;
}
}
return null;
}Ticket System
Create Ticket Otomatis:
javascript
async function createTicket(customerId, category, message) {
const ticket = {
id: generateTicketId(),
customerId,
category,
message,
status: 'open',
priority: determinePriority(category, message),
createdAt: new Date(),
assignedTo: null
};
await db.tickets.insertOne(ticket);
// Auto-assign based on category
await autoAssignTicket(ticket);
return ticket;
}
function determinePriority(category, message) {
// High priority keywords
const urgentKeywords = ['urgent', 'segera', 'darurat', 'refund', 'hilang'];
const isUrgent = urgentKeywords.some(k =>
message.toLowerCase().includes(k)
);
if (isUrgent) return 'high';
if (category === 'complaint') return 'medium';
return 'normal';
}Ticket Confirmation:
🎫 TIKET DIBUAT
Hai Kak [NAMA],
Pertanyaanmu sudah kami terima!
📋 No. Tiket: #CS-20260217-001
📂 Kategori: [KATEGORI]
⏰ Dibuat: 17 Feb 2026, 14:30
Tim kami akan merespons dalam:
- Normal: 1-2 jam
- High priority: 30 menit
💡 Tips:
Sebutkan no tiket jika follow up ya!
Terima kasih kesabarannya 🙏Escalation Flow
Auto Escalation:
javascript
async function handleMessage(from, message) {
// Check for escalation triggers
if (shouldEscalate(message)) {
return await escalateToHuman(from, message);
}
// Try FAQ first
const faqAnswer = findFAQAnswer(message);
if (faqAnswer) {
return await sendMessage(from, faqAnswer);
}
// Try order status
const orderNumber = extractOrderNumber(message);
if (orderNumber) {
const status = await getOrderStatus(orderNumber);
return await sendMessage(from, formatOrderStatus(status));
}
// No match - offer menu or escalate
return await sendMessage(from, getDefaultMenu());
}
function shouldEscalate(message) {
const escalationTriggers = [
'bicara dengan manusia',
'mau komplain',
'cs manusia',
'operator',
'manager',
'sangat kecewa',
'tidak terima',
'mau refund'
];
const lowerMessage = message.toLowerCase();
return escalationTriggers.some(t => lowerMessage.includes(t));
}
async function escalateToHuman(from, message) {
// Create high priority ticket
const ticket = await createTicket(from, 'escalation', message);
// Notify available agent
await notifyAgents(ticket);
// Inform customer
return await sendMessage(from, `
🙋 MENGHUBUNGKAN KE TIM KAMI
Hai kak, kami paham kakak butuh
bantuan lebih lanjut.
Tiket: #${ticket.id}
Tim kami akan menghubungi dalam
5-10 menit.
Mohon tunggu ya kak 🙏
`);
}Working Hours Handling
Office Hours Check:
javascript
function isWithinWorkingHours() {
const now = new Date();
const hour = now.getHours();
const day = now.getDay();
// Senin-Sabtu, 09:00-21:00
if (day === 0) return false; // Minggu libur
if (hour < 9 || hour >= 21) return false;
return true;
}
async function handleOutOfHours(from, message) {
// Simpan pesan untuk follow up
await saveForFollowUp(from, message);
return await sendMessage(from, `
⏰ DI LUAR JAM OPERASIONAL
Hai kak! Saat ini di luar jam kerja.
Jam CS Online:
Senin-Sabtu: 09:00-21:00 WIB
Pertanyaanmu sudah kami catat dan akan
direspons begitu CS online.
📋 Sementara, coba cek:
1️⃣ FAQ - ketik FAQ
2️⃣ Status Order - ketik CEK [NO ORDER]
Atau tunggu balasan dari tim kami ya!
`);
}Agent Dashboard Integration
Notify Agent:
javascript
// Kirim notifikasi ke agent via dashboard/app
async function notifyAgents(ticket) {
const availableAgents = await getAvailableAgents(ticket.category);
for (const agent of availableAgents) {
// Push notification
await sendPushNotification(agent.id, {
title: 'New Ticket',
body: `#${ticket.id} - ${ticket.category}`,
data: ticket
});
// In-app notification
await createNotification(agent.id, ticket);
}
// Also send to dashboard WebSocket
io.to('agents').emit('new-ticket', ticket);
}
// Agent claim ticket
async function claimTicket(agentId, ticketId) {
await db.tickets.updateOne(
{ id: ticketId, assignedTo: null },
{
$set: {
assignedTo: agentId,
status: 'in_progress',
claimedAt: new Date()
}
}
);
// Notify customer
const ticket = await db.tickets.findOne({ id: ticketId });
await sendMessage(ticket.customerId, `
✅ TIM KAMI SIAP MEMBANTU
Hai kak!
[NAMA AGENT] dari tim CS akan
membantu kakak.
Silakan sampaikan keluhannya ya!
`);
}Metrics & Reporting
javascript
async function getCSMetrics(startDate, endDate) {
const tickets = await db.tickets.find({
createdAt: { $gte: startDate, $lte: endDate }
}).toArray();
// First response time
const avgFirstResponse = calculateAvgFirstResponse(tickets);
// Resolution time
const avgResolution = calculateAvgResolution(tickets);
// Bot resolution rate
const botResolved = tickets.filter(t => t.resolvedBy === 'bot').length;
const botResolutionRate = (botResolved / tickets.length * 100).toFixed(1);
// By category
const byCategory = groupBy(tickets, 'category');
return {
totalTickets: tickets.length,
avgFirstResponse: `${avgFirstResponse} menit`,
avgResolution: `${avgResolution} jam`,
botResolutionRate: `${botResolutionRate}%`,
byCategory,
satisfactionScore: await getCSAT(startDate, endDate)
};
}Best Practices
DO ✅
- Bot handle FAQ, manusia handle kompleks
- Clear escalation path
- Quick first response
- Track semua metrics
- Regular FAQ update
- Follow up setelah resolvedDON'T ❌
- Force bot untuk semua
- No human fallback
- Slow escalation
- Ignore metrics
- Stale FAQ
- No closure/follow upFAQ
Berapa persen yang bisa di-automate?
60-70% inquiries bisa handle bot untuk FAQ, status order, info umum.
Customer tidak suka bot?
Yang penting solve masalah. Bot yang helpful lebih baik dari manusia yang slow.
Perlu berapa agent?
Tergantung volume. Rule of thumb: 1 agent untuk 50-100 daily conversations.
Kesimpulan
CS automation = Efficiency + Quality!
| Full Manual | Smart Automation |
|---|---|
| Slow response | Instant for FAQ |
| Overwhelmed agents | Focused agents |
| Inconsistent | Consistent |
| Expensive | Cost-effective |