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!
"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 iniSolusi: 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 manualImplementasi 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 ExpressFAQ 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 REMINDPaket 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 bantuanTips 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
- Dll3. Provide Direct Link
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!
| Manual | Dengan Bot |
|---|---|
| CS cek satu-satu | Customer self-service |
| 50 chat/hari | 0 chat (auto) |
| Slow response | Instant |
Let customers track themselves!