@thinkingai/ae-cli 6.0.34 → 6.0.36
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/dist/{auth-UPGUOKTW.js → auth-B2BRSYMS.js} +1 -1
- package/dist/{capability-TQ5KU5Q6.js → capability-6KPXYNO7.js} +1 -1
- package/dist/{capability-AJC5CBRT.js → capability-ROKYESAP.js} +1 -1
- package/dist/{chunk-6CHYBI64.js → chunk-EBPXT3TN.js} +1 -1
- package/dist/{chunk-4Q5TNP4Q.js → chunk-J7MZHDHQ.js} +48 -24
- package/dist/{chunk-IMMGMU54.js → chunk-JTKMDN4A.js} +64 -166
- package/dist/{chunk-ISY6HMHM.js → chunk-RRFK2W7I.js} +1 -1
- package/dist/{config-RCCGHHYA.js → config-DDYJPJX3.js} +4 -4
- package/dist/index.js +62 -27
- package/dist/{metadata-3M5F2AED.js → metadata-2ZFRMVOL.js} +2 -55
- package/dist/{metadata-W2MEOI4Z.js → metadata-ABQCKU5P.js} +2 -55
- package/dist/{model-OYQLXCQY.js → model-JASQVOFD.js} +1 -1
- package/dist/{raw-TPB7KSZO.js → raw-6HXFFHLV.js} +1 -1
- package/dist/{sync-EFJKFZK2.js → sync-BF3IWYFC.js} +2 -2
- package/dist/{te-agent-K2OWMZXT.js → te-agent-3GJ5H2XF.js} +195 -2
- package/dist/{te-analysis-I73ZS4NK.js → te-analysis-DJ6KELTU.js} +636 -668
- package/dist/{te-analysis-Q7AZCDU4.js → te-analysis-PCGESPLW.js} +636 -668
- package/dist/{te-dataops-OA7I6HBG.js → te-dataops-LXL5YULV.js} +7 -7
- package/dist/{te-dataops-MJV54MNY.js → te-dataops-ROHUJOX5.js} +7 -7
- package/dist/{te-engage-2FSDUOIZ.js → te-engage-2YDCA552.js} +87 -4
- package/dist/{te-engage-BMJ6UOUU.js → te-engage-VW6NJZ5V.js} +87 -4
- package/dist/te-meta-GBDTMPEL.js +95 -0
- package/dist/te-meta-ZTLTSHXC.js +95 -0
- package/dist/te-system-AH7DMCAQ.js +1706 -0
- package/dist/{te-team-PDKKW7Q5.js → te-team-RRZI4WRI.js} +1 -1
- package/dist/update-ER7VFU55.js +101 -0
- package/package.json +9 -4
- package/skills/ae-agent/SKILL.md +5 -1
- package/skills/ae-agent/references/create-automation.md +1 -0
- package/skills/ae-agent/references/list-sandbox-tools.md +79 -0
- package/skills/ae-analysis/SKILL.md +8 -9
- package/skills/ae-analysis/references/adhoc_export.md +8 -0
- package/skills/ae-analysis/references/adhoc_run.md +9 -0
- package/skills/ae-analysis/references/ai_models.md +3 -1
- package/skills/ae-analysis/references/alert_create.md +2 -3
- package/skills/ae-analysis/references/alert_update.md +2 -3
- package/skills/ae-analysis/references/analysis_data_retrieval.md +2 -0
- package/skills/ae-analysis/references/analysis_drilldown_contract.md +2 -0
- package/skills/ae-analysis/references/analysis_gateway_assets.md +15 -11
- package/skills/ae-analysis/references/bi_panel_create.md +12 -4
- package/skills/ae-analysis/references/bi_panel_update.md +11 -8
- package/skills/ae-analysis/references/bi_panel_version_publish.md +3 -1
- package/skills/ae-analysis/references/command_index.md +28 -47
- package/skills/ae-analysis/references/dashboard_daily_report_get.md +18 -0
- package/skills/ae-analysis/references/dashboard_daily_report_send.md +12 -9
- package/skills/ae-analysis/references/dashboard_daily_report_send_status.md +22 -0
- package/skills/ae-analysis/references/dashboard_daily_report_update.md +13 -6
- package/skills/ae-analysis/references/dashboard_report_data_export.md +4 -2
- package/skills/ae-analysis/references/dashboard_report_data_run.md +5 -3
- package/skills/ae-analysis/references/drilldown_entities_export.md +3 -0
- package/skills/ae-analysis/references/drilldown_entities_run.md +2 -1
- package/skills/ae-analysis/references/drilldown_events_export.md +3 -0
- package/skills/ae-analysis/references/drilldown_events_run.md +2 -1
- package/skills/ae-analysis/references/drilldown_user_events_export.md +8 -0
- package/skills/ae-analysis/references/drilldown_user_events_run.md +8 -0
- package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
- package/skills/ae-analysis/references/filter_value_list.md +47 -0
- package/skills/ae-analysis/references/project_space_get.md +3 -3
- package/skills/ae-analysis/references/project_space_list.md +6 -2
- package/skills/ae-analysis/references/query_cancel.md +3 -1
- package/skills/ae-analysis/references/query_cluster_list.md +34 -0
- package/skills/ae-analysis/references/query_create_result_cluster.md +2 -0
- package/skills/ae-analysis/references/report_create.md +5 -1
- package/skills/ae-analysis/references/report_data_export.md +9 -2
- package/skills/ae-analysis/references/report_data_run.md +8 -3
- package/skills/ae-analysis/references/report_get.md +3 -1
- package/skills/ae-analysis/references/report_update.md +4 -0
- package/skills/ae-analysis/references/super_metadata_batch_create.md +29 -0
- package/skills/ae-analysis/references/super_metadata_batch_edit.md +24 -0
- package/skills/ae-analysis/references/virtual_event_create.md +7 -6
- package/skills/ae-analysis-global/SKILL.md +15 -32
- package/skills/ae-community/SKILL.md +1 -1
- package/skills/ae-data-integration-helper/SKILL.md +3 -2
- package/skills/ae-data-integration-helper/references/sdk_usage_notes.md +1 -1
- package/skills/ae-dataops/SKILL.md +2 -1
- package/skills/ae-dataops/references/dataops-integration.md +75 -6
- package/skills/ae-engage/SKILL.md +32 -5
- package/skills/ae-engage/references/activity-topic.md +34 -1
- package/skills/ae-engage/references/add-channel.md +2 -3
- package/skills/ae-engage/references/build-task-save-guide.md +17 -3
- package/skills/ae-engage/references/channel-detail.md +2 -3
- package/skills/ae-engage/references/channel-list.md +2 -5
- package/skills/ae-engage/references/channel-mgmt.md +17 -2
- package/skills/ae-engage/references/channel-test-send.md +1 -1
- package/skills/ae-engage/references/channel-update-config.md +1 -1
- package/skills/ae-engage/references/delete-channel.md +2 -3
- package/skills/ae-engage/references/save-flow.md +6 -3
- package/skills/ae-engage/references/save-task.md +12 -15
- package/skills/ae-engage/references/scene-config-channel.md +28 -4
- package/skills/ae-engage/references/scene-config-group.md +1 -1
- package/skills/ae-engage/references/scene-config-item.md +1 -1
- package/skills/ae-engage/references/scene-config-metric.md +1 -1
- package/skills/ae-engage/references/scene-config-param.md +1 -1
- package/skills/ae-engage/references/scene-preset-metric.md +1 -1
- package/skills/ae-engage/references/scene-strategy-audience.md +680 -0
- package/skills/ae-engage/references/scene-strategy.md +16 -1
- package/skills/ae-engage/references/scene-template.md +1 -1
- package/skills/ae-engage/references/update-channel-status.md +2 -3
- package/skills/ae-generate-tracking-code/SKILL.md +4 -3
- package/skills/ae-generate-tracking-code/references/client-sdk-insert.md +1 -1
- package/skills/ae-generate-tracking-code/references/server-sdk-insert.md +1 -1
- package/skills/ae-generate-tracking-code/references/snippet-delivery.md +1 -1
- package/skills/ae-generate-tracking-plan/SKILL.md +6 -2
- package/skills/ae-metadata/SKILL.md +8 -15
- package/skills/ae-metadata/references/metadata_property_dimension_table_bind_existing.md +1 -1
- package/skills/ae-system/SKILL.md +357 -0
- package/dist/te-common-ST3QPSXJ.js +0 -61
- package/dist/te-common-WSLIKKPC.js +0 -61
- package/dist/te-meta-Q4L6EE3Q.js +0 -363
- package/dist/te-meta-VHCN4Q62.js +0 -363
- package/skills/ae-analysis/references/alert_definition_schema_get.md +0 -24
- package/skills/ae-analysis/references/batch_create_metadata.md +0 -41
- package/skills/ae-analysis/references/batch_edit_metadata.md +0 -39
- package/skills/ae-analysis/references/cancel_query.md +0 -38
- package/skills/ae-analysis/references/create_alert.md +0 -47
- package/skills/ae-analysis/references/create_entity.md +0 -39
- package/skills/ae-analysis/references/create_project_mark_time.md +0 -39
- package/skills/ae-analysis/references/delete_alert.md +0 -32
- package/skills/ae-analysis/references/delete_project_mark_times.md +0 -36
- package/skills/ae-analysis/references/delete_track_items.md +0 -36
- package/skills/ae-analysis/references/generate_track_program.md +0 -52
- package/skills/ae-analysis/references/generate_track_sdk_sample.md +0 -44
- package/skills/ae-analysis/references/get_alert.md +0 -35
- package/skills/ae-analysis/references/get_alert_definition_schema.md +0 -33
- package/skills/ae-analysis/references/get_project_config.md +0 -33
- package/skills/ae-analysis/references/get_track_program.md +0 -34
- package/skills/ae-analysis/references/list_alerts.md +0 -41
- package/skills/ae-analysis/references/list_entities.md +0 -42
- package/skills/ae-analysis/references/list_project_mark_times.md +0 -43
- package/skills/ae-analysis/references/list_project_users.md +0 -33
- package/skills/ae-analysis/references/list_projects.md +0 -39
- package/skills/ae-analysis/references/load_filters.md +0 -47
- package/skills/ae-analysis/references/save_track_items.md +0 -37
- package/skills/ae-analysis/references/update_alert.md +0 -49
- package/skills/ae-analysis/references/update_project_mark_time.md +0 -40
- package/skills/ae-analysis-global/references/list_query_clusters.md +0 -68
- package/skills/ae-metadata/references/metadata_event_get.md +0 -52
- package/skills/ae-metadata/references/metadata_property_get.md +0 -54
- package/dist/{te-community-WXGB6IOX.js → te-community-QOYIYEJI.js} +3 -3
- package/dist/{te-community-X2AHXGCA.js → te-community-UFKI6ONP.js} +3 -3
|
@@ -1,53 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ae-analysis-global
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description: "Use when AE/TE analysis requests mention query/current/service/deployment clusters, current cluster (当前集群), cluster info (集群信息/有哪些集群), global or multi-cluster data, all clusters/all servers, GLOBAL/SLAVE,
|
|
4
|
+
description: "Use when AE/TE analysis requests mention query/current/service/deployment clusters, current cluster (当前集群), cluster info (集群信息/有哪些集群), global or multi-cluster data, all clusters/all servers, GLOBAL/SLAVE, query-cluster, cluster_query_scope, slave_cluster_id, country/region/server/shard/site/market routing, or when cluster may mean query cluster rather than audience/user segment."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# ae-analysis-global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This is a terminology and routing overlay for `ae-analysis`. Read the base command reference [`../ae-analysis/references/query_cluster_list.md`](../ae-analysis/references/query_cluster_list.md) before composing the inventory command. Server output, not a local CLI feature switch, is authoritative for whether global query is enabled and which routes the account may use.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
ae-cli config cluster-mode status
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
The result must contain:
|
|
19
|
-
|
|
20
|
-
```json
|
|
21
|
-
{"sw_cfg_enable_global_query": true}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
If the mode is not enabled, do not use this overlay.
|
|
25
|
-
|
|
26
|
-
For commands added only by this overlay, read this skill's matching reference file before composing commands. Example: `+list_query_clusters` -> `references/list_query_clusters.md`.
|
|
27
|
-
|
|
28
|
-
Every command accepts `--host <url>` to override the active AE host, and it may be placed after the subcommand (e.g. `ae-cli analysis +list_query_clusters --project_id <id> --host <url>`). Host selection is independent of `--cluster_query_scope`: `--host` chooses which AE instance to call, while `--cluster_query_scope` / `--slave_cluster_id` choose which cluster within global mode.
|
|
12
|
+
Every command accepts `--host <url>` to override the active AE host. Host selection is independent of `--cluster-query-scope`: `--host` chooses the AE instance, while `--cluster-query-scope` / `--slave-cluster-id` choose a physical query route inside that instance.
|
|
29
13
|
|
|
30
14
|
**CRITICAL — Host compat (do this first):** After each `ae-cli` run, check stderr and `_notice.host_compat`. If either is present, open the user reply with a short ⚠️ version warning and **quote the `npm i -g` / `npx skills add` (or update-cluster) lines verbatim**, then present the business result. Soft tip; `ok: true` can still carry the notice. (Also covered by `ae-analysis` Global Rules when both skills are loaded.)
|
|
31
15
|
|
|
32
16
|
## Routing Rules
|
|
33
17
|
|
|
34
|
-
- In this overlay,
|
|
35
|
-
- If the user asks for cluster inventory or cluster info, call `ae-cli analysis
|
|
18
|
+
- In this overlay, **查询集群 / 数据集群 / 部署集群** means physical multi-cluster routing for analysis queries. **用户分群 / 人群包** means user-membership assets under `analysis user-cluster`.
|
|
19
|
+
- If the user asks for query-cluster inventory or cluster info, call `ae-cli analysis query-cluster list --project-id <project_id>`. Localized examples include "查询集群信息" and "有哪些数据集群".
|
|
36
20
|
- Do not answer query-cluster inventory questions with `ae-cli analysis user-cluster list` unless the user explicitly asks for audience clusters, cohorts, segments, user membership, or cluster definitions.
|
|
37
|
-
- If the user mentions country, region, server, shard, site, market, or deployment area semantics, call `
|
|
38
|
-
- Match slave
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
- If
|
|
43
|
-
-
|
|
44
|
-
- For SQL model analysis, never pass `cluster_query_scope`; SQL model analysis only supports the current self cluster in the current gateway contract.
|
|
21
|
+
- If the user mentions country, region, server, shard, site, market, or deployment area semantics, call `analysis query-cluster list` before choosing query scope.
|
|
22
|
+
- Match slave intent only against returned `slave_clusters[].cluster_id`, `cluster_name`, and `cluster_desc`.
|
|
23
|
+
- Report-data, dashboard-report-data, and ad-hoc run/export expose `--cluster-query-scope GLOBAL|SLAVE`; `SLAVE` requires `--slave-cluster-id`.
|
|
24
|
+
- Use `GLOBAL` only when the user clearly asks for all clusters/servers or cross-cluster aggregation and `permissions.can_query_global=true`.
|
|
25
|
+
- If the user does not express global or slave-cluster intent, omit the flag. Report/ad-hoc then use current self; dashboard follows its saved configuration.
|
|
26
|
+
- If a requested route is not allowed, explain `permissions.allowed_cluster_query_params` instead of silently falling back.
|
|
27
|
+
- SQL and attribution ad-hoc analysis do not support `GLOBAL`; SQL report/dashboard data also reject effective `GLOBAL`. Use an allowed `SLAVE` or current-self route.
|
|
45
28
|
|
|
46
29
|
## Response Wording
|
|
47
30
|
|
|
48
|
-
- For
|
|
31
|
+
- For `analysis query-cluster list`, call the result "查询集群" or "query clusters" and summarize `current_cluster`, `slave_clusters`, and `permissions.allowed_cluster_query_params`.
|
|
49
32
|
- For `analysis user-cluster list`, call the result "audience clusters" or "user segments"; do not call those results query clusters.
|
|
50
33
|
|
|
51
|
-
##
|
|
34
|
+
## Query-cluster command
|
|
52
35
|
|
|
53
|
-
- `ae-cli analysis
|
|
36
|
+
- `ae-cli analysis query-cluster list --project-id <project_id>`
|
|
@@ -42,7 +42,7 @@ Safety constraints:
|
|
|
42
42
|
- Never invent command names, flags, JSON payloads, `project_id`, resource IDs, field names, event names, property names, metric definitions, or date formats. Read the matching command reference and discover real project metadata first.
|
|
43
43
|
- **NEVER fabricate or guess resource names** (reports, dashboards, events, properties, metrics, clusters, tags, alerts). Always use list commands to discover real resources first. If a resource is not found after fuzzy search and full list fallback, explicitly tell the user "resource not found" and stop - do not proceed with fabricated names.
|
|
44
44
|
|
|
45
|
-
**Community** commands use the domain `community` (this skill). Other AE domains include: `analysis` (analysis and audience), `analysis_meta` (metadata),
|
|
45
|
+
**Community** commands use the domain `community` (this skill). Other AE domains include: `analysis` (analysis and audience), `analysis_meta` (metadata), and `operation` (operations).
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
@@ -25,7 +25,7 @@ description: "Answers questions about ThinkingData SDK integration and usage, in
|
|
|
25
25
|
| 事件格式 | Event Format | Event name + properties structure |
|
|
26
26
|
| 属性类型 | Property Type | String / Number / Boolean / Date / Array |
|
|
27
27
|
| 数据校验 | Data Validation | Verify event format & property types |
|
|
28
|
-
|
|
|
28
|
+
| 公共事件属性 | Super Property | Properties attached to all events. ⚠️ The correct Chinese AE term is "公共事件属性" or "公共属性". Never translate "Super Property" as "超级属性" — that is NOT a valid AE term. |
|
|
29
29
|
| 可更新事件 | Updatable Event | Event whose properties can be updated after creation |
|
|
30
30
|
| 首次事件校验 | First Event Check | Validate an event's first occurrence |
|
|
31
31
|
| 自动采集 | Auto-track | Auto-collected events (app install, start, page view, etc.) |
|
|
@@ -151,8 +151,9 @@ After reading relevant documentation, output in the following format:
|
|
|
151
151
|
(If no sourceUrl, provide local .md file path)
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
-
**⚠️
|
|
154
|
+
**⚠️ Terminology Rules**:
|
|
155
155
|
- **Only output what is in the documentation**. Do NOT speculate, imagine, or fill in defaults.
|
|
156
|
+
- **Never translate "Super Property" as "超级属性"** — the correct AE Chinese term is "公共事件属性" or "公共属性". This applies to all user-facing output: headings, step descriptions, code comments, examples, etc.
|
|
156
157
|
- For uncertain information (e.g., data delay times, specific limit values), **do NOT fabricate**.
|
|
157
158
|
- If the document has no direct answer but allows inference: mark under "Source Document" as "Synthesized inference; recommend verification".
|
|
158
159
|
- If the documentation truly does not cover the question, fall back to Step 4. Do NOT force an answer.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SDK Usage Notes
|
|
2
2
|
|
|
3
|
-
> **Terminology**: 上报模式 = upload mode | 缓存上报 = batch/buffered upload | 批量上报策略 = batch upload strategy | 上报失败处理 = upload failure handling | 属性类型 = property type | 预置属性 = preset property (`#` prefix) | 自定义属性 = custom property | 时间校准 = time calibration | 自动采集事件 = auto-track event | 数据加密 = data encryption | LoggerConsumer = writes events to local log files (recommended for production) | BatchConsumer = uploads events in batches with retry | DebugConsumer = debug-only consumer (NOT for production) | 公共属性 = super property | 动态公共属性 = dynamic super property | 多端上报 = multi-platform tracking | 用户割裂 = user fragmentation | 时区偏移 = timezone offset (`#zone_offset`)
|
|
3
|
+
> **Terminology**: 上报模式 = upload mode | 缓存上报 = batch/buffered upload | 批量上报策略 = batch upload strategy | 上报失败处理 = upload failure handling | 属性类型 = property type | 预置属性 = preset property (`#` prefix) | 自定义属性 = custom property | 时间校准 = time calibration | 自动采集事件 = auto-track event | 数据加密 = data encryption | LoggerConsumer = writes events to local log files (recommended for production) | BatchConsumer = uploads events in batches with retry | DebugConsumer = debug-only consumer (NOT for production) | 公共属性 = super property (公共事件属性; never "超级属性") | 动态公共属性 = dynamic super property | 多端上报 = multi-platform tracking | 用户割裂 = user fragmentation | 时区偏移 = timezone offset (`#zone_offset`)
|
|
4
4
|
|
|
5
5
|
# 一、客户端 SDK
|
|
6
6
|
|
|
@@ -182,7 +182,8 @@ Detailed datasource, metadata browsing, sync solution, execution, and monitoring
|
|
|
182
182
|
|
|
183
183
|
Key constraints:
|
|
184
184
|
- Generate `sourceConfig`, `sinkConfig`, `channelConfig`, and `fieldsMapping` from the reference templates; do not invent keys.
|
|
185
|
-
-
|
|
185
|
+
- MySQL Source read partitioning uses `sourceConfig.splitColumn`; `fieldsMapping.shardingKey` is column metadata and must not be used for it.
|
|
186
|
+
- `+save_sync_solution` is not a partial patch: call `+get_sync_detail --withParams true` first, then submit complete configs. `syncName` is accepted for compatibility but ignored.
|
|
186
187
|
- Preset repository sync uses `te_etl@TASK_ENGINE_TRINO` and requires gateway configuration.
|
|
187
188
|
- Use `+list_sync_runs` to get `taskId` before stopping a running sync.
|
|
188
189
|
|
|
@@ -88,7 +88,7 @@ ae-cli dataops_integration +add_sync_solution --spaceCode "${spaceCode}" \
|
|
|
88
88
|
--syncName "MySQL to Preset Repository Sync" \
|
|
89
89
|
--srcComponent "MySQL" --srcDatasourceId "${mysqlDatasourceId}" \
|
|
90
90
|
--sinkComponent "te_etl" --sinkDatasourceId "te_etl@TASK_ENGINE_TRINO" \
|
|
91
|
-
--sourceConfig '{"component":"MySQL","datasourceId":"xxx","database":"test","tablePath":"users"}' \
|
|
91
|
+
--sourceConfig '{"component":"MySQL","datasourceId":"xxx","database":"test","tablePath":"users","batchSize":1000}' \
|
|
92
92
|
--sinkConfig '{"component":"te_etl","datasourceId":"te_etl@TASK_ENGINE_TRINO","database":"","tablePath":"ods_users_mysql","tableType":"PHYSICAL_TABLE","bizClassify":"CURRENT","dbBizType":"TASK_ENV_DB","authedSpace":"","partitionKeys":[],"dataSaveMode":1,"batchSize":20000}' \
|
|
93
93
|
--channelConfig '{"limitType":"0","gatewayConfig":{"engineFlag":"TASK_ENGINE_TRINO","companyId":1,"appDefinition":"APP_GAIA","bizFlag":"BIZ_GAIA_TASK_RELEASE","repoCode":"te_etl","spaceCode":"default"}}' \
|
|
94
94
|
--fieldsMapping '{"mapping":[{"source":{"name":"id","type":"int","manual":false,"partitionKey":false,"primaryKey":false,"shardingKey":false,"sortingKey":false,"upsertKey":false},"target":{"name":"id","type":"int","manual":false,"partitionKey":false,"primaryKey":false,"shardingKey":false,"sortingKey":false,"upsertKey":false}}]}'
|
|
@@ -148,17 +148,86 @@ ae-cli dataops_integration +stop_sync_solution --spaceCode "${spaceCode}" \
|
|
|
148
148
|
}
|
|
149
149
|
```
|
|
150
150
|
|
|
151
|
-
###
|
|
151
|
+
### MySQL table source without filter
|
|
152
152
|
|
|
153
153
|
```json
|
|
154
154
|
{
|
|
155
155
|
"component": "MySQL",
|
|
156
|
-
"datasourceId": "ds-
|
|
157
|
-
"database": "
|
|
158
|
-
"tablePath": "
|
|
156
|
+
"datasourceId": "ds-id",
|
|
157
|
+
"database": "demo",
|
|
158
|
+
"tablePath": "orders",
|
|
159
|
+
"batchSize": 1000
|
|
159
160
|
}
|
|
160
161
|
```
|
|
161
162
|
|
|
163
|
+
### MySQL table source with splitColumn
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"component": "MySQL",
|
|
168
|
+
"datasourceId": "ds-id",
|
|
169
|
+
"database": "demo",
|
|
170
|
+
"tablePath": "orders",
|
|
171
|
+
"splitColumn": "id",
|
|
172
|
+
"batchSize": 1000
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### MySQL table source with whereCondition
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"component": "MySQL",
|
|
181
|
+
"datasourceId": "ds-id",
|
|
182
|
+
"database": "demo",
|
|
183
|
+
"tablePath": "orders",
|
|
184
|
+
"whereCondition": "WHERE created_at >= '2026-07-01'",
|
|
185
|
+
"batchSize": 1000
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### MySQL custom query source
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"component": "MySQL",
|
|
194
|
+
"datasourceId": "ds-id",
|
|
195
|
+
"query": "SELECT id, amount FROM orders",
|
|
196
|
+
"batchSize": 1000
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Use exactly one mode. Table mode requires `database` and `tablePath` and may include
|
|
201
|
+
non-empty `splitColumn` and `whereCondition`. Query mode requires non-empty `query`
|
|
202
|
+
and must not include table-only fields. `batchSize` must be an integer from `1000` to
|
|
203
|
+
`10000`; omit it to use the backend default `1000`.
|
|
204
|
+
|
|
205
|
+
The GUI may send `readType` (`1=table`, `2=query`) and `hasCondition` (`0=off`, `1=on`).
|
|
206
|
+
They are optional for CLI calls. Prefer the canonical templates above. In table mode,
|
|
207
|
+
`hasCondition=1` requires a non-empty `whereCondition`.
|
|
208
|
+
|
|
209
|
+
MySQL Source read partitioning uses `sourceConfig.splitColumn`;
|
|
210
|
+
`fieldsMapping.shardingKey` is column metadata and must not be used for it.
|
|
211
|
+
|
|
212
|
+
### MySQL sink target
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"component": "MySQL",
|
|
217
|
+
"datasourceId": "ds-id",
|
|
218
|
+
"database": "demo",
|
|
219
|
+
"tablePath": "orders",
|
|
220
|
+
"dataSaveMode": 2,
|
|
221
|
+
"batchSize": 1000
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
MySQL Sink requires non-empty `database` and `tablePath` and must not contain a
|
|
226
|
+
`query` key. `dataSaveMode` must be a JSON integer: `1=append`, `2=overwrite`,
|
|
227
|
+
`3=upsert`; omit it to use default `2`. `batchSize` must be a JSON integer from
|
|
228
|
+
`1000` to `10000`; omit it to use default `1000`. Strings, enum names, decimals,
|
|
229
|
+
booleans, `null`, and out-of-range values are rejected.
|
|
230
|
+
|
|
162
231
|
### channelConfig (must include gatewayConfig when source or target involves preset repository)
|
|
163
232
|
|
|
164
233
|
```json
|
|
@@ -246,7 +315,7 @@ ae-cli dataops_integration +stop_sync_solution --spaceCode "${spaceCode}" \
|
|
|
246
315
|
- **Datasource table structure**: `+get_table_structure` requires `--spaceCode`, `--datasourceId`, `--database`, and `--tablePath`; `--catalog` and `--env` are optional, and `--env` defaults to `DEV`. It returns `columns` and `partitionColumns`.
|
|
247
316
|
- **Sync solution list**: `+list_sync_solutions` requires only `--spaceCode`. It returns sync metadata including `syncId`, `syncName`, source/sink datasource and table fields, last execution/schedule status codes, owner, remark, and timestamps.
|
|
248
317
|
- **Sync detail**: `+get_sync_detail` requires `--spaceCode` and `--syncId`; `--withParams` is optional and defaults to `false`. It returns source, sink, field mapping, last execution/schedule status, owner, and `nextAction`; `withParams=true` also returns `usedParams`.
|
|
249
|
-
- **Sync update**: `+save_sync_solution` requires `--spaceCode`, `--syncId`, `--sourceConfig`, and `--sinkConfig`; `--syncName`, `--channelConfig`, `--fieldsMapping`, and `--remark` are optional.
|
|
318
|
+
- **Sync update**: `+save_sync_solution` requires `--spaceCode`, `--syncId`, `--sourceConfig`, and `--sinkConfig`; `--syncName`, `--channelConfig`, `--fieldsMapping`, and `--remark` are optional. `syncName` is accepted for compatibility but ignored; the current name is preserved. `sourceConfig` and `sinkConfig` must be complete JSON strings from `+get_sync_detail --withParams true`; pass complete `channelConfig` and `fieldsMapping` when keeping or updating them.
|
|
250
319
|
- **Sync runs**: `+list_sync_runs` requires `--spaceCode` and `--syncId`; `--limit` is optional and defaults to `20`. It returns `runs`, `returnedCount`, `limit`, and `nextAction`; each run includes `taskId`, `execType`, `status`, `execTime`, `channelMode`, and `submitter`.
|
|
251
320
|
- **Stop sync run**: `+stop_sync_solution` requires `--spaceCode`, `--syncId`, and `--taskId`. Use `taskId` from `+list_sync_runs` for an active run. It returns `action`, `result` with `execStatus`, `syncId`, and `taskId`, and top-level `status`.
|
|
252
321
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ae-engage
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description: "AE Engage
|
|
4
|
+
description: "AE Engage capability gateway: config center, flows, push/config channels, strategies, templates, and task management. Trigger words: config center, scene config, push channel, config channel, operation strategy, operation task, template, config item, Engage, Hermes, engage-scene, engage-setting, engage-flow, engage-task."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# ae-engage
|
|
@@ -43,6 +43,27 @@ Typical use cases include:
|
|
|
43
43
|
- Querying config items and strategies, copying templates, and managing strategy status
|
|
44
44
|
- Querying flow lists, node schemas, and flow reports, and saving or managing flows
|
|
45
45
|
|
|
46
|
+
## Keyword Routing
|
|
47
|
+
|
|
48
|
+
When the user mentions a product term below (including common Chinese UI labels), open the listed reference(s) first — do not guess commands or IDs.
|
|
49
|
+
|
|
50
|
+
| Keyword | Product meaning | CLI domain | Primary reference | Related references |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| **Config center** | Engage scene management / config center overview | `engage-scene` | `references/scene-config-item.md` | `scene-config-param.md`, `scene-config-group.md`, `scene-preset-metric.md`, `scene-config-metric.md`, `scene-config-channel.md`, `channel-mgmt.md`, `scene-strategy.md`, `scene-template.md`; L3 reports: `config-item-trigger-report.md`, `config-item-analysis-report.md`, `config-item-strategy-comparison.md` |
|
|
53
|
+
| **Scene config** | Same as config center; params, groups, metrics, channels, strategies, and templates under a config item | `engage-scene` | `references/scene-config-item.md` | Same as above; params/groups/metrics: `scene-config-param.md`, `scene-config-group.md`, `scene-preset-metric.md`, `scene-config-metric.md` |
|
|
54
|
+
| **Config item** | A single config item in the config center | `engage-scene` | `references/scene-config-item.md` | `scene-config-param.md`, `scene-preset-metric.md`, `scene-config-metric.md`, `scene-strategy.md`, `scene-template.md` |
|
|
55
|
+
| **Push channel** | Project-level message push channels (Webhook, FCM, APNS, etc.) | `engage-setting` | `references/channel-list.md` | `channel-detail.md`, `add-channel.md`, `update-channel-status.md`, `delete-channel.md`, `channel-update-config.md`, `channel-test-send.md`, `channel_touch_limits_list.md` |
|
|
56
|
+
| **Config channel** | Config-center Webhook/client config channels (not the same as push channels) | `engage-scene` | `references/scene-config-channel.md` | `channel-mgmt.md` (create/enable-disable/copy/delete workflows). User params in `config.customsParamList` require `columnName` with `user:` prefix (e.g. `user:#account_id`); preflight names with ae-analysis `analysis-meta property list/get`. |
|
|
57
|
+
| **Operation strategy** | Ops/delivery strategies under a config item | `engage-scene` | `references/scene-strategy.md` | Custom audience QP: [`scene-strategy-audience.md`](references/scene-strategy-audience.md) — **用户满足** `filts[0]` + **用户行为** `filts[1]` two-block mix QP; preflight props (stop + list if missing); examples A/B/C; template: `scene-template.md` |
|
|
58
|
+
| **Operation task** | Hermes push/engagement tasks (list, save, lifecycle, reports) | `engage-task` | `references/task-list.md` | `task-detail.md` (get), `save-task.md`, `build-task-save-guide.md`, `task-stats.md`, `task-delete.md`, `push-record-query.md`, `task-data-overview.md`, `task-data-detail.md`, `task-metric-detail.md`, `task-experiment-report.md` |
|
|
59
|
+
| **Template** | Strategy templates under a config item | `engage-scene` | `references/scene-template.md` | `scene-config-param.md` (template fields reference `paramId`); enable via `template update` then `template update-status` before strategy create |
|
|
60
|
+
|
|
61
|
+
**Easy to confuse:**
|
|
62
|
+
|
|
63
|
+
- **Push channel** → `ae-cli engage-setting channel …` (Hermes push channel settings)
|
|
64
|
+
- **Config channel** → `ae-cli engage-scene config-channel …` (config-center channels; see `channel-mgmt.md`)
|
|
65
|
+
- Flow / Task canvas nodes use `channelId` from **push channels**; config items bind `channel_id` from **config channels**
|
|
66
|
+
|
|
46
67
|
## Parameter Conventions
|
|
47
68
|
|
|
48
69
|
- Use regular flags for simple parameters, for example `--project-id`, `--task-id`, and `--flow-uuid`
|
|
@@ -230,6 +251,8 @@ ae-cli engage-scene config-metric update-rule --project-id <project_id> --metric
|
|
|
230
251
|
ae-cli engage-scene config-metric batch-delete --project-id <project_id> --config-id <config_id> --metric-ids '[1,2]' --yes
|
|
231
252
|
|
|
232
253
|
# Config channel list / get / create / update / update-status / delete / query-log
|
|
254
|
+
# User params: verify each customsParamList columnName via ae-analysis property list/get first; then use user:<prop_name>
|
|
255
|
+
# Strategy custom audience: scene-strategy-audience.md — mix QP filts[0]=用户满足, filts[1]=用户行为; strategy predict for 预估人数
|
|
233
256
|
# Workflows: references/channel-mgmt.md · schema: references/scene-config-channel.md
|
|
234
257
|
ae-cli engage-scene config-channel list --project-id <project_id> [--channel-type 0|1]
|
|
235
258
|
ae-cli engage-scene config-channel get --project-id <project_id> --channel-id <channel_id>
|
|
@@ -243,6 +266,7 @@ ae-cli engage-scene config-channel query-log --project-id <project_id> --channel
|
|
|
243
266
|
ae-cli engage-scene strategy create --project-id <project_id> --payload '{"configId":"cfg-1","templateId":"tpl-1","strategyName":"s1"}'
|
|
244
267
|
ae-cli engage-scene strategy update --project-id <project_id> --payload '{"strategyUuid":"uuid-1"}'
|
|
245
268
|
ae-cli engage-scene strategy log --project-id <project_id> --strategy-uuid <uuid>
|
|
269
|
+
ae-cli engage-scene strategy predict --project-id <project_id> --qp '<mix QP string>' --zone-offset 8 [--strategy-uuid <uuid>]
|
|
246
270
|
ae-cli engage-scene strategy batch-copy --project-id <project_id> --config-id <config_id> --strategy-ids '["s1"]'
|
|
247
271
|
|
|
248
272
|
# Template list / get / create / update / update-status / delete
|
|
@@ -412,7 +436,8 @@ More detailed single-command guidance is available in the business-oriented `ref
|
|
|
412
436
|
- `references/scene-config-metric.md` (`engage-scene.config-metric.{list,get,batch-add,update-rule,batch-delete}`)
|
|
413
437
|
- `references/scene-config-channel.md` (`engage-scene.config-channel.{list,get,create,update,update-status,delete,query-log}`)
|
|
414
438
|
- `references/channel-mgmt.md` (config channel management workflows)
|
|
415
|
-
- `references/scene-strategy.md` (`engage-scene.strategy.{list,get,create,update,log,batch-copy,manage}`)
|
|
439
|
+
- `references/scene-strategy.md` (`engage-scene.strategy.{list,get,create,update,log,predict,batch-copy,manage}`)
|
|
440
|
+
- `references/scene-strategy-audience.md` (custom audience mix QP: 用户满足/用户行为 two-block layout, preflight, worked examples A/B/C)
|
|
416
441
|
- `references/scene-template.md` (`engage-scene.template.{list,get,copy,create,update,update-status,delete}`)
|
|
417
442
|
- `references/config-item-trigger-report.md` (`engage-scene.report.config-item-trigger`, L3)
|
|
418
443
|
- `references/config-item-analysis-report.md` (`engage-scene.report.config-item-analysis`, L3)
|
|
@@ -486,11 +511,13 @@ For task draft creation or update, use this workflow:
|
|
|
486
511
|
|
|
487
512
|
1. `ae-cli engage-setting channel list --project-id <projectId>`
|
|
488
513
|
2. `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`
|
|
489
|
-
3. If the guide says QP-derived fields are needed
|
|
514
|
+
3. If the guide says QP-derived fields are needed (`targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, or `completionIndicatorDef.event`), call:
|
|
515
|
+
`ae-cli engage-setting query cluster-qp-skill --project-id <projectId>`
|
|
516
|
+
Use the returned skill text to build those fields. For existing-cluster audiences (`targetClusterType=2`), use `analysis user-cluster get` instead of hand-writing QP.
|
|
490
517
|
4. `ae-cli engage-task task save --project-id <projectId> --req '{...}'`
|
|
491
518
|
|
|
492
519
|
`engage-task task build-save-guide` is a read-only helper. It returns scenario-specific required fields, channel content schema, unsupported combinations, examples, and a handoff template for `save_task`.
|
|
493
520
|
|
|
494
|
-
`engage-task task save`
|
|
521
|
+
`engage-task task save` creates or updates a task configuration. It does not submit approval, does not start sending, and does not trigger task execution. If `req.taskId` is omitted it creates a new draft; if `req.taskId` is present it updates an existing **draft or paused** task. Update mode rejects running/ended tasks with `invalid_status`. Omitted fields inherit from the existing task before validation (partial rename/update is supported).
|
|
495
522
|
|
|
496
|
-
Audience creation is not a fixed preflight step.
|
|
523
|
+
Audience creation is not a fixed preflight step. When the guide requires QP-derived fields (`targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, `completionIndicatorDef.event`), call `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>` first and follow the returned skill definition; do not assemble raw QP manually. For existing-cluster audiences, use `analysis user-cluster get` to copy server-authored definitions when appropriate.
|
|
@@ -48,10 +48,14 @@ Topic-level audience uses `topicClusterKey` / `topicQp`; do **not** pass task-le
|
|
|
48
48
|
|
|
49
49
|
| Value | Required | Notes |
|
|
50
50
|
|---|---|---|
|
|
51
|
-
| `1` (custom) | `topicQp` | Valid condition JSON object string (not `{}`). |
|
|
51
|
+
| `1` (custom) | `topicQp` | Valid condition JSON object string (not `{}`). Use mix QP with `totalCFilter` (and optional `totalOutCFilter`). |
|
|
52
52
|
| `2` (existed) | `topicClusterKey` | From an existing user cluster. |
|
|
53
53
|
| `3` (all) | — | **Not supported for activity topics** → `TOPIC_TARGET_CLUSTER_TYPE_UNSUPPORTED`. Use standalone `engage-activity task create` for all-users. |
|
|
54
54
|
|
|
55
|
+
**`triggerMixQpVersion`:** For custom audience (`targetClusterType=1`) with mix QP (`totalCFilter` / `totalInCFilter`), set `"4.4"`. UI theme edit parses conditions only when this is `4.4`; missing/blank values make target-user filters render empty. Capability create/update/copy default blank to `"4.4"` (same as UI and standalone task MCP).
|
|
56
|
+
|
|
57
|
+
Task-level extra conditions go in `taskQp` as mix QP under **`totalCFilter` only** (user attrs and/or events). Do not put task-owned conditions in `totalInCFilter` — that key is reserved for topic→task merge (topic `totalCFilter` is copied into task cluster `totalInCFilter` on save).
|
|
58
|
+
|
|
55
59
|
### Trigger (`triggerType`)
|
|
56
60
|
|
|
57
61
|
| Value | Required | Notes |
|
|
@@ -60,6 +64,35 @@ Topic-level audience uses `topicClusterKey` / `topicQp`; do **not** pass task-le
|
|
|
60
64
|
| `1` (schedule repeat) | `startDate`, `endDate`, `triggerCrontab` | |
|
|
61
65
|
| `2` (manual) | — | **Not supported for activity topics** (UI only offers 0/1). Using it without `endDate` causes `CAPABILITY_EXECUTION_FAILED`. |
|
|
62
66
|
|
|
67
|
+
## Create Topic Orchestration
|
|
68
|
+
|
|
69
|
+
Use this workflow when a topic has a shared audience plus one or more task-level audience splits, message variants, or completion goals.
|
|
70
|
+
|
|
71
|
+
1. **Separate the intent before building the payload.** Record the parent activity, topic-level shared audience, task-level extra audience for each task, schedule, channel, message content, and completion goal/window as distinct fields. A completion goal is not an audience condition unless the user explicitly says so.
|
|
72
|
+
2. **Resolve the parent activity.** Use `activity list|get` to verify the exact `activityId`, editable status, activity dates, and timezone. For a repeated topic, keep `startDate` and `endDate` inside the activity period and interpret the cron in the activity timezone.
|
|
73
|
+
3. **Resolve a real channel.** Query `engage-setting channel list`, then inspect the selected channel before composing content. If several enabled channels match and the user has not specified a provider or an already-confirmed project default, ask which one to use instead of choosing an arbitrary ID.
|
|
74
|
+
4. **Read the channel content contract.** Call `engage-task task build-save-guide` with the known trigger, audience, channel type, and `channelId`. Build every `groupContentList[].contentList[].content` item from `fieldRules.channelContentSchema`; do not infer App Push keys or parameter types from memory.
|
|
75
|
+
5. **Prepare audience and completion inputs.** Resolve real event/property metadata and categorical values through the applicable Analysis workflow. Put the shared condition in `topicQp` or `topicClusterKey`, and only task-specific conditions in each `taskQp`. For a rolling condition such as "recent N days" that must be evaluated for future repeated sends, prefer a custom QP; use an existing cluster only after confirming that its refresh semantics match the send cadence. Build the completion goal separately in `completionIndicatorDef`.
|
|
76
|
+
6. **Build one native `TopicAddDTO`.** Keep nested payload keys in camelCase. Ensure `tasks` is non-empty, `frequencyLimits` and QP fields are JSON strings where documented, each task has channel content, and Android/iOS or other variants map to the correct task audience and message.
|
|
77
|
+
7. **Validate the complex payload.** Run `topic create ... --validate` while correcting the nested payload. Inspect `normalized_input` and confirm that the schedule, audience boundaries, message variants, and completion window retain the intended semantics. After `valid=true`, execute the same payload directly; do not add a redundant dry-run by default.
|
|
78
|
+
8. **Create exactly once.** Run `topic create` with the validated payload. A successful response only reports `data.success`; it does not provide enough evidence to declare the whole orchestration complete.
|
|
79
|
+
9. **Resolve IDs and verify the saved topic.** Call `activity info-list` for the parent activity, match the new topic and tasks by their names, then call `topic get` with the returned `topicId`. Verify the channel, dates, cron, topic audience, each task audience, content, completion goal, and draft status. For custom audiences, confirm that the saved task QP keeps task-owned conditions in `totalCFilter` and the shared topic condition appears only through the topic-to-task merge.
|
|
80
|
+
10. **Verify generated audiences before reporting completion.** Read the generated topic/task cluster keys with the applicable cluster query and wait for terminal computation state. Require `refresh_status=success`, `progress=100`, `real_available=1`, and `cluster_valid=1`. A zero-user result may be valid, but reconcile it with the discovered categorical values and business expectation. If computation fails, correct only the verified cause and re-check; do not retry an unchanged request or report the topic as fully ready.
|
|
81
|
+
|
|
82
|
+
Recommended command order:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
activity list/get
|
|
86
|
+
-> channel list/get
|
|
87
|
+
-> task build-save-guide
|
|
88
|
+
-> prepare topic audience, task audiences, content, and completion goal
|
|
89
|
+
-> topic create --validate
|
|
90
|
+
-> topic create
|
|
91
|
+
-> activity info-list
|
|
92
|
+
-> topic get
|
|
93
|
+
-> generated audience status checks
|
|
94
|
+
```
|
|
95
|
+
|
|
63
96
|
## Output
|
|
64
97
|
|
|
65
98
|
- `get`: `data.topic` (includes `topicClusterKey` for topic audience).
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# ae-engage engage-setting channel create
|
|
2
2
|
|
|
3
|
+
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel create`
|
|
3
4
|
|
|
4
|
-
Create a new Engage channel.
|
|
5
|
-
|
|
6
|
-
Mapped command: `ae-cli engage-setting channel create`
|
|
5
|
+
Create a new Engage push channel.
|
|
7
6
|
|
|
8
7
|
## Flags
|
|
9
8
|
|
|
@@ -14,11 +14,25 @@ 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. If the guide says
|
|
17
|
+
3. If the guide says QP-derived fields are required, fetch the skill definition first:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
ae-cli
|
|
21
|
-
|
|
20
|
+
ae-cli engage-setting query cluster-qp-skill --project-id <projectId>
|
|
21
|
+
# optional selectors:
|
|
22
|
+
ae-cli engage-setting query cluster-qp-skill --project-id <projectId> --response-mode full --condition-subtype all
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Use the returned `skill` text to build:
|
|
26
|
+
|
|
27
|
+
- `targetConfig.qp`
|
|
28
|
+
- `triggerConfig.triggerRule` (required for `triggerType=3/4/5`)
|
|
29
|
+
- `clientConfig.clientQp`
|
|
30
|
+
- `completionIndicatorDef.event`
|
|
31
|
+
|
|
32
|
+
For existing-cluster audiences (`targetClusterType=2`), you may copy server-authored definitions via:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<cluster_name>"]'
|
|
22
36
|
```
|
|
23
37
|
|
|
24
38
|
4. Build the final grouped `save_task.req`.
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# ae-engage engage-setting channel get
|
|
2
2
|
|
|
3
|
+
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel get`
|
|
3
4
|
|
|
4
|
-
Query the details of a single Engage channel.
|
|
5
|
-
|
|
6
|
-
Mapped command: `ae-cli engage-setting channel get`
|
|
5
|
+
Query the details of a single Engage push channel.
|
|
7
6
|
|
|
8
7
|
## Response shape
|
|
9
8
|
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# ae-engage engage-setting channel list
|
|
2
2
|
|
|
3
|
+
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel list`
|
|
3
4
|
|
|
4
|
-
Query the list of Engage channels in a project.
|
|
5
|
-
|
|
6
|
-
Mapped command: `ae-cli engage-setting channel list`
|
|
7
|
-
|
|
8
|
-
## Response shape
|
|
5
|
+
Query the list of Engage push channels in a project.
|
|
9
6
|
|
|
10
7
|
The result is `{ data: { items, total } }`. Channel fields recursively use snake_case, for
|
|
11
8
|
example `data.items[].channel_id`, `data.items[].channel_status`, and `data.items[].channel_type`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Config channel management workflows
|
|
2
2
|
|
|
3
|
-
> Commands: `ae-cli engage-scene config-channel …` · See [`scene-config-channel.md`](scene-config-channel.md) for flags, `config` JSON shape, and capability ids.
|
|
3
|
+
> Trigger keywords: config center, config channel · Commands: `ae-cli engage-scene config-channel …` · See [`scene-config-channel.md`](scene-config-channel.md) for flags, `config` JSON shape, and capability ids.
|
|
4
4
|
|
|
5
5
|
Use for AE Engage **config center channel management**: Webhook (`channel_type=0`) and client (`channel_type=1`) config channels — list, get, create, update, copy, enable/disable, operation log, and delete.
|
|
6
6
|
|
|
@@ -12,6 +12,8 @@ Use for AE Engage **config center channel management**: Webhook (`channel_type=0
|
|
|
12
12
|
4. `channel_status`: **1 = enabled**, **2 = disabled**.
|
|
13
13
|
5. Writes require explicit user intent; `delete` is high-risk — confirm, then `--yes`.
|
|
14
14
|
6. Before changing Webhook URL, auth, or parameter definitions on an enabled channel, disable it first.
|
|
15
|
+
7. In `config.customsParamList` (**user params**), every `columnName` must be prefixed with `user:` and point to a real user property, e.g. `user:#account_id`. `envParamList` entries do not use this prefix.
|
|
16
|
+
8. Before create/update, use the **ae-analysis** skill to verify each intended user property exists (`analysis-meta property list --scope user`, then `property get` for exact match). Never invent `columnName` values.
|
|
15
17
|
|
|
16
18
|
## Permissions
|
|
17
19
|
|
|
@@ -44,18 +46,31 @@ Parse `data.channel.config` for URL, auth, user params, and env params.
|
|
|
44
46
|
|
|
45
47
|
Webhook requires `channel_name` and `config.url`. Optional: `testUrl`, auth, user params, env params.
|
|
46
48
|
|
|
49
|
+
**Preflight (user params):** for each intended `customsParamList[].columnName`, discover and verify the user property via ae-analysis first:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
ae-cli analysis-meta property list --project-id <pid> --scope user --query <keyword> \
|
|
53
|
+
--fields '["prop_name","prop_desc","select_type"]' --limit 50
|
|
54
|
+
ae-cli analysis-meta property get --project-id <pid> --table-type user --prop-name <prop_name>
|
|
55
|
+
# → use columnName "user:" + prop_name, e.g. user:#account_id
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Then create the channel:
|
|
59
|
+
|
|
47
60
|
```bash
|
|
48
61
|
ae-cli engage-scene config-channel create \
|
|
49
62
|
--project-id <pid> \
|
|
50
63
|
--channel-name '<name>' \
|
|
51
64
|
--channel-type 0 \
|
|
52
|
-
--config '{"url":"https://...","testUrl":"","authConfig":{"enable":false},"customsParamList":[{"key":"uid","columnName":"
|
|
65
|
+
--config '{"url":"https://...","testUrl":"","authConfig":{"enable":false},"customsParamList":[{"key":"uid","columnName":"user:#account_id","defaultValue":"","systemIdParam":false}],"envParamList":[]}'
|
|
53
66
|
```
|
|
54
67
|
|
|
55
68
|
Returns `data.channel_id`. Created channels start **enabled**.
|
|
56
69
|
|
|
57
70
|
### 4. Update
|
|
58
71
|
|
|
72
|
+
Re-verify any new or changed `customsParamList[].columnName` with `analysis-meta property list/get` (ae-analysis skill) before building `--config`.
|
|
73
|
+
|
|
59
74
|
```bash
|
|
60
75
|
ae-cli engage-scene config-channel get --project-id <pid> --channel-id <id>
|
|
61
76
|
# If channel_status=1 and changing URL / auth / param definitions:
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# ae-engage engage-setting channel delete
|
|
2
2
|
|
|
3
|
+
> Trigger keywords: push channel · Mapped command: `ae-cli engage-setting channel delete`
|
|
3
4
|
|
|
4
|
-
Delete an Engage channel.
|
|
5
|
-
|
|
6
|
-
Mapped command: `ae-cli engage-setting channel delete`
|
|
5
|
+
Delete an Engage push channel.
|
|
7
6
|
|
|
8
7
|
## Flags
|
|
9
8
|
|
|
@@ -33,8 +33,8 @@ You still organize user requirements into an intermediate intent first, then map
|
|
|
33
33
|
## 2. Workflow
|
|
34
34
|
|
|
35
35
|
1. Identify the flow intent from the user input and produce a unified intent JSON.
|
|
36
|
-
2. Build a semantic condition request from `ae-analysis/references/user_cluster_models.md`, create the audience directly with `analysis user-cluster create`, and prefer its `cluster_name`/`clusterKey`.
|
|
37
|
-
3. Run `ae-cli engage-setting channel list --project-id <projectId>` to get the available channels and match real `
|
|
36
|
+
2. Build a semantic condition request from `ae-analysis/references/user_cluster_models.md`, create the audience directly with `analysis user-cluster create`, and prefer its `cluster_name`/`clusterKey`. When node schema requires QP-derived fields (`targetClusterQp`, `triggerRule`, etc.), call `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>` first; never assemble raw QP manually.
|
|
37
|
+
3. Run `ae-cli engage-setting channel list --project-id <projectId>` to get the available channels and match real `channelId` values for touchpoint nodes. For `webhook_push`, also run `ae-cli engage-setting channel get` and use `data.item.config.params_list` to build request field `contentList` (camelCase; snake_case aliases are normalized during validate).
|
|
38
38
|
4. Query `ae-cli engage-flow node-config schema --project-id <project_id> --node-type <type>` before constructing each non-trivial node config, then run `ae-cli engage-flow node-config validate --project-id <project_id> --node-type <type> --operation-mode save_flow --config '<config-json-string>'` before placing the config into `nodes` or `nodeConfigs`.
|
|
39
39
|
5. Map the intent JSON to `nodes` and `edges` (compact form, see §7 / §8).
|
|
40
40
|
6. `build` → resolve any `need_input` slot → `preview` → `commit`, then verify with `engage-flow flow get`.
|
|
@@ -460,7 +460,10 @@ The CLI injects `projectId` into both the top level and `req`; you do not write
|
|
|
460
460
|
|
|
461
461
|
`need_input` is a **soft prompt**, not a hard error:
|
|
462
462
|
|
|
463
|
-
- **`data.result.errors` empty + `data.result.next_slot` present** → server needs one more node config (trigger / channel / targetCluster). Answer with request fields `operation=build` + `draftId` + `expectedVersion` + `slotAnswer`. If response `next_slot.target_node_id` is present, request `slotAnswer.nodeConfig` may contain only `config`; otherwise include `nodeId` or `id`.
|
|
463
|
+
- **`data.result.errors` empty + `data.result.next_slot` present** → server needs one more node config (trigger / channel / targetCluster). Answer with request fields `operation=build` + `draftId` + `expectedVersion` + `slotAnswer`. If response `next_slot.target_node_id` is present, request `slotAnswer.nodeConfig` may contain only `config`; otherwise include `nodeId` or `id`. **`slotAnswer.nodeConfig.config` merges into the existing node config** — send only the fields you are adding or changing, not the full config.
|
|
464
|
+
- For existing-cluster entry nodes (`targetUserType=2`), use `targetClusterName` or `clusterId` alias.
|
|
465
|
+
- For custom audiences, call `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>` before filling `targetClusterQp`.
|
|
466
|
+
- For `event_trigger`, `endDate` must be **strictly earlier than** `flowEndDate`.
|
|
464
467
|
- **`data.result.errors` non-empty** → hard validation failure. Fix `nodes`/`edges` and `build` again (a new `data.result.draft_id` is issued; the stale draft is cleaned by TTL).
|
|
465
468
|
|
|
466
469
|
### 11.3 Minimal Working Example
|