ทุกช่องทางการเข้าถึง — สมัครใหม่ ลงทะเบียนงาน อบรม เชิญผ่าน PR หรือขออัปเดต — ไหลเข้าสู่ pipeline เดียวกัน โดยใช้แนวคิด กรอกน้อยก่อน เติมทีหลัง (progressive profile) · ร่างเพื่อพิจารณาในที่ประชุม
แต่ละแบบต่างกันแค่ “ช่องทาง + ข้อมูลขั้นต่ำ” ส่วนหลังบ้านใช้ตรรกะเดียวกัน
เข้าเว็บ / ลิงก์สมัครโดยตรง
สแกน QR หน้างาน → แอด LINE OA
ลิงก์ในอีเมลเชิญเข้าอบรม
สมาชิกเดิมกดลิงก์ / โปรไฟล์
แคมเปญ Email + LINE Broadcast
โพสต์ / Broadcast แนบลิงก์สมัคร
แยกตามช่วงชีวิต — นักศึกษาปัจจุบันยังไม่มีอาชีพ/ที่ทำงาน จึงเก็บน้อยก่อน แล้วเติมตอนจบ/เริ่มทำงาน
ยังเรียนอยู่ · ยังไม่มีอาชีพ/ที่ทำงาน
จบแล้ว / ทำงานแล้ว
ระบุตัวตน → จับคู่/กันซ้ำ → แยกประเภทสมาชิก → ยินยอม PDPA → กำหนดสถานะ → เติมข้อมูล → ฐานกลาง
flowchart TD classDef entry fill:#8a1818,stroke:#5e1010,color:#ffffff; classDef dec fill:#ffffff,stroke:#a9772e,color:#5e1010,stroke-width:2px; classDef proc fill:#f4e9e9,stroke:#cab0b0,color:#2a1f1f; classDef good fill:#2f8f5b,stroke:#1f6e43,color:#ffffff; classDef warn fill:#b8791b,stroke:#8f5e12,color:#ffffff; classDef stu fill:#3a6ea5,stroke:#274d73,color:#ffffff; classDef auto fill:#6a4a8f,stroke:#4a3266,color:#ffffff; classDef db fill:#2a1f1f,stroke:#000000,color:#ffffff; S1["สมัครใหม่ · เว็บ"]:::entry S2["Event · สแกน QR"]:::entry S3["อบรม · ลิงก์ Email"]:::entry S4["ขออัปเดตข้อมูล"]:::entry S5["Re-activate · Email + LINE"]:::entry S6["เชิญผ่าน PR / Social"]:::entry S2 --> LL S5 --> LL S6 --> LL LL["LINE Login / LIFF · อนุญาต 1 แตะ
ได้: LINE userId + email + ชื่อ + consent
พิมพ์เองแค่ รหัสนักศึกษา"]:::auto LL --> ID S1 --> ID S3 --> ID S4 --> ID ID{"ระบุตัวตน
รหัสนักศึกษา / Email / LINE ID"}:::dec ID --> MATCH{"มีในฐานข้อมูลแล้ว?"}:::dec MATCH -->|มีแล้ว| UPD["โหมดอัปเดต · prefill"]:::proc MATCH -->|ยังไม่มี| NEW["สร้างระเบียนใหม่"]:::proc UPD --> TYPE NEW --> TYPE TYPE{"นักศึกษาปัจจุบัน
หรือ ศิษย์เก่า?"}:::dec TYPE -->|นักศึกษาปัจจุบัน| CUR["เก็บ: ชื่อ · รหัส · ที่อยู่ · ภาควิชา · ติดต่อ
ยังไม่มีอาชีพ / ที่ทำงาน"]:::proc TYPE -->|ศิษย์เก่า| ALU["เก็บครบ + อาชีพ · ที่ทำงาน · ตำแหน่ง"]:::proc CUR --> CONc["ยินยอม PDPA"]:::proc ALU --> CONa["ยินยอม PDPA"]:::proc CONc --> SC["Active · นักศึกษาปัจจุบัน
flag: รออัปเดตอาชีพ / ที่ทำงาน"]:::stu CONa --> QF{"ข้อมูลครบ?"}:::dec QF -->|ครบ| AC["Active · ศิษย์เก่า · ครบ"]:::good QF -->|ด่วน / ไม่ครบ| AI["Active · ไม่ครบ"]:::warn AI -.->|LINE / Email เตือน| FILL["เติมข้อมูลภายหลัง"]:::proc FILL --> AC SC -.->|จบการศึกษา / เริ่มทำงาน| CAR["เติม อาชีพ + ที่ทำงาน"]:::proc CAR --> AC AC --> DB[("ฐานสมาชิกกลาง
ผูก LINE userId + verified_channel")]:::db AI --> DB SC --> DB
ใช้ LINE Login ดึง email + ตัวตน + consent ในแตะเดียว → หน้างานเหลือพิมพ์แค่รหัสนักศึกษา
→ พิมพ์จริงเหลือช่องเดียว
ต้องขอ email permission จาก LINE ก่อน + มี fallback ถ้าไม่มี email ผูก LINE
สิ่งที่ต่างกันจริงคือ 4 คอลัมน์นี้ — ที่เหลือ backend เดียวกัน
| สถานการณ์ | ช่องทาง / trigger | ข้อมูลขั้นต่ำ | สถานะเริ่มต้น | เติมข้อมูลเมื่อไหร่ |
|---|---|---|---|---|
| สมัครใหม่ (เว็บ) | เข้าเว็บ / ลิงก์ตรง | ครบตามฟอร์ม | Active | — |
| ลงทะเบียนด่วนหน้างาน | สแกน QR + แอด LINE | รหัส + ชื่อ + เบอร์/LINE | Active · ไม่ครบ | หลังงาน (LINE/Email เตือน) |
| ลงทะเบียนอบรม/สัมมนา | ลิงก์ในอีเมลเชิญ | รหัส + ยืนยันเข้าร่วม | Active + กิจกรรม | ตอนยืนยันสิทธิ์เข้าอบรม |
| ขออัปเดตข้อมูล | สมาชิกเดิมกดลิงก์ | prefill (แก้เฉพาะที่เปลี่ยน) | คงเดิม | ทันที |
| Re-activate สมาชิกเดิม | Email + LINE Broadcast | match email / LINE ID | Inactive → Active | พร้อมยืนยันตัวตน |
| เชิญผ่าน PR | โพสต์ / broadcast ลิงก์ | เหมือนสมัครใหม่ | Active | track ที่มา campaign |
ร่างเพื่อพิจารณา · CMUEAA Member Registration Workflow · เชื่อมกับต้นแบบฟอร์มใหม่ + PDPA Checklist ที่จัดทำแล้ว