用戶分群 REST API
建立手動更新的名單分群,並按分群 ID 覆蓋、追加或移除成員。
通用說明
- 請求和響應均使用 UTF-8 編碼的 JSON。
- 完整呼叫地址由資料中心的 Base URL 與介面路徑組成。Base URL 和 API Key / API Secret 的獲取方式請參見 REST API 概述。
- 使用 HTTP Basic Authentication:
Authorization: Basic ${base64(api_key:api_secret)}。API Key 對應的 API 資料來源決定所屬專案,呼叫方不需要在請求體中傳入專案 ID。 - 成功響應使用統一結構:
code為0表示成功,message為結果描述,data為介面資料。成員寫入的分片處理規則取決於操作型別:OVERRIDE收齊全部分片後才執行;APPEND和REMOVE的每個分片獨立執行。響應中的data.status和data.complete表示當前處理狀態。
建立名單分群
建立一個更新方式為手動、建立方式為名單上傳的分群。分群建立後成員為空,可使用「更新分群成員」介面寫入名單。
呼叫地址
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": "高價值用戶",
"description": "透過訂單系統同步的高價值用戶名稱單"
}'
請求引數
| 欄位 | 型別 | 必填 | 描述 |
|---|---|---|---|
name |
String | 是 | 分群名稱,不能為空,最多 50 個字元;同一專案內不能重名。首尾空格會被去除。 |
description |
String | 否 | 分群描述,最多 200 個字元。 |
返回示例
{
"code": 0,
"message": "success",
"data": {
"segmentId": 123456789,
"name": "高價值用戶",
"generation": "generation-1"
}
}
| 欄位 | 型別 | 描述 |
|---|---|---|
segmentId |
Long | 新建分群 ID,後續名單寫入時使用。 |
name |
String | 分群名稱。 |
generation |
String | 當前成員版本標識。新建分群的成員為空。 |
更新分群成員
透過單一介面覆蓋、追加或移除名單。介面只接受當前專案中建立方式為名單上傳、更新方式為手動且狀態為生效中的分群。用戶標識必須能匹配到專案中已有的可用用戶;介面不會建立用戶資產。不滿足分群條件時返回 55210–55214(見錯誤響應),可直接定位原因。
呼叫地址
POST /v1/segments/{segmentId}/members
請求示例
以下示例把一次 OVERRIDE 操作拆成兩個分片。每個 batchId 表示一項名單操作;所有分片必須使用相同的 batchId、operation 和 batchCount。OVERRIDE 收齊全部分片後才執行名單變更。APPEND 和 REMOVE 則會在各自分片請求成功時立即生效。
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"}
]
}'
收到第一個 OVERRIDE 分片時,響應中的 status 為 RECEIVING、complete 為 false。提交剩餘分片時使用相同的 batchId,並將 batchIndex 設定為 1。
請求引數
| 欄位 | 型別 | 必填 | 描述 |
|---|---|---|---|
segmentId |
Long | 是 | 路徑引數,目標分群 ID。 |
batchId |
String | 是 | 一次完整名單操作的批次 ID,長度不超過 128 個字元,只能包含英文字母、數字、點、下劃線、冒號和連字元。同一專案、同一分群下 24 小時內作為冪等標識使用。 |
operation |
String | 是 | 名單操作:OVERRIDE(覆蓋)、APPEND(追加)、REMOVE(移除)。 |
batchIndex |
Integer | 是 | 當前分片序號,從 0 開始,且必須小於 batchCount。 |
batchCount |
Integer | 是 | 此次操作的分片總數,範圍為 1–10。所有分片合計最多 10,000 個成員標識。 |
members |
Array | 是 | 當前分片的成員標識,不能為空,每片最多 1,000 個。每個元素使用下表中的一種標識格式。 |
members 元素支援以下兩種格式,euid 不能與 identityName / identityValue 同時傳入:
| 欄位 | 型別 | 描述 |
|---|---|---|
euid |
String | 專案內 EUID,須為正整數格式,例如 "100001"。 |
identityName |
String | 專案中已配置的用戶標識名稱,不能為空,最多 128 個字元。 |
identityValue |
String | 用戶標識值,不能為空,最多 256 個字元;與 identityName 配套使用。超過 256 個字元不會整單失敗,該行計入 invalidCount。 |
名單操作說明
| 操作 | 說明 |
|---|---|
OVERRIDE |
收齊全部分片後,以本次提交且匹配成功的用戶替換現有名單。若匹配到的可用用戶為空,整單拒絕並返回 55214,現有名單不變。 |
APPEND |
當前分片請求成功後,將其中匹配成功的用戶追加到現有名單;已在群用戶不會重複加入。無需等待其他分片。 |
REMOVE |
當前分片請求成功後,從現有名單移除其中匹配成功的用戶;不在群用戶不會產生額外變更。無需等待其他分片。 |
batchId 相同的重試必須提交相同的操作、batchCount 和分片內容;同一 batchId、同一 batchIndex 不可提交不同內容。冪等結果保留 24 小時。
OVERRIDE 的分片會暫存至全部收齊後再執行;暫存資料按 24 小時 TTL 過期,過期前未收齊時不會變更名單。APPEND 和 REMOVE 的每個分片獨立生效,batchCount 和 batchIndex 仍用於分片標識、冪等和進度統計,不會阻止當前分片執行。
每次成功的名單變更會在分群更新記錄中留下來源為 REST API 的記錄。OVERRIDE 按完成的批次記錄,APPEND 和 REMOVE 按成功分片記錄;審計記錄不包含未匹配或無效標識值樣例。
返回示例
分片尚未收齊:
{
"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
}
}
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
}
}
APPEND 或 REMOVE 分片成功時,即使 batchCount 大於已收到的分片數,當前分片仍會立即生效並返回 complete: true。例如,batchCount 為 2、當前只收到第一個分片時,響應中的 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。 |
operation |
String | 本次名單操作。 |
status |
String | RECEIVING:OVERRIDE 等待分片;PROCESSING:當前請求等待名單變更鎖;COMPLETED:當前操作已完成。 |
complete |
Boolean | OVERRIDE 表示全部分片已應用;APPEND/REMOVE 表示當前分片已應用,不代表所有分片都已提交。 |
expectedBatchCount |
Integer | 預期分片總數。 |
receivedBatchCount |
Integer | 已收到的不同分片序號數量;對於 APPEND/REMOVE,該值僅用於統計,不影響當前分片執行。 |
inputCount |
Integer | 有效輸入行數 = matchedCount + unmatchedCount,不含無效標識。OVERRIDE 統計已收到分片(完成時為整個批次);APPEND/REMOVE 統計當前分片。 |
matchedCount |
Integer | 匹配到可用用戶的標識數。 |
unmatchedCount |
Integer | 未匹配到可用用戶的標識數。 |
unmatchedSamples |
Array | 未匹配標識樣例,元素結構與請求的成員標識相同,最多返回 100 條。 |
unmatchedSamplesTruncated |
Boolean | 未匹配樣例是否因 100 條上限而截斷。 |
invalidCount |
Integer | 無效標識數,不計入 inputCount。包括:euid 非正整數、與 identity 欄位同傳、identityName/identityValue 為空或不配套、identityName 超過 128 字元、identityValue 超過 256 字元、標識名未在專案中配置、同一標識匹配到多個可用用戶。 |
invalidSamples |
Array | 無效標識樣例,元素結構與請求的成員標識相同,最多返回 100 條。 |
invalidSamplesTruncated |
Boolean | 無效樣例是否因 100 條上限而截斷。 |
enterCount |
Integer | 本次執行實際新增的在群用戶數。 |
exitCount |
Integer | 本次執行實際移出分群的用戶數。 |
樣例沿用請求中的成員標識物件結構,可能包含傳入的 identityValue。服務端僅在 24 小時冪等結果快取中暫存樣例,不會將其寫入審計記錄;請按自身資料合規要求處理響應及日誌。
如果響應為 PROCESSING,可使用相同 batchId、batchIndex 和原分片內容重試,取得冪等結果。該介面沒有獨立的批次進度查詢介面。
錯誤響應
錯誤響應仍使用 code 和 message 欄位;HTTP 狀態碼及通用返回碼說明請參見 HTTP 狀態碼。
| HTTP 狀態碼 | 返回碼 | 描述 |
|---|---|---|
| 401 | 40050 |
API Key / API Secret 鑑權失敗,或 API 資料來源已禁用。 |
| 400 | 40026 |
當前專案中已存在同名用戶分群(建立路徑,Metadata 透傳)。 |
| 400 | 40032 |
用戶分群數量已達上限(建立路徑,Metadata 透傳)。 |
| 400 | 55201 |
用戶分群不存在(名單寫入路徑)。 |
| 400 | 55210 |
分群建立方式不支援 REST API 名單寫入:目標分群不是名單上傳建立(如規則建立的分群)。 |
| 400 | 55211 |
分群更新方式不支援 REST API 名單寫入:目標分群不是手動更新。 |
| 400 | 55212 |
分群當前生命週期狀態不支援 REST API 名單寫入:目標分群不在生效中。 |
| 400 | 55213 |
分群當前沒有可用成員版本,暫不支援 REST API 名單寫入。 |
| 400 | 55214 |
不允許用空名單覆蓋分群:OVERRIDE 收齊後匹配到的可用用戶為空。 |
| 400 | 55004 |
請求欄位或名單批次引數不符合要求。 |
| 503 | 55207 |
分群後設資料暫不可用。 |
| 500 | 55000 |
服務端內部錯誤。 |
建立分群時,Metadata 返回的業務錯誤碼和 message 會透傳給呼叫方,例如同名 40026、數量達上限 40032。名單寫入路徑的「分群不存在」返回 55201,不再使用 40027。
未匹配或無效的成員標識不會導致名單操作整體失敗(
OVERRIDE在匹配用戶為空時除外,見55214)。響應會同時返回數量和最多 100 條標識樣例。樣例可能包含identityValue,請妥善保護響應資料。










