#b3e59
Back
2026/03/09
5 min read

Rule engine el 規則轉換 API ( for cms )

Rule engine el 規則轉換 API ( for cms ).md
68 additions, 70 deletions
... ... @@ -3,6 +3,7 @@
3 +| 1.1 | 修改部分內容<br><br>/rs/ruleEngineSetting<br><br>/rs/rule/settings<br><br><br><br><br> | 2026/03/09 | Maurice |
3 4 1. 待母任務送審時, 會先以"子任務"為單位, 寫入對應的子任務json object到MISSION_SUB_SETTING.mission_content , example :
4 5 ```json
5 6 {
6 - "field": "product_name",
7 + "field": "name",
7 8 "operator": "in",
8 9 "values": ["星巴克 150 元券", "威秀電影票"]
... ... @@ -44,18 +45,19 @@
44 -| 1 | activity_type | String | true | 活動類型 | <br><br><br><br><br><br> |
45 -| 1 | content | String | true | 要轉換的payload | 請以"母任務"為單位傳入整個子任務payload |
46 -| 2 | logic | String | false | 子任務間的operator | |
47 -| 2 | rules | jsonArray | true | 子任務內容 | |
48 -| 3 | sub_id | String | true | MISSION_SUB_SETTING.id | |
49 -| 3 | logic | String | true | 子任務level1間的operator | |
50 -| 3 | rules | jsonArray | | 子任務level1 內容 | 若沒有更多的level2 |
51 -| 4 | logic | String | true | 子任務level2間的operator | |
52 -| 4 | rules | jsonArray | | 子任務level2內容 | |
53 -| 5 | field | String | true | 設定任務欄位名稱 | |
54 -| 5 | operator | String | true | 運算子 | |
55 - | 5 | values | StringArray | true | | |
45 + | | activityType | String | true | 活動類型 | <br><br><br><br><br><br> |
46 +| 1 | subMissions | jsonArray | true | 子任務內容 | |
47 +| 2 | subId | String | true | MISSION_SUB_SETTING.id | |
48 +| 2 | logic | String | true | 子任務level1間的operator | |
49 +| 2 | rules | jsonArray | true | 子任務level1 內容 | 若沒有 rules, logic 欄位,則沒有多種任務條件 |
50 +| 3 | logic | String | false | 子任務level2間的operator | |
51 +| 3 | field | String | false | 設定任務欄位名稱 | |
52 +| 3 | operator | String | false | 運算子 | |
53 +| 3 | values | StringArray | false | 值 | |
54 +| 3 | rules | jsonArray | false | 子任務level2內容 | 子任務項下有多個條件,則會有這層 rules |
55 +| 4 | field | String | false | 設定任務欄位名稱 | |
56 +| 4 | operator | String | false | 運算子 | |
57 +| 4 | values | StringArray | false | 值 | |
56 -request:
57 - "activity_type":"EXCHANGE_VOUCHER",
58 - "content": {
59 - "logic": "and",
60 - "rules": [
58 + "activityType": "EXCHANGE_VOUCHER",
59 + "masterId": "MASTER_001",
60 + "subMissions": [
61 61 {
62 - "sub_id": "001",
62 + "subId": "001",
63 63 "logic": null,
64 64 "rules": [
65 65 {
66 - "field": "serial_id",
66 + "field": "serialId",
67 67 "operator": "in",
68 68 "values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
69 69 }
70 70 ]
71 71 },
72 72 {
73 - "sub_id": "002",
73 + "subId": "002",
74 74 "logic": null,
75 75 "rules": [
76 76 {
77 - "field": "product_name",
77 + "field": "name",
78 78 "operator": "in",
79 79 "values": ["星巴克 150 元券", "威秀電影票"]
80 80 }
81 81 ]
82 82 },
83 83 {
84 - "sub_id": "003",
84 + "subId": "003",
85 85 "logic": "and",
86 86 "rules": [
87 87 {
88 88 "logic": "or",
89 89 "rules": [
90 90 {
91 - "field": "product_name",
91 + "field": "name",
92 92 "operator": "like",
93 93 "values": ["現金券"]
94 94 },
95 95 {
96 - "field": "product_name",
96 + "field": "name",
97 97 "operator": "like",
98 98 "values": ["抵用券"]
99 99 }
100 100 ]
101 101 },
102 102 {
103 - "field": "total_cub_points",
104 - "operator": "gt",
103 + "field": "point",
104 + "operator": "ge",
105 105 "values": ["500"]
106 106 }
107 107 ]
108 108 }
109 109 ]
110 110 }
111 - }
112 -
113 -// 更正後
114 -{
115 - "logic": "and",
116 - "rules": [
117 - {
118 - "logic": "or",
119 - "rules": [
120 - {
121 - "field": "product_name",
122 - "operator": "like",
123 - "values": ["現金券"]
124 - },
125 - {
126 - "field": "product_name",
127 - "operator": "like",
128 - "values": ["抵用券"]
129 - }
130 - ]
131 - },
132 - {
133 - "field": "total_cub_points",
134 - "operator": "gt",
135 - "values": ["500"]
136 - }
137 - ]
138 -}
139 111 "elDatas":[
140 112 {
141 113 "sub_id":"001",
142 - "content": "SER(SERIAL_ID, IN).DATA('{"sub_id":'001','value':'["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]'}')"
114 + "content": "IF(in.data('{"field":"serialId", "values":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}'), markPassed)"
143 115 },
144 116 {
145 117 "sub_id":"002",
146 - "content": "SER(PRODUCT_NAME, IN).DATA('{"sub_id": '002', 'value': '["星巴克 150 元券", "威秀電影票"]'}')"
118 + "content": "IF(in.data('{"field":"name", "values":["星巴克 150 元券", "威秀電影票"]}'), markPassed)"
147 119 },
148 120 {
149 121 "sub_id":"003",
150 - "content":"OR(
151 - SER(PRODUCT_NAME, LIKE),
152 - SER(PRODUCT_NAME, LIKE)
153 - ),
154 - SER(total_cub_points, gt).DATA('{"sub_id":'003', 'value': '["500"]'}')"
122 + "content": "IF(AND(OR(like.data('{"field":"name", "values":["現金券"]}'), like.data('{"field":"name", "values":["抵用券"]}')), ge.data('{"field":"point", "values":["500"]}')), markPassed)"
155 123 }
156 124 ]
157 125 }
158 -
159 - ```json
126 + ```json
160 127 "sub_id": "001",
161 - "activity_type":"exchange_voucher",
128 + "activity_type":"EXCHANGE_VOUCHER",
162 129 "field": null,
163 130 "operator": null,
164 131 "values":null
132 +```
133 +
134 +```json
165 135 "success": true,
166 136 "errorCode": null,
167 137 "elDatas":[
168 138 {
169 139 "sub_id":"001",
170 - "content": "SER(SERIAL_ID, IN).DATA('{"sub_id":'001','value':'["1","2","3","4","5","6","7","8","9","10"]'}')"
140 + "content": "SER(markPassed)"
171 141 }
172 -#
173 -
174 - #operator 會用到的有這些:
142 + ### operator 會用到的有這些:
175 - * eq 等於
143 + ### fieldName Mapping:
144 +
145 +票券兌換、核銷
146 +activityType = `EXCHANGE_POINTS`
147 +`EXCHANGE_VOUCHER`
148 +`REDEEM`
149 +
150 +* serialId
151 +* name ( 票券名稱 )
152 +* brandName
153 +* point
154 +
155 +* * *
156 +
157 +會員推薦
158 +
159 +* memberIdentity
160 +
161 +* * *
162 +
163 +會員登入
164 +
165 +* continuousLoginDays
166 +* accumulatedLoginDays
167 +
168 +###
169 +
170 +### CMS 任務相關說明
171 +任務牆說明 ([https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-124258](https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-124258))
172 +
173 +### Error Code