CS Otomatis WA untuk Info Tracking Pengiriman

Setup CS otomatis WhatsApp untuk cek resi dan tracking pengiriman. Customer bisa lacak paket sendiri tanpa tanya CS!

CS Otomatis WA
CS Otomatis WA

"Paket saya sudah sampai mana?" — Pertanyaan paling sering!

Daripada jawab satu-satu, setup tracking otomatis supaya customer bisa cek sendiri!


Masalah Tracking Manual

đŸ˜Ģ Chat masuk: "Resi saya gimana?"
đŸ˜Ģ CS harus cek manual
đŸ˜Ģ Copy paste hasil tracking
đŸ˜Ģ Repeat 50x sehari
đŸ˜Ģ Waktu habis untuk ini

Solusi: Auto Tracking Bot

Customer: "Cek resi JNE1234567890"
    ↓
Bot: Auto query ke API tracking
    ↓
Bot: "đŸ“Ļ Status: Dalam pengiriman
     📍 Terakhir: Hub Jakarta
     📅 Estimasi: Besok"

Template Response Tracking

Keyword Trigger:

Trigger: resi, tracking, lacak, cek paket, paket saya

Response:
"đŸ“Ļ CEK STATUS PENGIRIMAN

Kirim nomor resi kamu dengan format:
CEK [NOMOR RESI]

Contoh: CEK JNE1234567890

Atau kirim nomor order:
ORDER [NOMOR ORDER]

Contoh: ORDER #12345"

Hasil Tracking (Dalam Pengiriman):

đŸ“Ļ STATUS PENGIRIMAN

Order: #[NOMOR]
Resi: [RESI]
Kurir: [KURIR]

📍 Status: DALAM PENGIRIMAN

Timeline:
✅ 15 Jan 09:00 - Picked up
✅ 15 Jan 14:00 - Hub Jakarta
✅ 16 Jan 08:00 - Hub Surabaya
🔄 16 Jan 10:00 - Out for delivery

📅 Estimasi: Hari ini!

Track real-time: [LINK]

Hasil Tracking (Delivered):

✅ PAKET SUDAH DITERIMA!

Order: #[NOMOR]
Resi: [RESI]

đŸ“Ļ Diterima oleh: [NAMA PENERIMA]
📅 Waktu: [TANGGAL JAM]

Gimana produknya? 
Semoga suka ya! 💕

Ada masalah dengan paket?
Reply KOMPLAIN untuk bantuan.

Resi Tidak Ditemukan:

❌ RESI TIDAK DITEMUKAN

Nomor resi "[RESI]" tidak ditemukan.

Kemungkinan:
- Resi belum terinput di sistem kurir
- Salah ketik nomor resi
- Kurir berbeda

Coba:
1. Cek ulang nomor resi
2. Tunggu 1-2 jam jika baru dikirim
3. Reply CS untuk bantuan manual

Implementasi dengan API Tracking

Pakai RajaOngkir:

javascript

const axios = require('axios');

async function trackPackage(courier, resi) {
    try {
        const response = await axios.post(
            'https://api.rajaongkir.com/basic/waybill',
            { waybill: resi, courier: courier },
            { headers: { key: 'YOUR_API_KEY' } }
        );
        
        return response.data.rajaongkir.result;
    } catch (error) {
        return null;
    }
}

// Bot handler
client.on('message', async msg => {
    const text = msg.body.toUpperCase();
    
    if (text.startsWith('CEK ')) {
        const resi = text.replace('CEK ', '').trim();
        const courier = detectCourier(resi);
        
        if (!courier) {
            await msg.reply('Kurir tidak terdeteksi. Kirim dengan format: CEK JNE [RESI]');
            return;
        }
        
        const result = await trackPackage(courier, resi);
        
        if (result) {
            await msg.reply(formatTrackingResult(result));
        } else {
            await msg.reply(resiNotFoundMessage(resi));
        }
    }
});

function detectCourier(resi) {
    if (resi.startsWith('JNE') || resi.length === 16) return 'jne';
    if (resi.startsWith('JP') || resi.length === 13) return 'jnt';
    if (resi.includes('SICEPAT')) return 'sicepat';
    // Add more patterns...
    return null;
}

Pakai Binderbyte:

javascript

async function trackWithBinderbyte(courier, resi) {
    const response = await axios.get(
        `https://api.binderbyte.com/v1/track`,
        {
            params: {
                api_key: 'YOUR_API_KEY',
                courier: courier,
                awb: resi
            }
        }
    );
    
    return response.data;
}

