@thinkingai/ae-cli 6.0.37 → 6.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -3
- package/README.zh.md +25 -3
- package/dist/{auth-56Z45UVR.js → auth-GDV3H5I4.js} +18 -8
- package/dist/{auth-ENM3FE6L.js → auth-NN55553T.js} +3 -3
- package/dist/{capability-2H6PAOA3.js → capability-TPORIKRQ.js} +19 -15
- package/dist/{capability-YPOQX6PL.js → capability-VQNC5CF7.js} +19 -15
- package/dist/chunk-4NN5IWVN.js +26 -0
- package/dist/{chunk-DB4Q3ANU.js → chunk-6A2FUCIS.js} +3 -3
- package/dist/{chunk-PVBYJWC2.js → chunk-7KQWSBSL.js} +4 -4
- package/dist/{chunk-24BAVOX3.js → chunk-AXDXJTPC.js} +3 -1
- package/dist/{chunk-CPVTECJ3.js → chunk-DT6Y3TD7.js} +5 -5
- package/dist/{chunk-EGEIXA2Z.js → chunk-DWO43OIB.js} +0 -248
- package/dist/{chunk-V6FR6WTW.js → chunk-GJJA4CQZ.js} +34 -2
- package/dist/{chunk-RGXCNC4N.js → chunk-GS2P7LFD.js} +50 -17
- package/dist/{chunk-LYVNONC4.js → chunk-JHENBQ5B.js} +35 -0
- package/dist/{chunk-3P3562ZX.js → chunk-MVDZ7DBQ.js} +5 -5
- package/dist/{chunk-LCXU3AAT.js → chunk-NBPKWKRA.js} +2 -2
- package/dist/{chunk-HQ2A7ITL.js → chunk-RBNKI5ZW.js} +50 -17
- package/dist/{chunk-LHVM35J4.js → chunk-TS6BUGUY.js} +4 -4
- package/dist/chunk-TUKQZTMI.js +250 -0
- package/dist/{chunk-J7MZHDHQ.js → chunk-VKD5WQKN.js} +5 -5
- package/dist/{chunk-3KI3RRXX.js → chunk-VTXHDCBW.js} +3 -3
- package/dist/{chunk-KTYR3U6D.js → chunk-YTG6Q75E.js} +10 -6
- package/dist/{chunk-IR4ZLVPW.js → chunk-YV52FB5G.js} +25 -3
- package/dist/{chunk-E7UXXHO3.js → chunk-Z3OXWCIA.js} +3 -3
- package/dist/{cli-token-4SBMXAUK.js → cli-token-GL5MS5FK.js} +4 -4
- package/dist/{client-PP5FETMW.js → client-DAIPF7XN.js} +4 -4
- package/dist/{community-report-client-KK2QBANO.js → community-report-client-M2RW4MXD.js} +2 -2
- package/dist/config-4VZNLBKF.js +489 -0
- package/dist/index.js +96 -37
- package/dist/memory-RWJW4XFO.js +892 -0
- package/dist/memory-VO2ZJCRT.js +892 -0
- package/dist/{metadata-JIQ77HFY.js → metadata-YGTHR2XJ.js} +8 -8
- package/dist/{metadata-AN3YFZEV.js → metadata-ZRN2GHPN.js} +8 -8
- package/dist/{model-JASQVOFD.js → model-CLUIK3K5.js} +7 -5
- package/dist/{raw-XJCAT3HX.js → raw-52B4UKO4.js} +8 -7
- package/dist/sync-3REDHGY6.js +10259 -0
- package/dist/{te-agent-JHUG6DVV.js → te-agent-XNPELAKX.js} +580 -84
- package/dist/{te-analysis-IWQZO423.js → te-analysis-GJI5FZUL.js} +1611 -25
- package/dist/{te-analysis-X222IRYR.js → te-analysis-N2BRDJZ5.js} +1611 -25
- package/dist/{te-community-QOYIYEJI.js → te-community-SQXKE5OO.js} +7 -7
- package/dist/{te-community-UFKI6ONP.js → te-community-TYSNU3NQ.js} +7 -7
- package/dist/{te-dataops-PZQ5NQLY.js → te-dataops-5TM7WZDI.js} +370 -189
- package/dist/{te-dataops-XTWVTJCA.js → te-dataops-OWIADNSM.js} +370 -189
- package/dist/{te-engage-NLZUPSBK.js → te-engage-F7V55KVW.js} +333 -105
- package/dist/{te-engage-E7F4HTXU.js → te-engage-FMYAYCNV.js} +333 -105
- package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
- package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
- package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
- package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
- package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
- package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
- package/package.json +5 -2
- package/skills/ae-agent/SKILL.md +178 -16
- package/skills/ae-agent/references/add-skill.md +22 -10
- package/skills/ae-agent/references/edit-skill.md +24 -14
- package/skills/ae-agent/references/find-archived-conversations.md +82 -0
- package/skills/ae-agent/references/restore-conversation.md +54 -0
- package/skills/ae-agent/references/upload-skill.md +24 -14
- package/skills/ae-analysis/SKILL.md +1 -1
- package/skills/ae-analysis/references/command_index.md +109 -42
- package/skills/ae-analysis/references/debug_data_list.md +28 -0
- package/skills/ae-analysis/references/debug_device_add.md +23 -0
- package/skills/ae-analysis/references/debug_device_list.md +19 -0
- package/skills/ae-analysis/references/debug_device_select.md +22 -0
- package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
- package/skills/ae-analysis/references/plan_sync_display_names.md +28 -0
- package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
- package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
- package/skills/ae-analysis/references/project_data_power_get.md +3 -3
- package/skills/ae-analysis/references/project_data_power_list.md +3 -3
- package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
- package/skills/ae-analysis/references/project_entity_create.md +3 -3
- package/skills/ae-analysis/references/project_entity_delete.md +3 -3
- package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
- package/skills/ae-analysis/references/project_entity_get.md +3 -3
- package/skills/ae-analysis/references/project_entity_list.md +3 -3
- package/skills/ae-analysis/references/project_entity_update.md +3 -3
- package/skills/ae-analysis/references/project_function_list.md +3 -3
- package/skills/ae-analysis/references/project_info_create.md +25 -0
- package/skills/ae-analysis/references/project_info_delete.md +24 -0
- package/skills/ae-analysis/references/project_info_get.md +3 -3
- package/skills/ae-analysis/references/project_info_list.md +3 -3
- package/skills/ae-analysis/references/project_info_update.md +3 -3
- package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
- package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
- package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
- package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
- package/skills/ae-analysis/references/project_member_add.md +3 -3
- package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
- package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
- package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
- package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
- package/skills/ae-analysis/references/project_member_import.md +3 -3
- package/skills/ae-analysis/references/project_member_list.md +3 -3
- package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
- package/skills/ae-analysis/references/project_member_remove.md +3 -3
- package/skills/ae-analysis/references/project_member_update.md +3 -3
- package/skills/ae-analysis/references/project_owner_update.md +3 -3
- package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
- package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
- package/skills/ae-analysis/references/project_role_delete.md +3 -3
- package/skills/ae-analysis/references/project_role_function_list.md +3 -3
- package/skills/ae-analysis/references/project_role_get.md +3 -3
- package/skills/ae-analysis/references/project_role_list.md +3 -3
- package/skills/ae-analysis/references/project_role_upsert.md +3 -3
- package/skills/ae-analysis/references/project_role_user_list.md +3 -3
- package/skills/ae-analysis/references/project_space_list.md +1 -1
- package/skills/ae-analysis/references/project_timezone_get.md +3 -3
- package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
- package/skills/ae-analysis/references/project_timezone_update.md +3 -3
- package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
- package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
- package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
- package/skills/ae-analysis/references/system_admin_list.md +21 -0
- package/skills/ae-analysis/references/system_admin_remove.md +25 -0
- package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
- package/skills/ae-analysis/references/system_function_list.md +21 -0
- package/skills/ae-analysis/references/system_member_add.md +25 -0
- package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
- package/skills/ae-analysis/references/system_member_delete.md +25 -0
- package/skills/ae-analysis/references/system_member_list.md +24 -0
- package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
- package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
- package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
- package/skills/ae-analysis/references/system_member_status_update.md +26 -0
- package/skills/ae-analysis/references/system_member_update.md +23 -0
- package/skills/ae-analysis/references/system_mfa_get.md +21 -0
- package/skills/ae-analysis/references/system_mfa_update.md +25 -0
- package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
- package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
- package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
- package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
- package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
- package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
- package/skills/ae-analysis/references/system_preference_get.md +21 -0
- package/skills/ae-analysis/references/system_preference_update.md +22 -0
- package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
- package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
- package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
- package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
- package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
- package/skills/ae-analysis/references/system_query_task_export.md +49 -0
- package/skills/ae-analysis/references/system_query_task_get.md +23 -0
- package/skills/ae-analysis/references/system_query_task_list.md +35 -0
- package/skills/ae-analysis/references/system_query_task_options.md +27 -0
- package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
- package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
- package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
- package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
- package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
- package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
- package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
- package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
- package/skills/ae-analysis/references/system_role_delete.md +26 -0
- package/skills/ae-analysis/references/system_role_function_list.md +22 -0
- package/skills/ae-analysis/references/system_role_get.md +22 -0
- package/skills/ae-analysis/references/system_role_list.md +24 -0
- package/skills/ae-analysis/references/system_role_upsert.md +27 -0
- package/skills/ae-analysis/references/system_role_user_list.md +22 -0
- package/skills/ae-analysis/references/system_seat_list.md +25 -0
- package/skills/ae-analysis/references/system_seat_update.md +26 -0
- package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
- package/skills/ae-analysis/references/system_smtp_get.md +21 -0
- package/skills/ae-analysis/references/system_smtp_test.md +22 -0
- package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
- package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
- package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
- package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
- package/skills/ae-analysis/references/system_usage_overview.md +21 -0
- package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
- package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
- package/skills/ae-dataops/SKILL.md +1 -1
- package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
- package/skills/ae-engage/SKILL.md +56 -26
- package/skills/ae-engage/references/activity-activity.md +3 -0
- package/skills/ae-engage/references/activity-approval.md +12 -4
- package/skills/ae-engage/references/activity-task.md +21 -6
- package/skills/ae-engage/references/activity-topic.md +31 -13
- package/skills/ae-engage/references/add-channel.md +170 -41
- package/skills/ae-engage/references/build-task-save-guide.md +40 -27
- package/skills/ae-engage/references/channel-update-config.md +3 -2
- package/skills/ae-engage/references/common-metric.md +48 -120
- package/skills/ae-engage/references/flow-detail.md +13 -0
- package/skills/ae-engage/references/preset-event.md +12 -32
- package/skills/ae-engage/references/save-flow.md +127 -64
- package/skills/ae-engage/references/save-task.md +197 -59
- package/skills/ae-engage/references/scene-config-metric.md +3 -0
- package/skills/ae-engage/references/scene-preset-metric.md +8 -37
- package/skills/ae-engage/references/scene-strategy-audience.md +51 -643
- package/skills/ae-engage/references/scene-strategy.md +6 -6
- package/skills/ae-engage/references/task-detail.md +10 -0
- package/skills/ae-engage/references/task-submit-approval.md +45 -0
- package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
- package/skills/ae-generate-tracking-code/SKILL.md +24 -8
- package/skills/ae-generate-tracking-code/references/debug-script.md +46 -37
- package/skills/ae-generate-tracking-plan/SKILL.md +26 -1
- package/skills/ae-metadata/SKILL.md +1 -1
- package/dist/config-BSSALXEN.js +0 -128
- package/dist/sync-QFP4XFN3.js +0 -485
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# ae-engage engage-setting channel create
|
|
2
2
|
|
|
3
|
-
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel create`
|
|
3
|
+
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel create` · Capability id: `engage-setting.channel.create`
|
|
4
4
|
|
|
5
|
-
Create a new Engage push channel.
|
|
5
|
+
Create a new Engage **运营设置** push channel (not config-center channels; those use `engage-scene config-channel`).
|
|
6
|
+
|
|
7
|
+
**First decide channel kind:** Webhook (`channelType=1`) and Client (`channelType=3`) share the same CLI command and outer `--req` fields, but **`config` / `pushIdType` / custom-param prefixes differ**. Do not reuse a webhook payload for client (or the reverse).
|
|
6
8
|
|
|
7
9
|
## Flags
|
|
8
10
|
|
|
@@ -11,67 +13,194 @@ Create a new Engage push channel.
|
|
|
11
13
|
| `--project-id` / `-p` | number | Yes | Project ID |
|
|
12
14
|
| `--req` | json | Yes | Channel creation request JSON object |
|
|
13
15
|
|
|
14
|
-
## `--req` Object Fields
|
|
16
|
+
## `--req` Object Fields (common)
|
|
15
17
|
|
|
16
18
|
| Field | Type | Required | Description |
|
|
17
19
|
|------|------|------|------|
|
|
18
|
-
| `channelType` | number | Yes |
|
|
19
|
-
| `channelSubBizType` | string | Yes |
|
|
20
|
+
| `channelType` | number | Yes | `1` webhook · `3` client (see below) |
|
|
21
|
+
| `channelSubBizType` | string | Yes | must match type: `webhook` or `client` |
|
|
20
22
|
| `channelName` | string | Yes | channel name |
|
|
21
|
-
| `pushIdType` | string | Yes |
|
|
22
|
-
| `config` | string | Yes | channel config JSON string |
|
|
23
|
-
| `enableTouchEvent` | number | Yes |
|
|
24
|
-
| `eventClickName` | string | Yes | click event
|
|
25
|
-
| `eventDeliveryName` | string | Yes | delivery event
|
|
26
|
-
| `touchEventSource` | string | Yes |
|
|
23
|
+
| `pushIdType` | string | Yes | prefixed property code — **rules differ by channel kind** |
|
|
24
|
+
| `config` | string | Yes | channel config JSON **string** — **shape differs by channel kind** |
|
|
25
|
+
| `enableTouchEvent` | number | Yes | reach funnel: `0` off · `1` on |
|
|
26
|
+
| `eventClickName` | string | Yes when funnel on | click event (e.g. `ops_click`) |
|
|
27
|
+
| `eventDeliveryName` | string | Yes when funnel on | delivery event (e.g. `ops_view`) |
|
|
28
|
+
| `touchEventSource` | string | Yes | usually `custom` for custom event names |
|
|
27
29
|
|
|
28
|
-
The outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape
|
|
30
|
+
The outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape. The Hermes Capability handler assigns the outer `--project-id` to `req.projectId`.
|
|
29
31
|
|
|
30
32
|
## Response shape
|
|
31
33
|
|
|
32
|
-
The created channel is under `data.item`;
|
|
33
|
-
`channel_id`, `channel_status`, and `channel_type`.
|
|
34
|
+
The created channel is under `data.item`; response keys recursively use snake_case (`channel_id`, `channel_status`, `channel_type`).
|
|
34
35
|
|
|
35
|
-
##
|
|
36
|
+
## Webhook vs Client (read this first)
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
| | **Webhook** | **Client** |
|
|
39
|
+
|--|-------------|------------|
|
|
40
|
+
| `channelType` | `1` | `3` |
|
|
41
|
+
| `channelSubBizType` | `webhook` | `client` |
|
|
42
|
+
| `config.url` | **HTTP(S) callback URL** (server endpoint that receives the push) | **Client config key / scene id** (e.g. `popup`, `abtest`, `difficulty_ratio`) — **not** an `http://` URL |
|
|
43
|
+
| `pushIdType` | Prefer **`user:`** user properties (e.g. `user:#account_id`) | **`user:`** or **`client:`** (e.g. `user:#account_id`, `client:#distinct_id`) |
|
|
44
|
+
| `config.userParamsList[].columnName` | Prefer **`user:`** only (validated against user dispatch props) | **`user:`** and/or **`client:`** (validated against user props + client-param list) |
|
|
45
|
+
| `config.authConfig` | Optional HTTP auth (`enable` / `secretKey` / `secretType`) | Usually omit / unused |
|
|
46
|
+
| `config.paramsList` | Content template — same type enum for both | Same |
|
|
47
|
+
| Reach funnel | Same outer fields | Same |
|
|
38
48
|
|
|
39
|
-
|
|
40
|
-
- `2`: `APP_PUSH`
|
|
41
|
-
- `3`: `CLIENT_PUSH`
|
|
42
|
-
- `4`: `WECHAT`
|
|
43
|
-
- `5`: `DOU_YIN`
|
|
49
|
+
Prefix convention (aligned with 配置中心通道管理):
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
- User property → `user:<prop_name>` (e.g. `user:#account_id`, `user:city`)
|
|
52
|
+
- Client parameter → `client:<column_name>` (e.g. `client:#os`, `client:#distinct_id`)
|
|
53
|
+
- Never pass bare `#account_id` / `city` for `pushIdType` or `columnName`
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
## Preflight
|
|
48
56
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
- `apns`: App Push, Apple Push Notification Service
|
|
53
|
-
- `client`: Client Push
|
|
54
|
-
- `wechat_mini_game`: WeChat mini game
|
|
55
|
-
- `dou_yin_recommended_game_card`: Douyin recommended game card
|
|
57
|
+
```bash
|
|
58
|
+
# User properties (both kinds; required for webhook custom params)
|
|
59
|
+
ae-cli analysis-meta property list --project-id <id> --scope user --query <kw> --limit 50
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
# Client parameters (client channel pushId / custom params)
|
|
62
|
+
ae-cli engage-setting client-param list --project-id <id>
|
|
58
63
|
|
|
59
|
-
|
|
60
|
-
-
|
|
64
|
+
# Optional: copy a real config shape
|
|
65
|
+
ae-cli engage-setting channel list --project-id <id>
|
|
66
|
+
ae-cli engage-setting channel get --project-id <id> --channel-id <id>
|
|
67
|
+
```
|
|
61
68
|
|
|
62
|
-
|
|
69
|
+
If a property / client-param is not found after list/get, stop — do not invent codes.
|
|
63
70
|
|
|
64
|
-
|
|
65
|
-
- `req.channelSubBizType` should match the actual channel capability; for example, when `channelType=1`, `webhook` is usually used.
|
|
66
|
-
- If delivery or click callbacks are required, also check that `eventDeliveryName`, `eventClickName`, and `touchEventSource` are complete.
|
|
71
|
+
---
|
|
67
72
|
|
|
68
|
-
##
|
|
73
|
+
## A. Webhook channel
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
channelType=1, channelSubBizType=webhook
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Webhook `config` JSON (stringified into `req.config`)
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"url": "https://example.com/hook",
|
|
84
|
+
"paramsList": [
|
|
85
|
+
{ "key": "title", "keyName": "标题", "type": "STRING", "required": 0 },
|
|
86
|
+
{ "key": "body", "keyName": "动态正文", "type": "TEXT", "required": 0, "tips": "$[user:city]" }
|
|
87
|
+
],
|
|
88
|
+
"userParamsList": [
|
|
89
|
+
{
|
|
90
|
+
"key": "uid",
|
|
91
|
+
"columnName": "user:#account_id",
|
|
92
|
+
"defaultValue": "-",
|
|
93
|
+
"columnDesc": "账号 ID"
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"authConfig": { "enable": false }
|
|
97
|
+
}
|
|
98
|
+
```
|
|
69
99
|
|
|
70
|
-
|
|
100
|
+
| Field | Required | Notes |
|
|
101
|
+
|-------|----------|-------|
|
|
102
|
+
| `url` | Yes | Real HTTP(S) webhook endpoint |
|
|
103
|
+
| `paramsList` | No | Content template definitions |
|
|
104
|
+
| `userParamsList` | No | Custom params; `columnName` = `user:…`; `defaultValue` must be non-blank |
|
|
105
|
+
| `authConfig` | No | When `enable=true`, `secretKey` required |
|
|
71
106
|
|
|
72
|
-
|
|
107
|
+
Do **not** put `client:…` in webhook `userParamsList` unless you have confirmed the environment accepts it — create validation uses **user** dispatch props.
|
|
108
|
+
|
|
109
|
+
### Webhook example
|
|
73
110
|
|
|
74
111
|
```bash
|
|
75
112
|
ae-cli engage-setting channel create --project-id 1 \
|
|
76
|
-
--req '{"channelType":1,"channelSubBizType":"webhook","channelName":"
|
|
113
|
+
--req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo_webhook","pushIdType":"user:#account_id","config":"{\"url\":\"https://example.com/hook\",\"paramsList\":[{\"key\":\"title\",\"keyName\":\"标题\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"city\",\"columnName\":\"user:city\",\"defaultValue\":\"-\"}],\"authConfig\":{\"enable\":false}}","enableTouchEvent":1,"eventDeliveryName":"ops_view","eventClickName":"ops_click","touchEventSource":"custom"}'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## B. Client channel
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
channelType=3, channelSubBizType=client
|
|
77
122
|
```
|
|
123
|
+
|
|
124
|
+
### Client `config` JSON (stringified into `req.config`)
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"url": "popup",
|
|
129
|
+
"paramsList": [
|
|
130
|
+
{ "key": "messageType", "keyName": "消息类型", "type": "NUM", "required": 0 },
|
|
131
|
+
{
|
|
132
|
+
"key": "gifts",
|
|
133
|
+
"keyName": "礼包",
|
|
134
|
+
"type": "OBJ_ARRAY",
|
|
135
|
+
"required": 0,
|
|
136
|
+
"objArray": [
|
|
137
|
+
{ "key": "gift_name", "keyName": "道具名", "type": "STRING", "required": 0 },
|
|
138
|
+
{ "key": "count", "keyName": "数量", "type": "NUM", "required": 0 }
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"userParamsList": [
|
|
143
|
+
{
|
|
144
|
+
"key": "os",
|
|
145
|
+
"columnName": "client:#os",
|
|
146
|
+
"defaultValue": "-",
|
|
147
|
+
"columnDesc": "操作系统"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"key": "city",
|
|
151
|
+
"columnName": "user:city",
|
|
152
|
+
"defaultValue": "-",
|
|
153
|
+
"columnDesc": "城市"
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
| Field | Required | Notes |
|
|
160
|
+
|-------|----------|-------|
|
|
161
|
+
| `url` | Yes | **Client scene / config key** (string id like `popup`, `abtest`) — not an HTTP URL |
|
|
162
|
+
| `paramsList` | No | Content template (same type enum as webhook) |
|
|
163
|
+
| `userParamsList` | No | `columnName` may be `user:…` **or** `client:…`; `defaultValue` non-blank |
|
|
164
|
+
| `authConfig` | No | Usually omit |
|
|
165
|
+
|
|
166
|
+
`pushIdType` examples: `user:#account_id`, `client:#distinct_id` (discover client codes via `client-param list`).
|
|
167
|
+
|
|
168
|
+
### Client example
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
ae-cli engage-setting channel create --project-id 1 \
|
|
172
|
+
--req '{"channelType":3,"channelSubBizType":"client","channelName":"demo_client","pushIdType":"client:#distinct_id","config":"{\"url\":\"popup\",\"paramsList\":[{\"key\":\"type\",\"keyName\":\"场景\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"os\",\"columnName\":\"client:#os\",\"defaultValue\":\"-\"}]}","enableTouchEvent":0,"eventClickName":"","eventDeliveryName":"","touchEventSource":"custom"}'
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Content template types (`paramsList[].type`) — both kinds
|
|
178
|
+
|
|
179
|
+
| type | Meaning |
|
|
180
|
+
|------|---------|
|
|
181
|
+
| `STRING` | 文本 |
|
|
182
|
+
| `TEXT` | 动态文本 (`$[user:…]` / `$[client:…]` placeholders) |
|
|
183
|
+
| `NUM` | 数值 |
|
|
184
|
+
| `OBJ_ARRAY` | 对象组 (`objArray` children required) |
|
|
185
|
+
| `DATE` | 日期 |
|
|
186
|
+
| `DATE_TIME` | 时间 |
|
|
187
|
+
| `ARRAY` | 列表 |
|
|
188
|
+
| `SINGLE_SELECT` | 单选下拉 (**requires** existing config-table `tableId`) |
|
|
189
|
+
| `RADIO` | 单选 |
|
|
190
|
+
|
|
191
|
+
`required`: `0` optional · `1` required. `OBJ_ARRAY` children: `STRING` / `NUM` / `DATE` / `DATE_TIME` / `TEXT` / `SINGLE_SELECT` only.
|
|
192
|
+
|
|
193
|
+
## Other channel types
|
|
194
|
+
|
|
195
|
+
`channelType` also supports `2` APP_PUSH (`fcm` / `aurora` / `apns`), `4` WECHAT, `5` DOU_YIN — each has its own `config` DTO. Discover with `channel get` on an existing channel of that subtype before creating; do not invent FCM/APNs secrets.
|
|
196
|
+
|
|
197
|
+
## Additional Constraints
|
|
198
|
+
|
|
199
|
+
- `req.config` must be a **JSON string**, not a nested object in the CLI flag.
|
|
200
|
+
- Match `channelSubBizType` to `channelType` (`1`↔`webhook`, `3`↔`client`).
|
|
201
|
+
- When `enableTouchEvent=1`, set `touchEventSource` plus delivery/click event names.
|
|
202
|
+
- For webhook tests, prefer a known mock URL from `channel get` rather than inventing production endpoints.
|
|
203
|
+
|
|
204
|
+
## Safety Constraints
|
|
205
|
+
|
|
206
|
+
This command is a **write operation**. Verify `--req` completeness and the correct webhook vs client rules before executing.
|
|
@@ -14,20 +14,16 @@ Use this sequence when creating or updating a task draft:
|
|
|
14
14
|
|
|
15
15
|
1. Query channels with `ae-cli engage-setting channel list --project-id <projectId>`.
|
|
16
16
|
2. Call `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`.
|
|
17
|
-
3.
|
|
17
|
+
3. Use semantic definitions for audience, trigger, and completion fields:
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
ae-cli engage-setting query cluster-qp-skill --project-id <projectId> --response-mode full --condition-subtype all
|
|
23
|
-
```
|
|
19
|
+
- `targetConfig.definitionRequest`
|
|
20
|
+
- `triggerConfig.triggerDefinition` (required for `triggerType=3/4/5`)
|
|
21
|
+
- `completionIndicatorDef.completionIndicators[].eventDefinition`
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- `clientConfig.clientQp`
|
|
30
|
-
- `completionIndicatorDef.event`
|
|
23
|
+
Build event primitives from `ae-analysis` user-cluster / audience models. Hermes wraps those
|
|
24
|
+
primitives in the task-specific envelope selected by `channelType`, `triggerType`, and
|
|
25
|
+
`eventTriggerType`, then validates the final persisted QP before save. Never construct persisted
|
|
26
|
+
execution QP.
|
|
31
27
|
|
|
32
28
|
For existing-cluster audiences (`targetClusterType=2`), you may copy server-authored definitions via:
|
|
33
29
|
|
|
@@ -41,11 +37,8 @@ ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<cl
|
|
|
41
37
|
Important:
|
|
42
38
|
|
|
43
39
|
- Do not treat audience creation as a fixed preflight step.
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
- `triggerConfig.triggerRule`
|
|
47
|
-
- `clientConfig.clientQp`
|
|
48
|
-
- `completionIndicatorDef.event`
|
|
40
|
+
- Discover event/property metadata when semantic definitions reference those fields.
|
|
41
|
+
- Omit the server-authored `clientConfig.clientQp`; partial updates preserve it.
|
|
49
42
|
|
|
50
43
|
---
|
|
51
44
|
|
|
@@ -64,6 +57,7 @@ Common request patterns:
|
|
|
64
57
|
```bash
|
|
65
58
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{}'
|
|
66
59
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
|
|
60
|
+
ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"channelType":2,"triggerType":3,"eventTriggerType":2}}'
|
|
67
61
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
|
|
68
62
|
```
|
|
69
63
|
|
|
@@ -92,6 +86,7 @@ Use `context` when you want scenario-specific guidance without writing a partial
|
|
|
92
86
|
Typical fields:
|
|
93
87
|
|
|
94
88
|
- `triggerType`
|
|
89
|
+
- `eventTriggerType`
|
|
95
90
|
- `targetClusterType`
|
|
96
91
|
- `channelType`
|
|
97
92
|
- `channelId`
|
|
@@ -104,7 +99,9 @@ Example:
|
|
|
104
99
|
```json
|
|
105
100
|
{
|
|
106
101
|
"context": {
|
|
107
|
-
"
|
|
102
|
+
"channelType": 2,
|
|
103
|
+
"triggerType": 3,
|
|
104
|
+
"eventTriggerType": 2,
|
|
108
105
|
"targetClusterType": 2,
|
|
109
106
|
"channelId": "channel_123"
|
|
110
107
|
}
|
|
@@ -190,7 +187,7 @@ This section describes the high-level contract:
|
|
|
190
187
|
|
|
191
188
|
- final tool is `save_task`
|
|
192
189
|
- required preflight is `query_channel_list -> build_task_save_guide`
|
|
193
|
-
-
|
|
190
|
+
- audience, trigger, and completion conditions use semantic definitions
|
|
194
191
|
- `save_task.req` must be a grouped JSON object
|
|
195
192
|
|
|
196
193
|
### 4.6 `scenario`
|
|
@@ -224,6 +221,8 @@ It includes:
|
|
|
224
221
|
|
|
225
222
|
- grouped block rules
|
|
226
223
|
- structured conditional rules
|
|
224
|
+
- the server/client × `triggerType` × `eventTriggerType` combination matrix
|
|
225
|
+
- type-specific aggregate, continuous, ordered, and every-completion event shapes
|
|
227
226
|
- related-parameter rules
|
|
228
227
|
- unsupported fields / values / combinations
|
|
229
228
|
- `channelContentSchema`
|
|
@@ -248,6 +247,25 @@ Do not invent free-form content items such as:
|
|
|
248
247
|
|
|
249
248
|
Instead, use the valid item structure and put message text into `value`.
|
|
250
249
|
|
|
250
|
+
#### `fieldRules.blocks.triggerConfig.triggerDefinitionSchema`
|
|
251
|
+
|
|
252
|
+
For event-triggered tasks, read all of these fields before constructing `triggerDefinition`:
|
|
253
|
+
|
|
254
|
+
- `combinationMatrix`
|
|
255
|
+
- `ruleFields`
|
|
256
|
+
- `eventShapes`
|
|
257
|
+
- `examples`
|
|
258
|
+
|
|
259
|
+
The guide treats the A rule as a discriminated envelope:
|
|
260
|
+
|
|
261
|
+
- `eventTriggerType=0`: aggregate events
|
|
262
|
+
- `eventTriggerType=1`: exactly one count/eq event with value at least 2, plus optional blacklist
|
|
263
|
+
- `eventTriggerType=2`: at least two ordered steps with `eventDefinition` and `hasDone`
|
|
264
|
+
- `eventTriggerType=3`: client-side count/eq/1 events with `eventTriggerCaliberType`
|
|
265
|
+
|
|
266
|
+
Do not copy the accumulated example and only change `eventTriggerType`. Hermes rejects a final QP
|
|
267
|
+
whose event structure does not match its envelope.
|
|
268
|
+
|
|
251
269
|
### 4.9 `handoff`
|
|
252
270
|
|
|
253
271
|
This is the final section before `save_task`.
|
|
@@ -278,14 +296,9 @@ Recommended usage pattern:
|
|
|
278
296
|
3. read `fieldRules.channelContentSchema`
|
|
279
297
|
4. read `handoff.reqTemplate`
|
|
280
298
|
5. fix everything in `blockingPlaceholders`
|
|
281
|
-
6. if the guide points to an audience or
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
ae-cli analysis user-cluster create --project-id <projectId> --cluster-name <condition_cluster_name> --display-name <display_name> --definition-request '<semantic-definition-json>'
|
|
285
|
-
ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<condition_cluster_name>"]'
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
7. prefer the created cluster reference; only copy server-authored fields from `user-cluster get` when the guide explicitly requires QP-derived fields
|
|
299
|
+
6. if the guide points to an audience, trigger, or completion condition, add the semantic
|
|
300
|
+
definition directly
|
|
301
|
+
7. omit `clientConfig.clientQp`; partial updates preserve the server-authored value
|
|
289
302
|
8. call `engage-task task save`
|
|
290
303
|
|
|
291
304
|
---
|
|
@@ -19,8 +19,8 @@ ae-cli engage-setting channel update-config \
|
|
|
19
19
|
| `--channel-id` | Yes | Channel ID to update. |
|
|
20
20
|
| `--enable-touch-event` | Yes | Reach funnel toggle: `1` enabled, `0` disabled. |
|
|
21
21
|
| `--channel-name` | No | New channel name. |
|
|
22
|
-
| `--push-id-type` | No |
|
|
23
|
-
| `--config` | No | Channel
|
|
22
|
+
| `--push-id-type` | No | Prefixed push ID: webhook prefers `user:…`; client allows `user:…` or `client:…` (see `add-channel.md`). |
|
|
23
|
+
| `--config` | No | Channel JSON string. Webhook `url` = HTTP(S); client `url` = scene key. Custom `columnName` prefixes differ — see `add-channel.md`. |
|
|
24
24
|
| `--touch-event-source` | No | Reach event source. |
|
|
25
25
|
| `--event-delivery-name` | No | Actual delivery event name. |
|
|
26
26
|
| `--event-click-name` | No | Click event name. |
|
|
@@ -33,4 +33,5 @@ ae-cli engage-setting channel update-config \
|
|
|
33
33
|
|
|
34
34
|
- Use this command when the user asks to edit/update an existing channel's name, config, push-id type, or reach-funnel settings.
|
|
35
35
|
- `--config` is the channel-specific JSON config; discover the existing config with `ae-cli engage-setting channel get` first rather than inventing it.
|
|
36
|
+
- Keep webhook vs client rules from `add-channel.md` when editing `url` / `pushIdType` / `userParamsList`.
|
|
36
37
|
- Risk is `write`; ordinary update, no confirmation gate.
|
|
@@ -1,142 +1,70 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Common metric semantic definitions
|
|
2
2
|
|
|
3
|
-
> Capability ids: `engage-setting.common-metric.{list,get,create,update,delete}` ·
|
|
4
|
-
|
|
3
|
+
> Trigger keywords: common metric, shared metric · Capability ids: `engage-setting.common-metric.{list,get,create,update,delete}` · Permission: `opsEditSetting`.
|
|
4
|
+
|
|
5
|
+
Common metric capabilities expose semantic event/formula definitions. Do not submit or reuse `metric_qp`, `Axxx`, display metadata, formula dependency internals, or property metadata.
|
|
5
6
|
|
|
6
7
|
## Commands
|
|
7
8
|
|
|
8
9
|
```bash
|
|
9
|
-
# List common metrics
|
|
10
10
|
ae-cli engage-setting common-metric list --project-id <project_id>
|
|
11
|
-
|
|
12
|
-
# Get a common metric detail
|
|
13
11
|
ae-cli engage-setting common-metric get --project-id <project_id> --metric-name <name>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
--metric-
|
|
19
|
-
|
|
20
|
-
# Update a common metric
|
|
21
|
-
ae-cli engage-setting common-metric update \
|
|
22
|
-
--project-id <project_id> --metric-type 1 --metric-name <name> --metric-qp '<qp_json>' \
|
|
23
|
-
--metric-window-num <num> --metric-window-time-unit day --display-name <display>
|
|
24
|
-
|
|
25
|
-
# Delete a common metric (high-risk)
|
|
12
|
+
ae-cli engage-setting common-metric create --project-id <project_id> --metric-type 1 \
|
|
13
|
+
--metric-name <name> --metric-definition '<json>' \
|
|
14
|
+
--metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
|
|
15
|
+
ae-cli engage-setting common-metric update --project-id <project_id> --metric-type 1 \
|
|
16
|
+
--metric-name <name> --metric-definition '<json>' \
|
|
17
|
+
--metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
|
|
26
18
|
ae-cli engage-setting common-metric delete --project-id <project_id> --metric-name <name> --yes
|
|
27
19
|
```
|
|
28
20
|
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
### list
|
|
32
|
-
|
|
33
|
-
| Parameter | Required | Description |
|
|
34
|
-
|---|---|---|
|
|
35
|
-
| `--project-id` / `-p` | Yes | Numeric project ID. |
|
|
36
|
-
|
|
37
|
-
### get / delete
|
|
38
|
-
|
|
39
|
-
| Parameter | Required | Description |
|
|
40
|
-
|---|---|---|
|
|
41
|
-
| `--project-id` / `-p` | Yes | Numeric project ID. |
|
|
42
|
-
| `--metric-name` | Yes | Metric name. |
|
|
43
|
-
|
|
44
|
-
### create / update
|
|
45
|
-
|
|
46
|
-
| Parameter | Required | Description |
|
|
47
|
-
|---|---|---|
|
|
48
|
-
| `--project-id` / `-p` | Yes | Numeric project ID. |
|
|
49
|
-
| `--metric-type` | Yes | `1` = PRESET (common metric). **create requires `1`**. Do not use `2` (CUSTOM / task-side). |
|
|
50
|
-
| `--metric-name` | Yes | Technical name; prefer `^[a-z][0-9a-z_]{0,79}$`. |
|
|
51
|
-
| `--metric-qp` | Yes | Complete metric QP **JSON object string** (`type=0` event or `type=1` formula). |
|
|
52
|
-
| `--metric-window-num` | Yes | Window size (integer ≥ 1). |
|
|
53
|
-
| `--metric-window-time-unit` | Yes | `minute` / `hour` / `day` (lowercase). |
|
|
54
|
-
| `--display-name` | Yes | Display name. |
|
|
55
|
-
| `--note` | No | Remark. |
|
|
56
|
-
| `--order-id` | No | Sort order (usually omit on setting-page create). |
|
|
57
|
-
| `--metric-setting-id` | No | Binding id (task/config metricMap; usually omit on setting-page create). |
|
|
58
|
-
| `--metric-params` | No | Params JSON string; for formula metrics often `{"format":"float"}`. |
|
|
59
|
-
|
|
60
|
-
## Output
|
|
61
|
-
|
|
62
|
-
- `list`: `data.items` (each with `project_id`, `metric_type`, `metric_name`, `metric_qp`, `metric_window_num`, `metric_window_time_unit`, `note`, `last_editer`, `last_update_time`, `order_id`, `display_name`, `metric_setting_id`, `metric_params`) and `data.total`.
|
|
63
|
-
- `get`: `data.metric` — a single metric object with the same fields, or `null`.
|
|
64
|
-
- `create` / `update` / `delete`: `data.success`.
|
|
65
|
-
|
|
66
|
-
## Agent workflow (Pattern A: discover → match → assemble QP → write)
|
|
67
|
-
|
|
68
|
-
Unlike the Engage console (user picks events in a picker), Agents must discover real project metadata first. Never invent `event_name` / property names / `--metric-qp` placeholders such as `event`.
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
# 1) Discover candidate events (keyword: payment / recharge / purchase / ...)
|
|
72
|
-
ae-cli analysis-meta event list --project-id <project_id> --query <keyword> \
|
|
73
|
-
--fields '["event_name","event_desc","authentication_status"]' --limit 20
|
|
74
|
-
|
|
75
|
-
# Optional soft hint: project recharge-success event name
|
|
76
|
-
ae-cli engage-setting preset-event list --project-id <project_id>
|
|
77
|
-
# → data.recharge_event_desc may contain eventName (not a ready metric_qp)
|
|
78
|
-
|
|
79
|
-
# 2) If filters are needed, list properties for the matched event
|
|
80
|
-
ae-cli analysis-meta property list --project-id <project_id> \
|
|
81
|
-
--scope event --event-name <matched_event_name>
|
|
82
|
-
|
|
83
|
-
# 3) Assemble a type=0 metric QP object from the matched event, then create
|
|
84
|
-
ae-cli engage-setting common-metric create --project-id <project_id> \
|
|
85
|
-
--metric-type 1 --metric-name <name> --metric-qp '<qp_json>' \
|
|
86
|
-
--metric-window-num 1 --metric-window-time-unit day --display-name <display>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
If multiple events remain plausible after discovery, stop and ask the user which `event_name` to use.
|
|
90
|
-
|
|
91
|
-
## `--metric-qp` example (type=0 event analysis)
|
|
92
|
-
|
|
93
|
-
Pass as a single JSON **object string**. Minimal shape aligned with the Engage setting-page event metric:
|
|
21
|
+
## Event metric
|
|
94
22
|
|
|
95
23
|
```json
|
|
96
24
|
{
|
|
97
|
-
"type":
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
"eventNameDisplay": "Purchase total count",
|
|
111
|
-
"subTableType": "",
|
|
112
|
-
"taPropQuota": {
|
|
113
|
-
"analysis": "A100",
|
|
114
|
-
"analysisDesc": "Total count",
|
|
115
|
-
"analysisParams": "",
|
|
116
|
-
"quota": "",
|
|
117
|
-
"quotaDesc": ""
|
|
25
|
+
"type": "event",
|
|
26
|
+
"event": "purchase",
|
|
27
|
+
"aggregation": "sum",
|
|
28
|
+
"property": "amount",
|
|
29
|
+
"filters": {
|
|
30
|
+
"relation": "and",
|
|
31
|
+
"items": [
|
|
32
|
+
{
|
|
33
|
+
"field": "currency",
|
|
34
|
+
"operator": "eq",
|
|
35
|
+
"values": ["USD"]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
118
38
|
}
|
|
119
39
|
}
|
|
120
40
|
```
|
|
121
41
|
|
|
122
|
-
|
|
42
|
+
Supported aggregations include `total_count`, `user_count`, `per_user_count`, `sum`, `avg`, `avg_per_user`, `max`, `min`, `distinct_count`, `median`, `percentile`, `variance`, and `stddev`.
|
|
123
43
|
|
|
124
|
-
##
|
|
44
|
+
## Formula metric
|
|
125
45
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"type": "formula",
|
|
49
|
+
"expression": "purchases/refunds",
|
|
50
|
+
"format": "percent",
|
|
51
|
+
"dependencies": [
|
|
52
|
+
{
|
|
53
|
+
"type": "event",
|
|
54
|
+
"key": "purchases",
|
|
55
|
+
"event": "purchase",
|
|
56
|
+
"aggregation": "total_count"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"type": "event",
|
|
60
|
+
"key": "refunds",
|
|
61
|
+
"event": "refund",
|
|
62
|
+
"aggregation": "total_count"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
130
66
|
```
|
|
131
67
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
## Decision Rules
|
|
68
|
+
Resolve every event and property through `ae-cli analysis-meta event list` and the corresponding property metadata before writing. `get` and `list` return `metric_definition`, `metric_definition_status`, and an optional unavailable reason. Raw metric QP is hidden.
|
|
135
69
|
|
|
136
|
-
-
|
|
137
|
-
- Discover existing metric names with `common-metric list` first; never invent names for `get`/`update`/`delete`.
|
|
138
|
-
- For create/update, discover events/properties via `ae-analysis` (`analysis-meta event list` / `property list`) before assembling `--metric-qp`.
|
|
139
|
-
- `--metric-type` for setting-page common metrics is always `1` (PRESET). create rejects any other value.
|
|
140
|
-
- `--metric-window-time-unit` must be lowercase `minute` / `hour` / `day` (not `DAY`).
|
|
141
|
-
- `--metric-qp` must be a complete metric QP JSON object; do not pass `{}` or placeholder strings.
|
|
142
|
-
- `delete` is `high-risk-write` and requires `--yes` (or interactive confirmation).
|
|
70
|
+
`metric_type=1` remains required for setting-page common metrics. Metric windows remain separate from the semantic definition, and their unit must be `minute` / `hour` / `day`.
|
|
@@ -10,6 +10,19 @@ Mapped command: `ae-cli engage-flow flow get`
|
|
|
10
10
|
The flow detail is under `data.flow`. Every response key is snake_case, for example
|
|
11
11
|
`data.flow.mapping_status`, `data.flow.version_type`, and `data.flow.node_list[].type`.
|
|
12
12
|
|
|
13
|
+
For custom-audience nodes, `node_list[].config` remains a JSON string. Parse it and read
|
|
14
|
+
`targetDefinitionRequest`, `definitionStatus`, and optional
|
|
15
|
+
`definitionUnavailableReason`. Branch audiences use the same fields inside
|
|
16
|
+
`branchList[]`. Stored execution QP is hidden. Reuse `targetDefinitionRequest` when
|
|
17
|
+
building the next flow save request.
|
|
18
|
+
|
|
19
|
+
Top-level `completion_indicators` and `current_flow_completion_indicators` are exposed
|
|
20
|
+
as arrays. Each indicator uses semantic `event_definition`; stored `event` execution
|
|
21
|
+
QP is removed. Check `completion_indicators_definition_status` and
|
|
22
|
+
`current_flow_completion_indicators_definition_status` before reusing them. A
|
|
23
|
+
non-`AVAILABLE` status may also include the corresponding
|
|
24
|
+
`*_definition_unavailable_reason`.
|
|
25
|
+
|
|
13
26
|
## Flags
|
|
14
27
|
|
|
15
28
|
| Flag | Type | Required | Description |
|