Cara Balas WA Otomatis dengan Menu Pilihan
Tutorial buat auto reply WhatsApp dengan menu interaktif. Numbered menu, button reply, easy navigation. Panduan lengkap!
Menu pilihan = Customer tidak bingung!
Dengan menu yang jelas, customer tinggal pilih angka atau opsi. Bot langsung respond sesuai pilihan. Lebih efisien!
Jenis Menu Auto Reply
1️⃣ NUMBERED MENU
Customer reply dengan angka (1, 2, 3)
2️⃣ KEYWORD MENU
Customer reply dengan kata (HARGA, ORDER)
3️⃣ BUTTON MENU (WA Business API)
Customer tap tombol langsung
4️⃣ LIST MENU (WA Business API)
Dropdown list dengan opsiTemplate Menu Numbered
Main Menu:
🏠 SELAMAT DATANG!
Hai! Terima kasih sudah menghubungi [TOKO].
Silakan pilih menu:
1️⃣ Lihat Katalog Produk
2️⃣ Cek Harga
3️⃣ Cara Order
4️⃣ Cek Status Pesanan
5️⃣ Promo & Diskon
6️⃣ Hubungi Admin
0️⃣ Kembali ke Menu Utama
Balas dengan ANGKA pilihanmu! 😊Sub-Menu Katalog:
📦 KATALOG PRODUK
Pilih kategori:
1️⃣ Fashion Pria
2️⃣ Fashion Wanita
3️⃣ Aksesoris
4️⃣ Sepatu
5️⃣ New Arrival
6️⃣ Best Seller
0️⃣ Kembali ke Menu Utama
Balas dengan angka!Sub-Menu Harga:
💰 CEK HARGA
Pilih cara cek:
1️⃣ Lihat Price List
2️⃣ Cek Harga Produk Tertentu
3️⃣ Harga Grosir/Reseller
4️⃣ Kalkulator Ongkir
0️⃣ Kembali ke Menu UtamaImplementasi Numbered Menu
javascript
// State management untuk track posisi menu
const userMenuState = new Map();
const menus = {
main: {
text: `🏠 MENU UTAMA
1️⃣ Katalog Produk
2️⃣ Cek Harga
3️⃣ Cara Order
4️⃣ Status Pesanan
5️⃣ Hubungi Admin
0️⃣ Keluar
Balas dengan angka!`,
options: {
'1': 'katalog',
'2': 'harga',
'3': 'order',
'4': 'status',
'5': 'admin',
'0': 'exit'
}
},
katalog: {
text: `📦 KATALOG
1️⃣ Fashion Pria
2️⃣ Fashion Wanita
3️⃣ Aksesoris
0️⃣ Kembali
Pilih kategori!`,
options: {
'1': 'katalog_pria',
'2': 'katalog_wanita',
'3': 'katalog_aksesoris',
'0': 'main'
}
}
// ... more menus
};
async function handleMenuNavigation(from, input) {
const currentState = userMenuState.get(from) || 'main';
const currentMenu = menus[currentState];
// Check if input is valid option
const nextState = currentMenu.options[input];
if (nextState) {
// Handle special actions
if (nextState === 'admin') {
return { type: 'escalate', message: 'Menghubungkan ke admin...' };
}
if (nextState === 'exit') {
userMenuState.delete(from);
return { type: 'exit', message: 'Terima kasih! Chat kapan saja ya 😊' };
}
// Navigate to next menu
userMenuState.set(from, nextState);
return { type: 'menu', message: menus[nextState].text };
} else {
// Invalid input
return {
type: 'error',
message: 'Pilihan tidak valid. Silakan pilih angka yang tersedia.'
};
}
}Template Menu Keyword
Main Menu:
🏠 SELAMAT DATANG!
Silakan ketik keyword:
📦 KATALOG - Lihat produk
💰 HARGA - Cek harga
🛒 ORDER - Cara pesan
📍 TRACK - Lacak pesanan
💬 ADMIN - Chat admin
Atau langsung tanya apa saja! 😊Advantage Keyword Menu:
✅ Lebih natural
✅ Customer bisa langsung ketik
✅ Tidak perlu hafal nomor
✅ Bisa combine dengan free textButton Menu (WA Business API)
Send Buttons:
javascript
// Interactive buttons (max 3 buttons)
async function sendButtonMenu(to) {
await client.sendMessage(to, {
text: 'Hai! Ada yang bisa dibantu?',
buttons: [
{ id: 'btn_katalog', body: '📦 Katalog' },
{ id: 'btn_harga', body: '💰 Harga' },
{ id: 'btn_admin', body: '💬 Admin' }
]
});
}
// Handle button response
client.on('message', async (msg) => {
if (msg.type === 'button_response') {
const buttonId = msg.selectedButtonId;
switch (buttonId) {
case 'btn_katalog':
await sendKatalog(msg.from);
break;
case 'btn_harga':
await sendPriceList(msg.from);
break;
case 'btn_admin':
await escalateToAdmin(msg.from);
break;
}
}
});List Menu:
javascript
// Interactive list (more options)
async function sendListMenu(to) {
await client.sendMessage(to, {
text: 'Pilih kategori produk:',
buttonText: 'Lihat Kategori',
sections: [
{
title: 'Fashion',
rows: [
{ id: 'cat_pria', title: 'Fashion Pria', description: '45 produk' },
{ id: 'cat_wanita', title: 'Fashion Wanita', description: '62 produk' }
]
},
{
title: 'Aksesoris',
rows: [
{ id: 'cat_sepatu', title: 'Sepatu', description: '38 produk' },
{ id: 'cat_tas', title: 'Tas', description: '25 produk' }
]
}
]
});
}Multi-Level Menu Flow
MAIN MENU
│
├── 1. Katalog
│ ├── 1.1 Fashion Pria
│ │ ├── 1.1.1 Kaos
│ │ ├── 1.1.2 Kemeja
│ │ └── 1.1.3 Celana
│ ├── 1.2 Fashion Wanita
│ └── 1.3 Aksesoris
│
├── 2. Harga
│ ├── 2.1 Price List
│ └── 2.2 Kalkulator
│
├── 3. Order
│ ├── 3.1 Cara Order
│ └── 3.2 Payment Info
│
└── 0. Kembali/KeluarBest Practices Menu
1. Keep It Simple
❌ TERLALU BANYAK:
12 pilihan di satu menu = Overwhelming
✅ IDEAL:
5-7 pilihan max per level
Group related items2. Clear Navigation
SELALU SEDIAKAN:
- 0 = Kembali ke menu sebelumnya
- Cara ke menu utama
- Exit option
Customer tidak boleh "stuck"3. Confirm Selection
User pilih: 1
Bot: "Kamu pilih: Katalog Produk
[Tampilkan sub-menu katalog]
Ketik 0 untuk kembali ke menu utama."
Konfirmasi supaya tidak salah navigasi.4. Handle Invalid Input
User: "abc"
Bot: "Hmm, pilihan tidak valid.
Silakan pilih angka 1-5 atau ketik 0 untuk kembali.
[Tampilkan menu lagi]"
Jangan diam, kasih guidance!Timeout & Reset
javascript
// Reset menu state setelah 30 menit inactive
const MENU_TIMEOUT = 30 * 60 * 1000;
function checkMenuTimeout(from) {
const lastActive = userLastActive.get(from);
if (lastActive && Date.now() - lastActive > MENU_TIMEOUT) {
userMenuState.delete(from);
return true; // Timeout, reset ke main
}
userLastActive.set(from, Date.now());
return false;
}FAQ
Berapa level menu yang ideal?
Max 3 level. Lebih dalam = customer frustasi. Kalau butuh lebih, pertimbangkan search/filter.
Numbered atau keyword?
Numbered lebih simple untuk user awam. Keyword lebih flexible. Bisa kombinasi keduanya!
Bagaimana jika user ketik bebas?
Handle dengan fallback: coba parse intent, jika tidak bisa → tampilkan menu lagi atau hubungkan ke admin.
Kesimpulan
Menu = Guide customer journey!
| Tanpa Menu | Dengan Menu |
|---|---|
| Customer bingung | Jelas mau apa |
| Free text parsing hard | Structured input |
| Banyak typo | Angka/button simple |
Structure your conversation!