Proactive Scan
Mencari supplier lebih murah / lebih baik secara proaktif untuk produk yang sedang sehat. Tujuan: optimasi cost margin tanpa harus menunggu supplier sekarang bermasalah.
⚠️ Proactive scan menambah konsumsi rate-limit. Aktifkan secara hati-hati.
Dua strategi
Strategy 1: Diff-Triggered (default ON)
Saat Change Detection mendeteksi harga produk naik ≥ threshold, OtoSwitch otomatis fetch supplier list untuk produk itu dan cek alternatif lebih murah.
Kapan jalan:
- Hanya saat ada kenaikan harga signifikan.
- Trigger threshold:
diffTriggerPriceIncreasePercent(default 3%).
Cost:
- ~0-10 request tambahan per cycle (hanya saat ada kenaikan).
- Default ON karena cost rendah.
Strategy 2: Rotational Sampling (default OFF)
Setiap cycle, ambil batch produk sehat yang belum dicek (atau sudah lewati cooldown), fetch supplier list, cek alternatif.
Kapan jalan:
- Setiap cycle, batch by batch.
- Rotasi sampai semua produk tercakup.
Cost:
- ~
batchSizerequest tambahan per cycle (default 50). - Default OFF karena cost lebih tinggi.
Konfigurasi
Pengaturan → panel Proactive Scan:
| Field | Default | Deskripsi |
|---|---|---|
enabled |
false |
Master toggle untuk strategy 2 (rotational). |
batchSize |
50 |
Jumlah produk dicek per cycle (strategy 2). |
minSavingsPercent |
5.0 |
Threshold savings minimum untuk dianggap signifikan. |
cooldownHours |
24 |
Jangan re-check produk sebelum N jam. |
diffTriggered |
true |
Aktifkan strategy 1. |
diffTriggerPriceIncreasePercent |
3.0 |
Threshold kenaikan harga untuk trigger strategy 1. |
Budget rate-limit
Rate-limit OtoSwitch default 100 req/menit. Scan interval default 5 menit (Basic) → 500 req/cycle budget.
Estimasi konsumsi:
| Komponen | Request/cycle |
|---|---|
| Category scan | ~17 (1 per kategori) |
| Diff-triggered (strategy 1) | ~0-10 |
| Rotational (strategy 2, batch 50) | ~50 |
| Total worst-case | ~77 |
| Sisa budget | ~423 (per 5 menit) |
Kalau interval Pro (2 menit), budget cuma 200 req/cycle. Strategy 2 batchSize 50 + scan 17 + diff 10 = ~77. Aman tapi sisa lebih sempit.
Hasil deteksi
Setiap kali ditemukan supplier lebih murah dengan savings ≥ minSavingsPercent, dicatat sebagai change entry dengan type better_seller_available.
Lihat di dashboard
Menu Perubahan → filter Type = better_seller_available.
Lihat via API
GET /api/changes/better-sellers?hours=24
Response:
[
{
"product_id": "AXIS5K",
"product_name": "Axis 5K",
"current_seller": "Supplier-A",
"current_price": 4900,
"alternative_seller": "Supplier-B",
"alternative_price": 4500,
"savings_percent": 8.16,
"detected_at": "2026-05-09T14:32:11Z"
}
]
Apakah switch otomatis?
Tidak otomatis — better_seller_available hanya alert. OtoSwitch tidak switch supplier hanya karena ada yang lebih murah (kecuali produk bermasalah).
Switch alternatif perlu manual:
- Buka tab Perubahan, filter
better_seller_available. - Klik produk → modal Detail.
- Lihat ranking supplier, klik Switch ke Supplier Ini.
Filosofi: jangan ganggu produk yang sehat hanya untuk hemat sedikit. Manual switch memberi kontrol lebih.
Kapan harus aktifkan
Aktifkan strategy 1 (diff-triggered) saat:
- Selalu — cost rendah, value tinggi.
- Default ON, cukup pertahankan.
Aktifkan strategy 2 (rotational) saat:
- Reseller skala besar dengan ratusan-ribuan produk.
- Margin tipis & ingin selalu tahu supplier termurah.
- Punya budget rate-limit cukup (Pro plan, banyak room).
Jangan aktifkan strategy 2 saat:
- Produk sedikit (<100) — diff-triggered cukup.
- Plan Trial / Basic dengan banyak kategori — rate-limit ketat.
- Ingin minimasi cost API ke Digiflazz.
FAQ
Strategy 2 ON tapi tidak ada hasil.
Cek minSavingsPercent — kalau threshold tinggi (>10%), jarang ada yang qualify. Coba turunkan ke 3-5%.
Cooldown apa fungsinya? Mencegah cek produk yang sama berulang dalam window pendek. Hemat rate-limit. Default 24 jam.
Bisa exclude kategori tertentu dari proactive?
Belum di UI. Workaround: assign priority low di Smart Intervals → kategori jarang di-scan → otomatis jarang di-proactive.
Strategy 2 nge-flood log dengan request? Biasa — 50 request per cycle. Pakai filter level di Log untuk hide DEBUG.