1.4 Notification System
1.4 Module: Notification System (ระบบการแจ้งเตือนและติดตาม)
อ้างอิง TOR:
- 3.5 ระบบการแจ้งเตือนและติดตามการแจ้งเตือน (ครบทุกข้อ 3.5.1 - 3.5.4)
- 2.2 วัตถุประสงค์: เพิ่มความสะดวกให้ผู้ป่วยและลดอัตราการไม่มาตามนัด
วัตถุประสงค์:
Module นี้เป็นหัวใจหลักในการส่งการแจ้งเตือนไปยังผู้ป่วยผ่าน LINE OA รวมถึงการติดตามสถานะการส่ง การตอบกลับของผู้ป่วย และการจัดการข้อความแบบต่างๆ เพื่อให้ผู้ป่วยได้รับข้อมูลที่ถูกต้องและตรงเวลา
1.4.1 Feature: Notification Sending
1. ส่งข้อความแจ้งเตือนอัตโนมัติตาม Schedule
TOR Reference: 3.5.1 (ส่วนข้อความ), 3.4.1, 3.4.2
คำอธิบาย: ระบบอัตโนมัติสำหรับส่งข้อความแจ้งเตือนนัดหมายไปยังผู้ป่วยตามตารางเวลาที่กำหนดไว้ โดยใช้ LINE Messaging API และ Cron Job/Scheduler ทำงานเบื้องหลัง
การทำงาน:
Background Scheduler Process:
- Cron Job/Windows Scheduled Task ทำงานทุก 1-5 นาที
-
Query ข้อมูล: ดึงรายการนัดที่ต้องส่งแจ้งเตือนในช่วงเวลานี้
-
วันที่ต้องส่ง = วันนี้
- เวลาต้องส่ง ≤ เวลาปัจจุบัน
- สถานะ = "รอส่ง" (Pending)
- ผู้ป่วยเปิดรับการแจ้งเตือน
-
มีข้อมูล LINE User ID
-
สร้าง Notification Queue: จัดเรียงลำดับการส่ง
-
ส่งข้อความทีละรายการ:
-
เรียก LINE Messaging API
- ส่ง Push Message ไปยัง LINE User ID
-
รอ Response จาก LINE API
-
อัปเดตสถานะ:
-
สำเร็จ → สถานะ "ส่งแล้ว" + บันทึก Timestamp
- ล้มเหลว → สถานะ "ล้มเหลว" + บันทึกสาเหตุ + Retry Queue
กลไกการ Retry (ลองใหม่):
- ล้มเหลวครั้งแรก → รอ 5 นาที แล้วลองใหม่
- ล้มเหลวครั้งที่ 2 → รอ 15 นาที แล้วลองใหม่
- ล้มเหลวครั้งที่ 3 → แจ้งเตือนเจ้าหน้าที่ + หยุด Retry
Rate Limiting (จำกัดอัตรา):
- LINE API มีข้อจำกัด: ไม่เกิน 500 ข้อความ/วินาที
- ระบบควบคุม: ส่งไม่เกิน 100 ข้อความ/นาที (ปลอดภัย)
- ใช้ Queue Management ถ้ามีข้อความเยอะ
การจัดการข้อผิดพลาด:
- LINE User Block Bot: อัปเดตสถานะเป็น "Inactive" ไม่ส่งอีก
- Invalid LINE User ID: แจ้งเตือนเจ้าหน้าที่ให้ตรวจสอบ
- LINE API Down: Retry + Alert ผู้ดูแล
- Network Error: Retry ตาม Exponential Backoff
ตัวอย่างการทำงาน:
เวลา 09:00 น.
→ ระบบ Query พบนัด 50 รายการที่ต้องส่ง
→ สร้าง Queue 50 รายการ
→ ส่งทีละรายการ (ประมาณ 30 วินาที เสร็จทั้งหมด)
→ สำเร็จ 48 รายการ, ล้มเหลว 2 รายการ
→ 2 รายการล้มเหลวเข้า Retry Queue
→ บันทึก Log
UI/UX Requirements:
-
Scheduler Status Dashboard:
-
แสดงสถานะ Service (Running/Stopped)
- เวลารันครั้งล่าสุด
- จำนวนข้อความที่ส่งไปแล้ววันนี้
- จำนวนข้อความในคิว (Pending)
-
อัตราความสำเร็จ (%)
-
Manual Control:
-
ปุ่ม Start/Stop Service (สำหรับ Admin)
- ปุ่ม "ส่งคิวทันที" (Force Send)
-
ปุ่ม "ล้างคิว" (Clear Queue)
-
Real-time Monitor:
-
แสดงข้อความที่กำลังส่ง (Live)
- Progress Bar
-
Log แสดงทุกการส่ง (Success/Failed)
-
Alert System:
-
แจ้งเตือนเมื่อ Service หยุดทำงาน
- แจ้งเตือนเมื่อ Success Rate < 90%
- แจ้งเตือนเมื่อ LINE API มีปัญหา
2. ส่งข้อความแบบตอบกลับ (Interactive Message)
TOR Reference: 3.5.1
คำอธิบาย: ฟีเจอร์ส่งข้อความแจ้งเตือนที่ผู้ป่วยสามารถตอบกลับได้ทันที โดยใช้ LINE Quick Reply หรือ Flex Message พร้อมปุ่ม เพื่อให้ผู้ป่วยยืนยัน เลื่อน หรือยกเลิกนัดได้ง่าย
การทำงาน:
ส่วนการส่งข้อความ:
- สร้างข้อความแจ้งเตือนตาม Template
-
เพิ่ม Quick Reply Buttons:
-
✅ "ยืนยันมาตามนัด"
- 📅 "ขอเลื่อนนัด"
-
❌ "ขอยกเลิกนัด"
-
หรือใช้ Flex Message (Card สวยงาม):
-
แสดงข้อมูลนัดเป็น Card
- ปุ่มใหญ่ชัดเจน
-
มีไอคอนและสี
-
ส่งผ่าน LINE API
ส่วนรับการตอบกลับ (Webhook): 1. ผู้ป่วยคลิกปุ่ม 2. LINE Server ส่ง Event มาที่ Webhook URL 3. ระบบรับ Event และแยกประเภท:
- Postback Event (จากปุ่ม Flex Message)
-
Message Event (จาก Quick Reply)
-
ดึงข้อมูล:
-
LINE User ID
- Action (confirm/reschedule/cancel)
-
Appointment ID (ส่งมาใน Postback Data)
-
ประมวลผลตาม Action
การประมวลผลแต่ละ Action:
🟢 ยืนยันมาตามนัด:
- อัปเดตสถานะนัด → "ยืนยันแล้ว"
- บันทึก Timestamp การตอบกลับ
- ส่งข้อความตอบกลับ:
✅ ยืนยันการนัดสำเร็จ
เราจะรอคุณในวันที่ {date} เวลา {time}
ขอบคุณค่ะ/ครับ 🙏
🟡 ขอเลื่อนนัด:
- บันทึกคำขอเลื่อนนัด
- อัปเดตสถานะ → "รอเลื่อนนัด"
- ส่งข้อความตอบกลับ:
📅 เราได้รับคำขอเลื่อนนัดแล้ว
เจ้าหน้าที่จะติดต่อกลับภายใน 24 ชั่วโมง
หรือโทร 02-XXX-XXXX
- แจ้งเตือนเจ้าหน้าที่: ส่งการแจ้งเตือนใน Back Office
- เจ้าหน้าที่ติดต่อผู้ป่วยเพื่อนัดใหม่
🔴 ขอยกเลิกนัด:
- บันทึกคำขอยกเลิก
- อัปเดตสถานะ → "รอยกเลิก"
- ส่งข้อความตอบกลับ:
❌ เราได้รับคำขอยกเลิกนัดแล้ว
เจ้าหน้าที่จะยืนยันการยกเลิกภายใน 24 ชั่วโมง
หากต้องการนัดใหม่ โทร 02-XXX-XXXX
- แจ้งเตือนเจ้าหน้าที่: ส่งการแจ้งเตือนใน Back Office
- เจ้าหน้าที่ยืนยันการยกเลิกใน HIS
กรณีพิเศษ:
- ตอบกลับหลายครั้ง: รับเฉพาะครั้งแรก เวลาถัดมาแจ้งว่า "ได้รับคำตอบแล้ว"
- ตอบกลับช้า: ถ้าเลยวันนัดแล้ว แจ้งว่า "ไม่สามารถดำเนินการได้"
- ข้อความเปล่า: ส่ง Help Message แนะนำวิธีใช้
UI/UX Requirements:
-
LINE Message Design:
-
Flex Message แบบ Bubble (Card)
- Header แสดงโลโก้โรงพยาบาล
- Body แสดงข้อมูลนัดชัดเจน
- Footer มีปุ่ม 3 ปุ่ม (สีเขียว/เหลือง/แดง)
-
ใช้ Emoji ให้เข้าใจง่าย
-
Back Office - Response Dashboard:
-
แสดงรายการผู้ป่วยที่ตอบกลับ
- กรองตามประเภทการตอบ (ยืนยัน/เลื่อน/ยกเลิก)
- Badge แจ้งเตือน "ต้องดำเนินการ" สำหรับคำขอเลื่อน/ยกเลิก
- ปุ่มติดต่อผู้ป่วย (แสดงเบอร์โทร)
-
ปุ่มยืนยันการดำเนินการ
-
Response Timeline:
-
แสดงเวลาที่ส่งข้อความ
- แสดงเวลาที่ผู้ป่วยตอบกลับ
- แสดงเวลาที่เจ้าหน้าที่ดำเนินการ
- สถานะแต่ละขั้นตอน
3. ส่งข้อความแบบกลุ่มตามเงื่อนไข (Broadcast Message)
TOR Reference: 3.5.4, 2.4 (รองรับการส่งข้อความกลุ่มตามเงื่อนไข)
คำอธิบาย: ฟีเจอร์สำหรับส่งข้อความไปยังกลุ่มผู้ป่วยที่ตรงตามเงื่อนไข เช่น แจ้งข่าวสาร ประกาศปิดแผนก หรือข้อมูลสำคัญ โดยสามารถกรองกลุ่มเป้าหมายได้อย่างละเอียด
การทำงาน:
Step 1: สร้างแคมเปญข้อความกลุ่ม:
- เจ้าหน้าที่เข้าสู่หน้า "ส่งข้อความกลุ่ม"
- คลิกปุ่ม "สร้างแคมเปญใหม่"
- ตั้งชื่อแคมเปญ เช่น "ประกาศปิดแผนก US วันที่ 1 ธ.ค."
- กำหนดเงื่อนไขกลุ่มเป้าหมาย (ตาม TOR 3.5.4 และ 2.4)
เงื่อนไขการกรองกลุ่มเป้าหมาย:
1. กรองตามข้อมูลทั่วไป:
- อายุ: ช่วงอายุ (เช่น 20-40 ปี, 60+ ปี)
- เพศ: ชาย/หญิง/ทั้งหมด
- หน่วยงาน/แผนก: ผู้ป่วยของแผนกใด
2. กรองตามนัดหมาย (ตาม TOR 3.5.4):
-
วันที่นัดหมาย:
-
ช่วงวันที่ (เช่น 1-10 ธ.ค. 2025)
-
วันที่เฉพาะ (เช่น วันนี้, พรุ่งนี้, สัปดาห์นี้)
-
ประเภทการนัดหมาย:
-
เลือกหลายประเภท (US, MG, CT, X-Ray)
-
หรือทุกประเภท
-
แพทย์ผู้นัดหมาย:
-
เลือกแพทย์คนใดคนหนึ่ง
-
หรือทุกคน
-
สถานะนัด:
-
รอยืนยัน/ยืนยันแล้ว/ทั้งหมด
3. กรองตามกลุ่มประเภทการรักษา (ตาม TOR 2.4):
- กลุ่มโรค (ถ้ามีข้อมูลใน HIS)
- ประเภทการรักษา (ผู้ป่วยนอก/ผู้ป่วยใน)
- ความถี่การมา (มาครั้งแรก/ติดตาม)
Step 2: เขียนข้อความ:
- กรอกข้อความที่ต้องการส่ง
- สามารถใช้ Variables:
{name},{date},{department} - เพิ่มรูปภาพ (Optional)
- Preview ข้อความ
Step 3: ตรวจสอบกลุ่มเป้าหมาย:
- ระบบแสดงจำนวนผู้รับ (เช่น "พบ 245 คน")
- แสดงตัวอย่างรายชื่อ (10 คนแรก)
- Preview ข้อความที่จะส่ง
Step 4: กำหนดเวลาส่ง:
- ส่งทันที: ส่งทันทีที่กด Confirm
- กำหนดเวลา: เลือกวันและเวลาที่ต้องการส่ง
Step 5: ส่งข้อความ:
- Confirm การส่ง
- ระบบสร้าง Queue
- ส่งข้อความทีละราย (ไม่เกิน 100 ข้อความ/นาที)
- บันทึก Log และสถิติ
ตัวอย่างการใช้งาน:
กรณีที่ 1: แจ้งปิดแผนกชั่วคราว
- เงื่อนไข: นัด US ในวันที่ 1-5 ธ.ค.
- ข้อความ: "เรียนคุณ{name} แผนก Ultrasound จะปิดชั่วคราววันที่ 3 ธ.ค. กรุณาติดต่อเลื่อนนัดค่ะ"
กรณีที่ 2: แจ้งข่าวสารสำคัญ
- เงื่อนไข: ทุกคนที่ลงทะเบียน LINE
- ข้อความ: "โรงพยาบาลขยายเวลาเปิด-ปิดใหม่ 07:00-20:00 น."
กรณีที่ 3: แจ้งกลุ่มผู้ป่วยเฉพาะ
- เงื่อนไข: เพศหญิง อายุ 40-60 ปี นัด MG
- ข้อความ: "เชิญร่วมกิจกรรม Pink October ตรวจเต้านมฟรี"
UI/UX Requirements:
-
หน้าสร้างแคมเปญ:
-
Wizard แบบ Step-by-Step (4-5 Steps)
- Progress Indicator ด้านบน
-
ปุ่ม "ย้อนกลับ" และ "ถัดไป"
-
Filter Builder:
-
UI แบบ Visual Query Builder
- Drag & Drop เงื่อนไข
- เพิ่ม/ลบเงื่อนไขได้ง่าย
-
แสดงจำนวนผู้รับแบบ Real-time
-
Message Editor:
-
Text Area ขนาดใหญ่
- Image Upload
- Preview Panel ด้านข้าง
-
Character Counter
-
Confirmation Screen:
-
แสดงสรุปทั้งหมด
- จำนวนผู้รับ
- เวลาที่จะส่ง
- Preview ข้อความ
-
Checkbox "ยืนยันการส่ง"
-
Campaign History:
-
ตารางแสดงแคมเปญที่ส่งแล้ว
- สถิติ: ส่งไป X คน, อ่านแล้ว Y คน
- ปุ่ม "ส่งอีกครั้ง" (Copy Campaign)
4. ส่งข้อความเร่งด่วนเฉพาะบุคคล (Manual Send)
TOR Reference: 3.5.4
คำอธิบาย: ฟีเจอร์สำหรับเจ้าหน้าที่ส่งข้อความไปยังผู้ป่วยเฉพาะรายได้ทันที สำหรับกรณีเร่งด่วน เช่น แจ้งยกเลิกนัด เปลี่ยนแพลงเวลา หรือแจ้งข้อมูลสำคัญ
การทำงาน:
Step 1: เลือกผู้รับ:
- เจ้าหน้าที่เข้าสู่หน้า "ส่งข้อความด่วน"
-
ค้นหาผู้ป่วยด้วย:
-
HN
- ชื่อ-สกุล
-
เบอร์โทร
-
หรือเลือกจากรายการนัดหมาย (มีปุ่ม "ส่งข้อความ" ในแต่ละรายการ)
- ระบบแสดงข้อมูลผู้ป่วยและนัดหมาย
Step 2: เขียนข้อความ:
-
เลือก Template ด่วน (ถ้ามี):
-
"แจ้งยกเลิกนัด"
- "แจ้งเปลี่ยนเวลานัด"
- "แจ้งเตือนพิเศษ"
-
"ข้อความทั่วไป"
-
หรือพิมพ์ข้อความเอง
- สามารถแทรกตัวแปร (ชื่อ, วันนัด, เวลา)
- Preview ข้อความ
Step 3: ส่งข้อความ:
- กด "ส่งทันที"
- ระบบส่งผ่าน LINE API
- แสดงผลลัพธ์ทันที (สำเร็จ/ล้มเหลว)
- บันทึก Log
การตรวจสอบก่อนส่ง:
- เช็คว่าผู้ป่วยลงทะเบียน LINE หรือยัง
- เช็คว่าผู้ป่วยเปิดรับการแจ้งเตือนหรือไม่
- เตือนถ้าผู้ป่วย Block Bot
- แสดงเวลาที่ส่งข้อความครั้งล่าสุด (ไม่ให้ส่งซ้ำบ่อย)
ตัวอย่าง Template ด่วน:
Template "แจ้งยกเลิกนัด":
🔴 แจ้งเปลี่ยนแปลงการนัดหมาย
เรียนคุณ{name}
ขออภัยค่ะ/ครับ การนัดหมายของคุณ
วันที่: {appointment_date}
เวลา: {appointment_time}
ถูกยกเลิก เนื่องจาก {reason}
กรุณาติดต่อนัดใหม่
โทร: 02-XXX-XXXX
Template "แจ้งเปลี่ยนเวลา":
⏰ แจ้งเปลี่ยนเวลานัดหมาย
เรียนคุณ{name}
เวลานัดเดิม: {old_time}
เปลี่ยนเป็น: {new_time}
วันที่: {appointment_date}
หากไม่สะดวก กรุณาติดต่อ
โทร: 02-XXX-XXXX
กรณีพิเศษ:
- ส่งหลายคนพร้อมกัน: เลือกได้สูงสุด 10 คนต่อครั้ง
- ส่งพร้อมไฟล์: แนบรูปภาพหรือเอกสาร (PDF)
- ข้อความยาว: เตือนถ้าเกิน 1,000 ตัวอักษร
UI/UX Requirements:
-
หน้าส่งข้อความด่วน:
-
Layout แบบ 2 คอลัมน์
- ซ้าย: ค้นหาและเลือกผู้รับ
-
ขวา: เขียนข้อความและส่ง
-
Search & Select:
-
Autocomplete Search Box
- แสดงผลลัพธ์เป็นรายการ
- แสดงข้อมูลผู้ป่วยย่อ (HN, ชื่อ, นัดล่าสุด)
-
Badge แสดงสถานะ LINE (เขียว=ใช้งานได้, แดง=Block)
-
Message Composer:
-
Dropdown เลือก Template
- Text Area ขนาดกลาง
- ปุ่ม Insert Variable
- Preview Panel ด้านล่าง
-
Character Counter
-
Send Button:
-
ปุ่มใหญ่สีส้ม "ส่งทันที"
- แสดง Loading ขณะส่ง
-
แสดง Success/Error Message ทันที
-
Send History:
-
แสดงข้อความที่ส่งไปล่าสุด (5 รายการ)
- เพื่อตรวจสอบว่าส่งซ้ำหรือไม่
1.4.2 Feature: Notification Tracking
1. บันทึกสถานะการส่งข้อความ
TOR Reference: 3.5.2
คำอธิบาย: ระบบบันทึกข้อมูลทุกครั้งที่มีการส่งข้อความแจ้งเตือน เพื่อให้สามารถตรวจสอบย้อนหลังได้ว่าส่งไปเมื่อไหร่ สถานะอย่างไร และมีปัญหาหรือไม่
การทำงาน:
ข้อมูลที่บันทึก (ตาม TOR 3.5.2):
- Notification ID: รหัสเฉพาะของการแจ้งเตือน
- Appointment ID: นัดหมายที่เกี่ยวข้อง
- HN: รหัสผู้ป่วย
- LINE User ID: ผู้รับ
- Message Type: ประเภทข้อความ (นัดหมาย/ข่าวสาร/ด่วน)
- Message Content: เนื้อหาข้อความที่ส่ง
- Sent Timestamp: วันเวลาที่ส่ง
-
Status: สถานะการส่ง
-
pending- รอส่ง sent- ส่งสำเร็จdelivered- ส่งถึง LINE Serverread- ผู้รับอ่านแล้ว (ถ้า LINE แจ้งกลับมา)failed- ส่งล้มเหลว-
blocked- ผู้รับ Block Bot -
Error Message: ข้อความ Error (ถ้ามี)
- Retry Count: จำนวนครั้งที่ลองส่งใหม่
- Sent By: ผู้ส่ง (System/User ID)
กระบวนการบันทึก:
- ก่อนส่งข้อความ → สร้าง Record สถานะ
pending - ส่งข้อความผ่าน LINE API
-
รับ Response:
-
สำเร็จ → อัปเดตเป็น
sent+ บันทึก Timestamp -
ล้มเหลว → อัปเดตเป็น
failed+ บันทึก Error -
ถ้า LINE Webhook แจ้งว่าอ่านแล้ว → อัปเดตเป็น
read
การใช้ประโยชน์จากข้อมูล:
- ตรวจสอบว่าผู้ป่วยได้รับข้อความหรือไม่
- วิเคราะห์อัตราความสำเร็จการส่ง
- หาสาเหตุของการส่งล้มเหลว
- ตรวจสอบว่าส่งซ้ำหรือไม่
UI/UX Requirements:
-
Notification Log Table:
-
แสดงรายการทั้งหมดที่ส่ง
- คอลัมน์: วันเวลา, HN, ชื่อ, ประเภท, สถานะ
- Badge สีแสดงสถานะ
-
ไอคอนแสดงประเภทข้อความ
-
Filter & Search:
-
กรองตามสถานะ
- กรองตามวันที่
-
ค้นหาด้วย HN/ชื่อ
-
Detail View:
-
คลิกดูรายละเอียดเต็ม
- แสดงเนื้อหาข้อความ
- แสดง Timeline การส่ง
-
แสดง Error Details (ถ้ามี)
-
Statistics Dashboard:
-
จำนวนข้อความส่งวันนี้
- อัตราความสำเร็จ
- กราฟแสดงจำนวนข้อความรายวัน
2. บันทึกการตอบกลับของผู้ป่วย
TOR Reference: 3.5.3
คำอธิบาย: ระบบบันทึกข้อมูลทุกครั้งที่ผู้ป่วยตอบกลับข้อความแจ้งเตือน เพื่อติดตามสถานะนัดหมายและวิเคราะห์พฤติกรรมผู้ป่วย
การทำงาน:
ข้อมูลที่บันทึก (ตาม TOR 3.5.3):
- Response ID: รหัสเฉพาะของการตอบกลับ
- Notification ID: การแจ้งเตือนที่เกี่ยวข้อง
- Appointment ID: นัดหมายที่เกี่ยวข้อง
- HN: รหัสผู้ป่วย
- LINE User ID: ผู้ตอบกลับ
-
Response Type: ประเภทการตอบกลับ
-
confirmed- ยืนยันมาตามนัด reschedule- ขอเลื่อนนัดcancelled- ขอยกเลิกนัด-
other- ข้อความอื่นๆ -
Response Message: ข้อความที่ผู้ป่วยส่งมา (ถ้ามี)
- Response Timestamp: วันเวลาที่ตอบกลับ
- Response Time: ระยะเวลาตอบกลับ (นับจากส่งข้อความ)
- Action Taken: การดำเนินการของเจ้าหน้าที่
- Action By: เจ้าหน้าที่ที่ดำเนินการ
- Action Timestamp: วันเวลาดำเนินการ
กระบวนการบันทึก:
- ผู้ป่วยคลิกปุ่มตอบกลับ/พิมพ์ข้อความ
- LINE Webhook ส่ง Event มา
- ระบบรับและแยกประเภทการตอบกลับ
- สร้าง Response Record
- อัปเดตสถานะนัดหมาย
- ส่งข้อความตอบกลับผู้ป่วย
- ถ้าเป็นคำขอเลื่อน/ยกเลิก → สร้าง Task สำหรับเจ้าหน้าที่
การใช้ประโยชน์จากข้อมูล:
- ติดตามสถานะนัดหมาย (ยืนยัน/เลื่อน/ยกเลิก)
- วิเคราะห์อัตราการตอบกลับ
- วิเคราะห์เวลาเฉลี่ยในการตอบกลับ
- วิเคราะห์สาเหตุการเลื่อน/ยกเลิกนัด
UI/UX Requirements:
-
Response Log Table:
-
แสดงรายการการตอบกลับทั้งหมด
- คอลัมน์: วันเวลา, HN, ชื่อ, ประเภทการตอบ, สถานะดำเนินการ
- Badge สีแสดงประเภทและสถานะ
-
ไอคอนแสดงว่าดำเนินการแล้วหรือยัง
-
Action Required List:
-
รายการที่รอดำเนินการ (เลื่อน/ยกเลิก)
- เรียงตาม Priority (เร่งด่วนก่อน)
- ปุ่ม "ดำเนินการ" ในแต่ละรายการ
-
Badge จำนวนรายการรอดำเนินการ
-
Response Detail:
-
แสดงข้อมูลนัดหมาย
- แสดงข้อความที่ผู้ป่วยตอบกลับ
- แสดงประวัติการสื่อสาร
- ปุ่มติดต่อผู้ป่วย (โทร/ส่งข้อความ)
-
ฟอร์มบันทึกการดำเนินการ
-
Analytics:
-
อัตราการตอบกลับ (%)
- อัตราการยืนยัน/เลื่อน/ยกเลิก (%)
- กราฟแสดงจำนวนการตอบกลับรายวัน
3. แสดงประวัติการแจ้งเตือน
TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับการติดตาม)
คำอธิบาย: ฟีเจอร์แสดงประวัติการแจ้งเตือนของผู้ป่วยแต่ละราย เพื่อให้เจ้าหน้าที่เห็นภาพรวมการสื่อสารกับผู้ป่วย
การทำงาน:
การแสดงประวัติ:
- เจ้าหน้าที่เปิดรายละเอียดผู้ป่วย
- คลิกแท็บ "ประวัติการแจ้งเตือน"
-
แสดงรายการแบบ Timeline:
-
ข้อความแจ้งเตือนที่ส่งไป
- การตอบกลับของผู้ป่วย
-
การดำเนินการของเจ้าหน้าที่
-
เรียงจากใหม่ไปเก่า
ข้อมูลที่แสดง:
- วันเวลาส่ง
- ประเภทข้อความ
- เนื้อหาย่อ
- สถานะ (ส่งแล้ว/อ่านแล้ว/ตอบกลับแล้ว)
- การตอบกลับ (ถ้ามี)
การกรอง:
- กรองตามประเภทข้อความ
- กรองตามช่วงเวลา
- กรองตามสถานะ
UI/UX Requirements:
-
Timeline View:
-
แสดงเป็นเส้นเวลาแนวตั้ง
- จุดบนเส้นเวลาแสดงเหตุการณ์
- ไอคอนต่างกันตามประเภท (ส่ง📤/รับ📥)
-
สีต่างกันตามสถานะ
-
Card Design:
-
แต่ละเหตุการณ์แสดงเป็น Card
- Header: วันเวลา + ประเภท
- Body: เนื้อหาข้อความ (ย่อ)
-
Footer: สถานะ + ปุ่ม "ดูเพิ่มเติม"
-
Filter Panel:
-
ด้านบนหรือด้านข้าง
- Checkbox เลือกประเภทและสถานะ
- Date Range Picker
-
ปุ่ม "ล้างตัวกรอง"
-
Export:
-
ปุ่ม Export ประวัติเป็น PDF
- สำหรับเก็บเป็นหลักฐาน
4. Dashboard สถานะการส่ง
TOR Reference: ไม่ระบุใน TOR (แต่จำเป็นสำหรับ Monitoring)
คำอธิบาย: Dashboard สำหรับเจ้าหน้าที่และผู้ดูแลระบบติดตามภาพรวมการส่งการแจ้งเตือนทั้งหมด แบบ Real-time
การทำงาน:
ข้อมูลที่แสดงใน Dashboard:
1. สถิติวันนี้ (Today's Stats):
- จำนวนข้อความส่งไปแล้ว
- จำนวนข้อความรอส่ง
- จำนวนข้อความล้มเหลว
- อัตราความสำเร็จ (%)
2. สถานะแบบ Real-time:
- สถานะ Service (Running/Stopped)
- ข้อความที่กำลังส่ง (กี่รายการ/เหลืออีกกี่รายการ)
- Queue Size (ในคิว)
- ข้อความส่งล้มเหลว (Alert)
3. กราฟและชาร์ต:
- Line Chart: จำนวนข้อความส่งรายวัน (7 วันล่าสุด)
- Pie Chart: สัดส่วนการตอบกลับ (ยืนยัน/เลื่อน/ยกเลิก/ไม่ตอบ)
- Bar Chart: จำนวนข้อความแยกตามประเภทนัด
- Area Chart: Trend การส่งข้อความรายเดือน
4. รายการล่าสุด:
- ข้อความที่ส่งไปล่าสุด (5-10 รายการ)
- การตอบกลับล่าสุด (5-10 รายการ)
- ข้อความล้มเหลว (ต้องดำเนินการ)
5. Alert & Warning:
- Service หยุดทำงาน (แดง)
- อัตราความสำเร็จต่ำกว่า 90% (เหลือง)
- LINE API มีปัญหา (แดง)
- Queue สูงผิดปกติ (เหลือง)
6. ประสิทธิภาพระบบ:
- เวลาเฉลี่ยในการส่ง 1 ข้อความ
- จำนวนข้อความต่อนาที
- Connection Status กับ LINE API
- Database Performance
การ Auto-refresh:
- Dashboard อัปเดตทุก 30-60 วินาที
- สามารถปิด Auto-refresh ได้
- ปุ่ม Refresh Manual
UI/UX Requirements:
-
Layout:
-
Grid Layout แบบ Responsive
- แบ่งเป็น Section ชัดเจน
-
ใช้ Card Design แยกแต่ละส่วน
-
KPI Cards:
-
Card ใหญ่แสดงตัวเลขสำคัญ
- ใช้สีเด่นชัด
- แสดงไอคอนประกอบ
-
แสดงเปรียบเทียบกับเมื่อวาน (↑ / ↓)
-
Charts & Graphs:
-
ใช้ Library สวยงาม (Chart.js, D3.js)
- Interactive (Hover แสดงรายละเอียด)
- สีสันสบายตา
-
Legend ชัดเจน
-
Status Indicators:
-
Traffic Light Style (🔴🟡🟢)
- Badge แสดงสถานะ
-
Animation สำหรับ Real-time Update
-
Alert Panel:
-
แสดงเด่นชัดเมื่อมีปัญหา
- ปุ่ม "แก้ไข" หรือ "ดูรายละเอียด"
-
สามารถ Dismiss Alert ได้
-
Quick Actions:
-
ปุ่มด่วน: Refresh, Export, Settings
- ลิงก์ไปยัง Log Detail
- ปุ่ม "ส่งข้อความทดสอบ"
สรุป Module 1.4: Notification System
ความสำคัญ: Module นี้เป็นหัวใจหลักของระบบ ทำหน้าที่ส่งการแจ้งเตือนไปยังผู้ป่วย รับการตอบกลับ และติดตามผลลัพธ์ ต้องให้ความสำคัญกับความน่าเชื่อถือ ความรวดเร็ว และความถูกต้องของข้อมูล รวมถึงการจัดการ Error ที่ดี ครอบคลุมทุกข้อกำหนดใน TOR 3.5 (3.5.1 - 3.5.4)
Timeline Summary:
- SA: 23 ชั่วโมง
- UI Design: 28 ชั่วโมง
- Backend Dev: 104 ชั่วโมง
- Frontend Dev: 56 ชั่วโมง
- Testing: 120 ชั่วโมง
- PM: 21.1 ชั่วโมง
- Marketing Officer: 2 ชั่วโมง (สำหรับออกแบบ Flex Message และข้อความโฆษณา)