WA Blast untuk Abandoned Cart Recovery

Strategi WA blast untuk recover abandoned cart. Template reminder, timing, incentive. Selamatkan penjualan yang hampir hilang!

WA Blast untuk Abandoned Cart Recovery
WA Blast untuk Abandoned Cart Recovery

70% cart di-abandon. Selamatkan!

Rata-rata 70% shopping cart ditinggalkan sebelum checkout. WA blast bisa recover 10-15% dari cart yang abandoned.


Kenapa Cart Di-Abandon?

📊 ALASAN ABANDON CART:

- 48% - Ongkir terlalu mahal
- 26% - Harus buat akun
- 22% - Checkout terlalu lama
- 18% - Tidak trust website
- 17% - Error/crash
- 16% - Tidak ada payment option
- 15% - Delivery terlalu lama

FIXABLE via WA:
✅ Free ongkir offer
✅ Trust building
✅ Easy checkout via chat
✅ Multiple payment options

Recovery Sequence

📅 ABANDONED CART SEQUENCE:

HOUR 1: Soft reminder
        "Keranjang kakak masih nunggu!"

HOUR 6: Helpful approach
        "Ada yang bisa kami bantu?"

HOUR 24: Scarcity/urgency
         "Stock terbatas, jangan sampai kehabisan!"

HOUR 48: Incentive
         "Diskon 10% khusus untuk checkout!"

DAY 7: Final attempt
       "Last chance sebelum cart expired"

Template Messages

Hour 1 - Soft Reminder:

🛒 KERANJANG KAKAK MENUNGGU!

Hai Kak [NAMA]!

Sepertinya tadi ada yang ketinggalan...

Keranjang belanja kakak:
━━━━━━━━━━━━━━━━━━━━
- [Produk 1] - Rp [HARGA]
- [Produk 2] - Rp [HARGA]
━━━━━━━━━━━━━━━━━━━━
Total: Rp [TOTAL]

Tinggal checkout lho! 🛍️

Lanjut checkout?
👉 [LINK CART]

Ada kendala? Reply aja, kami bantu! 😊

Hour 6 - Helpful:

🤔 ADA YANG BISA DIBANTU?

Hai Kak [NAMA]!

Kami notice kakak belum checkout
[PRODUK] yang tadi.

Mungkin ada pertanyaan?

❓ Bingung pilih ukuran?
❓ Mau tau lebih detail?
❓ Ongkir kemahalan?
❓ Ada kendala pembayaran?

Reply aja, kami dengan senang hati bantu!

Atau langsung checkout:
👉 [LINK CART]

Hour 24 - Scarcity:

⚠️ STOCK TERBATAS!

Hai Kak [NAMA]!

Just info, [PRODUK] di keranjang kakak
stocknya tinggal sedikit!

📦 [PRODUK]:
Stock tersisa: [X] pcs

Sayang kalau kehabisan padahal 
sudah masuk keranjang!

Checkout sekarang sebelum sold out:
👉 [LINK CART]

━━━━━━━━━━━━━━━━━━━━
Total: Rp [TOTAL]
━━━━━━━━━━━━━━━━━━━━

Hour 48 - Incentive:

🎁 SPECIAL UNTUK KAKAK!

Hai Kak [NAMA]!

Kami tau mungkin ada alasan kenapa
belum checkout. So, ini dari kami:

🎉 DISKON 10% untuk keranjang kakak!

Keranjang:
━━━━━━━━━━━━━━━━━━━━
- [Produk 1] - Rp [HARGA]
- [Produk 2] - Rp [HARGA]
━━━━━━━━━━━━━━━━━━━━
Total: ~Rp [TOTAL]~
Setelah diskon: Rp [TOTAL DISKON]
Hemat: Rp [SELISIH]!

🏷️ Kode: COMEBACK10
⏰ Berlaku: 24 jam

Jangan sampai expired ya!
👉 [LINK CART]

Day 7 - Final:

👋 LAST CALL!

Hai Kak [NAMA],

Ini reminder terakhir untuk keranjang kakak.

Setelah ini, keranjang akan di-reset
dan diskon tidak berlaku lagi.

Keranjang:
━━━━━━━━━━━━━━━━━━━━
- [Produk 1] - Rp [HARGA]
- [Produk 2] - Rp [HARGA]
━━━━━━━━━━━━━━━━━━━━

🎁 FINAL OFFER:
- Diskon 15%
- FREE ongkir

Kode: LASTCHANCE
Expired: MALAM INI 23:59

Checkout sekarang:
👉 [LINK CART]

Kalau tidak jadi, tidak apa-apa!
Terima kasih sudah mampir 😊

Variant Templates

Free Shipping Offer:

🚚 FREE ONGKIR untuk checkout!

Hai Kak [NAMA]!

Ongkir jadi halangan?
Kami kasih FREE ONGKIR untuk kakak! 🎉

Keranjang: [PRODUK]
Total: Rp [TOTAL]
Ongkir: ~Rp [ONGKIR]~ FREE!

