Skip to Content
🚀 Welcome to Humansoft Open API Documentation

Import Time Attendance

นำเข้าข้อมูลบันทึกเวลาแบบกลุ่ม (Batch Import)

ใช้ API นี้เพื่อนำเข้าข้อมูลบันทึกเวลาเข้า-ออกจำนวนมากพร้อมกัน รองรับทั้งการเพิ่ม (ADD) และการลบ (DEL) ข้อมูลจะถูกส่งเข้า Queue เพื่อประมวลผลแบบ Asynchronous

Endpoint

POST /api/v1/open-apis/time-attendance/import

สิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการลงเวลา (attendance:read)

จำกัดสูงสุด 1,000 รายการ ต่อหนึ่ง request

Supported Types

Endpoint นี้ยอมรับ time_attendance_type_lv เฉพาะ 2 รูปแบบ:

รูปแบบที่ส่งผลลัพธ์ที่บันทึกคำอธิบาย
ไม่ส่งฟิลด์ หรือส่งค่าว่างImportค่า default สำหรับการนำเข้าข้อมูลทั่วไป
Device (ไม่สนตัวพิมพ์เล็ก/ใหญ่)Fingerprintสำหรับข้อมูลจากเครื่องสแกนลายนิ้วมือ

ค่าอื่นๆ (เช่น Wifi, Checkin, Manual) จะถูก ปฏิเสธ ด้วย validation

Request Parameters

พารามิเตอร์หลัก

ParameterTypeRequiredDescriptionExample
import_dataarrayYesรายการข้อมูลบันทึกเวลาที่ต้องการนำเข้า (สูงสุด 1,000 รายการ)(ดูตัวอย่างด้านล่าง)

ฟิลด์ใน import_data แต่ละรายการ

Required

ParameterTypeRequiredDescriptionExample
statusstringYesการดำเนินการ: ADD หรือ DELADD
employee_codestringYesรหัสพนักงาน (ต้องมีอยู่ในระบบ)EMP001
datestringYesวันที่บันทึก (YYYY-MM-DD) — ต้องตรงกับวันที่ใน datetime2025-11-15
datetimestringYesวันเวลาบันทึก (YYYY-MM-DD HH:mm:ss)2025-11-15 08:30:00

Optional

ParameterTypeRequiredDescriptionExample
time_attendance_type_lvstringNoไม่ส่ง/ว่าง = Import หรือส่ง Device (ค่าอื่น error)Device
time_attendance_typestringNoประเภทเวลา: AUTO, IN, OUT (default: AUTO)IN
device_snstringConditionalบังคับ เมื่อ time_attendance_type_lv เป็น DeviceSN-FP-001
location_idstringNoรหัสสถานที่MjAyNjAyMTJEOUY2MTE1ODA1NTA=
latitudenumberNoละติจูด (-90 ถึง 90)13.7563
longitudenumberNoลองจิจูด (-180 ถึง 180)100.5018
image_contentstringNoรูป Base64 หรือ data URI (data:image/jpeg;base64,...)data:image/jpeg;base64,...

Time Attendance Types (time_attendance_type)

TypeDescription
AUTOระบบตัดสินใจอัตโนมัติว่าเป็นเข้างานหรือออกงาน (default)
INกำหนดเป็นเวลาเข้างานโดยตรง
OUTกำหนดเป็นเวลาออกงานโดยตรง

Request Body Examples

ตัวอย่างที่ 1: นำเข้าแบบทั่วไป (ไม่ส่ง time_attendance_type_lv)

{ "import_data": [ { "status": "ADD", "employee_code": "EMP001", "date": "2025-11-15", "datetime": "2025-11-15 08:30:00", "time_attendance_type": "IN" }, { "status": "ADD", "employee_code": "EMP001", "date": "2025-11-15", "datetime": "2025-11-15 17:45:00", "time_attendance_type": "OUT" } ] }

ตัวอย่างที่ 2: นำเข้าจากอุปกรณ์ (Device)

{ "import_data": [ { "status": "ADD", "employee_code": "EMP001", "date": "2025-11-15", "datetime": "2025-11-15 08:30:00", "time_attendance_type_lv": "Device", "time_attendance_type": "IN", "device_sn": "SN-FP-001" } ] }

Response Format

Success Response (HTTP 200)

เมื่อมีข้อมูลที่ถูกต้องอย่างน้อย 1 รายการ ระบบจะส่งข้อมูลที่ถูกต้องเข้า Queue และตอบกลับรายการที่ไม่ผ่าน validation

{ "code": 200, "message": "successfully en-queued", "payload": { "invalid_items": [ { "index": 1, "data": { "status": "ADD", "employee_code": "EMP999", "date": "2025-11-15", "datetime": "2025-11-15 17:45:00", "time_attendance_type": "OUT" }, "errors": ["employee_code 'EMP999' not found"] } ] } }

Error Response - Validation Failed (HTTP 400)

เมื่อโครงสร้างข้อมูลระดับนอกสุดไม่ถูกต้อง (ไม่มี import_data, ไม่ใช่ array, หรือว่างเปล่า)

