Bot WA AI untuk Product Recommendation

Cara membuat bot AI WhatsApp untuk rekomendasi produk. Personalisasi, upsell, cross-sell otomatis. Tutorial lengkap!

Bot WA AI untuk Product Recommendation
Bot WA AI untuk Product Recommendation

AI recommendation = Personal shopping assistant!

Bot AI bisa pahami kebutuhan, rekomendasikan produk tepat, dan upsell/cross-sell secara natural - seperti sales terbaik kamu.


Jenis Recommendation

📊 TIPE REKOMENDASI:

1. NEED-BASED
   "Mau cari baju kondangan"
   → Rekomendasikan dress formal

2. PREFERENCE-BASED
   "Suka warna pastel"
   → Filter produk warna pastel

3. HISTORY-BASED
   Pernah beli skincare
   → Rekomendasikan skincare lain

4. COLLABORATIVE
   "Customer serupa juga beli..."
   → Based on similar users

5. UPSELL
   Pilih produk A
   → "Ada versi premium lho!"

6. CROSS-SELL
   Beli dress
   → "Cocok dipadukan dengan..."

Product Catalog Structure

javascript

const productSchema = {
    id: String,
    name: String,
    category: String,
    subcategory: String,
    price: Number,
    description: String,
    features: [String],
    tags: [String],           // ["casual", "formal", "summer"]
    colors: [String],
    sizes: [String],
    occasions: [String],      // ["kondangan", "kerja", "casual"]
    targetAudience: String,   // "wanita dewasa", "remaja"
    relatedProducts: [String], // IDs for cross-sell
    premiumVersion: String,    // ID for upsell
    rating: Number,
    reviewCount: Number,
    stock: Number,
    imageUrl: String
};

// Example
const products = [
    {
        id: 'dress-001',
        name: 'Dress Brukat Elegan',
        category: 'dress',
        subcategory: 'formal',
        price: 350000,
        description: 'Dress brukat dengan detail elegan, cocok untuk acara formal',
        features: ['Bahan brukat premium', 'Furing dalam', 'Resleting belakang'],
        tags: ['formal', 'elegan', 'brukat', 'kondangan'],
        colors: ['navy', 'maroon', 'black'],
        sizes: ['S', 'M', 'L', 'XL'],
        occasions: ['kondangan', 'pesta', 'wisuda'],
        relatedProducts: ['clutch-001', 'heels-001'],
        premiumVersion: 'dress-001-premium',
        rating: 4.8,
        reviewCount: 156
    }
];

AI Recommendation System

System Prompt:

javascript

const RECOMMENDATION_PROMPT = `Kamu adalah personal shopping assistant AI untuk [BRAND].

TUGAS:
1. Pahami kebutuhan customer
2. Tanya detail jika perlu (occasion, budget, preference)
3. Rekomendasikan 2-3 produk yang paling cocok
4. Jelaskan kenapa produk itu cocok
5. Tawarkan cross-sell yang relevan

PRODUCT CATALOG:
{CATALOG_JSON}

CARA MEREKOMENDASIKAN:
- Match occasion dengan product.occasions
- Match budget dengan price range
- Match style preference dengan tags
- Prioritaskan rating tinggi
- Sebutkan harga dan keunggulan

FORMAT REKOMENDASI:
"Berdasarkan kebutuhan kakak, aku rekomendasikan:

1️⃣ [Nama Produk]
   💰 Rp [Harga]
   ✨ [Alasan cocok]
   
2️⃣ [Nama Produk]
   💰 Rp [Harga]
   ✨ [Alasan cocok]

Mau lihat detail yang mana kak?"

UPSELL (jika ada premium version):
"Btw, ada juga versi premium dengan [fitur tambahan] 
cuma selisih Rp [X] lho kak!"

CROSS-SELL (setelah pilih):
"Dress ini cocok banget dipadukan dengan [related product]!"`;

Recommendation Engine:

javascript

async function getProductRecommendations(userContext) {
    const { 
        occasion, 
        budget, 
        preferences, 
        previousPurchases,
        currentCart 
    } = userContext;
    
    // 1. Filter by basic criteria
    let candidates = await db.products.find({
        stock: { $gt: 0 },
        ...(occasion && { occasions: occasion }),
        ...(budget && { price: { $lte: budget } })
    }).toArray();
    
    // 2. Score each product
    const scoredProducts = candidates.map(product => {
        let score = 0;
        
        // Preference match
        if (preferences?.colors) {
            const colorMatch = product.colors.some(c => 
                preferences.colors.includes(c)
            );
            if (colorMatch) score += 20;
        }
        
        if (preferences?.style) {
            const styleMatch = product.tags.some(t => 
                preferences.style.includes(t)
            );
            if (styleMatch) score += 15;
        }
        
        // Rating boost
        score += product.rating * 10;
        
        // Popularity boost
        score += Math.min(product.reviewCount / 10, 20);
        
        // Budget fit (prefer products that use 60-80% of budget)
        if (budget) {
            const budgetRatio = product.price / budget;
            if (budgetRatio >= 0.6 && budgetRatio <= 0.8) {
                score += 15;
            }
        }
        
        // Avoid already purchased
        if (previousPurchases?.includes(product.id)) {
            score -= 50;
        }
        
        return { ...product, score };
    });
    
    // 3. Sort by score and return top N
    scoredProducts.sort((a, b) => b.score - a.score);
    
    return scoredProducts.slice(0, 5);
}

// Get cross-sell recommendations
async function getCrossSellProducts(productId, limit = 3) {
    const product = await db.products.findOne({ id: productId });
    
    if (product?.relatedProducts?.length) {
        return await db.products.find({
            id: { $in: product.relatedProducts }
        }).limit(limit).toArray();
    }
    
    // Fallback: similar category
    return await db.products.find({
        category: product.category,
        id: { $ne: productId }
    }).sort({ rating: -1 }).limit(limit).toArray();
}

