📋 สารบัญ
🏗️ Architecture — ภาพรวมระบบ
TikTok Bot V4.7 เป็น Chrome Extension (Manifest V3) มี 3 หน้าหลัก + Content Script + Background
🖱️ Popup
Entry Point — 3 ปุ่ม: Open Runner, Open DB, Open TikTok Studio
🎛️ Runner
หน้าจอหลัก — Sidebar + Queue + Dashboard + Action Bar + Log
🗄️ DB Manager
จัดการข้อมูลสินค้า — CRUD, Search, Filter, Import/Export
📂 File Structure
V4.7/ ├── manifest.json # Extension manifest (MV3) ├── popup.html / popup.js # Entry point: 3 ปุ่ม ├── runner.html / runner.js # Runner UI + logic (1,875 lines) ├── content.js # DOM automation (3,352 lines) ├── background.js # Message relay ├── dbmanager.html / .js # Product DB Manager (~1,050 lines) ├── data/products_map.json # Product mapping (52KB) └── log/ # DOM recordings
รวม ~5,800 lines JS + 1,460 lines HTML/CSS
🎛️ Runner Dashboard — หน้าจอหลัก
Layout แบ่ง 4 ส่วน: Header, Sidebar, Main Area (Queue), Log Panel
📐 Dashboard Layout
┌────────── Header ──────────────────────────────────────┐ │ 🎵 TikTok Bot V4.7 │ [Tab Select ▼] 🔄 📡 🎬 │ ├──── Sidebar ────┬──── Main Area ───────────────────────┤ │ 📁 วิดีโอ │ Queue (N items) [Build] [Export]│ │ [เลือกไฟล์] │ ┌─────────────────────────────────┐ │ │ [เลือกโฟลเดอร์] │ │ # │ ไฟล์ │ เวลา │ โหมด │ สินค้า │ │ │ ☑ file1.mp4 │ │ 1 │ 10001│ 10:00│ 🕐 │ SKU.. │ │ │ ☑ file2.mp4 │ │ 2 │ 10002│ 11:00│ 💾 │ — │ │ │ [ทั้งหมด] [ล้าง] │ │ ☰ (drag to reorder) │ │ │ │ └─────────────────────────────────┘ │ │ ⚙️ โหมด │ ┌──── Action Bar ──────────────────┐ │ │ [💾 Draft] │ │ [▶ Start] ████░░ 40% │ │ │ [🕐 Schedule] │ │ [🔄 Retry] [⏸ Stop] [▶ Resume] │ │ │ 📅 วันที่ / เวลา │ └──────────────────────────────────┘ │ │ ⏱️ ห่างกัน (นาที) │ │ ├────────────────┴───────────────────────────────────────┤ │ 📋 Log [💾 Save] ▼ │ │ [10:00:01] ✓ วิดีโออัพโหลดแล้ว │ └────────────────────────────────────────────────────────┘
| Feature | รายละเอียด |
|---|---|
| Tab Select | เลือก TikTok Studio tab ที่เปิดอยู่ (auto-detect) |
| File Source | เลือกไฟล์/โฟลเดอร์ + checkbox เลือก/ล้าง |
| Mode Toggle | Draft (💾 บันทึกฉบับร่าง) หรือ Schedule (🕐 ตั้งเวลาโพส) |
| Schedule Config | วันที่เริ่ม, เวลาเริ่ม, ห่างกันกี่นาที/ไฟล์ |
| Build Plan | สร้าง queue จากไฟล์ที่เลือก + คำนวณเวลา |
| Drag & Drop | ลากย้ายลำดับใน queue table |
| Auto Resume | 8 นาที timeout — auto-skip ถ้าค้าง |
| Retry Failed | ลองใหม่เฉพาะไฟล์ที่ล้มเหลว |
| Dashboard | Modal สรุปผล: ✅ สำเร็จ / ❌ ผิดพลาด / ข้าม |
| Export | JSON report + Text log |
| Post History | ตรวจจับไฟล์ซ้ำ (เก็บ 500 records) |
🗄️ DB Manager — จัดการสินค้า
จัดการข้อมูลสินค้าสำหรับปักตะกร้า — ค้นหา กรอง เพิ่ม แก้ไข ลบ Export
📊 Features
- CRUD — เพิ่ม / แก้ / ลบ (modal form)
- Search — ค้นด้วย CSV ID, code, SKU, ชื่อ
- Filters — ร้านค้า, หมวด, สถานะ, Favorite
- ⭐ Favorite — Toggle favorite กรองรายการโปรด
- Copy — Copy ชื่อ / code / SKU / ทั้งหมด
- Import/Export — JSON file
- Theme — Dark / Light mode
- Keyboard — Ctrl+S, Delete, Escape
📦 Product Fields
| Field | ตัวอย่าง |
|---|---|
| csv_id | 10001 (ตรงกับชื่อไฟล์ VDO) |
| sku | SKU-10001-A (ค้นใน TikTok Shop) |
| product_name | เสื้อยืดลายน่ารัก |
| shop_name | ร้านค้า A |
| price | 299 |
| commission | 15.50 |
| category | เครื่องแต่งกาย |
| is_active | 1 / 0 |
🔄 Automation Pipeline — 10 ขั้นตอน
ทุกครั้งที่กด Start ระบบจะทำ 10 ขั้นตอนต่อไฟล์ ใช้เวลา ~5-6 นาที/ไฟล์
1
Navigate → Upload Page
2
Upload VDO
3
Wait Processing
4
Fill Caption
5
ปักตะกร้า
6
Scroll + Settings
7
Wait 3 min (TikTok check)
8
Schedule / Draft
9
Submit
10
Save History
⏱️ Timeline ต่อไฟล์
- Upload + Wait: ~30 วินาที
- Caption + Product: ~30 วินาที
- Settings + AI Toggle: ~15 วินาที
- Content Check Wait: 3 นาที
- Schedule + Submit: ~15 วินาที
- รวม: ~5-6 นาที/ไฟล์
🤖 Auto Resume
- Timeout: 8 นาที/item
- ถ้าค้าง → auto-skip ไปไฟล์ถัดไป
- ล้มเหลว → กด Retry Failed ใหม่ได้
- Dashboard แสดงสรุป: ✅ / ❌ / ⏭️
🛒 ปักตะกร้า — Product Pinning Actions
6 steps ปักตะกร้าอัตโนมัติ — ค้นหาสินค้าด้วย SKU แล้วเลือกให้
| # | Action | ทำอะไร | Fallback |
|---|---|---|---|
| 1 | click_add_link | เปิด dialog ปักสินค้า | 6-layer sweep strategy |
| 2 | search_product | ค้นหาด้วย SKU | showcase tab → retry |
| 3 | select_product | เลือกสินค้า (radio click) | verify → search → retry |
| 4 | click_next | กด Next ใน dialog | — |
| 5 | confirm_add | กด Add/เพิ่ม | — |
| 6 | wait_dialog_closed | รอ dialog ปิด | auto-click confirm |
🔀 Product Fallback
- pool — ใช้ fallback_pool (สินค้าสำรอง)
- skip — ข้ามไม่ปักตะกร้า
- ตั้งค่าใน Sidebar ของ Runner
🌐 Bilingual Support
- "Add link" / "เพิ่มลิงก์"
- "Search products" / "ค้นหาสินค้า"
- "Add" / "เพิ่ม"
- Auto-detect ทั้ง EN + TH
🕐 Schedule System — 4-Layer Fallback
ระบบตั้งเวลาโพสต์ 4 วิธี — ถ้าวิธีแรกไม่ได้ จะลองวิธีถัดไปอัตโนมัติ
🔄 4 Layers
- Layer 1: setSchedule — หา time/date input ตรง
- Layer 2: setScheduleByPicker — scroll dropdown
- Layer 3: setScheduleDropdownExact — DOM recording
- Layer 4: forceSetScheduleValue — native descriptor
⚙️ ตั้งค่า Schedule
- วันที่เริ่ม — เลือกวันแรกที่จะโพสต์
- เวลาเริ่ม — เวลาแรกของวัน
- ห่างกัน (นาที) — ห่างกี่นาทีต่อไฟล์
- ระบบคำนวณเวลาทุกไฟล์ใน queue อัตโนมัติ
ถ้าไม่ต้องการตั้งเวลา ใช้โหมด Draft — บันทึกฉบับร่างไว้ แล้วค่อยโพสต์เอง ถ้าต้องเช็คก่อน
📦 Product Mapping & Rotation
ระบบจับคู่ชื่อไฟล์ VDO → สินค้า อัตโนมัติ
🔗 CSV ID → Product Mapping
ชื่อไฟล์: 10001_video_name.mp4
↓ extractCsvId()
CSV ID: 10001
↓ resolveProduct()
Product: { sku: "SKU-123", name: "สินค้ายอดฮิต" }
↓ ปักตะกร้าอัตโนมัติ
🔄 Product Rotation
- CSV ID 1 ตัวมีหลาย products ได้
- ระบบ rotate ไม่ซ้ำกัน (round-robin)
- ไฟล์ VDO ชื่อเดียวกัน → สินค้าต่างกันทุกครั้ง
📂 แหล่งข้อมูลสินค้า
products_map.json(52KB) ในโฟลเดอร์ data/- DB Manager → chrome.storage (custom map)
- Fallback pool สำหรับสินค้าที่ไม่มี mapping
🔀 Interleaving & Queue
กระจาย CSV ID เดียวกันไม่ให้ติดกัน — ป้องกัน TikTok จับซ้ำ
🔄 Interleaving (Round-Robin)
กลุ่ม A: [a1, a2, a3] กลุ่ม B: [b1, b2] → ผลลัพธ์: [a1, b1, a2, b2, a3]
CSV ID เดียวกันกระจายสลับกัน ไม่ลงติดกัน
📋 Queue Management
- Build Plan — สร้าง queue จากไฟล์ + เวลา
- Drag & Drop — ลากเรียงลำดับใหม่
- Export — ส่งออก Plan เป็น JSON
- Post History — ตรวจไฟล์ซ้ำ 500 รายการ
🧠 Content Script — 30+ Actions
content.js (3,352 lines) รองรับ action ต่อไปนี้ทั้งหมด ใช้ Score-Based Detection + Multi-Layer Fallback
📤 Core
- upload_video
- fill_caption
- verify_caption
- scroll_down
🛒 Product
- click_add_link
- search_product
- select_product
- click_next
- confirm_add
🕐 Schedule
- setSchedule
- setScheduleByPicker
- setScheduleDropdown
- forceSetScheduleValue
⚙️ Settings
- click_show_more
- click_ai_toggle
- apply_post_settings
- submit_schedule/draft
🔧 Debug
- get_page_info
- get_dom / get_buttons
- acquire/release_lock
- debug_*
🎯 Detection
- Score-Based: EN+TH keywords
- Position scoring
- Class/ID matching
- 4-6 fallback layers
📝 Best Practices & Troubleshooting
เคล็ดลับและปัญหาที่พบบ่อย
✅ Best Practices
- ตั้งชื่อไฟล์ VDO ให้ขึ้นด้วย CSV ID เช่น
10001_xxx.mp4 - เตรียม products_map.json ให้ครบก่อนรัน
- ใช้ Interleave กระจาย — ป้องกัน TikTok จับ spam
- ตั้งห่างกัน ≥ 30 นาที/ไฟล์ สำหรับ Schedule
- ใช้ Draft ก่อนถ้าไม่แน่ใจ → ค่อย publish ภายหลัง
- เปิด AI Content toggle ถ้าคลิปสร้างด้วย AI
- ตรวจ Post History ก่อนรัน → กัน duplicate
⚠️ ปัญหาที่พบบ่อย
- Bot ค้าง → Auto Resume จะ skip หลัง 8 นาที
- ปักตะกร้าไม่ได้ → เช็ค SKU ใน DB Manager ว่าถูกต้อง
- Schedule ไม่ลง → 4-layer fallback จะลองวิธีอื่น
- TikTok เปลี่ยน UI → อัปเดต Extension ใหม่
- ไฟล์ซ้ำ → Post History ตรวจจับ 500 รายการล่าสุด
- Content Check 3 นาที → อย่าปิด tab ระหว่างรอ
| สถิติ | ค่า |
|---|---|
| เวลาต่อไฟล์ | ~5-6 นาที |
| Fallback Layers | 4-6 ชั้นต่อ action |
| Post History | 500 records |
| ภาษา | EN + TH (bilingual) |
| Actions | 30+ |
| Auto Resume | 8 นาที timeout |