Bot Jualan Multi Produk: Kelola 100+ Item
Cara kelola bot jualan WhatsApp dengan ratusan produk. Kategori, search, filter. Efisien untuk katalog besar!
Punya 100+ produk? Tidak mungkin tampilkan semua di satu pesan!
Butuh sistem katalog yang terorganisir supaya customer mudah cari dan bot tetap responsif.
Tantangan Multi Produk
❌ 1 pesan dengan 100 produk = Spam
❌ Customer scroll panjang = Malas
❌ Search manual = Tidak efisien
❌ Update 1-1 = CapekSolusi: Katalog Terstruktur
✅ Kategori & sub-kategori
✅ Search by keyword
✅ Filter (harga, ukuran, warna)
✅ Pagination
✅ Quick code untuk repeat orderStruktur Katalog
📦 KATALOG [TOKO]
Pilih kategori:
1️⃣ 👕 Fashion Pria (45 item)
2️⃣ 👗 Fashion Wanita (62 item)
3️⃣ 👟 Sepatu (38 item)
4️⃣ 👜 Tas & Aksesoris (25 item)
5️⃣ 🆕 New Arrival (12 item)
6️⃣ 🔥 Best Seller (10 item)
Ketik angka untuk pilih kategori.
Atau ketik: CARI [nama produk]Sub-kategori:
👕 FASHION PRIA
Sub-kategori:
1️⃣ Kaos (18 item)
2️⃣ Kemeja (12 item)
3️⃣ Jaket (8 item)
4️⃣ Celana (7 item)
Ketik angka untuk lihat produk.
Atau BACK untuk kembali.List Produk (Paginated):
👕 KAOS PRIA (Hal 1/3)
1. KP001 - Kaos Polos Basic
💰 Rp 75.000 | Size: S-XL
2. KP002 - Kaos Oversize Premium
💰 Rp 120.000 | Size: M-XXL
3. KP003 - Kaos Graphic Vintage
💰 Rp 95.000 | Size: S-XL
4. KP004 - Kaos Polo Classic
💰 Rp 150.000 | Size: S-XL
5. KP005 - Kaos Henley
💰 Rp 110.000 | Size: M-XL
━━━━━━━━━━━━━━━━━━━━━
Ketik kode (KP001) untuk detail.
NEXT untuk halaman berikutnya.
BACK untuk kembali.Detail Produk:
📦 KP001 - Kaos Polos Basic
[Gambar Produk]
💰 Harga: Rp 75.000
📏 Size: S, M, L, XL
🎨 Warna: Hitam, Putih, Navy, Abu
📦 Bahan: Cotton Combed 30s
Stok:
- Hitam: S(5) M(8) L(10) XL(3)
- Putih: S(3) M(6) L(8) XL(2)
- Navy: S(0) M(4) L(5) XL(1)
- Abu: S(4) M(7) L(6) XL(4)
Order? Ketik:
ORDER KP001 [WARNA] [SIZE] [QTY]
Contoh: ORDER KP001 Hitam L 2Fitur Search
Basic Search:
Customer: "CARI kaos hitam"
Bot: 🔍 HASIL PENCARIAN: "kaos hitam"
Ditemukan 5 produk:
1. KP001 - Kaos Polos Basic (Hitam)
💰 Rp 75.000
2. KP002 - Kaos Oversize (Hitam)
💰 Rp 120.000
3. KP003 - Kaos Graphic (Hitam)
💰 Rp 95.000
[2 produk lainnya...]
Ketik kode untuk detail.Advanced Filter:
Customer: "FILTER harga <100000"
Bot: 🔍 FILTER: Harga di bawah Rp 100.000
Ditemukan 28 produk:
[List produk dengan harga < 100k]
Filter lain:
- FILTER size XL
- FILTER warna hitam
- FILTER kategori kaosImplementasi
Database Schema:
javascript
// Products collection
{
code: 'KP001',
name: 'Kaos Polos Basic',
description: 'Kaos polos bahan cotton combed 30s',
price: 75000,
category: 'fashion-pria',
subcategory: 'kaos',
tags: ['kaos', 'polos', 'basic', 'cotton'],
variants: [
{ color: 'Hitam', sizes: { S: 5, M: 8, L: 10, XL: 3 } },
{ color: 'Putih', sizes: { S: 3, M: 6, L: 8, XL: 2 } },
// ...
],
images: ['url1', 'url2'],
active: true,
createdAt: Date,
updatedAt: Date
}
// Categories collection
{
id: 'fashion-pria',
name: 'Fashion Pria',
icon: '👕',
parent: null, // atau parent category ID
order: 1
}Category Navigation:
javascript
const userState = new Map(); // Track user navigation state
client.on('message', async msg => {
const text = msg.body.trim();
const state = userState.get(msg.from) || { level: 'main' };
// Main menu
if (text.toUpperCase() === 'KATALOG') {
const categories = await db.categories.find({ parent: null });
await msg.reply(formatMainCatalog(categories));
userState.set(msg.from, { level: 'categories' });
return;
}
// Category selection
if (state.level === 'categories' && /^\d+$/.test(text)) {
const categories = await db.categories.find({ parent: null });
const selected = categories[parseInt(text) - 1];
const subcats = await db.categories.find({ parent: selected.id });
if (subcats.length > 0) {
await msg.reply(formatSubcategories(selected, subcats));
userState.set(msg.from, { level: 'subcategories', category: selected.id });
} else {
const products = await db.products.find({ category: selected.id });
await msg.reply(formatProductList(products, 1));
userState.set(msg.from, { level: 'products', category: selected.id, page: 1 });
}
return;
}
// Pagination
if (text.toUpperCase() === 'NEXT' && state.level === 'products') {
const products = await db.products.find({ category: state.category });
const nextPage = state.page + 1;
await msg.reply(formatProductList(products, nextPage));
userState.set(msg.from, { ...state, page: nextPage });
return;
}
// Back navigation
if (text.toUpperCase() === 'BACK') {
// Go back one level
// ...
}
});Search Function:
javascript
async function searchProducts(query) {
// Full-text search atau simple contains
const results = await db.products.find({
$or: [
{ name: { $regex: query, $options: 'i' } },
{ tags: { $in: [query.toLowerCase()] } },
{ code: { $regex: query, $options: 'i' } }
],
active: true
}).limit(10);
return results;
}
// Bot handler
if (text.toUpperCase().startsWith('CARI ')) {
const query = text.substring(5);
const results = await searchProducts(query);
if (results.length > 0) {
await msg.reply(formatSearchResults(query, results));
} else {
await msg.reply(`Tidak ditemukan produk untuk "${query}". Coba keyword lain!`);
}
}Quick Order by Code:
javascript
// ORDER KP001 Hitam L 2
if (text.toUpperCase().startsWith('ORDER ')) {
const parts = text.substring(6).split(' ');
const [code, color, size, qty] = parts;
const product = await db.products.findOne({ code: code.toUpperCase() });
if (!product) {
await msg.reply('Kode produk tidak ditemukan.');
return;
}
// Validate variant & stock
const variant = product.variants.find(v =>
v.color.toLowerCase() === color.toLowerCase()
);
if (!variant || !variant.sizes[size] || variant.sizes[size] < parseInt(qty)) {
await msg.reply('Varian/stok tidak tersedia.');
return;
}
// Add to cart or process order
await addToCart(msg.from, {
productCode: code,
productName: product.name,
color,
size,
quantity: parseInt(qty),
price: product.price
});
await msg.reply(`✅ Ditambahkan ke keranjang!\n${product.name} (${color}, ${size}) x ${qty}`);
}Tips Multi Produk
1. Use Product Codes
Setiap produk punya kode unik:
KP001, KP002, SP001, TS001...
Lebih mudah untuk order & reference.2. Smart Categorization
Jangan terlalu dalam (max 3 level):
Kategori → Sub-kategori → Produk
Terlalu dalam = customer bingung.3. Popular/Featured Section
Shortcut untuk produk populer:
- Best Seller
- New Arrival
- Promo
Customer tidak perlu browse semua.4. Bulk Update
javascript
// Update harga semua produk di kategori
await db.products.updateMany(
{ category: 'fashion-pria' },
{ $mul: { price: 1.1 } } // Naik 10%
);FAQ
Berapa produk max yang bisa di-handle?
Tidak ada limit teknis. Dengan pagination dan search, 1000+ produk bisa di-handle dengan baik.
Bagaimana update produk banyak sekaligus?
Import dari Excel/CSV untuk bulk update. Atau admin panel untuk edit.
Perlu gambar untuk setiap produk?
Recommended untuk fashion/visual products. Untuk B2B/technical, text cukup.
Kesimpulan
Multi produk = Butuh struktur!
| Tanpa Struktur | Dengan Struktur |
|---|---|
| Spam 1 pesan | Kategori rapi |
| Susah cari | Search & filter |
| Customer bingung | Easy navigation |
Organize catalog, help customers find!