// Get upsell product
async function getUpsellProduct(productId) {
    const product = await db.products.findOne({ id: productId });
    
    if (product?.premiumVersion) {
        return await db.products.findOne({ id: product.premiumVersion });
    }
    
    // Fallback: higher-priced in same category
    return await db.products.findOne({
        category: product.category,
        price: { $gt: product.price },
        id: { $ne: productId }
    });
}

Conversational Recommendation

javascript

async function handleRecommendationChat(userId, userMessage, context) {
    const userContext = await getUserContext(userId);
    
    // Build prompt with context
    const recommendations = await getProductRecommendations(userContext);
    
    const productContext = recommendations.map(p => 
        `- ${p.name}: Rp ${p.price.toLocaleString()}, ${p.tags.join(', ')}, rating ${p.rating}`
    ).join('\n');
    
    const response = await openai.chat.completions.create({
        model: 'gpt-4o',
        messages: [
            {
                role: 'system',
                content: `${RECOMMENDATION_PROMPT}

TOP MATCHING PRODUCTS:
${productContext}

USER CONTEXT:
- Occasion: ${userContext.occasion || 'not specified'}
- Budget: ${userContext.budget || 'not specified'}
- Preferences: ${JSON.stringify(userContext.preferences || {})}`
            },
            ...context.conversationHistory,
            { role: 'user', content: userMessage }
        ],
        tools: recommendationTools
    });
    
    return processRecommendationResponse(response, userId);
}

Example Conversations

Need-Based:

👤: Hai, lagi cari dress buat kondangan

🤖: Hai Kak! Mau cari dress kondangan ya 😊

Biar aku bisa rekomendasikan yang pas, 
boleh tau:

1️⃣ Budget range-nya berapa kak?
2️⃣ Prefer warna apa?
3️⃣ Kondangannya outdoor atau indoor?

---

👤: Budget 500k, warna soft gitu, indoor

🤖: Oke budget 500k, warna soft, indoor! ✨

Aku rekomendasikan:

1️⃣ *Dress Brukat Elegan* - Navy Soft
   💰 Rp 350.000
   ✨ Best seller! Bahan brukat premium,
      cocok banget untuk kondangan indoor.
   ⭐ 4.8/5 (156 reviews)

2️⃣ *Midi Dress Satin* - Dusty Pink
   💰 Rp 425.000  
   ✨ Tampilan mewah dengan bahan satin
      yang jatuh cantik. Elegant!
   ⭐ 4.7/5 (89 reviews)

3️⃣ *A-Line Dress Floral* - Sage
   💰 Rp 299.000
   ✨ Motif bunga subtle, feminine banget!
      Budget friendly tapi tetap stylish.
   ⭐ 4.6/5 (203 reviews)

Mau lihat detail yang mana kak? 
Atau ada preference lain?

Upsell:

👤: Yang nomor 1 deh, dress brukat

🤖: Great choice kak! Dress Brukat Elegan 
memang best seller kami! 💕

Btw, ada juga versi *Premium* dengan:
✨ Payet handmade
✨ Inner dress silk
✨ Free alterasi

Cuma selisih Rp 100k jadi Rp 450.000.
Worth it untuk acara spesial!

Mau yang regular atau premium kak?

Cross-Sell:

👤: Yang regular aja

🤖: Siap kak! Dress Brukat Elegan - Navy ✅

Biar makin sempurna, dress ini cocok 
dipadukan dengan:

👜 *Clutch Bag Pesta* - Gold
   💰 Rp 150.000 (hemat 20% bundle!)
   
👠 *Heels Block 5cm* - Nude
   💰 Rp 275.000

Mau sekalian kak? 
Atau langsung checkout dress-nya aja?

Analytics

javascript

// Track recommendation performance
async function trackRecommendation(userId, recommendedProducts, selectedProduct) {
    await db.recommendationLogs.insertOne({
        userId,
        recommendedProducts: recommendedProducts.map(p => p.id),
        selectedProduct: selectedProduct?.id,
        converted: !!selectedProduct,
        timestamp: new Date()
    });
}

// Get recommendation analytics
router.get('/analytics/recommendations', async (req, res) => {
    const stats = await db.recommendationLogs.aggregate([
        {
            $group: {
                _id: null,
                totalRecommendations: { $sum: 1 },
                conversions: { $sum: { $cond: ['$converted', 1, 0] } }
            }
        }
    ]).toArray();
    
    const conversionRate = (stats[0].conversions / stats[0].totalRecommendations * 100).toFixed(1);
    
    res.json({
        ...stats[0],
        conversionRate: `${conversionRate}%`
    });
});

Best Practices

DO ✅

- Tanya kebutuhan dulu
- Limit 3-5 recommendations
- Jelaskan kenapa cocok
- Natural upsell/cross-sell
- Track conversion
- Learn from data

DON'T ❌

- Spam banyak produk
- Pushy upsell
- Generic recommendations
- Ignore preferences
- No personalization
- Hard-sell approach

FAQ

Berapa produk ideal direkomendasikan?

3 produk optimal. Lebih dari 5 = overwhelming, kurang dari 2 = kurang pilihan.

Kapan timing upsell yang tepat?

Setelah customer pilih produk, bukan di awal. Natural dan tidak pushy.


Kesimpulan

AI Recommendation = Higher conversion!

No RecommendationAI Recommendation
Self-browseGuided shopping
Low conversion+30-50% conversion
No upsellNatural upsell

Setup AI Recommendations →


Artikel Terkait