REST API กลุ่มผู้ใช้
สร้างกลุ่มแบบรายการที่อัปเดตด้วยตนเอง และเขียนทับ เพิ่ม หรือลบสมาชิกตาม ID กลุ่ม
ทั่วไป
- คำขอและการตอบกลับใช้ JSON ที่เข้ารหัส UTF-8
- URL endpoint เต็มคือ Base URL ของศูนย์ข้อมูลบวก path ของ API ดู ภาพรวม REST API สำหรับวิธีรับ Base URL และ API Key / API Secret
- ใช้ HTTP Basic Authentication:
Authorization: Basic ${base64(api_key:api_secret)}แหล่งข้อมูล API ที่ผูกกับ API Key กำหนดโปรเจกต์ ผู้เรียกไม่ต้องส่ง ID โปรเจกต์ใน body คำขอ - การตอบกลับที่สำเร็จมีโครงสร้างร่วมกัน:
code0หมายถึงสำเร็จmessageอธิบายผลลัพธ์ และdataเป็น payload การจัดการ batch สำหรับการเขียนสมาชิกขึ้นกับการดำเนินการ:OVERRIDEทำงานหลังจากได้รับ batch ทั้งหมด แต่ละ batch ของAPPENDและREMOVEใช้แยกกันdata.statusและdata.completeในการตอบกลับบอกสถานะการประมวลผล
สร้างกลุ่มแบบรายการ
สร้างกลุ่มที่มีโหมดอัปเดตแบบ manual และอัปโหลดรายการเป็นวิธีสร้าง หลังสร้างกลุ่มจะไม่มีสมาชิก ใช้ อัปเดตสมาชิกกลุ่ม เพื่ออัปโหลดรายการ
Endpoint
POST /v1/segments
ตัวอย่างคำขอ
curl -X POST 'https://ma-api.engagelab.com/v1/segments' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"name": "High-value users",
"description": "High-value user list synced from the order system"
}'
พารามิเตอร์คำขอ
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
name |
String | ใช่ | ชื่อกลุ่ม ต้องไม่ว่าง สูงสุด 50 ตัวอักษร ต้องไม่ซ้ำภายในโปรเจกต์ ตัดช่องว่างหน้าและหลัง |
description |
String | ไม่ | คำอธิบายกลุ่ม สูงสุด 200 ตัวอักษร |
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"segmentId": 123456789,
"name": "High-value users",
"generation": "generation-1"
}
}
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
segmentId |
Long | ID กลุ่มใหม่ ใช้สำหรับอัปโหลดรายการครั้งถัดไป |
name |
String | ชื่อกลุ่ม |
generation |
String | ตัวระบุ generation สมาชิกปัจจุบัน กลุ่มที่สร้างใหม่ไม่มีสมาชิก |
อัปเดตสมาชิกกลุ่ม
endpoint เดียวเขียนทับ เพิ่ม หรือลบสมาชิกในรายการ รับเฉพาะกลุ่มในโปรเจกต์ปัจจุบันที่สร้างด้วยการอัปโหลดรายการ ใช้การอัปเดต manual และอยู่ในสถานะ active ตัวระบุผู้ใช้ต้องตรงกับผู้ใช้ active ที่มีอยู่ในโปรเจกต์ API ไม่สร้าง asset ผู้ใช้ เมื่อกลุ่มไม่เข้าเงื่อนไข จะคืน error 55210–55214 (ดู การตอบกลับ error)
Endpoint
POST /v1/segments/{segmentId}/members
ตัวอย่างคำขอ
ตัวอย่างต่อไปนี้แบ่งการดำเนินการ OVERRIDE หนึ่งครั้งเป็นสอง batch แต่ละ batchId แทนการดำเนินการรายการหนึ่งครั้ง batch ทั้งหมดต้องใช้ batchId operation และ batchCount เดียวกัน OVERRIDE ใช้การเปลี่ยนรายการหลังจากได้รับ batch ทั้งหมด APPEND และ REMOVE มีผลทันทีที่คำขอ batch สำเร็จ
curl -X POST 'https://ma-api.engagelab.com/v1/segments/123456789/members' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"batchIndex": 0,
"batchCount": 2,
"members": [
{"euid": "100001"},
{"identityName": "user_id", "identityValue": "user-002"}
]
}'
เมื่อได้รับ batch OVERRIDE แรก status ในการตอบกลับคือ RECEIVING และ complete เป็น false ส่ง batch ที่เหลือด้วย batchId เดียวกัน และตั้ง batchIndex เป็น 1
พารามิเตอร์คำขอ
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
segmentId |
Long | ใช่ | พารามิเตอร์ path: ID กลุ่มเป้าหมาย |
batchId |
String | ใช่ | ID batch สำหรับการดำเนินการรายการครบหนึ่งครั้ง สูงสุด 128 ตัวอักษร ใช้ได้เฉพาะตัวอักษร ตัวเลข จุด underscore โคลอน และขีด ใช้เป็น idempotency key ต่อโปรเจกต์และกลุ่มภายใน 24 ชั่วโมง |
operation |
String | ใช่ | การดำเนินการรายการ: OVERRIDE (แทนที่) APPEND (เพิ่ม) REMOVE (ลบ) |
batchIndex |
Integer | ใช่ | ดัชนี batch ปัจจุบัน เริ่มที่ 0 และต้องน้อยกว่า batchCount |
batchCount |
Integer | ใช่ | จำนวน batch ทั้งหมดของการดำเนินการนี้ 1–10 batch รวมกันสูงสุด 10,000 ตัวระบุสมาชิก |
members |
Array<Object> |
ใช่ | ตัวระบุสมาชิกใน batch ปัจจุบัน ต้องไม่ว่าง สูงสุด 1,000 ต่อ batch แต่ละองค์ประกอบใช้หนึ่งในรูปแบบในตารางด้านล่าง |
องค์ประกอบ members รองรับสองรูปแบบต่อไปนี้ ไม่ส่ง euid พร้อม identityName / identityValue:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
euid |
String | EUID ของโปรเจกต์ ต้องเป็นสตริงจำนวนเต็มบวก เช่น "100001" |
identityName |
String | ชื่อ identity ผู้ใช้ที่ตั้งค่าในโปรเจกต์ ต้องไม่ว่าง สูงสุด 128 ตัวอักษร |
identityValue |
String | ค่า identity ต้องไม่ว่าง สูงสุด 256 ตัวอักษร ใช้คู่กับ identityName ค่าเกิน 256 ตัวอักษรไม่ทำให้คำขอทั้งหมดล้มเหลว แถวนั้นนับใน invalidCount |
การดำเนินการรายการ
| การดำเนินการ | คำอธิบาย |
|---|---|
OVERRIDE |
หลังได้รับ batch ทั้งหมด แทนที่รายการปัจจุบันด้วยผู้ใช้ที่ match ในการส่งครั้งนี้ หากไม่มีผู้ใช้ active ที่ match คำขอถูกปฏิเสธด้วย 55214 และรายการเดิมไม่เปลี่ยน |
APPEND |
หลัง batch ปัจจุบันสำเร็จ เพิ่มผู้ใช้ที่ match เข้ารายการ ผู้ใช้ที่อยู่ในกลุ่มแล้วไม่ซ้ำ ไม่รอ batch อื่น |
REMOVE |
หลัง batch ปัจจุบันสำเร็จ ลบผู้ใช้ที่ match ออกจากรายการ ผู้ใช้ที่ไม่อยู่ในกลุ่มไม่เกิดการเปลี่ยนแปลงเพิ่ม ไม่รอ batch อื่น |
การลองใหม่ด้วย batchId เดียวกันต้องใช้ operation batchCount และเนื้อหา batch เดียวกัน batchId และ batchIndex เดียวกันไม่ส่งเนื้อหาต่างกัน เก็บผล idempotent 24 ชั่วโมง
batch OVERRIDE ถูกเก็บจนได้รับครบแล้วจึงใช้ ข้อมูลที่เก็บหมดอายุหลัง TTL 24 ชั่วโมง และรายการไม่เปลี่ยนหาก batch ไม่ครบก่อนหมดอายุ แต่ละ batch APPEND และ REMOVE ใช้แยกกัน batchCount และ batchIndex ยังระบุ batch รองรับ idempotency และติดตามความคืบหน้าโดยไม่บล็อก batch ปัจจุบัน
การเปลี่ยนรายการที่สำเร็จแต่ละครั้งบันทึกในประวัติอัปเดตกลุ่ม แหล่งที่มา REST API OVERRIDE บันทึกต่อ batch ที่เสร็จ APPEND และ REMOVE ต่อ batch ที่สำเร็จ บันทึก audit ไม่รวมตัวอย่างตัวระบุที่ไม่ match หรือไม่ valid
ตัวอย่างการตอบกลับ
batch ยังไม่ครบ:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "RECEIVING",
"complete": false,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 2,
"unmatchedCount": 0,
"unmatchedSamples": [],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 0,
"exitCount": 0
}
}
batch OVERRIDE เสร็จสมบูรณ์:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 2,
"inputCount": 3,
"matchedCount": 2,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 1,
"invalidSamples": [
{"identityName": "not_configured", "identityValue": "example"}
],
"invalidSamplesTruncated": false,
"enterCount": 2,
"exitCount": 1
}
}
เมื่อ batch APPEND หรือ REMOVE สำเร็จ batch ปัจจุบันใช้ทันทีและคืน complete: true แม้ batchCount มากกว่าจำนวน batch ที่ได้รับจนถึงตอนนี้ ตัวอย่างเช่น batchCount เป็น 2 และได้รับแค่ batch แรก receivedBatchCount เป็น 1 และ status เป็น COMPLETED
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-append",
"operation": "APPEND",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 1,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 1,
"exitCount": 0
}
}
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
batchId |
String | ID batch ของการดำเนินการรายการนี้ |
operation |
String | การดำเนินการรายการของคำขอนี้ |
status |
String | RECEIVING: OVERRIDE รอ batch PROCESSING: รอ lock การเปลี่ยนรายการ COMPLETED: การดำเนินการปัจจุบันเสร็จ |
complete |
Boolean | สำหรับ OVERRIDE ใช้ batch ทั้งหมดแล้ว สำหรับ APPEND/REMOVE ใช้ batch ปัจจุบันแล้ว—ไม่จำเป็นต้องส่ง batch ทั้งหมด |
expectedBatchCount |
Integer | จำนวน batch ทั้งหมดที่คาดหวัง |
receivedBatchCount |
Integer | จำนวนดัชนี batch ที่แตกต่างที่ได้รับ สำหรับ APPEND/REMOVE ใช้สำหรับสถิติเท่านั้นและไม่บล็อก batch ปัจจุบัน |
inputCount |
Integer | แถว input ที่ valid = matchedCount + unmatchedCount ไม่รวม ตัวระบุที่ไม่ valid OVERRIDE นับ batch ที่ได้รับ (batch เต็มเมื่อเสร็จ) APPEND/REMOVE นับ batch ปัจจุบัน |
matchedCount |
Integer | ตัวระบุที่ match กับผู้ใช้ active |
unmatchedCount |
Integer | ตัวระบุที่ไม่ match กับผู้ใช้ active |
unmatchedSamples |
Array<Object> |
ตัวอย่างตัวระบุที่ไม่ match โครงสร้างเดียวกับสมาชิกในคำขอ สูงสุด 100 |
unmatchedSamplesTruncated |
Boolean | ตัวอย่างที่ไม่ match ถูกตัดที่ 100 หรือไม่ |
invalidCount |
Integer | ตัวระบุที่ไม่ valid ไม่รวมใน inputCount รวมถึง: euid ไม่เป็นจำนวนเต็มบวก ส่ง euid พร้อมฟิลด์ identity identityName/identityValue ว่างหรือไม่ตรงกัน identityName เกิน 128 ตัวอักษร identityValue เกิน 256 ตัวอักษร ชื่อ identity ไม่ได้ตั้งค่า identity หนึ่ง match ผู้ใช้ active หลายคน |
invalidSamples |
Array<Object> |
ตัวอย่างตัวระบุที่ไม่ valid โครงสร้างเดียวกับสมาชิกในคำขอ สูงสุด 100 |
invalidSamplesTruncated |
Boolean | ตัวอย่างที่ไม่ valid ถูกตัดที่ 100 หรือไม่ |
enterCount |
Integer | ผู้ใช้ที่เพิ่มเข้ากลุ่มจริงในการรันครั้งนี้ |
exitCount |
Integer | ผู้ใช้ที่ลบออกจากกลุ่มจริงในการรันครั้งนี้ |
ตัวอย่างใช้โครงสร้าง object ตัวระบุสมาชิกจากคำขอ และอาจรวม identityValue ที่ส่ง เซิร์ฟเวอร์เก็บตัวอย่างเฉพาะใน cache idempotency 24 ชั่วโมง ไม่ใส่ในบันทึก audit จัดการการตอบกลับและ log ตามข้อกำหนด compliance ข้อมูลของคุณ
หากการตอบกลับเป็น PROCESSING ลองใหม่ด้วย batchId batchIndex และเนื้อหา batch เดิมเพื่อผล idempotent ไม่มี API แยกสำหรับสอบถามความคืบหน้า batch
การตอบกลับ error
error ใช้ code และ message ดู รหัสสถานะ HTTP สำหรับรหัสสถานะ HTTP และรหัส return ทั่วไป
| สถานะ HTTP | รหัส | คำอธิบาย |
|---|---|---|
| 401 | 40050 |
การยืนยันตัวตน API Key / API Secret ล้มเหลว หรือแหล่งข้อมูล API ถูกปิดใช้งาน |
| 400 | 40026 |
มีกลุ่มผู้ใช้ชื่อเดียวกันในโปรเจกต์แล้ว (path สร้าง passthrough Metadata) |
| 400 | 40032 |
ถึงขีดจำกัดจำนวนกลุ่มผู้ใช้แล้ว (path สร้าง passthrough Metadata) |
| 400 | 55201 |
ไม่มีกลุ่มผู้ใช้ (path อัปโหลดรายการ) |
| 400 | 55210 |
วิธีสร้างกลุ่มไม่รองรับการอัปโหลดรายการ REST API: กลุ่มเป้าหมายไม่ได้สร้างด้วยการอัปโหลดรายการ (เช่น กลุ่มตามกฎ) |
| 400 | 55211 |
โหมดอัปเดตกลุ่มไม่รองรับการอัปโหลดรายการ REST API: กลุ่มเป้าหมายไม่ได้อัปเดต manual |
| 400 | 55212 |
สถานะวงจรชีวิตกลุ่มไม่รองรับการอัปโหลดรายการ REST API: กลุ่มเป้าหมายไม่ active |
| 400 | 55213 |
กลุ่มไม่มี generation สมาชิกที่ใช้ได้ ไม่รองรับการอัปโหลดรายการ REST API ชั่วคราว |
| 400 | 55214 |
ไม่อนุญาตให้เขียนทับด้วยรายการว่าง: หลัง batch OVERRIDE ทั้งหมด ไม่มีผู้ใช้ active ที่ match |
| 400 | 55004 |
ฟิลด์คำขอหรือพารามิเตอร์ batch รายการไม่ valid |
| 503 | 55207 |
metadata กลุ่มไม่พร้อมใช้งานชั่วคราว |
| 500 | 55000 |
error ภายในเซิร์ฟเวอร์ |
เมื่อสร้างกลุ่ม รหัส error ทางธุรกิจและ message จาก Metadata ส่งต่อให้ผู้เรียก เช่น ชื่อซ้ำ 40026 ถึงขีดจำกัด 40032 ใน path อัปโหลดรายการ «ไม่มีกลุ่ม» คืน 55201 แทน 40027
ตัวระบุสมาชิกที่ไม่ match หรือไม่ valid ไม่ทำให้การดำเนินการรายการทั้งหมดล้มเหลว (ยกเว้น
OVERRIDEเมื่อไม่มีผู้ใช้ match ดู55214) การตอบกลับคืนจำนวนและตัวอย่างตัวระบุสูงสุด 100 รายการ ตัวอย่างอาจมีidentityValueปกป้องข้อมูลการตอบกลับตามความเหมาะสม










