ปุ่มในแอปแพ้ปุ่มในแชต
2026-09-20 · 2 นาที
ตอนแรกผมทำปุ่ม "แจ้งลา" ไว้บน rich menu ของ LINE กดแล้วเด้งเข้า LIFF app ไปที่หน้าตารางเรียน เลื่อนไปหาคาบที่ลาได้พอดี แล้วไฮไลต์ให้ ผมคิดว่านี่คือทางออกที่ดี เพราะไม่ต้องสร้างหน้าจอใหม่เลย ใช้ของเดิมที่มีอยู่แล้วทั้งหมด
เจ้าของสถาบันลองแล้วบอกว่าไม่เอา
เหตุผลของเขาตรงไปตรงมามาก: ผู้ปกครองกำลังคุยอยู่ในแชต การกดปุ่มแล้วเด้งออกไปเปิดแอป รอโหลด แล้วค่อยกดอีกสองที มันคือการออกจากบทสนทนา สิ่งที่เขาอยากได้คือ "ลา" จบในที่เดียวกับที่กำลังพิมพ์อยู่
สิ่งที่เปลี่ยน
ผมย้ายทั้ง flow เข้าไปอยู่ใน chat ผ่าน postback button ซึ่งเป็นแพตเทิร์นที่โปรเจกต์นี้ใช้อยู่แล้วกับการตอบรับ/ปฏิเสธการสอนแทน และการยืนยันเวลาเรียนชดเชย ไม่ได้คิดอะไรใหม่เลย แค่เอาของที่มีมาใช้กับงานใหม่
หน้าตาใหม่เป็นแบบนี้:
- กด "แจ้งลา" บน rich menu → ได้ carousel ของคาบที่ลาได้ เรียงจากใกล้ที่สุด (ผู้ปกครองที่มีลูกหลายคนจะเห็นรวมกันทุกคน)
- แตะคาบที่ต้องการ
- ติวเตอร์ส่งได้เลย ส่วนผู้ปกครองเลือกเหตุผลสำเร็จรูป — ไม่สบาย / ติดธุระส่วนตัว / เดินทางไม่สะดวก
- จบ
สิ่งที่จงใจไม่ทำ
ผมไม่ได้ทำช่องพิมพ์เหตุผลเองในแชต เพราะ template message ของ LINE รับ free text ไม่ได้ ถ้าจะทำต้องสร้างระบบเก็บ "สถานะบทสนทนาที่ค้างอยู่" ขึ้นมาใหม่ทั้งชุด ซึ่งโปรเจกต์นี้ยังไม่มี
ทางออกคือปุ่ม "พิมพ์เหตุผลเอง" ที่พาไปฟอร์มใน LIFF แบบเดิม คนที่อยากพิมพ์ก็ยังพิมพ์ได้ ส่วนคนส่วนใหญ่กดสามทีจบ — โดยไม่ต้องเพิ่ม table ใหม่สักตัว
บทเรียนที่เอากลับมาใช้ได้
สิ่งที่ผมเกือบพลาดคือการตีความคำขอผิด เจ้าของบอกว่า "อยากให้แจ้งลาง่ายขึ้น" ผมแปลเป็น "ทำทางลัดไปหน้าเดิม" ซึ่งไม่ใช่สิ่งที่เขาหมายถึง เขาหมายถึง "อย่าให้ต้องออกจากแชต"
ตั้งแต่นั้นมา เวลาได้โจทย์ ผมจะถามกลับก่อนว่า "ตอนนี้ผู้ใช้กำลังทำอะไรอยู่" ไม่ใช่ "ปุ่มควรอยู่ตรงไหน"
อีกเรื่องที่เจอระหว่างทาง: โค้ดเดิมที่ dispatch postback มองว่า action อะไรก็ตามที่ไม่รู้จัก คือการตอบรับการสอนแทน ซึ่งเป็นบั๊กที่รอวันระเบิด ตอนนี้เปลี่ยนเป็นตาราง lookup จริง ๆ แล้ว — งานรื้อของเดิมมักจะเจอของแบบนี้เสมอ