Feature Flags API
Feature flag คือสวิตช์ระยะไกลที่มีคุณสมบัติ (properties) ซึ่ง SDK จะอ่านสำหรับแต่ละอุปกรณ์ API นี้จัดการ flag ของแอปพลิเคชัน โดยมีการดำเนินการเดียวกับ Audience → Feature Flags ใน Control Panel หากต้องการอ่าน flag บนเว็บไซต์หรือในแอปมือถือ ให้ใช้ Web SDK, Android SDK หรือ iOS SDK
Base URL
Anchor link tohttps://rpc-api.svc-nue.pushwoosh.comEndpoints ทั้งหมดให้บริการผ่าน HTTPS คำขอและการตอบกลับใช้ application/json
การรับรองความถูกต้อง
Anchor link toทุกคำขอต้องมี Authorization header พร้อมกับ Server API token ของคุณ:
Authorization: Api YOUR_API_TOKENการอ่าน flag ต้องมีสิทธิ์เข้าถึงแอปพลิเคชัน การสร้างและเปลี่ยนแปลง flag ต้องมีสิทธิ์จัดการแอปพลิเคชันนั้น
ข้อตกลงทั่วไป
Anchor link to- การตั้งชื่อฟิลด์: request bodies ยอมรับ
lowerCamelCaseหรือsnake_caseการตอบกลับใช้snake_caseเช่นเดียวกับใน ออบเจ็กต์ Feature flag - เปอร์เซ็นต์ ใช้หน่วย basis points:
percent_bpตั้งแต่0ถึง10000โดย2000คือ 20% - เวอร์ชัน: ทุก flag มี
versionคำขอUpdate,SetRulePercentและReshuffleรับเวอร์ชันที่คุณอ่านล่าสุด และจะล้มเหลวพร้อมVERSION_CONFLICTหาก flag มีการเปลี่ยนแปลงหลังจากนั้น การแก้ไขพร้อมกันจึงไม่เขียนทับกันเลย ให้อ่าน flag อีกครั้งแล้วลองใหม่ - สถานะ:
active,killedหรือarchivedคำขอKill,Unkill,ArchiveและRestoreเปลี่ยนเฉพาะสถานะและไม่รับเวอร์ชัน
Endpoints
Anchor link toREST endpoint แต่ละรายการมีเครื่องมือ MCP ที่ใช้พารามิเตอร์เดียวกัน:
| เมธอด | เส้นทาง | คำอธิบาย | เครื่องมือ MCP |
|---|---|---|---|
GET | /api/applications/{application_code}/feature_flags | แสดงรายการ flag ของแอปพลิเคชัน | list_feature_flags |
GET | /api/applications/{application_code}/feature_flags/{key} | ดึงข้อมูล flag หนึ่งรายการ | get_feature_flag |
POST | /api/applications/{application_code}/feature_flags | สร้าง flag | create_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key} | แทนที่ชื่อ คำอธิบาย คุณสมบัติ และกฎ | update_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key}/rules/{rule_id}/percent | เปลี่ยนสัดส่วนการเปิดใช้ (rollout) ของกฎหนึ่งข้อ | set_feature_flag_rule_percent |
POST | /api/applications/{application_code}/feature_flags/{key}/kill | ปิด flag สำหรับทุกคน | kill_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key}/unkill | เปิด flag ที่ถูกปิดอีกครั้ง | unkill_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key}/archive | เก็บถาวร flag | archive_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key}/restore | กู้คืน flag ที่เก็บถาวรไว้ | restore_feature_flag |
POST | /api/applications/{application_code}/feature_flags/{key}/reshuffle | เลือกกลุ่มตัวอย่างผู้ใช้ใหม่ | reshuffle_feature_flag |
GET | /api/applications/{application_code}/feature_flags/{key}/history | แสดงรายการการเปลี่ยนแปลงของ flag | list_feature_flag_history |
ทุก endpoint ยกเว้น List และ History จะส่งคืน { "flag": { ... } } ซึ่งคือ ออบเจ็กต์ Feature flag หลังการดำเนินการ
List
Anchor link toGET /api/applications/{application_code}/feature_flags
คำขอรับพารามิเตอร์ต่อไปนี้:
| พารามิเตอร์ | ตำแหน่ง | ประเภท | คำอธิบาย |
|---|---|---|---|
application_code | path | string | Application code |
status | query | string | ไม่บังคับ active, killed หรือ archived ละไว้เพื่อแสดงรายการ flag ทั้งหมด |
ส่งคืน { "flags": [ ... ] } ซึ่งเป็นอาร์เรย์ของ ออบเจ็กต์ Feature flag
GET /api/applications/{application_code}/feature_flags/{key}
ส่งคืน flag หนึ่งรายการพร้อมคุณสมบัติ กฎ และ version ปัจจุบัน
Create
Anchor link toสร้าง flag ที่มีสถานะ active เซิร์ฟเวอร์จะสร้าง rule_id ของทุกกฎ
POST /api/applications/{application_code}/feature_flags
Request body มีฟิลด์ต่อไปนี้:
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
key | string | ใช่ | ตรงกับ ^[A-Za-z0-9_.-]{1,58}$ ไม่ซ้ำกันภายในแอปพลิเคชัน รวมถึง flag ที่เก็บถาวร โดยเปรียบเทียบแบบไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ไม่สามารถเปลี่ยนแปลงภายหลังได้ |
name | string | ไม่ | ชื่อที่แสดง สูงสุด 255 อักขระ |
description | string | ไม่ | คำอธิบาย |
properties | อาร์เรย์ของ ออบเจ็กต์ Property | ไม่ | สูงสุด 50 คุณสมบัติ |
defaults | object | ใช่ หากมีคุณสมบัติ | ค่าของทุกคุณสมบัติสำหรับอุปกรณ์ที่ flag ปิดอยู่ โดยใช้คีย์ของคุณสมบัติเป็นคีย์ ค่าแต่ละค่าต้องตรงกับประเภทของคุณสมบัติ |
rules | อาร์เรย์ของ ออบเจ็กต์ Rule | ไม่ | กฎที่เรียงลำดับ สูงสุด 10 ข้อ กฎแรกที่ segment ตรงกับอุปกรณ์จะเป็นตัวตัดสิน |
ตัวอย่างคำขอ
Anchor link to{ "key": "new_checkout", "name": "New checkout", "properties": [ { "key": "button_color", "type": "string" }, { "key": "show_apple_pay", "type": "boolean" } ], "defaults": { "button_color": "blue", "show_apple_pay": false }, "rules": [ { "name": "Beta testers", "filter_code": "XXXXX-XXXXX", "percent_bp": 10000, "overrides": { "button_color": "green", "show_apple_pay": true } }, { "name": "Everyone else", "filter_code": "", "percent_bp": 2000, "overrides": { "button_color": "orange" } } ]}Update
Anchor link toแทนที่ชื่อ คำอธิบาย คุณสมบัติ ค่าเริ่มต้น และกฎของ flag สถานะจะไม่เปลี่ยนแปลงที่นี่ ให้ส่งทุกฟิลด์ ไม่ใช่เฉพาะฟิลด์ที่เปลี่ยน
POST /api/applications/{application_code}/feature_flags/{key}
รับ body เดียวกับ Create โดยไม่มี key และเพิ่ม version จากการอ่านครั้งล่าสุดของคุณ ให้คง rule_id ของทุกกฎที่มีอยู่ไว้ กฎที่ไม่มี rule_id จะถูกสร้างเป็นกฎใหม่ ประเภทของคุณสมบัติไม่สามารถเปลี่ยนได้หลังจากสร้างคุณสมบัตินั้นแล้ว
SetRulePercent
Anchor link toเปลี่ยนสัดส่วนการเปิดใช้ของกฎหนึ่งข้อ ผู้ใช้ที่มี flag อยู่แล้วจะยังคงมี flag นั้นเมื่อเปอร์เซ็นต์เพิ่มขึ้น
POST /api/applications/{application_code}/feature_flags/{key}/rules/{rule_id}/percent
{ "percentBp": 5000, "version": 3 }Kill และ Unkill
Anchor link toPOST .../feature_flags/{key}/kill ปิด flag สำหรับทุกอุปกรณ์ ซึ่งจะได้รับค่าเริ่มต้นของคุณสมบัติแทน กฎและคุณสมบัติจะยังคงอยู่
POST .../feature_flags/{key}/unkill เปิด flag ที่ถูกปิดอีกครั้งพร้อมกฎเดิม
ทั้งสองรับ body ว่าง {}
Archive และ Restore
Anchor link toPOST .../feature_flags/{key}/archive หยุดส่ง flag ไปยังอุปกรณ์ flag ที่เก็บถาวรจะไม่นับรวมในขีดจำกัดจำนวน flag ต่อแอปพลิเคชันของแพ็กเกจ และคีย์ของ flag ยังคงถูกสงวนไว้
POST .../feature_flags/{key}/restore นำ flag ที่เก็บถาวรกลับมาในสถานะ killed จึงไม่มีทางเปิดขึ้นเอง เรียก unkill เพื่อเปิดใช้อีกครั้ง
ทั้งสองรับ body ว่าง {}
Reshuffle
Anchor link toจัดผู้ใช้ทุกคนเข้า bucket ใหม่ เพื่อให้เปอร์เซ็นต์เดิมเลือกกลุ่มตัวอย่างผู้ใช้ที่ต่างออกไป ผู้ใช้บางคนที่เปิด flag อยู่จะสูญเสีย flag ไป และผู้ใช้อื่นจะได้รับ flag แทน
POST /api/applications/{application_code}/feature_flags/{key}/reshuffle
{ "confirm": true, "version": 3 }confirm ต้องเป็น true มิฉะนั้นคำขอจะล้มเหลวพร้อม CONFIRM_REQUIRED
History
Anchor link toส่งคืนการเปลี่ยนแปลงของ flag โดยเรียงจากใหม่ไปเก่า ได้แก่ ผู้ที่ทำการเปลี่ยนแปลงแต่ละครั้ง เวลา และฟิลด์ที่เปลี่ยนไป เช่นเดียวกับ Get คำขอนี้ต้องมีสิทธิ์เข้าถึงแอปพลิเคชัน และจะส่งคืน 404 เมื่อไม่มีแอปพลิเคชันหรือ flag นั้น
GET /api/applications/{application_code}/feature_flags/{key}/history
คำขอรับพารามิเตอร์ต่อไปนี้:
| พารามิเตอร์ | ตำแหน่ง | ประเภท | คำอธิบาย |
|---|---|---|---|
application_code | path | string | Application code |
key | path | string | คีย์ของ flag |
page | query | integer | ไม่บังคับ หมายเลขหน้า เริ่มจาก 0 |
per_page | query | integer | ไม่บังคับ จำนวนรายการต่อหน้า ค่าเริ่มต้นคือ 20 สูงสุด 100 |
ส่งคืน { "entries": [ ... ], "total": N } โดย total คือจำนวนรายการทั้งหมดในทุกหน้า แต่ละรายการมีฟิลด์ต่อไปนี้:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
version | integer | เวอร์ชันของ flag ที่เกิดจากการเปลี่ยนแปลงนี้ |
action | string | create, update, set_percent, kill, unkill, archive, restore หรือ reshuffle |
user_id | string | ID ของผู้ใช้ Control Panel ที่ทำการเปลี่ยนแปลง เป็น 0 สำหรับการเปลี่ยนแปลงที่ทำด้วย API token หรือโดยบริการของ Pushwoosh |
user_email | string | อีเมลของผู้ใช้นั้น เป็นค่าว่างเมื่อผู้ใช้ถูกลบแล้วหรือ user_id เป็น 0 |
by_api_token | boolean | เป็น true เมื่อการเปลี่ยนแปลงทำด้วย API token เป็น false สำหรับการเปลี่ยนแปลงโดยผู้ใช้หรือโดยบริการของ Pushwoosh |
api_token_name | string | ชื่อของ API token ณ เวลาที่เปลี่ยนแปลง ชื่อนี้ยังคงอยู่หลังจากลบ token แล้ว เป็นค่าว่างเมื่อ token ไม่มีชื่อหรือ by_api_token เป็น false |
created | string | เวลาที่เปลี่ยนแปลง ในรูปแบบ RFC 3339 |
flag | ออบเจ็กต์ Feature flag | flag หลังการเปลี่ยนแปลง |
changes | array | ฟิลด์ที่แตกต่างจากเวอร์ชันก่อนหน้า เป็นค่าว่างสำหรับ create และ reshuffle รวมถึงรายการที่เก่าที่สุดของ flag ที่สร้างก่อนเริ่มบันทึกประวัติ เนื่องจากไม่มีเวอร์ชันก่อนหน้าให้เปรียบเทียบ |
แต่ละรายการใน changes มี field, before และ after โดย before และ after เก็บค่าที่เข้ารหัสเป็นสตริง JSON ค่าที่เป็นสตริงจึงอยู่ในเครื่องหมายคำพูด field มีค่าต่อไปนี้:
field | สิ่งที่เปลี่ยนแปลง |
|---|---|
name, description, status | ฟิลด์ของ flag ที่มีชื่อนี้ |
properties | คุณสมบัติและค่าเริ่มต้นของคุณสมบัติ |
rules[<rule_id>] | กฎหนึ่งข้อ สำหรับกฎที่เพิ่มเข้ามา before จะว่าง สำหรับกฎที่ถูกลบ after จะว่าง |
rules.order | ลำดับของกฎ |
ตัวอย่างการตอบกลับ
Anchor link to{ "entries": [ { "version": 4, "action": "set_percent", "user_id": "12345", "user_email": "owner@example.com", "by_api_token": false, "api_token_name": "", "created": "2026-10-14T09:30:00Z", "flag": { "key": "new_checkout", "status": "active", "version": 4 }, "changes": [ { "field": "rules[r_1a2b3c4d]", "before": "{\"rule_id\":\"r_1a2b3c4d\",\"name\":\"Beta testers\",\"filter_code\":\"XXXXX-XXXXX\",\"percent_bp\":2000,\"overrides\":{\"button_color\":\"green\"}}", "after": "{\"rule_id\":\"r_1a2b3c4d\",\"name\":\"Beta testers\",\"filter_code\":\"XXXXX-XXXXX\",\"percent_bp\":5000,\"overrides\":{\"button_color\":\"green\"}}" } ] } ], "total": 4}ออบเจ็กต์ flag ในตัวอย่างถูกย่อไว้ ประวัติจะบันทึกการเปลี่ยนแปลงตั้งแต่วันที่ 13 ตุลาคม 2026 เป็นต้นไป flag ที่ไม่มีการเปลี่ยนแปลงที่บันทึกไว้จะไม่ส่งคืนรายการใด
การอ่าน flag สำหรับอุปกรณ์
Anchor link toSDK อ่าน flag จาก endpoint แยกต่างหาก คุณไม่ต้องเรียก endpoint นี้เมื่อใช้ Web SDK, Android SDK หรือ iOS SDK เพราะ SDK จะเลือกโฮสต์และแคชคำตอบเอง
POST https://api.pushwoosh.com/api/v2/device-api/getFeatureFlags
เนื้อหาคำขอมีฟิลด์ต่อไปนี้:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
application | string | Application code |
hwid | string | HWID ของอุปกรณ์ |
etag | string | ไม่บังคับ etag ของคำตอบล่าสุดที่อุปกรณ์มีอยู่ |
การตอบกลับมีฟิลด์ต่อไปนี้:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
flags | object | flag ที่ใช้คีย์ของ flag เป็นคีย์ แต่ละรายการมี enabled, rule_id และ properties โดย rule_id เป็น default เมื่อไม่มีกฎใดตรงกัน และเป็นค่าว่างสำหรับ flag ที่ถูกปิด ไม่รวม flag ที่เก็บถาวร |
etag | string | ส่งค่านี้ไปพร้อมกับคำขอถัดไป |
not_modified | boolean | เป็น true เมื่อ etag ที่ส่งมาเป็นปัจจุบัน ในกรณีนี้จะไม่มี flags และอุปกรณ์จะใช้สำเนาที่มีอยู่ |
partial | boolean | เป็น true เมื่อจับคู่ segment ของอุปกรณ์ไม่ทันเวลา อย่าแคชคำตอบนี้ |
ในแพ็กเกจที่ไม่มี feature flag การตอบกลับจะว่างเปล่า
ออบเจ็กต์
Anchor link toออบเจ็กต์ Feature flag
Anchor link toทุก endpoint ส่งคืน flag ในรูปแบบนี้:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
application_code | string | แอปพลิเคชันที่ flag นี้เป็นของ |
key | string | คีย์ของ flag |
name | string | ชื่อที่แสดง |
description | string | คำอธิบาย |
status | string | active, killed หรือ archived |
properties | อาร์เรย์ของ ออบเจ็กต์ Property | คุณสมบัติของ flag |
defaults | object | ค่าของทุกคุณสมบัติสำหรับอุปกรณ์ที่ flag ปิดอยู่ |
rules | อาร์เรย์ของ ออบเจ็กต์ Rule | กฎที่เรียงลำดับ |
version | integer | ส่งกลับมาพร้อมกับ Update, SetRulePercent และ Reshuffle |
created | string | เวลาที่สร้าง ในรูปแบบ RFC 3339 |
updated | string | เวลาที่เปลี่ยนแปลงล่าสุด ในรูปแบบ RFC 3339 |
last_modified_by_user_id | string | ผู้ใช้ Control Panel ที่เปลี่ยนแปลง flag ล่าสุด เป็น 0 เมื่อการเปลี่ยนแปลงล่าสุดทำด้วย API token หรือโดยบริการของ Pushwoosh |
ออบเจ็กต์ Property
Anchor link toคุณสมบัติอธิบายค่าหนึ่งค่าที่ SDK อ่านจาก flag:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
key | string | ตรงกับ ^[A-Za-z0-9_]{1,64}$ และไม่ซ้ำกันภายใน flag |
type | string | string, number, boolean หรือ json ไม่สามารถเปลี่ยนได้เมื่อคุณสมบัติมีอยู่แล้ว |
ออบเจ็กต์ Rule
Anchor link toกฎใช้ตัดสินว่าใครจะได้รับ flag แบบเปิด และด้วยค่าใด:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
rule_id | string | สร้างโดยเซิร์ฟเวอร์ เป็น r_ ตามด้วยเลขฐานสิบหก 8 หลัก และคงที่ตลอดการอัปเดต ให้เว้นว่างไว้สำหรับกฎใหม่ |
name | string | ชื่อกฎ |
filter_code | string | Segment ที่อุปกรณ์ต้องตรงกัน ค่าว่างจะตรงกับทุกอุปกรณ์ Segment สามารถมีได้เฉพาะเงื่อนไขแท็ก ตำแหน่ง แอปพลิเคชัน และรายการ |
percent_bp | integer | สัดส่วนของผู้ใช้ที่ตรงกันซึ่ง flag เปิดอยู่ 0–10000 อุปกรณ์ที่ตรงกับ segment จะหยุดที่กฎนี้แม้ว่าจะอยู่นอกเปอร์เซ็นต์ก็ตาม |
overrides | object | ค่าคุณสมบัติที่ใช้แทนค่าเริ่มต้นสำหรับอุปกรณ์ที่กฎนี้เปิด flag ให้ โดยใช้คีย์ของคุณสมบัติเป็นคีย์ |
ข้อผิดพลาด
Anchor link toคำขอที่ถูกปฏิเสธจะส่งคืนรหัสสถานะ HTTP อย่างใดอย่างหนึ่งต่อไปนี้:
| สถานะ HTTP | ความหมาย |
|---|---|
400 Bad Request | คำขอไม่ถูกต้อง (field_violations) หรือสถานะของ flag หรือแพ็กเกจไม่อนุญาต (Type) ดูรูปแบบ body และเหตุผลด้านล่าง |
401 Unauthorized | ไม่มี Authorization header หรือโทเค็นไม่ถูกต้อง |
403 Forbidden | โทเค็นไม่สามารถจัดการแอปพลิเคชันได้ หรือแอปพลิเคชันเป็นแอปพลิเคชันระบบ |
404 Not Found | ไม่มีแอปพลิเคชันหรือ flag นั้นอยู่ |
409 Conflict | มีคำขออื่นกำลังเปลี่ยนแปลง flag เดียวกันในขณะนี้ ให้ลองส่งคำขออีกครั้ง |
500 Internal Server Error | เซิร์ฟเวอร์ล้มเหลวโดยไม่คาดคิด body คือ {"message": "Sorry, an unexpected error occurred"} |
คำขอที่ไม่ถูกต้องจะส่งคืน 400 พร้อมรายการการละเมิดฟิลด์ การละเมิดแต่ละรายการระบุฟิลด์ เหตุผล และอาร์กิวเมนต์ของเหตุผล:
{ "code": 3, "message": "validation failed", "details": [ { "@type": "type.googleapis.com/pushwoosh.rpc.errors.v3.BadRequest", "field_violations": [ { "field": "key", "description": "a feature flag with this key already exists in the application", "reason": "KEY_TAKEN", "args": { "key": "new_checkout" } } ] } ]}คำขอที่สถานะของ flag หรือแพ็กเกจไม่อนุญาตจะส่งคืน 400 พร้อมเงื่อนไขเบื้องต้นที่ล้มเหลวหนึ่งรายการ ฟิลด์ Type และ Description ขึ้นต้นด้วยตัวพิมพ์ใหญ่:
{ "code": 9, "message": "precondition failed", "details": [ { "@type": "type.googleapis.com/pushwoosh.rpc.errors.v3.FailedPrecondition", "Type": "VERSION_CONFLICT", "Description": "feature flag was changed: version 3 was sent, the current one is 4" } ]}reason ของการละเมิดฟิลด์และ Type ของเงื่อนไขเบื้องต้นที่ล้มเหลวมีค่าต่อไปนี้:
| เหตุผล | สาเหตุ |
|---|---|
KEY_INVALID | คีย์ไม่ตรงกับ ^[A-Za-z0-9_.-]{1,58}$ |
KEY_TAKEN | flag อื่นของแอปพลิเคชัน รวมถึงที่เก็บถาวร ใช้คีย์นี้อยู่แล้ว |
TEXT_INVALID | ชื่อหรือคำอธิบายยาวเกินไปหรือมีอักขระต้องห้าม |
PROPERTIES_LIMIT | มีคุณสมบัติมากกว่า 50 รายการ |
PROPERTY_KEY_INVALID | คีย์ของคุณสมบัติไม่ถูกต้องหรือซ้ำกัน |
PROPERTY_TYPE_INVALID | ประเภทของคุณสมบัติไม่ใช่ string, number, boolean หรือ json |
PROPERTY_TYPE_IMMUTABLE | คำขอเปลี่ยนประเภทของคุณสมบัติที่มีอยู่ |
VALUE_INVALID | ค่าเริ่มต้นหรือค่า override ขาดหายไป ไม่ตรงกับประเภทของคุณสมบัติ หรือซ้อนกันลึกเกิน 5 ระดับ |
PROPERTIES_TOO_LARGE | ค่าคุณสมบัติของ flag เกิน 10,000 ไบต์ |
RULES_LIMIT | มีกฎมากกว่า 10 ข้อ |
RULE_NOT_FOUND | rule_id ไม่ใช่กฎของ flag นี้ |
PERCENT_INVALID | percent_bp อยู่นอกช่วง 0–10000 |
OVERRIDE_UNKNOWN_PROPERTY | override ระบุคุณสมบัติที่ flag ไม่มี |
SEGMENT_NOT_FOUND | ไม่มี segment ของกฎ หรือเป็นของแอปพลิเคชันอื่น |
INVALID_SEGMENT_TYPE | segment ของกฎมีเงื่อนไขที่ flag ประเมินไม่ได้ ได้แก่ event, static, external, last update หรือ best time to send |
FLAG_DEPENDENCY | segment ของกฎมีเงื่อนไข feature flag และ flag หนึ่งไม่สามารถขึ้นอยู่กับ flag อื่นได้ ส่งคืนโดย Create, Update และ Restore พร้อมโค้ดของ segment ใน filter_code |
CONFIRM_REQUIRED | ส่ง Reshuffle โดยไม่มี confirm: true |
TAG_CONFLICT | บัญชีมีแท็กที่กำหนดเองชื่อ PW_FF_ ตามด้วยคีย์ของ flag |
FEATURE_FLAGS_NOT_ALLOWED | แพ็กเกจของบัญชีไม่รวม feature flag |
FLAGS_LIMIT | แอปพลิเคชันมี flag ที่ไม่ได้เก็บถาวรครบตามจำนวนที่แพ็กเกจอนุญาตแล้ว |
VERSION_CONFLICT | flag มีการเปลี่ยนแปลงหลังจาก version ที่คุณส่ง |
PAYLOAD_TOO_LARGE | flag ของแอปพลิเคชันจะใช้พื้นที่เกิน 64 KB ในการตอบกลับของอุปกรณ์หนึ่งเครื่อง |
STATUS_CONFLICT | สถานะไม่อนุญาตการดำเนินการนี้ เช่น การ kill flag ที่เก็บถาวรแล้ว |