PriceBuddy 0.1.0 — ระบบเต็มรูปแบบ ตั้งแต่ดึงราคาจนถึงเก็บเงิน
รีลีส 0.1.0 คือก้าวจาก “ต้นแบบที่ทำงานได้” มาเป็น “ระบบที่เปิดให้คนใช้จริงได้” มีงานเพิ่มเข้ามาหลายสิบเรื่องภายในรีลีสเดียว ขอสรุปเป็นกลุ่มใหญ่
ตัวดึงราคาที่ทนทานขึ้นมาก
เว็บใหญ่ ๆ มีระบบป้องกันการดึงข้อมูล งานส่วนนี้จึงเป็นหัวใจของทั้งผลิตภัณฑ์
รู้ตัวเมื่อโดนบล็อก
ตรวจจับได้ว่ากำลังโดนบล็อกจากสัญญาณหลายอย่าง — รหัสตอบกลับที่บอกว่าถูกจำกัดจำนวนครั้งหรือถูกปฏิเสธ หน้าจอ captcha และเส้นทางที่ถูกเปลี่ยนไปหน้าอื่น การแยกแยะนี้สำคัญเพราะ “โดนบล็อก” กับ “หน้าเว็บเปลี่ยนโครงสร้าง” ต้องแก้คนละวิธี
ไล่ทางเลือกตามต้นทุน
ระบบไล่วิธีดึงข้อมูลจากถูกและเร็วที่สุดไปหาแพงที่สุด — เริ่มจาก API ทางการของแพลตฟอร์ม → บริการดึงข้อมูลสำเร็จรูป → เปิดเบราว์เซอร์จริง ถ้าชั้นแรกได้ผลก็ไม่ต้องเสียเงินกับชั้นถัดไป พร้อมมีที่พักข้อมูลชั่วคราวไม่ให้ดึงซ้ำโดยไม่จำเป็น
เลียนแบบพฤติกรรมคน
ก่อนจะอ่านราคา ระบบจะขยับเมาส์แบบสุ่ม เลื่อนหน้าจอเป็นช่วง ๆ และหน่วงเวลาแบบไม่เป็นจังหวะ เพื่อลดโอกาสถูกจับได้ว่าเป็นบอตจากรูปแบบการใช้งานที่เป๊ะเกินไป
ตัวตนคงที่ต่อแพลตฟอร์ม
แต่ละแพลตฟอร์มใช้ “ตัวตน” เดียวคงที่ — ข้อมูลเบราว์เซอร์และขนาดหน้าจอเดิมทุกครั้ง พร้อมเก็บคุกกี้ไว้ใช้ซ้ำ เพราะการเปลี่ยนตัวตนไปมาทุกครั้งกลับทำให้ดูน่าสงสัยมากกว่าการเป็นผู้ใช้คนเดิมที่กลับมาเรื่อย ๆ
สลับ IP อัตโนมัติพร้อมตัดตัวที่มีปัญหา
หมุนเวียนใช้ IP หลายตัว และถ้าตัวไหนโดนบล็อกซ้ำ ๆ จะถูกตัดออกชั่วคราวแทนที่จะยิงซ้ำไปเรื่อย ๆ จนโดนบล็อกหนักขึ้น
ให้ AI ช่วยอ่านหน้าเว็บ
ถ้าตัวอ่านปกติแกะราคาไม่ออกทั้งที่หน้าเว็บโหลดได้ปกติ (ไม่ได้ถูกบล็อก) ระบบจะส่งเนื้อหาหน้าเว็บให้ AI ช่วยอ่าน วิธีนี้ทำให้รองรับเว็บที่ยังไม่เคยเขียนตัวอ่านเฉพาะไว้ได้ทันที
เก็บหลักฐานเมื่อล้มเหลว
เมื่อดึงไม่สำเร็จ ระบบจะบันทึกหน้าเว็บและภาพหน้าจอเก็บไว้ แล้วแนบไปกับผลลัพธ์ ทีมงานจึงไล่ปัญหาย้อนหลังได้จริงว่าตอนนั้นหน้าเว็บหน้าตาเป็นอย่างไร แทนที่จะเห็นแค่ข้อความว่า “ล้มเหลว”
รองรับร้านหลายแบบ
- Shopee — ดักจับข้อมูลที่หน้าเว็บเรียกเอง พร้อมทางสำรองคือยิงขอข้อมูลเองในบริบทของหน้า
- ร้านที่ใช้ Shopify — ดึงจากช่องทางมาตรฐานที่ทุกร้าน Shopify มีเหมือนกัน
- ร้านทั่วไป — อ่านจากข้อมูลสินค้าแบบมาตรฐานที่เว็บส่วนใหญ่ฝังไว้เพื่อให้ Google อ่าน
ลองใหม่และคิวงานที่ล้มเหลว
งานที่ล้มเหลวแบบชั่วคราวจะถูกส่งกลับเข้าคิวเพื่อลองใหม่ ส่วนที่ล้มเหลวซ้ำจนเกินกำหนดจะถูกย้ายไปคิวสำหรับงานที่ล้มเหลวเพื่อให้คนมาดู ไม่ปะปนกับงานปกติและไม่หายไปเฉย ๆ
วัดผลได้
บันทึกเวลาที่ใช้ดึงและ IP ที่ใช้ในทุกครั้ง ทำให้ตอบได้ว่าเว็บไหนช้า IP ชุดไหนมีปัญหา และเพิ่มชุดทดสอบที่รันกับหน้าเว็บจำลองจริง
ทำงานแทนคุณอย่างฉลาดขึ้น
จัดคิวเช็กราคาตามความสำคัญ
เดิมสั่งเช็กทุกสินค้าทุกรอบเท่ากันหมด ซึ่งเปลืองโดยไม่จำเป็น ตอนนี้ระบบปรับความถี่ตามความผันผวนของราคา — สินค้าที่ราคาขยับบ่อยจะถูกเช็กถี่ขึ้น ตัวที่นิ่งก็เช็กห่างลง
ไม่ใช้เกินงบ
ก่อนสั่งเช็กแต่ละครั้ง ระบบตรวจว่ายังอยู่ในงบที่เจ้าของบัญชีจ่ายได้หรือไม่ กันกรณีที่ราคาผันผวนหนักแล้วระบบไล่เช็กจนเครดิตหมดในรอบเดียว
เตือนล่วงหน้าเมื่อจับแพตเทิร์นได้
วิเคราะห์ประวัติราคาเพื่อหาว่าคู่แข่งลดราคาเป็นรอบหรือไม่ — เช่นลดทุกสัปดาห์ในวันเดิม หรือลดตามวันที่ของเดือน ถ้าจับได้ก็เตือนล่วงหน้าให้เตรียมตัว แทนที่จะรู้ตอนที่เขาลดไปแล้ว
แจ้งเตือนตามกฎที่คุณตั้ง
เดิมแจ้งเข้า LINE อย่างเดียวแบบตายตัว ตอนนี้จับคู่เหตุการณ์กับเงื่อนไขที่ผู้ใช้ตั้งไว้ และเลือกช่องทางตามความรุนแรง พร้อมเก็บประวัติว่าส่งอะไรไปแล้วบ้างเฉพาะที่ส่งจริง
ช่วยหาคู่แข่งให้
เสนอสินค้าที่น่าจะเป็นคู่แข่ง โดยดูจากสินค้าที่ผู้ใช้คนอื่นในระบบติดตามอยู่แล้วและมียี่ห้อหรือบาร์โค้ดตรงกับสินค้าของคุณ — ยิ่งมีคนใช้มาก ข้อเสนอยิ่งแม่น กดยอมรับแล้วระบบสร้างรายการคู่แข่งและเริ่มติดตามให้ทันที
แนะนำราคา
คำนวณราคาที่ต่ำกว่าคู่แข่งที่ถูกที่สุดซึ่งยังมีของในสต๊อก (ค่าเริ่มต้น 1%) พร้อมมีราคาพื้นกันไม่ให้ไหลลงจนขาดทุน และรองรับการเขียนราคากลับไปที่ร้าน
เทียบราคา 3 มุมและสินค้าที่ขยับแรง
เทียบทั้งราคาป้ายและราคาต่อหน่วยต่อคู่ที่จับได้ พร้อมจัดอันดับสินค้าที่ราคาขยับมากที่สุดในรอบ 7 วัน ให้เห็นว่าควรสนใจตัวไหนก่อน
ส่วนขยายบนเบราว์เซอร์
เริ่มทำส่วนขยายสำหรับ Chrome ที่ดึงราคาโดยใช้การเข้าเว็บของผู้ใช้เอง แล้วส่งกลับเข้าระบบ เป็นทางเลือกสำรองชั้นที่สองเมื่อวิธีปกติถูกบล็อก เพราะการเข้าจากเครื่องผู้ใช้จริงแทบไม่มีทางถูกจับว่าเป็นบอต
เปิด API ให้ระบบอื่นต่อได้
- ผู้ใช้สร้าง ดู และเพิกถอนกุญแจของตัวเองได้
- ช่องทางสำหรับระบบภายนอก ที่ยืนยันตัวตนด้วยกุญแจแทนการล็อกอิน เหมาะกับการเรียกจากเซิร์ฟเวอร์
ระบบเก็บเงิน
- เชื่อม Stripe จริง สำหรับเติมเครดิตและคืนเงิน
- รองรับ PromptPay — สำคัญมากสำหรับตลาดไทยที่คนจำนวนมากไม่ใช้บัตรเครดิต
- คิดเงินเมื่อสำเร็จเท่านั้น — แก้ปัญหาที่ลูกค้าเสียเครดิตฟรีเมื่อการดึงราคาล้มเหลว ซึ่งเป็นเรื่องที่ลูกค้ารับไม่ได้และถูกต้องแล้วที่จะรับไม่ได้
- คืนเงินแบบคิดตามสัดส่วน — คืนเฉพาะเครดิตที่ยังไม่ได้ใช้ ภายใน 14 วัน
- จัดการกรณีลูกค้าโต้แย้งรายการบัตร — รับเหตุการณ์จาก Stripe แล้วจัดการต่ออัตโนมัติ แทนที่จะแค่บันทึกไว้เฉย ๆ
ความปลอดภัยและ PDPA
- ยืนยันตัวตนสองชั้น ด้วยแอป authenticator พร้อม QR สำหรับผูกเครื่อง
- ล็อกบัญชีชั่วคราว 15 นาทีหลังกรอกรหัสผ่านผิดครบ 5 ครั้ง เสริมกับการจำกัดจำนวนครั้งต่อ IP
- รีเซ็ตรหัสผ่านทางอีเมล — ตอบผลลัพธ์เหมือนกันเสมอไม่ว่าอีเมลนั้นจะมีบัญชีหรือไม่ กันการสุ่มหาว่าใครเป็นสมาชิก
- เข้าสู่ระบบด้วย Google หรือ LINE
- แยกสิทธิ์ผู้ใช้ทั่วไปกับผู้ดูแลระบบ — เลิกใช้วิธีเทียบรายชื่ออีเมล เปลี่ยนเป็นสิทธิ์ที่เก็บกับบัญชีจริง
- จำกัดจำนวนครั้งที่หน้าเข้าสู่ระบบ 10 ครั้งต่อนาทีต่อ IP
- ปฏิเสธการเริ่มระบบถ้ากุญแจลับยังเป็นค่าตัวอย่าง — กันความผิดพลาดที่ร้ายแรงที่สุดคือขึ้นระบบจริงด้วยกุญแจที่ใคร ๆ ก็เดาได้
- ตั้งค่าความปลอดภัยของหน้าเว็บ — กันการฝังสคริปต์แปลกปลอมและกันการถูกเอาหน้าเว็บไปซ้อนหลอกผู้ใช้
- ขอลบบัญชีและข้อมูลได้ ตามสิทธิ์ใน PDPA
- กลบข้อมูลส่วนตัวในบันทึกเหตุการณ์ — อีเมล เบอร์โทร กุญแจ และโทเคน ถูกปิดบังอัตโนมัติก่อนบันทึก เพราะบันทึกเหตุการณ์คือที่ที่ข้อมูลส่วนตัวรั่วบ่อยที่สุดโดยไม่มีใครตั้งใจ
- หน้าเอกสารกฎหมายครบชุด — กฎการใช้งาน นโยบายความเป็นส่วนตัว และนโยบายคุกกี้พร้อมตารางอธิบายคุกกี้แต่ละประเภท
ระบบหลังบ้านสำหรับทีมงาน
สร้างหน้าจอสำหรับทีมดูแลระบบขึ้นมาใหม่ทั้งชุด แทนหน้าเปล่าที่มากับเครื่องมือ แบ่งเป็น 4 ด้าน
- สุขภาพของตัวดึงราคา — ดูอัตราสำเร็จและปัญหาที่เจอ โดยดึงตัวเลขจากที่ตัวดึงราคาบันทึกไว้จริง
- ความครบถ้วนของข้อมูล — สินค้าที่ยังไม่เคยดึงราคาสำเร็จ ราคาที่เก่าเกินไป และหน้าไล่ปัญหารายสินค้าที่แสดงประวัติการดึง 20 ครั้งล่าสุดพร้อมหลักฐาน
- ช่วยเหลือผู้ใช้ — ค้นหาด้วยอีเมล ดูโปรไฟล์ เครดิตคงเหลือ จำนวนสินค้าที่ติดตาม และบันทึกการช่วยเหลือต่อผู้ใช้ พร้อมบันทึกว่าใครเป็นคนเพิ่ม
- คิวงานและงานที่ล้มเหลว — ดูความลึกของคิว รายการที่ล้มเหลวพร้อมสาเหตุ และสั่งให้ลองใหม่ได้
สวิตช์ปิดฉุกเฉิน
ตั้งสวิตช์ปิดการทำงานบางส่วนได้ทันทีเมื่อมีปัญหา — เช่นปิดการแนะนำราคา ปิดตัวจัดคิว หรือปิดการแจ้งเตือน โดยตัวทำงานเบื้องหลังอ่านค่าเหล่านี้จริง ไม่ใช่ตั้งได้แต่ไม่มีผลเหมือนเดิม
งานพื้นฐานที่มองไม่เห็นแต่สำคัญ
- รหัสข้อผิดพลาดกลาง — เห็นรหัสแล้วรู้ทันทีว่าปัญหามาจากส่วนไหน
- รหัสติดตามต่อคำขอ — ผูกทุกบันทึกเหตุการณ์ของคำขอเดียวกันเข้าด้วยกัน ไล่ปัญหาข้ามบริการได้
- ข้อผิดพลาดตอบกลับในรูปแบบมาตรฐาน พร้อมรหัสติดตาม
- จุดตรวจสุขภาพสองแบบ — แยก “โปรแกรมขึ้นแล้ว” ออกจาก “พร้อมรับงานจริง (ต่อฐานข้อมูลได้)”
- ย้ายสถานะที่ต้องใช้ร่วมกันไป Redis — การล็อกบัญชีและสถานะการแจ้งเตือนเดิมเก็บในหน่วยความจำของแต่ละเครื่อง ทำให้เมื่อรันหลายเครื่องพร้อมกันจะทำงานไม่ตรงกัน
- รับ webhook จาก Stripe, LINE และ SendGrid พร้อมตรวจลายเซ็นว่ามาจากผู้ส่งจริง
- เก็บอีเมลผู้สนใจและแบบสอบถามความพึงพอใจ — พร้อมงานประเมินสุขภาพบัญชีและตามลูกค้าที่ห่างหายกลับมา
- ระบบทดสอบอัตโนมัติและ CI ครั้งแรกของโปรเจกต์ — ทุกการแก้ไขถูกตรวจอัตโนมัติก่อนรวมเข้าสายหลัก
ติดตามราคาคู่แข่ง ปรับกลยุทธ์ได้ทัน