Skip to main content

ดึงข้อมูลล่าสุด

คืนค่าเฉพาะอุปกรณ์ที่ ข้อมูลมีการเปลี่ยนแปลง นับตั้งแต่เวลาที่ระบุ เหมาะสำหรับการดึงข้อมูลแบบต่อเนื่อง (polling) เพื่อติดตามตำแหน่งแบบเรียลไทม์โดยลดปริมาณข้อมูลที่รับส่ง

ทุกการตอบกลับจะมีฟิลด์ time ซึ่งเป็นเวลา (UNIX timestamp) สำหรับใช้เป็นพารามิเตอร์ time ในคำขอรอบถัดไป การยืนยันตัวตนทำผ่าน Query Parameter user_api_hash (ดู การยืนยันตัวตน)

พารามิเตอร์ (Query Parameters)

ชื่อชนิดจำเป็นค่าเริ่มต้นคำอธิบาย
user_api_hashstringรหัส API ของผู้ใช้ (API Key)
langstringenภาษาของข้อความในผลลัพธ์ เช่น en, th
timestring5 วินาทีที่แล้วคืนเฉพาะอุปกรณ์ที่อัปเดตหลังเวลานี้ (UNIX timestamp) โดยทั่วไปให้ใส่ค่า time ที่ได้จากคำขอครั้งก่อน
filters[id]integerกรองด้วยรหัสอุปกรณ์แบบตรงตัว
filters[imei]stringกรองด้วยหมายเลข IMEI แบบตรงตัว
filters[group_id]integerกรองด้วยรหัสกลุ่มแบบตรงตัว
filters[device_model]stringกรองด้วยรุ่นอุปกรณ์แบบตรงตัว
filters[plate_number]stringกรองด้วยเลขทะเบียนแบบตรงตัว
filters[registration_number]stringกรองด้วยเลขจดทะเบียนแบบตรงตัว
filters[vin]stringกรองด้วยเลขตัวถัง (VIN) แบบตรงตัว
filters[sim_number]stringกรองด้วยหมายเลขซิมแบบตรงตัว
filters[msisdn]stringกรองด้วยเบอร์โทรของซิมแบบตรงตัว
filters[object_owner]stringกรองด้วยเจ้าของอุปกรณ์แบบตรงตัว
filters[status]array[string]กรองด้วยสถานะ (คั่นด้วยจุลภาค เช่น moving,stopped)
filters[online]stringอุปกรณ์ที่ออนไลน์ภายใน N นาทีล่าสุด
filters[offline]stringอุปกรณ์ที่ออฟไลน์มาแล้วอย่างน้อย N นาที

ตัวอย่างการเรียกใช้งาน

curl "https://lite.wetrustgps.com/api/get_devices_latest?lang=th&user_api_hash=YOUR_API_HASH&time=1785744645"

ทดลองยิง API

เว้นช่อง time ว่างไว้เพื่อดึงข้อมูลย้อนหลัง 5 วินาที หรือใส่ค่า time จากผลลัพธ์รอบก่อนเพื่อจำลองการ polling

GET/get_devices_latestทดลองยิง API
https://lite.wetrustgps.com/api/get_devices_latest?lang=th
กรุณากรอก: user_api_hash

การใช้งานแบบ Polling

Endpoint นี้ออกแบบมาให้เรียกซ้ำเป็นรอบ ๆ โดยใช้ค่า time จากการตอบกลับครั้งก่อนเป็นจุดอ้างอิงของครั้งถัดไป

  1. เรียกครั้งแรกโดยไม่ต้องส่ง time (ระบบจะใช้ค่าเริ่มต้น 5 วินาทีที่แล้ว)
  2. เก็บค่า time จากผลลัพธ์ที่ได้
  3. เว้นระยะสั้น ๆ (เช่น ทุก 5–10 วินาที) แล้วเรียกอีกครั้งโดยส่งค่า time ที่เก็บไว้
  4. ประมวลผลเฉพาะอุปกรณ์ใน items และเหตุการณ์ใน events ที่ได้รับ แล้ววนกลับไปข้อ 2

วิธีนี้ทำให้แต่ละรอบได้รับเฉพาะข้อมูลที่เปลี่ยนแปลง ช่วยลดปริมาณการรับส่งข้อมูลอย่างมาก

const BASE = 'https://lite.wetrustgps.com/api/get_devices_latest';
const API_HASH = 'YOUR_API_HASH';

let lastTime = Math.floor(Date.now() / 1000);

async function poll() {
const params = new URLSearchParams({
lang: 'th',
user_api_hash: API_HASH,
time: lastTime,
});

const res = await fetch(`${BASE}?${params}`);
const data = await res.json();

data.items.forEach(updateDeviceOnMap); // อัปเดตตำแหน่งบนแผนที่
data.events.forEach(handleEvent); // จัดการการแจ้งเตือน

lastTime = data.time; // ใช้เป็นจุดอ้างอิงของรอบถัดไป
}

