ลูกค้า E-commerce ที่ขายสินค้าหลายร้อย SKU มาบอกว่า "คู่แข่งถูกกว่าเราเกือบทุกตัว" ผมเลยสร้างระบบให้ AI เช็คราคาคู่แข่งอัตโนมัติ — แล้วก็เจอสิ่งที่ไม่คาดคิด
ปัญหา: เช็คราคามือ = เป็นไปไม่ได้
ลูกค้ามีสินค้า 500+ รายการ คู่แข่งหลายร้าน แต่ละร้านก็ปรับราคาทุกวัน ถ้าจะเทียบราคาทีละตัว x ทีละร้าน ทำมือก็ใช้คนทั้งวันยังไม่เสร็จ
แล้วราคาที่เทียบได้ก็ไม่ได้บอกภาพจริง — เพราะ ราคาถูกกว่า ≠ ซื้อได้จริง
Solution: AI Pipeline 6 ขั้นตอน
ผมสร้าง script ที่ทำทุกอย่างใน pipeline เดียว รันจบภายใน 20 วินาที:
1. Scrape สินค้าร้านลูกค้า (175 รายการ)
2. Scrape สินค้าคู่แข่ง (468 รายการ) ผ่าน API
3. จับคู่สินค้าอัตโนมัติ — แบรนด์ + รุ่น + ประเภท
4. เทียบราคาทุกคู่
5. ★ เช็คสต็อค — สินค้ามีจริงหรือแค่ตั้งราคาไว้?
6. เขียนรายงานลง Google Sheet พร้อม highlight สี
ทำไมต้อง "จับคู่"?
สินค้าตัวเดียวกัน ชื่อต่างกันคนละร้าน เช่น:
| ร้านเรา | ร้านคู่แข่ง |
|---|---|
| "Brand X Wireless Earbuds Pro" | "Brand-X Pro TWS Earbuds" |
| "Brand Y Speaker 20W Portable" | "Brand Y Portable Speaker (20 Watt)" |
AI ต้อง normalize ชื่อ แยก brand ออกมา แยก spec จากหลาย format แล้วจับคู่โดยดูจาก:
- Brand — dictionary 60+ แบรนด์พร้อม alias
- Model/Spec — match exact หรือ ±10%
- Sub-type — อุปกรณ์เสริม vs ตัวเครื่อง vs ชุดพร้อมใช้ (ต้องเป็นประเภทเดียวกัน)
ใน 175 x 468 = 81,900 คู่ที่เป็นไปได้ AI จับคู่ได้ 50 คู่ที่ match จริง
Plot Twist: จับโกงได้
ผลเปรียบเทียบออกมา ดูเหมือนคู่แข่งถูกกว่าเราเป็นส่วนใหญ่:
29 รายการที่คู่แข่งตั้งราคาถูกกว่า... น่าตกใจ?
แต่พอเพิ่ม step ที่ 5 — เช็คสต็อค จริง ภาพเปลี่ยนไปเลย:
| สถานะ | จำนวน | ความหมาย |
|---|---|---|
| ภัยจริง (ถูกกว่า + มีของ) | 15 | ต้องปรับราคา |
| ปั่นราคา (ถูกกว่า + หมดของ) | 14 | ไม่ต้องกังวล |
| เราถูกกว่า | 13 | ปลอดภัย |
| ราคาเท่ากัน | 8 | OK |
จาก 29 ที่ดูเหมือนแพ้ → แพ้จริงแค่ 15 (ลดตกใจ 48%)
14 รายการที่คู่แข่ง "ถูกกว่า" — สินค้าหมดสต็อคทุกตัว ไม่มี variant ไหนมีของสักอัน ทดสอบ 19 รายการ → stock = 0% ทุกตัว
Red / Green / Grey Framework
ผมสร้าง framework ง่ายๆ ให้ลูกค้าอ่านผลเปรียบเทียบราคาได้ทันที:
| สี | หมายความว่า | Action |
|---|---|---|
| แดง | คู่แข่งถูกกว่า + มีสต็อค | ภัยจริง — ต้อง action |
| เขียว | เราถูกกว่า | ปลอดภัย |
| เทา | คู่แข่งถูกกว่า + หมดสต็อค | ปั่นราคา — ไม่ต้อง panic |
ทำไม 'เทา' สำคัญ?
ถ้าเทียบแค่ราคา ไม่เช็คสต็อค ลูกค้าจะ panic เปล่าๆ — คิดว่าแพ้ 29 ตัว ทั้งที่แพ้จริงแค่ 15 ตัว คู่แข่งบางร้านตั้งราคาถูกมากกับสินค้าที่ไม่มีขาย เพื่อให้ดูดีใน search results หรือ comparison tools
ผลลัพธ์ที่ Google Sheet
Pipeline เขียนผลลง Google Sheet อัตโนมัติ 4 tabs:
| Tab | เนื้อหา |
|---|---|
| Dashboard | สรุปภาพรวม — แพ้กี่ตัว ชนะกี่ตัว |
| vs [คู่แข่ง] | เทียบราคาทีละตัว + สี red/green/grey |
| สินค้าเรา | รายการสินค้าเราทั้งหมด + ราคา + สต็อค |
| สินค้าคู่แข่ง | Raw data ที่ scrape มา |
แถว สีแดง = ต้อง action ทันที แถว สีเทา = ไม่ต้องสนใจ (ปั่นราคา) แถว สีเขียว = ชิลได้
ลูกค้าเปิด Sheet แล้วรู้เลยว่าต้องทำอะไร ไม่ต้องมานั่งวิเคราะห์เอง
Technical Notes
Platform ที่ scrape ได้
| Platform | วิธี scrape | วิธีเช็ค stock |
|---|---|---|
| Shopify | /products.json API (เร็วมาก) | variant.available field |
| WooCommerce | Parse HTML category pages | outofstock CSS class |
Shopify ง่ายกว่ามาก — มี JSON API ให้ดึง product + variants + stock ครบในที่เดียว WooCommerce ต้อง parse HTML ทีละหน้า ช้ากว่าแต่ก็ทำได้
Product Matching Algorithm
# Simplified matching logic
1. Extract brand (60+ brands, longest-match-wins)
2. Extract model/spec (regex: model numbers, wattage, capacity)
3. Check sub-type (accessory vs device vs bundle)
4. Score: exact spec = 100, ±10% = 80, brand only = 70
5. Accept matches >= 70Match accuracy ประมาณ 85-90% — ยังมีบางตัวที่ชื่อต่างกันมากจนจับคู่ไม่ได้ ต้องเพิ่ม alias เข้า dictionary เรื่อยๆ
สรุป
| metric | ก่อน | หลัง |
|---|---|---|
| เวลาเช็คราคา | ทั้งวัน (manual) | 20 วินาที |
| ครอบคลุม | ไม่กี่สิบตัว | 175 vs 468 ตัว |
| เช็คสต็อค | ไม่เคยเช็ค | ทุกตัว + ทุก variant |
| ความแม่นยำ | ดู % ไม่ได้ | ข้อมูลจริง + highlight สี |
| ตื่นตกใจ | เยอะ | ลดลง 48% (เพราะแยก fake ออก) |
บทเรียน
ข้อมูลราคาอย่างเดียวไม่พอ — ต้องดู stock ด้วยเสมอ ไม่งั้นจะตกใจกับ "ราคาถูก" ที่ซื้อไม่ได้จริง ถ้าเจอคู่แข่งถูกกว่าทุกตัว ให้สงสัยก่อนเชื่อ