Tracking by Order Number

javascript

// Customer cek pakai nomor order
client.on('message', async msg => {
    const text = msg.body.toUpperCase();
    
    if (text.startsWith('ORDER ')) {
        const orderNum = text.replace('ORDER ', '').replace('#', '');
        
        // Cari di database
        const order = await db.orders.findOne({ orderNumber: orderNum });
        
        if (!order) {
            await msg.reply('Order tidak ditemukan. Pastikan nomor order benar.');
            return;
        }
        
        if (!order.resi) {
            await msg.reply(`Order #${orderNum} belum dikirim. Status: ${order.status}`);
            return;
        }
        
        // Track pakai resi
        const tracking = await trackPackage(order.courier, order.resi);
        await msg.reply(formatTrackingResult(tracking, order));
    }
});

Proactive Tracking Updates

javascript

// Kirim update otomatis saat status berubah
async function checkAndNotifyTracking() {
    const shippedOrders = await db.orders.find({
        status: 'shipped',
        delivered: false
    });
    
    for (const order of shippedOrders) {
        const tracking = await trackPackage(order.courier, order.resi);
        const currentStatus = tracking.delivery_status.status;
        
        // Jika status berubah
        if (currentStatus !== order.lastTrackingStatus) {
            // Update database
            await db.orders.update(order.id, {
                lastTrackingStatus: currentStatus
            });
            
            // Notify customer
            if (currentStatus === 'DELIVERED') {
                await sendDeliveredNotification(order);
            } else if (currentStatus === 'OUT_FOR_DELIVERY') {
                await sendOutForDeliveryNotification(order);
            }
        }
    }
}

// Run setiap 2 jam
cron.schedule('0 */2 * * *', checkAndNotifyTracking);

Multi-Courier Support

Kurir yang didukung:

✅ JNE (REG, YES, OKE)
✅ J&T Express
✅ SiCepat
✅ AnterAja
✅ Ninja Express
✅ Pos Indonesia
✅ TIKI
✅ Wahana
✅ Lion Parcel
✅ ID Express

FAQ Bot Tracking

Resi Baru (Belum Ada Data):

â„šī¸ RESI BARU

Resi [RESI] baru diinput.
Data tracking belum tersedia.

Biasanya butuh 2-4 jam untuk update.
Coba cek lagi nanti ya!

Set reminder? Reply REMIND

Paket Tertahan:

âš ī¸ PAKET TERTAHAN

Resi: [RESI]
Status: TERTAHAN di [LOKASI]

Kemungkinan penyebab:
- Alamat tidak lengkap
- Penerima tidak di tempat
- Masalah customs (internasional)

Action:
- Cek alamat di order
- Hubungi kurir: [NOMOR KURIR]
- Atau reply CS untuk bantuan

Tips Tracking Bot

1. Cache Results

javascript

const trackingCache = new Map();
const CACHE_TTL = 30 * 60 * 1000; // 30 menit

async function getTracking(courier, resi) {
    const cacheKey = `${courier}-${resi}`;
    const cached = trackingCache.get(cacheKey);
    
    if (cached && Date.now() - cached.time < CACHE_TTL) {
        return cached.data;
    }
    
    const result = await trackPackage(courier, resi);
    trackingCache.set(cacheKey, { data: result, time: Date.now() });
    
    return result;
}

2. Detect Courier Automatically

Pattern recognition:
- JNE: 12-16 digit, start with JN/JO/JP
- J&T: JP + 12 digit
- SiCepat: 12-15 digit, mixed
- Dll
Selalu sertakan link tracking langsung:
- JNE: jne.co.id/tracking/[RESI]
- J&T: jet.co.id/track/[RESI]
- SiCepat: sicepat.com/checkAwb/[RESI]

FAQ

Berapa biaya API tracking?

RajaOngkir starter gratis (limited). Pro mulai Rp 150k/bulan. Binderbyte ada free tier juga.

Bisa realtime?

Tidak 100% realtime. Data dari kurir update periodik (1-4 jam). Caching recommended.

Bagaimana jika API down?

Sediakan fallback: "Maaf, sistem tracking sedang maintenance. Cek manual di [LINK]"


Kesimpulan

Tracking bot = Kurangi pertanyaan repetitif!

ManualDengan Bot
CS cek satu-satuCustomer self-service
50 chat/hari0 chat (auto)
Slow responseInstant

Let customers track themselves!

Setup Tracking Bot →


Artikel Terkait