@thinkingai/ae-cli 6.0.35 → 6.0.37
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 +216 -150
- package/README.zh.md +224 -159
- package/dist/{auth-UPGUOKTW.js → auth-56Z45UVR.js} +1 -1
- package/dist/{capability-TQ5KU5Q6.js → capability-2H6PAOA3.js} +1 -1
- package/dist/{capability-AJC5CBRT.js → capability-YPOQX6PL.js} +1 -1
- package/dist/{chunk-4Q5TNP4Q.js → chunk-J7MZHDHQ.js} +48 -24
- package/dist/chunk-KTYR3U6D.js +1012 -0
- package/dist/{chunk-6CHYBI64.js → chunk-LHVM35J4.js} +1 -1
- package/dist/{chunk-ISY6HMHM.js → chunk-PVBYJWC2.js} +1 -1
- package/dist/{config-PMPISN5Y.js → config-BSSALXEN.js} +1 -1
- package/dist/index.js +75 -18
- package/dist/{metadata-P5GIVMZ6.js → metadata-AN3YFZEV.js} +2 -2
- package/dist/{metadata-ELUAR3EJ.js → metadata-JIQ77HFY.js} +2 -2
- package/dist/{model-OYQLXCQY.js → model-JASQVOFD.js} +1 -1
- package/dist/{raw-TPB7KSZO.js → raw-XJCAT3HX.js} +1 -1
- package/dist/{sync-EFJKFZK2.js → sync-QFP4XFN3.js} +2 -2
- package/dist/{te-agent-BOQ7ZY56.js → te-agent-JHUG6DVV.js} +28 -1
- package/dist/{te-analysis-HZIP6SYW.js → te-analysis-IWQZO423.js} +213 -129
- package/dist/{te-analysis-ZT2MYAHL.js → te-analysis-X222IRYR.js} +213 -129
- package/dist/{te-dataops-VYN3IOKO.js → te-dataops-PZQ5NQLY.js} +1 -1
- package/dist/{te-dataops-Y5QAPPPF.js → te-dataops-XTWVTJCA.js} +1 -1
- package/dist/{te-engage-2FSDUOIZ.js → te-engage-E7F4HTXU.js} +87 -4
- package/dist/{te-engage-BMJ6UOUU.js → te-engage-NLZUPSBK.js} +87 -4
- package/dist/te-system-AH7DMCAQ.js +1706 -0
- package/dist/{te-team-PDKKW7Q5.js → te-team-BQ3SKSZV.js} +1 -1
- package/dist/update-DKG6UXEM.js +123 -0
- package/package.json +8 -3
- package/skills/ae-agent/SKILL.md +2 -2
- package/skills/ae-agent/references/create-automation.md +12 -0
- package/skills/ae-agent/references/update-automation.md +11 -3
- package/skills/ae-analysis/SKILL.md +1 -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_gateway_assets.md +6 -4
- 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 +10 -7
- 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/drilldown_user_events_export.md +5 -0
- package/skills/ae-analysis/references/drilldown_user_events_run.md +6 -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-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 +5 -5
- package/skills/ae-generate-tracking-code/references/autotrack-enum.md +4 -4
- package/skills/ae-generate-tracking-code/references/client-sdk-insert.md +1 -1
- package/skills/ae-generate-tracking-code/references/debug-script.md +2 -2
- package/skills/ae-generate-tracking-code/references/logbus-config.md +1 -1
- package/skills/ae-generate-tracking-code/references/restful-call.md +1 -1
- package/skills/ae-generate-tracking-code/references/sdk-index.md +36 -36
- package/skills/ae-system/SKILL.md +357 -0
- package/dist/chunk-IMMGMU54.js +0 -674
- package/skills/ae-analysis/references/alert_definition_schema_get.md +0 -24
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# analysis dashboard-daily-report send-status
|
|
2
|
+
|
|
3
|
+
Use after `dashboard-daily-report send` to inspect the actual delivery result.
|
|
4
|
+
Do not use it to read or change the saved daily report configuration.
|
|
5
|
+
|
|
6
|
+
Command:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
ae-cli analysis dashboard-daily-report send-status --project-id <project_id> --task-id <task_id>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The normalized `status` is one of:
|
|
13
|
+
|
|
14
|
+
- `queued`
|
|
15
|
+
- `rendering`
|
|
16
|
+
- `sending`
|
|
17
|
+
- `succeeded`
|
|
18
|
+
- `partially_succeeded`
|
|
19
|
+
- `failed`
|
|
20
|
+
- `canceled`
|
|
21
|
+
|
|
22
|
+
Output also includes `progress`, `message`, and per-channel status when the backend task contains channel details.
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
# analysis dashboard-daily-report update
|
|
2
2
|
|
|
3
|
-
Use when the user wants to update a dashboard daily report configuration.
|
|
3
|
+
Use when the user wants to create or update a dashboard daily report configuration.
|
|
4
4
|
|
|
5
5
|
Do not use to send immediately. Use `dashboard-daily-report send`.
|
|
6
6
|
|
|
7
7
|
Command:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
ae-cli analysis dashboard-daily-report update --project-id <project_id> --dashboard-id <dashboard_id> [--enable-send true] [--send-time <time>] [--
|
|
10
|
+
ae-cli analysis dashboard-daily-report update --project-id <project_id> --dashboard-id <dashboard_id> [--enable-send true] [--send-time <time>] [--enable-email true] [--email-new <emails>] [--payload '{...}']
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
The command is a patch-style upsert:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
- If the dashboard has no saved configuration, the backend creates one and applies defaults for omitted fields.
|
|
16
|
+
- If a configuration exists, omitted fields remain unchanged.
|
|
17
|
+
- Pass an explicit boolean to enable or disable a saved channel.
|
|
18
|
+
- Pass an empty string or array to clear a saved destination.
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
SMTP transport is not caller-selectable. For direct email addresses, the backend uses company SMTP when configured and otherwise uses the default mail service.
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
When enabling Feishu, pass `--enable-feishu true --feishu-info '{"app_id":"cli_xxx","app_secret":"secret_xxx","webhook":["https://open.feishu.cn/open-apis/bot/v2/hook/..."]}'`. Treat `app_secret` and webhook URLs as sensitive.
|
|
23
|
+
|
|
24
|
+
Use `dashboard-daily-report get` before a selective update when the current state matters. The get response redacts secrets and webhook URLs, so do not copy the full response back as an update payload.
|
|
25
|
+
|
|
26
|
+
Output is the gateway envelope. `data` contains the saved daily report configuration result.
|
|
@@ -21,6 +21,11 @@ The nested backend keys are exactly `columnName` and `tableType`, and the table
|
|
|
21
21
|
|
|
22
22
|
Use the exact `drilldown_context_id` and canonical `user_id` returned by a user-subject `analysis drilldown-entities run`. Do not use a custom entity, an entity export artifact, or a guessed identity. Export does not accept `--limit`, `--offset`, `--page-num`, or `--page-size`; Common builds the same authorized event-sequence query without the synchronous 1000-row preview cap and streams one `csv.gz` artifact. The platform full-download ceiling (`model_full_download_limit`) still applies.
|
|
23
23
|
|
|
24
|
+
For a `scope=total` source coordinate, there is no single selected date. Common
|
|
25
|
+
preserves the machine date coordinates returned by the source query together
|
|
26
|
+
with that query's time granularity, such as daily, weekly, or monthly. Do not
|
|
27
|
+
construct dates outside that context or force a daily granularity.
|
|
28
|
+
|
|
24
29
|
Inspect the returned `run_id` with `analysis run inspect`, then download the completed artifact with `analysis artifact download`.
|
|
25
30
|
|
|
26
31
|
Output is an async run/artifact descriptor. The complete event rows exist only in the downloaded artifact; they cannot be used as new analysis coordinates.
|
|
@@ -29,6 +29,12 @@ ae-cli analysis drilldown-user-events run \
|
|
|
29
29
|
|
|
30
30
|
Do not use raw QP, `query_context_id`, or guessed user IDs for this command.
|
|
31
31
|
|
|
32
|
+
For a `scope=total` source coordinate, there is no single selected date. Common
|
|
33
|
+
preserves the machine date coordinates returned by the source query together
|
|
34
|
+
with that query's time granularity, such as daily, weekly, or monthly. Do not
|
|
35
|
+
invent `target_dates`, force a daily granularity, or replace the returned
|
|
36
|
+
`drilldown_context_id`.
|
|
37
|
+
|
|
32
38
|
Do not call this command merely because an entity row looks like a user. The explicit subject and follow-up context are the authority.
|
|
33
39
|
|
|
34
40
|
## Output
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# analysis-meta super-metadata batch-create
|
|
2
|
+
|
|
3
|
+
Use this command to create effective system metadata in batch through the capability gateway: super events, event properties, and user properties.
|
|
4
|
+
|
|
5
|
+
Do not use it for ordinary event/property CRUD, metadata import from XLSX, or asset governance. Use the dedicated event/property commands, event-property-bundle import, or governance commands instead.
|
|
6
|
+
|
|
7
|
+
Command:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ae-cli analysis-meta super-metadata batch-create --project-id <project_id> --events '[{"event_name":"purchase","event_desc":"Purchase"}]' --event-properties '[{"prop_name":"amount","select_type":"number","super_event_names":["purchase"]}]' --dry-run
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Capability id: `metadata.super_metadata.batch_create`.
|
|
14
|
+
|
|
15
|
+
Input sends `project_id` plus any non-empty JSON arrays among `events`, `event_properties`, and `user_properties`. Use snake_case object fields exactly as documented by the common-service schema:
|
|
16
|
+
|
|
17
|
+
- Event items: `event_name`, optional `event_desc`, optional `remark`, optional `super_event_prop_names`.
|
|
18
|
+
- Event property items: `prop_name`, `select_type`, optional `prop_desc`, optional `prop_remark`, optional `common_prop`, optional `super_event_names`.
|
|
19
|
+
- User property items: `prop_name`, `select_type`, optional `prop_desc`, optional `prop_remark`.
|
|
20
|
+
|
|
21
|
+
Output returns `created.events`, `created.event_properties`, and `created.user_properties` with created names and IDs, plus count metadata. If common-service rejects a duplicate, bad reference, or invalid type, preserve the gateway error code and message.
|
|
22
|
+
|
|
23
|
+
## Parameters
|
|
24
|
+
| Parameter | Required | Description |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `--project-id` | Yes | Numeric project ID. |
|
|
27
|
+
| `--events` | No | Super event JSON array. |
|
|
28
|
+
| `--event-properties` | No | Event property JSON array. |
|
|
29
|
+
| `--user-properties` | No | User property JSON array. |
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# analysis-meta super-metadata batch-edit
|
|
2
|
+
|
|
3
|
+
Use this command to batch edit descriptions and remarks for effective system metadata through the capability gateway.
|
|
4
|
+
|
|
5
|
+
Do not use it to create metadata, delete metadata, hide metadata, update event/property relations, or edit governance assets. Use batch-create or the dedicated metadata commands instead.
|
|
6
|
+
|
|
7
|
+
Command:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ae-cli analysis-meta super-metadata batch-edit --project-id <project_id> --type event_property --items '[{"prop_name":"amount","prop_desc":"Amount","prop_remark":"Revenue amount"}]' --dry-run
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Capability id: `metadata.super_metadata.batch_edit`.
|
|
14
|
+
|
|
15
|
+
Input sends `project_id`, `type`, and `items`. For `type=event`, each item identifies the target with `event_name` and may set `event_desc` or `remark`. For `type=event_property` or `type=user_property`, each item identifies the target with `prop_name` and may set `prop_desc` or `prop_remark`.
|
|
16
|
+
|
|
17
|
+
Output returns `type` and `updated_count`. Preserve validation errors from common-service, especially missing names, unsupported `type`, or empty `items`.
|
|
18
|
+
|
|
19
|
+
## Parameters
|
|
20
|
+
| Parameter | Required | Description |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `--project-id` | Yes | Numeric project ID. |
|
|
23
|
+
| `--type` | Yes | Metadata type to edit: `event`, `event_property`, or `user_property`. |
|
|
24
|
+
| `--items` | Yes | Batch edit item JSON array. |
|
|
@@ -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
|
|
@@ -10,13 +10,9 @@ Recommended workflow:
|
|
|
10
10
|
|
|
11
11
|
1. `ae-cli engage-setting channel list --project-id <projectId>`
|
|
12
12
|
2. `ae-cli engage-task task build-save-guide --project-id <projectId> --req '{...}'`
|
|
13
|
-
3. If the guide indicates
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
ae-cli analysis user-cluster create --project-id <projectId> --cluster-name <condition_cluster_name> --display-name <display_name> --definition-request '<semantic-definition-json>'
|
|
17
|
-
ae-cli analysis user-cluster get --project-id <projectId> --cluster-names '["<condition_cluster_name>"]'
|
|
18
|
-
```
|
|
19
|
-
|
|
13
|
+
3. If the guide indicates QP-derived fields, call `ae-cli engage-setting query cluster-qp-skill --project-id <projectId>` and build
|
|
14
|
+
`targetConfig.qp`, `triggerConfig.triggerRule`, `clientConfig.clientQp`, or `completionIndicatorDef.event`
|
|
15
|
+
from the returned skill text. For existing-cluster audiences, use `analysis user-cluster get`.
|
|
20
16
|
4. Build the final grouped `req`
|
|
21
17
|
5. `ae-cli engage-task task save --project-id <projectId> --req '{...}'`
|
|
22
18
|
|
|
@@ -40,7 +36,7 @@ For the full guide contract, request format, return sections, and handoff usage,
|
|
|
40
36
|
The command supports two modes:
|
|
41
37
|
|
|
42
38
|
- create mode: omit `req.taskId`
|
|
43
|
-
- update mode: include `req.taskId` for an existing draft task
|
|
39
|
+
- update mode: include `req.taskId` for an existing draft or paused task
|
|
44
40
|
|
|
45
41
|
Regardless of mode, this tool only saves a draft:
|
|
46
42
|
|
|
@@ -59,8 +55,8 @@ Notes:
|
|
|
59
55
|
- the outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape shown below
|
|
60
56
|
- Hermes assigns the outer `--project-id` to `req.projectId`; if `req.projectId` is also present, the outer value wins
|
|
61
57
|
- the whole `req` must be a JSON object, not a stringified JSON string
|
|
62
|
-
- for update mode, Hermes
|
|
63
|
-
- in update mode, omitted fields are backfilled from the existing
|
|
58
|
+
- for update mode, Hermes allows modifying **draft** or **paused** tasks (`status` 0 or 2); running/ended tasks are rejected with `invalid_status`
|
|
59
|
+
- in update mode, omitted fields are backfilled from the existing task before validation, so partial updates (e.g. rename only) are allowed
|
|
64
60
|
|
|
65
61
|
### Response shape
|
|
66
62
|
|
|
@@ -160,12 +156,13 @@ Top-level notes:
|
|
|
160
156
|
|
|
161
157
|
### 4.1 `taskId`
|
|
162
158
|
|
|
163
|
-
Use `taskId` only when you are updating an existing draft task.
|
|
159
|
+
Use `taskId` only when you are updating an existing draft or paused task.
|
|
164
160
|
|
|
165
161
|
- create mode: omit `taskId`
|
|
166
162
|
- update mode: include `taskId`
|
|
167
|
-
- update mode can send only the fields that need changing
|
|
168
|
-
- update mode
|
|
163
|
+
- update mode can send only the fields that need changing (e.g. `baseInfo.taskName` for rename)
|
|
164
|
+
- update mode fails with `invalid_status` if the task is running or ended
|
|
165
|
+
- for paused tasks that already started pushing, Hermes rejects changes to key attributes (channel, trigger time/type, audience cluster, timezone, completion indicators); renames and other non-key fields remain allowed
|
|
169
166
|
|
|
170
167
|
### 4.2 `channelConfig`
|
|
171
168
|
|
|
@@ -273,7 +270,7 @@ Before submission, verify:
|
|
|
273
270
|
5. `targetClusterType` matches the presence or absence of `clusterKey` / `qp`.
|
|
274
271
|
6. `triggerType` matches the provided scheduling or event fields.
|
|
275
272
|
7. `completionIndicatorDef` is present and structurally valid for the current scenario.
|
|
276
|
-
8. `taskId` is omitted for create mode and present only for updating a draft.
|
|
273
|
+
8. `taskId` is omitted for create mode and present only for updating a draft or paused task.
|
|
277
274
|
9. No unsupported `triggerType=6` is used.
|
|
278
275
|
10. No placeholder IDs or fabricated resource names remain in the request.
|
|
279
276
|
|
|
@@ -309,6 +306,6 @@ This command is a write operation.
|
|
|
309
306
|
- Do not pass the whole `req` as a JSON string
|
|
310
307
|
- Do not use `triggerType=6`
|
|
311
308
|
- Do not invent `channelId`, `clusterKey`, audience definitions, or content keys
|
|
312
|
-
- Do not use `taskId` for a
|
|
309
|
+
- Do not use `taskId` for a running or ended task
|
|
313
310
|
- Do not pass `occasionKeys`; Hermes derives them from content
|
|
314
311
|
- Do not call the semantic cluster definition builder as a reflex; call it only when guide output says QP-derived fields are needed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# engage-scene config-channel
|
|
2
2
|
|
|
3
|
-
> Capability ids: `engage-scene.config-channel.{list,get,create,update,update-status,delete,query-log}` · Domain: `engage`.
|
|
3
|
+
> Trigger keywords: config center, scene config, config channel · Capability ids: `engage-scene.config-channel.{list,get,create,update,update-status,delete,query-log}` · Domain: `engage`.
|
|
4
4
|
|
|
5
5
|
Scene / config center — **config channel management** (Webhook / client config channels).
|
|
6
6
|
|
|
@@ -102,7 +102,7 @@ ae-cli engage-scene config-channel query-log --project-id <project_id> --channel
|
|
|
102
102
|
"customsParamList": [
|
|
103
103
|
{
|
|
104
104
|
"key": "user_id",
|
|
105
|
-
"columnName": "
|
|
105
|
+
"columnName": "user:#account_id",
|
|
106
106
|
"defaultValue": "",
|
|
107
107
|
"systemIdParam": true
|
|
108
108
|
}
|
|
@@ -114,10 +114,33 @@ ae-cli engage-scene config-channel query-log --project-id <project_id> --channel
|
|
|
114
114
|
- `url` — production environment URL (required for webhook)
|
|
115
115
|
- `testUrl` — optional test environment URL
|
|
116
116
|
- `authConfig.enable` — channel auth switch; when true, `secretKey` is required; `secretType` **1 = basic**, **2 = advanced**
|
|
117
|
-
- `customsParamList` — user params (field key / linked user property / default value / system-integration identity)
|
|
118
|
-
- `envParamList` — environment params (from config tables)
|
|
117
|
+
- `customsParamList` — **user params** (field key / linked user property / default value / system-integration identity). Each entry's `columnName` must use the `user:` prefix and reference a real user property code, e.g. `user:#account_id`, `user:#distinct_id`. Do **not** pass bare property names such as `#account_id`.
|
|
118
|
+
- `envParamList` — **environment params** (from config tables). `columnName` here is the env-param field name and does **not** take the `user:` prefix.
|
|
119
119
|
- At most one `systemIdParam=true` across user + env params
|
|
120
120
|
|
|
121
|
+
When creating or updating a config channel (`create` / `update` with `--config`), normalize every `customsParamList[].columnName` to `user:<prop_code>` before submit. If `get` returns bare names, add the prefix when building the next update payload.
|
|
122
|
+
|
|
123
|
+
## Preflight: verify user properties (ae-analysis)
|
|
124
|
+
|
|
125
|
+
Before setting `customsParamList[].columnName`, use the **ae-analysis** skill to confirm each linked user property exists in the project. Do not invent property names.
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# 1) Browse / search user properties
|
|
129
|
+
ae-cli analysis-meta property list --project-id <project_id> --scope user \
|
|
130
|
+
--query <keyword> \
|
|
131
|
+
--fields '["prop_name","prop_desc","select_type","table_type"]' --limit 50
|
|
132
|
+
|
|
133
|
+
# 2) Verify one exact property before submit (optional but recommended)
|
|
134
|
+
ae-cli analysis-meta property get --project-id <project_id> --table-type user --prop-name <prop_name>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Decision rules:
|
|
138
|
+
|
|
139
|
+
- Read `skills/ae-analysis/references/property_list.md` and `property_get.md` when unsure about flags or output shape.
|
|
140
|
+
- Match a real `data.properties[].prop_name` (or confirmed `data.property.prop_name`) from metadata, then set `columnName` to `user:` + that name — e.g. `prop_name` `#account_id` → `columnName` `user:#account_id`.
|
|
141
|
+
- If the property is not found after list + optional get, stop and tell the user; do not submit the channel config with a fabricated `columnName`.
|
|
142
|
+
- `envParamList` names come from config-table / env-param setup, not from user-property metadata.
|
|
143
|
+
|
|
121
144
|
## Output
|
|
122
145
|
|
|
123
146
|
- `list`: `data.items` + `data.total` (snake_case fields: `channel_id` / `channel_name` / `channel_type` / `channel_status` / `creator` / `updater` / `create_time` / `update_time`)
|
|
@@ -130,6 +153,7 @@ ae-cli engage-scene config-channel query-log --project-id <project_id> --channel
|
|
|
130
153
|
|
|
131
154
|
- Risk: `list` / `get` / `query-log` = read; `create` / `update` / `update-status` = write; `delete` = high-risk-write (user confirmation + `--yes`)
|
|
132
155
|
- Discover `channel_id` with `list` first; never invent IDs
|
|
156
|
+
- **User params (`customsParamList`)**: `columnName` must be `user:<user_prop_code>` (e.g. `user:#account_id`). Applies to both webhook and client channels on create/update. Preflight each name with `ae-cli analysis-meta property list/get` (ae-analysis skill) before submit.
|
|
133
157
|
- Enabled channel (`channel_status=1`): only limited fields such as name can change; disable first (`update-status --channel-status 2`) before changing URL, auth, or parameter definitions
|
|
134
158
|
- Delete: disable first, then `delete --yes`
|
|
135
159
|
- Copy: `get` → rename (often append `_copy`) → `create`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# engage-scene config-group
|
|
2
2
|
|
|
3
|
-
> Capability ids: `engage-scene.config-group.{list,batch-add,update,batch-delete}` · Domain: `engage`.
|
|
3
|
+
> Trigger keywords: config center, scene config · Capability ids: `engage-scene.config-group.{list,batch-add,update,batch-delete}` · Domain: `engage`.
|
|
4
4
|
|
|
5
5
|
Scene management / config center — config item group management.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# engage-scene config-item
|
|
2
2
|
|
|
3
|
-
> Capability ids: `engage-scene.config-item.{list,get,create,update,delete}` · Domain: `engage`.
|
|
3
|
+
> Trigger keywords: config center, scene config, config item · Capability ids: `engage-scene.config-item.{list,get,create,update,delete}` · Domain: `engage`.
|
|
4
4
|
|
|
5
5
|
Scene management / config center — config item management.
|
|
6
6
|
|