Bot WhatsApp customer service kosmetik menggunakan Baileys + n8n + Ollama (LLama3) + PostgreSQL.
Customer (WhatsApp) → Baileys Bot → n8n Webhook → PostgreSQL (Produk DB) → Ollama LLM → Reply
- 🌸 Rekomendasi skincare berdasarkan masalah kulit (jerawat, kusam, sensitif, dll)
- 💄 Pencarian produk by brand (Wardah, Emina, Skintific, Clinique, dll)
- 💰 Info harga, promo, dan stok
- 🧠 Session memory per customer (mengingat intent & tipe kulit)
- 👋 Greeting handler otomatis
- 🤖 Balasan natural via Ollama LLM
- 📦 20+ kategori produk (sunscreen, serum, cleanser, moisturizer, dll)
| Komponen | Minimum |
|---|---|
| Node.js | 18+ |
| n8n | 2.14.2+ |
| PostgreSQL | 14+ |
| Ollama | Terbaru + model llama3 |
Pastikan Ollama sudah install model:
ollama pull llama3
ollama servenpm installpsql -U postgres -f db/postgres_dummy.sqlpsql -U postgres -d kosmetik_db -f db/postgres_dummy_1000_branded.sqlpsql -U postgres -d kosmetik_db -f db/migrate_add_columns.sqlSELECT COUNT(*) FROM produk; -- harus ~1000+
SELECT COUNT(DISTINCT brand) FROM produk; -- harus ~25+ brand
SELECT * FROM produk LIMIT 5; -- cek kolom brand, harga_promo, stok adaN8N_WEBHOOK=http://localhost:5678/webhook/whatsapp-v2
WA_PHONE=6281234567890- Buka n8n → Workflows → Import from File
- Pilih:
n8n/workflow_full_postgres_2142_ollama_memory.json
- PostgreSQL: Klik node "Load Brands" & "Search Product" → set credential PostgreSQL
- Host:
localhost - Port:
5432 - Database:
kosmetik_db - User/Password: sesuai setup PostgreSQL kamu
- Host:
- Ollama: Klik node "Ollama Reply" → set credential Ollama
- Base URL:
http://localhost:11434
- Base URL:
- Klik Save → Activate workflow
Lihat n8n/manual_node_code.md untuk code setiap node.
# Versi modular (src/)
npm start
# Versi single file
npm run start:baileysScan QR code WhatsApp yang muncul di terminal.
# Test greeting
curl -X POST http://localhost:5678/webhook/whatsapp-v2 \
-H "Content-Type: application/json" \
-d '{"message":"halo kak","from":"test123"}'
# Test cari produk jerawat
curl -X POST http://localhost:5678/webhook/whatsapp-v2 \
-H "Content-Type: application/json" \
-d '{"message":"ada skincare untuk jerawat?","from":"test123"}'
# Test cari brand
curl -X POST http://localhost:5678/webhook/whatsapp-v2 \
-H "Content-Type: application/json" \
-d '{"message":"produk wardah apa aja?","from":"test123"}'
# Test rekomendasi kulit sensitif
curl -X POST http://localhost:5678/webhook/whatsapp-v2 \
-H "Content-Type: application/json" \
-d '{"message":"kulit sensitif pakai apa ya?","from":"test123"}'Chat ke nomor WhatsApp yang terhubung:
kak ada skincare buat kusam?
chatbot-gwen/
├── baileys.js # Bot WA (single file)
├── src/ # Bot WA (modular)
│ ├── app.js
│ ├── config/env.js
│ ├── handlers/messageHandler.js
│ └── services/
│ ├── n8nService.js
│ └── whatsappService.js
├── n8n/ # Workflow n8n
│ ├── workflow_full_postgres_2142_ollama_memory.json ← UTAMA
│ └── manual_node_code.md # Panduan setup manual per node
├── db/ # Database
│ ├── postgres_dummy.sql # Schema + 5 data dummy
│ ├── postgres_dummy_1000_branded.sql # 1000 produk branded
│ └── migrate_add_columns.sql # Migration: brand, harga_promo, stok
├── .env
└── package.json
Load Brands → Brands List
↑ ↓
Webhook → Extract Data → Is Greeting? Session Memory → Normalize → Search DB → Format
↓ YES ↓
Greeting Reply Has Results?
↓ YES ↓ ↓ NO
Respond Greeting Ollama LLM Fallback
↓ ↓
Format Reply → Respond
| Masalah | Solusi |
|---|---|
| Webhook error 404 | Pastikan workflow sudah Activate di n8n |
| "n8n no reply" di console | Cek credential PostgreSQL & Ollama di n8n |
| Ollama timeout | Pastikan ollama serve running, cek http://localhost:11434 |
| Brand tidak terdeteksi | Jalankan db/migrate_add_columns.sql dulu |
| Bot tidak reply di WA | Cek QR scan berhasil, lihat log terminal |