{ "code": 400, "message": "Validation failed", "errors": ["'import_data' must be an array"] }

Error Response - No Valid Data (HTTP 400)

เมื่อไม่มีข้อมูลที่ผ่าน validation เลย (ทุกรายการใน import_data ผิดเงื่อนไข)

{ "code": 400, "message": "No valid data to import", "payload": { "invalid_items": [ { "index": 0, "data": { "employee_code": "BAD-CODE" }, "errors": ["status is required", "date is required"] } ] } }

Response Fields

FieldTypeDescription
codenumberรหัสสถานะ (200 = สำเร็จ, 400 = ไม่สำเร็จ)
messagestringข้อความตอบกลับ
payload.invalid_itemsarrayรายการข้อมูลที่ไม่ผ่าน validation
errorsarrayรายการข้อผิดพลาดของโครงสร้างข้อมูล (กรณี validation ระดับนอกสุดไม่ผ่าน)

Code Examples

curl -X POST "https://openapi.humansoft.co.th/api/v1/open-apis/time-attendance/import" \ -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "import_data": [ { "status": "ADD", "employee_code": "EMP001", "date": "2025-11-15", "datetime": "2025-11-15 08:30:00", "time_attendance_type_lv": "Device", "time_attendance_type": "IN", "device_sn": "SN-FP-001" } ] }'

Validation Rules

ParameterRequiredValidation
import_dataYesต้องเป็น array บรรจุ object และไม่ว่างเปล่า — จำกัดไม่เกิน 1,000 รายการ
statusYesต้องเป็น ADD หรือ DEL เท่านั้น
employee_codeYesต้องมีพนักงานอยู่จริงในระบบ
dateYesต้องเป็นวันที่ที่ถูกต้องตามปฏิทิน และเลขวันที่ต้องตรงกับใน datetime
datetimeYesต้องเป็นรูปแบบ YYYY-MM-DD HH:mm:ss ที่ถูกต้อง
time_attendance_typeNoถ้าส่ง ต้องเป็น AUTO, IN, หรือ OUT
time_attendance_type_lvNoถ้าส่ง ต้องเป็น Device เท่านั้น (ไม่สนตัวพิมพ์); ไม่ส่งหรือว่าง = Import; ค่าอื่น error
device_snConditionalบังคับต้องส่ง ถ้า time_attendance_type_lv เป็น Device และต้องมีอยู่จริงในระบบ
location_idNoถ้าส่ง ต้องเป็น string
latitude / longitudeNoถ้าส่ง ต้องอยู่ในช่วงที่กำหนด
image_contentNoถ้าส่ง ต้องเป็น Base64 / data URI ตามรูปแบบที่ API รองรับ

Business Rules

Partial Success:

  • หากส่งมา 10 รายการ ผ่าน 8 ไม่ผ่าน 2 — ระบบจะส่ง 8 รายการที่ถูกต้องเข้า Queue ทันที
  • ไม่ต้องส่งข้อมูลเข้ามาซ่อมใหม่ทั้งชุด — ส่งมาเฉพาะรายการที่พังก็พอ
  • รายการที่ไม่ผ่าน validation จะถูกส่งกลับมาพร้อม error message ใน payload.invalid_items

Asynchronous Processing

  • ข้อมูลที่ผ่าน validation จะถูกส่งเข้าระบบคิว (Queue) เพื่อประมวลผลเบื้องหลัง
  • API จะตอบกลับทันทีหลังจาก validate และส่งข้อมูลเข้า Queue สำเร็จ
  • เหมาะสำหรับการนำเข้าข้อมูลจำนวนมาก

Device Validation

  • เมื่อใช้ time_attendance_type_lv เป็น Device ระบบจะตรวจสอบว่า device_sn มีอยู่จริงในระบบและเป็นประเภทอุปกรณ์ที่ถูกต้อง
  • การส่ง device หรือ DEVICE (ตัวพิมพ์เล็ก/ใหญ่) ถือว่าเทียบเท่า Device

Notes

Status Values

StatusDescription
ADDเพิ่มข้อมูลบันทึกเวลาใหม่
DELลบข้อมูลบันทึกเวลาที่มีอยู่

Important Notes

  • วันที่ใน date และ datetime ต้องตรงกัน
  • เวลาใน datetime ควรอยู่ในช่วงเวลาทำงานของพนักงาน
  • การลบ (DEL) ควรระบุข้อมูลให้ตรงกับที่มีอยู่ในระบบ
  • ข้อมูลที่ส่งเข้า Queue จะถูกประมวลผลตามลำดับ (FIFO)
  • รายการที่มี image_content รูปภาพจะถูกจัดเก็บอัตโนมัติและบันทึก URL ในข้อมูลปลายทาง

Use Cases

  1. Migration — ย้ายข้อมูลบันทึกเวลาจากระบบเดิม
  2. Integration — รับข้อมูลจากเครื่องสแกนลายนิ้วมือ (ใช้ time_attendance_type_lv: "Device")
  3. Correction — แก้ไขข้อมูลบันทึกเวลาจำนวนมาก
Last updated on