Kode: FREEONGKIR
Berlaku: 24 jam

👉 [LINK CART]

Social Proof:

🔥 [PRODUK] LAGI LARIS!

Hai Kak [NAMA]!

[PRODUK] di keranjang kakak lagi hot!

📊 Dalam 24 jam terakhir:
- 45 orang juga add to cart
- 23 orang sudah checkout
- Rating: ⭐⭐⭐⭐⭐ (4.9)

Jangan sampai kehabisan ya!

👉 [LINK CART]

Payment Assistance:

💳 BUTUH BANTUAN BAYAR?

Hai Kak [NAMA]!

Checkout jadi kendala?
Kami punya banyak opsi pembayaran:

✅ Transfer Bank (BCA, Mandiri, BNI, BRI)
✅ Virtual Account
✅ E-Wallet (OVO, GoPay, Dana, ShopeePay)
✅ Credit Card
✅ Paylater/Cicilan

Atau mau COD? Bisa!

Keranjang: Rp [TOTAL]

Reply aja kalau butuh bantuan
pilih metode pembayaran! 😊

👉 [LINK CART]

Implementation

Track Abandoned Carts:

javascript

// Detect abandoned cart (no checkout after 1 hour)
async function detectAbandonedCarts() {
    const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);
    
    const abandonedCarts = await db.carts.find({
        updatedAt: { $lte: oneHourAgo },
        status: 'active',
        items: { $exists: true, $ne: [] },
        checkoutAt: { $exists: false },
        recoverySequence: { $exists: false }
    });
    
    for (const cart of abandonedCarts) {
        await startRecoverySequence(cart);
    }
}

async function startRecoverySequence(cart) {
    const sequence = [
        { delay: 0, template: 'cart_reminder_1h' },
        { delay: 5 * 60 * 60 * 1000, template: 'cart_helpful_6h' },
        { delay: 23 * 60 * 60 * 1000, template: 'cart_scarcity_24h' },
        { delay: 47 * 60 * 60 * 1000, template: 'cart_incentive_48h' },
        { delay: 6 * 24 * 60 * 60 * 1000, template: 'cart_final_7d' }
    ];
    
    // Mark cart as in recovery
    await db.carts.updateOne(
        { _id: cart._id },
        { $set: { recoverySequence: { started: new Date(), step: 0 } } }
    );
    
    // Schedule first message
    await scheduleRecoveryMessage(cart, sequence[0]);
}

Stop Sequence on Checkout:

javascript

// When customer checks out, stop recovery
async function onCheckout(cartId) {
    await db.scheduledMessages.deleteMany({
        cartId,
        type: 'cart_recovery'
    });
    
    await db.carts.updateOne(
        { _id: cartId },
        { 
            $set: { 
                status: 'converted',
                checkoutAt: new Date() 
            }
        }
    );
}

Track Recovery Performance:

javascript

async function getRecoveryMetrics(period = 30) {
    const startDate = daysAgo(period);
    
    const metrics = await db.carts.aggregate([
        { $match: { 
            'recoverySequence.started': { $gte: startDate }
        }},
        { $group: {
            _id: '$status',
            count: { $sum: 1 },
            totalValue: { $sum: '$total' }
        }}
    ]);
    
    return {
        abandoned: metrics.find(m => m._id === 'abandoned')?.count || 0,
        recovered: metrics.find(m => m._id === 'converted')?.count || 0,
        recoveryRate: (recovered / abandoned * 100).toFixed(2) + '%',
        recoveredRevenue: metrics.find(m => m._id === 'converted')?.totalValue || 0
    };
}

Best Practices

DO ✅

- Start quickly (within 1 hour)
- Multiple touchpoints (3-5 messages)
- Escalate incentives gradually
- Personalize with cart items
- Make checkout easy (1-click)
- Offer help, not just push
- Stop sequence after checkout

DON'T ❌

- Wait too long to start
- Single message only
- Big discount immediately (margin!)
- Generic messages
- Complicated checkout process
- Ignore why they abandoned
- Keep sending after purchase

Metrics to Track

📊 ABANDONED CART METRICS:

- Abandonment rate
- Recovery rate per sequence step
- Revenue recovered
- Best performing message
- Optimal timing
- Incentive impact
- Channel effectiveness

FAQ

Berapa recovery rate yang realistis?

10-15% adalah target bagus. Top performers bisa 20-25%.

Kapan beri diskon?

Jangan langsung. Reminder dulu (free), baru Hour 48+ beri incentive. Jaga margin!

Berapa banyak message dalam sequence?

3-5 messages optimal. Lebih dari itu jadi spam dan annoying.


Kesimpulan

Don't let carts die!

No RecoveryWith Recovery
70% abandoned55-60% abandoned
Lost revenueRecovered sales
Missed insightsLearned why
No follow-upCustomer care

Recover that revenue!

Setup Cart Recovery →


Artikel Terkait