@thinkingai/ae-cli 6.1.10 → 6.1.12
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-DRLGDVS4.js} +24 -17
- package/dist/{capability-YPOQX6PL.js → capability-P6GK3AQH.js} +24 -17
- 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 +94 -35
- 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-ITKTO6JS.js → te-analysis-GJI5FZUL.js} +1152 -13
- package/dist/{te-analysis-RAC67YYD.js → te-analysis-N2BRDJZ5.js} +1152 -13
- 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-L72HWRGO.js} +716 -118
- package/dist/{te-engage-E7F4HTXU.js → te-engage-QWM4GFS7.js} +716 -118
- package/dist/{te-experiment-N63WF7XA.js → te-experiment-2T2HEZML.js} +189 -10
- package/dist/{te-experiment-D32TB6ZB.js → te-experiment-PVEY7AEZ.js} +189 -10
- 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 +104 -42
- package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
- 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 +67 -27
- 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-data-detail.md +61 -0
- 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 +66 -29
- package/skills/ae-engage/references/channel-update-config.md +3 -2
- package/skills/ae-engage/references/common-metric.md +88 -115
- package/skills/ae-engage/references/flow-detail.md +13 -0
- package/skills/ae-engage/references/preset-event.md +14 -32
- package/skills/ae-engage/references/save-flow.md +141 -64
- package/skills/ae-engage/references/save-task.md +231 -58
- 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 +56 -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-experiment/SKILL.md +38 -5
- package/skills/ae-experiment/references/check_experiment_ready.md +2 -0
- package/skills/ae-experiment/references/delete_metric.md +2 -0
- package/skills/ae-experiment/references/query_experiment_detail.md +6 -0
- package/skills/ae-experiment/references/query_experiment_list.md +4 -0
- package/skills/ae-experiment/references/query_experiment_list_archived.md +3 -0
- package/skills/ae-experiment/references/query_experiment_metric_trend.md +5 -5
- package/skills/ae-experiment/references/query_experiment_report_summary.md +4 -3
- package/skills/ae-experiment/references/query_experiment_sample_size_report.md +6 -5
- package/skills/ae-experiment/references/query_metric_detail.md +5 -0
- package/skills/ae-experiment/references/query_metric_list.md +3 -0
- package/skills/ae-experiment/references/save_build_guide.md +39 -0
- package/skills/ae-experiment/references/save_experiment.md +53 -3
- package/skills/ae-experiment/references/save_metric.md +67 -1
- package/skills/ae-experiment/references/save_submit_experiment.md +3 -0
- package/skills/ae-experiment/references/save_validate.md +33 -0
- package/skills/ae-experiment-design/SKILL.md +149 -0
- package/skills/ae-experiment-design/agents/openai.yaml +4 -0
- package/skills/ae-experiment-design/references/client-experiment-sdk.md +147 -0
- package/skills/ae-experiment-design/references/experiment-creation.md +108 -0
- package/skills/ae-experiment-design/references/experiment-sdk-contract.md +100 -0
- package/skills/ae-experiment-design/references/exposure-contract.md +91 -0
- package/skills/ae-experiment-design/references/hybrid-experiment-sdk.md +74 -0
- package/skills/ae-experiment-design/references/metric-readiness.md +143 -0
- package/skills/ae-experiment-design/references/platform-operations.md +105 -0
- package/skills/ae-experiment-design/references/sdk-index.md +76 -0
- package/skills/ae-experiment-design/references/sdk-integration.md +114 -0
- package/skills/ae-experiment-design/references/sdk-troubleshooting.md +139 -0
- package/skills/ae-experiment-design/references/server-experiment-sdk.md +78 -0
- package/skills/ae-experiment-design/scripts/calculate_experiment_plan.py +450 -0
- package/skills/ae-experiment-insight/SKILL.md +149 -0
- package/skills/ae-experiment-insight/agents/openai.yaml +4 -0
- package/skills/ae-experiment-insight/references/decision-framework.md +69 -0
- package/skills/ae-experiment-insight/references/diagnostic-playbook.md +225 -0
- package/skills/ae-experiment-insight/references/platform-operations.md +82 -0
- package/skills/ae-experiment-insight/scripts/analyze_experiment.py +478 -0
- package/skills/ae-generate-tracking-code/SKILL.md +2 -2
- 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,27 @@ 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.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- `
|
|
28
|
-
- `
|
|
29
|
-
|
|
30
|
-
|
|
17
|
+
3. Use semantic definitions for audience, trigger, and completion fields:
|
|
18
|
+
|
|
19
|
+
- `targetConfig.definitionRequest`
|
|
20
|
+
- `triggerConfig.triggerDefinition` (required for `triggerType=3/4/5`)
|
|
21
|
+
- `completionIndicatorDef.completionIndicators[].eventDefinition`
|
|
22
|
+
|
|
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. Follow the documented closed semantic shapes: unknown fields are rejected, and a
|
|
27
|
+
property `field` may be a technical-name string or a `{name,type}` reference.
|
|
28
|
+
Every custom-audience `event` and `behavior_sequence` requires its own `time_range`. For
|
|
29
|
+
`recent` and `previous`, use a positive integer `value` and only `unit=day`; `custom` requires
|
|
30
|
+
both `start_time` and `end_time`.
|
|
31
|
+
|
|
32
|
+
Custom audiences support `behavior_sequence` nodes, including sequence/step windows, step
|
|
33
|
+
filters, `completed`, and `relative_to_first`. A task `get` may return top-level `compound`
|
|
34
|
+
nodes when the stored member-group, event-group, and outer relations differ. Preserve those
|
|
35
|
+
compounds when reusing `definition_request`; flattening them changes audience semantics.
|
|
36
|
+
For the second sequence step, omit `relative_to_first` or set it to `false`; use `true` only
|
|
37
|
+
from the third step onward when its window must be measured from step 1.
|
|
31
38
|
|
|
32
39
|
For existing-cluster audiences (`targetClusterType=2`), you may copy server-authored definitions via:
|
|
33
40
|
|
|
@@ -41,11 +48,8 @@ ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<cl
|
|
|
41
48
|
Important:
|
|
42
49
|
|
|
43
50
|
- Do not treat audience creation as a fixed preflight step.
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
- `triggerConfig.triggerRule`
|
|
47
|
-
- `clientConfig.clientQp`
|
|
48
|
-
- `completionIndicatorDef.event`
|
|
51
|
+
- Discover event/property metadata when semantic definitions reference those fields.
|
|
52
|
+
- Omit the server-authored `clientConfig.clientQp`; partial updates preserve it.
|
|
49
53
|
|
|
50
54
|
---
|
|
51
55
|
|
|
@@ -64,6 +68,7 @@ Common request patterns:
|
|
|
64
68
|
```bash
|
|
65
69
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{}'
|
|
66
70
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"triggerType":2,"channelId":"channel_123"}}'
|
|
71
|
+
ae-cli engage-task task build-save-guide --project-id 1 --req '{"context":{"channelType":2,"triggerType":3,"eventTriggerType":2}}'
|
|
67
72
|
ae-cli engage-task task build-save-guide --project-id 1 --req '{"draft":{"baseInfo":{"taskName":"Demo Task"}}}'
|
|
68
73
|
```
|
|
69
74
|
|
|
@@ -92,6 +97,7 @@ Use `context` when you want scenario-specific guidance without writing a partial
|
|
|
92
97
|
Typical fields:
|
|
93
98
|
|
|
94
99
|
- `triggerType`
|
|
100
|
+
- `eventTriggerType`
|
|
95
101
|
- `targetClusterType`
|
|
96
102
|
- `channelType`
|
|
97
103
|
- `channelId`
|
|
@@ -104,7 +110,9 @@ Example:
|
|
|
104
110
|
```json
|
|
105
111
|
{
|
|
106
112
|
"context": {
|
|
107
|
-
"
|
|
113
|
+
"channelType": 2,
|
|
114
|
+
"triggerType": 3,
|
|
115
|
+
"eventTriggerType": 2,
|
|
108
116
|
"targetClusterType": 2,
|
|
109
117
|
"channelId": "channel_123"
|
|
110
118
|
}
|
|
@@ -190,7 +198,7 @@ This section describes the high-level contract:
|
|
|
190
198
|
|
|
191
199
|
- final tool is `save_task`
|
|
192
200
|
- required preflight is `query_channel_list -> build_task_save_guide`
|
|
193
|
-
-
|
|
201
|
+
- audience, trigger, and completion conditions use semantic definitions
|
|
194
202
|
- `save_task.req` must be a grouped JSON object
|
|
195
203
|
|
|
196
204
|
### 4.6 `scenario`
|
|
@@ -224,6 +232,8 @@ It includes:
|
|
|
224
232
|
|
|
225
233
|
- grouped block rules
|
|
226
234
|
- structured conditional rules
|
|
235
|
+
- the server/client × `triggerType` × `eventTriggerType` combination matrix
|
|
236
|
+
- type-specific aggregate, continuous, ordered, and every-completion event shapes
|
|
227
237
|
- related-parameter rules
|
|
228
238
|
- unsupported fields / values / combinations
|
|
229
239
|
- `channelContentSchema`
|
|
@@ -248,6 +258,38 @@ Do not invent free-form content items such as:
|
|
|
248
258
|
|
|
249
259
|
Instead, use the valid item structure and put message text into `value`.
|
|
250
260
|
|
|
261
|
+
#### `fieldRules.blocks.triggerConfig.triggerDefinitionSchema`
|
|
262
|
+
|
|
263
|
+
For event-triggered tasks, read all of these fields before constructing `triggerDefinition`:
|
|
264
|
+
|
|
265
|
+
- `combinationMatrix`
|
|
266
|
+
- `ruleFields`
|
|
267
|
+
- `eventShapes`
|
|
268
|
+
- `examples`
|
|
269
|
+
|
|
270
|
+
The guide treats the A rule as a discriminated envelope:
|
|
271
|
+
|
|
272
|
+
- `eventTriggerType=0`: aggregate events
|
|
273
|
+
- `eventTriggerType=1`: exactly one count/eq event with value at least 2, plus optional blacklist
|
|
274
|
+
- `eventTriggerType=2`: at least two ordered steps with `eventDefinition` and `hasDone`
|
|
275
|
+
- `eventTriggerType=3`: client-side count/eq/1 events with `eventTriggerCaliberType`
|
|
276
|
+
|
|
277
|
+
Do not copy the accumulated example and only change `eventTriggerType`. Hermes rejects a final QP
|
|
278
|
+
whose event structure does not match its envelope.
|
|
279
|
+
|
|
280
|
+
#### `fieldRules.blocks.controlConfig.completionIndicatorDef.filterPropertySelectTypes`
|
|
281
|
+
|
|
282
|
+
Treat this as the source of truth for completion target and experiment main-goal event-filter
|
|
283
|
+
property types:
|
|
284
|
+
|
|
285
|
+
- `allowed` lists the supported metadata `select_type` values.
|
|
286
|
+
- `excluded` lists values that must not be used.
|
|
287
|
+
- `datetime` is excluded because the task completion-indicator editor cannot display it.
|
|
288
|
+
|
|
289
|
+
Apply this rule only to
|
|
290
|
+
`completionIndicatorDef.completionIndicators[].eventDefinition.filters`. Trigger-event filters have
|
|
291
|
+
their own scenario rules and are not subject to this completion-filter restriction.
|
|
292
|
+
|
|
251
293
|
### 4.9 `handoff`
|
|
252
294
|
|
|
253
295
|
This is the final section before `save_task`.
|
|
@@ -278,14 +320,9 @@ Recommended usage pattern:
|
|
|
278
320
|
3. read `fieldRules.channelContentSchema`
|
|
279
321
|
4. read `handoff.reqTemplate`
|
|
280
322
|
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
|
|
323
|
+
6. if the guide points to an audience, trigger, or completion condition, add the semantic
|
|
324
|
+
definition directly
|
|
325
|
+
7. omit `clientConfig.clientQp`; partial updates preserve the server-authored value
|
|
289
326
|
8. call `engage-task task save`
|
|
290
327
|
|
|
291
328
|
---
|
|
@@ -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,115 @@
|
|
|
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.
|
|
6
|
+
Metric definitions and formula dependencies reject unknown fields. Event filter `field` accepts
|
|
7
|
+
either a technical-name string or `{"name":"...","type":"event_property"}`.
|
|
8
|
+
|
|
9
|
+
When metadata reports an event property as `array_row`, express it as an `object_group` filter
|
|
10
|
+
with `any_satisfy`, `none_satisfy`, or `all_satisfy`; its nested `conditions.items` may reference
|
|
11
|
+
only child properties of that parent. Flat filters on the `array_row` parent are rejected before
|
|
12
|
+
the metric is saved.
|
|
5
13
|
|
|
6
14
|
## Commands
|
|
7
15
|
|
|
8
16
|
```bash
|
|
9
|
-
# List common metrics
|
|
10
17
|
ae-cli engage-setting common-metric list --project-id <project_id>
|
|
11
|
-
|
|
12
|
-
# Get a common metric detail
|
|
13
18
|
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)
|
|
19
|
+
ae-cli engage-setting common-metric create --project-id <project_id> --metric-type 1 \
|
|
20
|
+
--metric-name <name> --metric-definition '<json>' \
|
|
21
|
+
--metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
|
|
22
|
+
ae-cli engage-setting common-metric update --project-id <project_id> --metric-type 1 \
|
|
23
|
+
--metric-name <name> --metric-definition '<json>' \
|
|
24
|
+
--metric-window-num 1 --metric-window-time-unit day --display-name <display_name>
|
|
26
25
|
ae-cli engage-setting common-metric delete --project-id <project_id> --metric-name <name> --yes
|
|
27
26
|
```
|
|
28
27
|
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
### list
|
|
32
|
-
|
|
33
|
-
| Parameter | Required | Description |
|
|
34
|
-
|---|---|---|
|
|
35
|
-
| `--project-id` / `-p` | Yes | Numeric project ID. |
|
|
36
|
-
|
|
37
|
-
### get / delete
|
|
28
|
+
## Event metric
|
|
38
29
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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>
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"type": "event",
|
|
33
|
+
"event": "purchase",
|
|
34
|
+
"aggregation": "sum",
|
|
35
|
+
"property": "amount",
|
|
36
|
+
"filters": {
|
|
37
|
+
"relation": "and",
|
|
38
|
+
"items": [
|
|
39
|
+
{
|
|
40
|
+
"field": "currency",
|
|
41
|
+
"operator": "eq",
|
|
42
|
+
"values": ["USD"]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
87
47
|
```
|
|
88
48
|
|
|
89
|
-
|
|
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:
|
|
49
|
+
Object-group filter example:
|
|
94
50
|
|
|
95
51
|
```json
|
|
96
52
|
{
|
|
97
|
-
"type":
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
"customFilters": [],
|
|
110
|
-
"eventNameDisplay": "Purchase total count",
|
|
111
|
-
"subTableType": "",
|
|
112
|
-
"taPropQuota": {
|
|
113
|
-
"analysis": "A100",
|
|
114
|
-
"analysisDesc": "Total count",
|
|
115
|
-
"analysisParams": "",
|
|
116
|
-
"quota": "",
|
|
117
|
-
"quotaDesc": ""
|
|
53
|
+
"type": "object_group",
|
|
54
|
+
"field": "equipment_list",
|
|
55
|
+
"operator": "any_satisfy",
|
|
56
|
+
"conditions": {
|
|
57
|
+
"relation": "and",
|
|
58
|
+
"items": [
|
|
59
|
+
{
|
|
60
|
+
"field": "equipment_list.item_level",
|
|
61
|
+
"operator": "gte",
|
|
62
|
+
"values": [10]
|
|
63
|
+
}
|
|
64
|
+
]
|
|
118
65
|
}
|
|
119
66
|
}
|
|
120
67
|
```
|
|
121
68
|
|
|
122
|
-
|
|
69
|
+
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
70
|
|
|
124
|
-
|
|
71
|
+
Property aggregations require `property`. `percentile` additionally requires a numeric
|
|
72
|
+
`percentile` greater than `0` and at most `100`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"type": "event",
|
|
77
|
+
"event": "purchase",
|
|
78
|
+
"aggregation": "percentile",
|
|
79
|
+
"property": "amount",
|
|
80
|
+
"percentile": 90
|
|
81
|
+
}
|
|
82
|
+
```
|
|
125
83
|
|
|
126
|
-
|
|
84
|
+
## Formula metric
|
|
127
85
|
|
|
128
|
-
```
|
|
129
|
-
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"type": "formula",
|
|
89
|
+
"expression": "purchases/refunds",
|
|
90
|
+
"format": "percent",
|
|
91
|
+
"dependencies": [
|
|
92
|
+
{
|
|
93
|
+
"type": "event",
|
|
94
|
+
"key": "purchases",
|
|
95
|
+
"event": "purchase",
|
|
96
|
+
"aggregation": "total_count"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": "event",
|
|
100
|
+
"key": "refunds",
|
|
101
|
+
"event": "refund",
|
|
102
|
+
"aggregation": "total_count"
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
130
106
|
```
|
|
131
107
|
|
|
132
|
-
|
|
108
|
+
Every dependency requires a non-empty, unique `key`, and every key must be used in
|
|
109
|
+
`expression`. Write bare keys only: use `purchases/refunds`, never `purchases.A100/refunds.A100`.
|
|
110
|
+
Aggregation codes are derived from each dependency. Formula dependencies follow the same
|
|
111
|
+
property and percentile requirements as event metrics.
|
|
133
112
|
|
|
134
|
-
|
|
113
|
+
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
114
|
|
|
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).
|
|
115
|
+
`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`.
|