setInterval(poll, 5000); // เรียกทุก 5 วินาที

การตอบกลับ (Response)

เมื่อสำเร็จจะได้รับสถานะ 200 OK พร้อมข้อมูลเป็น ออบเจ็กต์ (ต่างจาก get_devices ที่เป็นอาร์เรย์ของกลุ่ม) ประกอบด้วย

ฟิลด์ชนิดคำอธิบาย
itemsarray[object]อุปกรณ์ที่ข้อมูลเปลี่ยนแปลงตั้งแต่เวลาที่ระบุ (โครงสร้างเหมือน items[] ของ get_devices)
eventsarray[object]เหตุการณ์/การแจ้งเตือนที่เกิดขึ้นในช่วงเวลานั้น
timeintegerเวลา (UNIX timestamp) สำหรับใช้เป็นพารามิเตอร์ time ในคำขอรอบถัดไป
versionstringเวอร์ชันของระบบ

:::note ข้อควรทราบเรื่องรูปแบบข้อมูล ใน Endpoint นี้ ฟิลด์ sensors, services และ tail ของแต่ละอุปกรณ์จะถูกส่งมาเป็น สตริง JSON (JSON-encoded string) ไม่ใช่อาร์เรย์โดยตรง จึงต้องแปลง (parse) อีกครั้งก่อนนำไปใช้งาน :::

ฟิลด์หลักของเหตุการณ์ (events[])

ฟิลด์ชนิดคำอธิบาย
idintegerรหัสเหตุการณ์
device_idintegerรหัสอุปกรณ์ที่เกิดเหตุการณ์
geofence_idintegerรหัสพื้นที่ (geofence) ที่เกี่ยวข้อง
alert_idintegerรหัสประเภทการแจ้งเตือน
messagestringข้อความบรรยายเหตุการณ์
latitudenumberละติจูดขณะเกิดเหตุการณ์
longitudenumberลองจิจูดขณะเกิดเหตุการณ์
speednumberความเร็วขณะเกิดเหตุการณ์
timestringเวลาที่เกิดเหตุการณ์
created_atstringเวลาที่บันทึกเหตุการณ์
geofenceobjectข้อมูลพื้นที่ที่เกี่ยวข้อง (ถ้ามี)
deviceobjectข้อมูลอุปกรณ์ที่เกี่ยวข้อง

ตัวอย่างการตอบกลับ (ไม่มีการเปลี่ยนแปลง)

เมื่อไม่มีอุปกรณ์ใดเปลี่ยนแปลงในช่วงเวลาที่ระบุ items และ events จะเป็นอาร์เรย์ว่าง แต่ยังคงได้รับ time สำหรับรอบถัดไปเสมอ

{
"items": [],
"events": [],
"time": 1785744645,
"version": "4.3.0"
}

ตัวอย่างการตอบกลับ (มีการเปลี่ยนแปลง)

ตัวอย่างต่อไปนี้ถูกย่อให้เหลืออุปกรณ์เดียว และตัดฟิลด์ device_data บางส่วนออกเพื่อความกระชับ

{
"items": [
{
"id": 6677,
"alarm": 0,
"name": "30-4911 นม",
"online": "online",
"time": "03-08-2026 15:10:57",
"timestamp": 1785744691,
"acktimestamp": 1785743207,
"lat": 13.52006,
"lng": 100.061,
"course": 338,
"speed": 29,
"altitude": 0,
"protocol": "gt06",
"icon_colors": {
"moving": "green",
"stopped": "yellow",
"offline": "red",
"engine": "yellow",
"blocked": "black"
},
"sensors": "[{\"id\":4852,\"type\":\"engine\",\"name\":\"สถานะเครื่องยนต์\",\"value\":\"เปิด\",\"val\":true,\"tag_name\":\"ignition\"}]",
"services": "[]",
"tail": "[{\"lat\":\"13.51628\",\"lng\":\"100.06536\"},{\"lat\":\"13.52006\",\"lng\":\"100.061\"}]",
"engine_status": true,
"total_distance": 264722.53,
"unit_of_distance": "Km",
"distance_unit_hour": "kph",
"stop_duration": "35วินาที",
"stop_duration_sec": 35,
"device_data": {
"id": 6677,
"user_id": 10911,
"name": "30-4911 นม",
"imei": "XXXXXXXXXXXXXXX",
"group_id": 939
}
}
],
"events": [],
"time": 1785744692,
"version": "4.3.0"
}

รหัสสถานะ

สถานะความหมาย
200 OKสำเร็จ คืนข้อมูลที่เปลี่ยนแปลงพร้อมค่า time รอบถัดไป
401 Unauthorizedไม่ได้แนบ user_api_hash หรือคีย์ไม่ถูกต้อง
429 Too Many Requestsเรียกใช้เกินอัตราที่กำหนด (rate limit)
500 Internal Server Errorเกิดข้อผิดพลาดที่ฝั่งเซิร์ฟเวอร์