05

ระบบ LINE Bot

คำสั่ง + Flow ผูกบัญชี + Reminder อัตโนมัติ

📱 สำหรับทุก Role

5.1 ภาพรวม LINE Bot

Bot LINE Official Account ทำงานควบคู่กับเว็บ สื่อสารกับผู้เล่นผ่าน LINE ทุกขั้นตอน

ฟีเจอร์หลัก

🔗 ผูกบัญชี

PIN 6 หลัก เชื่อม LINE UID กับ user account

📅 ดูตารางตัวเอง

พิมพ์ "แมตของฉัน" → ดูทุก tournament ที่สมัคร

📍 ดูคิว

พิมพ์ "แมตที่เท่าไร" → ดูคิวที่กำลังแข่ง

⏰ Reminder

แจ้งก่อนแข่ง 30 นาที + 1 ชั่วโมง อัตโนมัติ

📢 Broadcast

รับประกาศจากแอดมิน + morning broadcast

💰 Payment

แจ้งสลิปอนุมัติ/ปฏิเสธ + LINE Flex Message

เพิ่มเพื่อน

สแกน QR code ในหน้า profile.php หรือเสิร์ช @thaibadtournaments ใน LINE

5.2 คำสั่งทั้งหมด

คำสั่งผลลัพธ์ต้อง login?
ลงทะเบียน [PIN]ผูก LINE กับบัญชีในเว็บมี PIN จากเว็บ
สถานะแสดงว่าผูกบัญชีไหน + UID
แมตของฉันlist ทุก tournament ที่สมัคร + status
แมตที่เท่าไรดูคิวที่กำลังแข่ง + แมตช์ถัดไป (ถ้าแข่งวันนี้)
ตรวจสอบการแข่งขันMulti-step: เลือก tournament → เลือก event → ดูแมตช์
ยกเลิกcancel state machine
help / เมนูแสดงคำสั่งทั้งหมด

การ Match แบบ Fuzzy

Bot รองรับการพิมพ์ที่ไม่เป๊ะ:

5.3 Flow ผูกบัญชี (Account Linking)

Sequence Diagram
User                Web                 LINE Bot           DB
 │                   │                     │                │
 │── เข้า profile ──>│                     │                │
 │                   │── สร้าง PIN ────────────────────────>│
 │                   │<── PIN "123456" ──────────────────── │
 │<── PIN + QR ──────│                     │                │
 │                                         │                │
 │── สแกน QR + Add Friend ────────────────>│                │
 │                                         │── ลงทะเบียน ───>│ (check PIN)
 │                                         │<── valid ──────│
 │<── "ผูกบัญชีสำเร็จ!" ─────────────────── │── update user ─>│
                                                            (line_uid)

ข้อกำหนด

5.4 Reminder อัตโนมัติ

ระบบ cron_notify_matches.php รันทุก 2-5 นาที

Logic

  1. หา tournaments ที่อยู่สถานะ กำลังแข่งขัน วันนี้
  2. คำนวณ current_leading match_no + จำนวนสนาม N
  3. ส่ง reminder 1 ชม.: match_no ใน range [current_leading, current_leading + 2N]
  4. ส่ง reminder 30 นาที: match_no ใน range [current_leading, current_leading + N]
  5. Mark flag notify_1h_sent, notify_30m_sent เพื่อไม่ส่งซ้ำ

ตัวอย่างข้อความ

🏸 แจ้งเตือนการแข่ง
รายการ: VENSON Kamphaengphet 2026
🎾 ทีม: สมชาย / สมศักดิ์
🆚 vs: สมหญิง / สมศรี
🏟 สนาม: 2
⏰ เวลา: 14:30 (อีก 30 นาที)
📍 คิวที่: 18

กรุณามาที่สนามก่อนเวลา 15 นาที
💡 ปิด reminder

ผู้เล่นสามารถปิด notify_match_reminder ใน notification_settings.php ต่อรายการได้

5.5 Morning Broadcast (สรุปวันแข่ง)

ส่งสรุปตารางของผู้เล่นแต่ละคนตอน 06:00 ของวันแข่ง — 1 ข้อความ/คน

ตัวอย่างข้อความ

🌅 สวัสดียามเช้า สมชาย!
วันนี้คุณมีแข่ง 3 แมตช์

📍 รายการ: VENSON Kamphaengphet 2026
1️⃣ 09:00 ⚡ สนาม 2 ⚡ คิว 5
   ชายคู่ U35 — vs สมหมาย/สมศักดิ์

2️⃣ 11:30 ⚡ สนาม 1 ⚡ คิว 12
   คู่ผสม — vs ทีมเหลือง

3️⃣ 14:00 ⚡ สนาม 3 ⚡ คิว 18
   ชายเดี่ยว — vs ทีมแดง

ขอให้โชคดี! 🍀

ส่งผ่าน Flex Message ของ LINE — UI สวยงาม คลิกแต่ละ match เพื่อเข้าหน้า match_detail ได้