Attendance Events
Events ที่เกี่ยวข้องกับการลงเวลาเข้า-ออกงานของพนักงาน ระบบจะส่ง Event เมื่อมีการบันทึก แก้ไข หรือลบรายการลงเวลา ยกเว้นบางช่องทาง (ดูหัวข้อ กรณีที่ไม่มีการส่ง Event ด้านล่าง)
ข้อมูลใน body คือข้อมูลของรายการลงเวลา ณ ตอนที่เกิด Event (ไม่ได้ดึงข้อมูลล่าสุดใหม่ตอนส่ง)
| Event Code | ชื่อในหน้าตั้งค่า Webhook | เกิดเมื่อ |
|---|---|---|
attendance.created | บันทึกเวลาเข้า-ออกงานสำเร็จ | บันทึกเวลาสำเร็จ 1 รายการ จากช่องทางตาม ค่า source รวมถึง HR เพิ่มเวลาให้พนักงาน |
attendance.updated | แก้ไขเวลาเข้า-ออกงาน | แก้ไขรายการลงเวลา และข้อมูลใน body มีการเปลี่ยนแปลง |
attendance.deleted | ลบเวลาเข้า-ออกงาน | ลบรายการลงเวลา |
Events กลุ่มนี้อยู่ในหมวด การลงเวลา ของหน้าตั้งค่า Webhook — การเลือกหรือยกเลิก Event แล้วกดบันทึกจะมีผลกับการลงเวลาครั้งถัดไปทันที
attendance.created
เกิดขึ้นเมื่อบันทึกเวลาเข้า-ออกงานสำเร็จ 1 รายการ จากช่องทางตาม ค่า source รวมถึงกรณีที่ HR เพิ่มเวลาให้พนักงาน
ตัวอย่าง Payload:
{
"request_id": "7c2e9a41d3b84f06a5e1c9d27b3f8e40",
"event": "attendance.created",
"event_occurred_at": "2026-10-19 08:02:15",
"body": {
"time_attendance_transac_id": "20251127D4573C421639",
"source": "mobile",
"employee_id": "20251127A1B2C3D4E5F6",
"employee_code": "EMP001",
"attendance_datetime": "2026-10-19 08:02:00",
"time_attendance_type_lv": "Checkin",
"work_cycle_date": "2026-10-19",
"location_id": "20251127F6E5D4C3B2A1",
"location_name": "สำนักงานใหญ่",
"latitude": "13.75633",
"longitude": "100.50177",
"device_sn": ""
}
}attendance.updated
เกิดขึ้นเมื่อมีการแก้ไขรายการลงเวลา เช่น HR แก้เวลาในเว็บ แก้ไขผ่านแอป HumanSoft หรือแก้ไขผ่าน Edit Time (command = save)
body คือข้อมูลของรายการ หลังแก้ไข (ฟิลด์เดียวกับ attendance.created) และมีค่าเดิมก่อนแก้ไขเพิ่มอีก 2 ฟิลด์ คือ previous_attendance_datetime และ previous_work_cycle_date
ตัวอย่าง Payload:
{
"request_id": "9c1e4b7a2d0f4e6b8a3c5d7e9f1a2b3c",
"event": "attendance.updated",
"event_occurred_at": "2026-10-20 10:15:42",
"body": {
"time_attendance_transac_id": "20251127D4573C421639",
"source": "web",
"employee_id": "20251127A1B2C3D4E5F6",
"employee_code": "EMP001",
"attendance_datetime": "2026-10-19 08:00:00",
"time_attendance_type_lv": "Checkin",
"work_cycle_date": "2026-10-19",
"location_id": "20251127F6E5D4C3B2A1",
"location_name": "สำนักงานใหญ่",
"latitude": "13.75633",
"longitude": "100.50177",
"device_sn": "",
"previous_attendance_datetime": "2026-10-19 08:02:00",
"previous_work_cycle_date": "2026-10-19"
}
}ระบบจะไม่ส่ง attendance.updated หากการแก้ไขไม่ได้เปลี่ยนข้อมูลใดใน body (เช่น แก้เฉพาะข้อมูลที่ไม่ได้อยู่ใน Payload)
attendance.deleted
เกิดขึ้นเมื่อมีการลบรายการลงเวลา เช่น HR ลบเวลาในเว็บ หรือลบผ่าน Edit Time (command = delete)
body คือข้อมูลของรายการ ก่อนถูกลบ (ฟิลด์เดียวกับ attendance.created) — ระบบปลายทางควรลบรายการที่มี time_attendance_transac_id ตรงกัน
ตัวอย่าง Payload:
{
"request_id": "5d2a8f1c3b7e4a9d6c0b2e4f8a1d3c5b",
"event": "attendance.deleted",
"event_occurred_at": "2026-10-20 11:03:08",
"body": {
"time_attendance_transac_id": "20251127D4573C421639",
"source": "web",
"employee_id": "20251127A1B2C3D4E5F6",
"employee_code": "EMP001",
"attendance_datetime": "2026-10-19 08:00:00",
"time_attendance_type_lv": "Checkin",
"work_cycle_date": "2026-10-19",
"location_id": "20251127F6E5D4C3B2A1",
"location_name": "สำนักงานใหญ่",
"latitude": "13.75633",
"longitude": "100.50177",
"device_sn": ""
}
}Source Values
ฟิลด์ source บอกช่องทางที่ทำให้เกิด Event:
source | ช่องทาง |
|---|---|
mobile | แอป HumanSoft — รวมการส่งรายการที่ลงเวลาไว้ตอนออฟไลน์ และการแก้ไขเวลาผ่านแอป |
open_api | Open API — Submit Time Attendance และ Edit Time |
fingerprint | เครื่องสแกนลายนิ้วมือ |
device | อุปกรณ์บันทึกเวลาอื่น |
line | LINE OA |
timeapp | Time APP (เครื่องลงเวลาแบบ kiosk) |
web | เว็บ HumanSoft — รวมการเพิ่ม/แก้ไข/ลบเวลาโดย HR |
Body Fields Reference
ทุกฟิลด์ใน body เป็น string — ฟิลด์ที่ไม่มีค่าจะเป็น "" (ไม่ใช่ null)
| Field | Type | Description |
|---|---|---|
time_attendance_transac_id | string | ID ของรายการลงเวลา — เป็นค่าเดียวกันใน created / updated / deleted ของรายการเดียวกัน |
source | string | ช่องทางที่ทำให้เกิด Event (ดู ค่า source) |
employee_id | string | ID ของพนักงาน — ใช้เชื่อมกับข้อมูลจาก Employee Events |
employee_code | string | รหัสพนักงาน (เป็น "" หากระบบค้นหารหัสพนักงานไม่ได้) |
attendance_datetime | string | วันเวลาที่ลงเวลา รูปแบบ YYYY-MM-DD HH:mm:ss (เวลาประเทศไทย) |
time_attendance_type_lv | string | วิธีลงเวลา เช่น Checkin, Fingerprint, TimeApp, LINE-Checkin, Manual (ดูเพิ่มเติมที่ Attendance Types) |
work_cycle_date | string | วันของกะการทำงานที่รายการนี้ถูกนับ รูปแบบ YYYY-MM-DD — อาจต่างจากวันที่ใน attendance_datetime เมื่อเป็นกะข้ามวัน |
location_id | string | ID ของจุดลงเวลา ("" หากไม่ได้ลงเวลาที่จุดลงเวลา) |
location_name | string | ชื่อจุดลงเวลา — บางช่องทางใช้ชื่ออุปกรณ์แทนเมื่อไม่มีจุดลงเวลา และอาจเป็น "" |
latitude | string | ละติจูดที่บันทึกพร้อมรายการลงเวลา |
longitude | string | ลองจิจูดที่บันทึกพร้อมรายการลงเวลา |
device_sn | string | Serial number ของอุปกรณ์ที่ใช้ลงเวลา ("" หากไม่ได้ลงเวลาผ่านอุปกรณ์) |
previous_attendance_datetime | string | เฉพาะ attendance.updated — attendance_datetime ก่อนแก้ไข |
previous_work_cycle_date | string | เฉพาะ attendance.updated — work_cycle_date ก่อนแก้ไข |
Payload ไม่มีข้อมูลส่วนบุคคลอื่นของพนักงาน (เช่น ชื่อ เลขบัตรประชาชน รูปภาพ) — หากต้องการข้อมูลพนักงานให้ใช้ employee_id หรือ employee_code ร่วมกับ Employee API
กรณีที่ไม่มีการส่ง Event
- บันทึกเวลาไม่สำเร็จ เช่น ลงเวลาซ้ำ หรือวันที่อยู่ในงวดเงินเดือนที่ปิดแล้ว
- บริษัทไม่ได้เลือกรับ Event นั้นในหน้าตั้งค่า Webhook
attendance.updatedที่การแก้ไขไม่ได้เปลี่ยนข้อมูลใดในbody- การนำเข้าเวลาเป็นชุด เช่น Import Time Attendance และการนำเข้าไฟล์เวลาในระบบ
- การเพิ่มเวลาผ่าน Add Time Attendance
- เวลาที่ระบบเพิ่มให้เมื่อคำร้องขอปรับปรุงเวลาได้รับการอนุมัติ (ติดตามคำร้องได้จาก Time Adjust Events)
หากระบบของคุณต้องการข้อมูลลงเวลาครบทุกรายการ อย่าพึ่ง Webhook เพียงอย่างเดียว — รายการจากช่องทางข้างต้นจะไม่มี Event ให้ใช้ API ค้นหาข้อมูลลงเวลา เช่น Search Time Attendance ตรวจสอบเพิ่มเติม
สรุป Attendance Events
| Event Code | คำอธิบาย |
|---|---|
attendance.created | บันทึกเวลาเข้า-ออกงานสำเร็จ 1 รายการ (รวมถึง HR เพิ่มเวลา) |
attendance.updated | แก้ไขรายการลงเวลา — body เป็นค่าหลังแก้ไข พร้อมค่าเดิม 2 ฟิลด์ |
attendance.deleted | ลบรายการลงเวลา — body เป็นข้อมูลก่อนถูกลบ |
ดูรูปแบบ HTTP Headers, การตรวจสอบ Signature และแนวทางจัดการ Event ซ้ำได้ที่ Webhook Overview