siluzan-tso-cli 1.0.0-beta.46 → 1.0.0-beta.48

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 CHANGED
@@ -20,7 +20,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
20
20
  siluzan-tso init --force # 强制覆盖已存在文件
21
21
  ```
22
22
 
23
- > **注意**:当前为测试版(1.0.0-beta.46),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
23
+ > **注意**:当前为测试版(1.0.0-beta.48),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
24
24
 
25
25
  | 助手 | 建议 `--ai` |
26
26
  |------|-------------|
package/dist/index.js CHANGED
@@ -7468,13 +7468,13 @@ async function runAdGeoList(opts) {
7468
7468
  const config = loadConfig(opts.token);
7469
7469
  const googleApiUrl = requireGoogleApi(config);
7470
7470
  let url;
7471
+ const params = new URLSearchParams();
7471
7472
  if (opts.mode === "report") {
7472
- const params = new URLSearchParams();
7473
- params.set("startDate", toGoogleDate(opts.startDate, -30));
7474
- params.set("endDate", toGoogleDate(opts.endDate, 0));
7475
7473
  url = `${googleApiUrl}/geotargetmanagement/v2/list/${opts.account}?${params}`;
7476
7474
  } else {
7477
- url = `${googleApiUrl}/campaignmanagement/v2/${opts.mode}locations/${opts.account}`;
7475
+ params.set("startDate", toGoogleDate(opts.startDate, -30));
7476
+ params.set("endDate", toGoogleDate(opts.endDate, 0));
7477
+ url = `${googleApiUrl}/campaignmanagement/v2/${opts.mode}locations/${opts.account}?${params}`;
7478
7478
  }
7479
7479
  let data;
7480
7480
  try {
@@ -7486,7 +7486,11 @@ async function runAdGeoList(opts) {
7486
7486
  process.exit(1);
7487
7487
  }
7488
7488
  const rawData = data.data;
7489
- const items = Array.isArray(rawData) ? rawData : rawData?.countries ?? [];
7489
+ let items = Array.isArray(rawData) ? rawData : rawData?.countries ?? [];
7490
+ if (opts.campaignId) {
7491
+ const targetId = opts.campaignId;
7492
+ items = items.filter((item) => String(item["campaignId"] ?? "") === targetId);
7493
+ }
7490
7494
  const modeLabel = { targeted: "\u5DF2\u5B9A\u4F4D", excluded: "\u5DF2\u6392\u9664", report: "\u6D88\u8017\u62A5\u544A" }[opts.mode];
7491
7495
  const n = items.length;
7492
7496
  if (opts.json) {
@@ -11023,7 +11027,7 @@ geoCmd.command("search").description("\u641C\u7D22\u53EF\u7528\u7684\u5730\u7406
11023
11027
  verbose: opts.verbose
11024
11028
  });
11025
11029
  });
11026
- geoCmd.command("list").description("\u67E5\u8BE2\u5730\u7406\u4F4D\u7F6E\u5B9A\u5411\u5217\u8868\uFF08targeted = \u5DF2\u5B9A\u4F4D\uFF1Bexcluded = \u5DF2\u6392\u9664\uFF1Breport = \u6D88\u8017\u62A5\u544A\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").option("--mode <mode>", "\u5217\u8868\u7C7B\u578B\uFF1Atargeted | excluded | report\uFF08\u9ED8\u8BA4 targeted\uFF09", "targeted").option("--start <date>", "\u6D88\u8017\u62A5\u544A\u5F00\u59CB\u65E5\u671F\uFF08\u4EC5 mode=report \u65F6\u6709\u6548\uFF09").option("--end <date>", "\u6D88\u8017\u62A5\u544A\u7ED3\u675F\u65E5\u671F\uFF08\u4EC5 mode=report \u65F6\u6709\u6548\uFF09").option("-t, --token <token>", "Auth Token").option("--json", "JSON \u683C\u5F0F\u8F93\u51FA", false).option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
11030
+ geoCmd.command("list").description("\u67E5\u8BE2\u5730\u7406\u4F4D\u7F6E\u5B9A\u5411\u5217\u8868\uFF08targeted = \u5DF2\u5B9A\u4F4D\uFF1Bexcluded = \u5DF2\u6392\u9664\uFF1Breport = \u6D88\u8017\u62A5\u544A\uFF0C\u53EF\u9009\u6309\u5E7F\u544A\u7CFB\u5217\u8FC7\u6EE4\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").option("--mode <mode>", "\u5217\u8868\u7C7B\u578B\uFF1Atargeted | excluded | report\uFF08\u9ED8\u8BA4 targeted\uFF09", "targeted").option("--campaign-id <id>", "\u53EF\u9009\uFF1A\u6309\u5E7F\u544A\u7CFB\u5217 ID \u8FC7\u6EE4\u7ED3\u679C\uFF08\u6765\u81EA ad campaigns\uFF09").option("--start <date>", "\u5F00\u59CB\u65E5\u671F YYYY-MM-DD\uFF08\u9ED8\u8BA4 30 \u5929\u524D\uFF0C\u6240\u6709\u6A21\u5F0F\u751F\u6548\uFF09").option("--end <date>", "\u7ED3\u675F\u65E5\u671F YYYY-MM-DD\uFF08\u9ED8\u8BA4\u4ECA\u5929\uFF0C\u6240\u6709\u6A21\u5F0F\u751F\u6548\uFF09").option("-t, --token <token>", "Auth Token").option("--json", "JSON \u683C\u5F0F\u8F93\u51FA", false).option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
11027
11031
  if (!["targeted", "excluded", "report"].includes(opts.mode)) {
11028
11032
  console.error("\n\u274C --mode \u53EA\u63A5\u53D7 targeted | excluded | report\n");
11029
11033
  process.exit(1);
@@ -11032,6 +11036,7 @@ geoCmd.command("list").description("\u67E5\u8BE2\u5730\u7406\u4F4D\u7F6E\u5B9A\u
11032
11036
  token: opts.token,
11033
11037
  account: opts.account,
11034
11038
  mode: opts.mode,
11039
+ campaignId: opts.campaignId,
11035
11040
  startDate: opts.start,
11036
11041
  endDate: opts.end,
11037
11042
  json: opts.json,
@@ -21,7 +21,10 @@ description: >-
21
21
 
22
22
  # Siluzan TSO Skill
23
23
 
24
+ 在使用本skill输出的任何内容中,包括但不限于报告,计划,总结,严禁让用户执行本skill提供的命令行。(setup.md)中的命令除外
25
+
24
26
  ## 文档索引
27
+ 实现用户要求时,请先阅读以下对应功能的文档
25
28
  | 文档 | 内容 |
26
29
  |------|------|
27
30
  | `references/setup.md` | 安装 / 登录 / 配置 / 环境切换 |
@@ -31,8 +34,8 @@ description: >-
31
34
  | `references/open-account-by-media.md` | 开户相关 |
32
35
  | `references/google-ads.md` | Google广告创建/修改 |
33
36
  | `references/aigc.md` | 智能创建广告 / `ad smart`、异步批量 `ad batch` |
34
- | `references/reporting.md` | TSO 优化报告(list/create/delete)、推送、网页查看 |
35
- | `references/account-analytics.md` | 各个媒体平台的数据获取 |
37
+ | `references/reporting.md` | Google 账号优化报告(list/create/delete)、推送、网页查看 |
38
+ | `references/account-analytics.md` | (默认情况下报告都使用这个)可获取多个维度的数据,用于账户分析,生成报告或其他类似的业务 |
36
39
  | `references/optimize.md` | `optimize` AI 广告优化记录 |
37
40
  | `references/clue.md` | `clue` TikTok/Meta 线索表单 |
38
41
  | `references/forewarning.md` | 智能预警(含微信通知、`forewarning` 命令) |
@@ -42,134 +45,35 @@ description: >-
42
45
 
43
46
  ---
44
47
 
45
- ## 分析报告生成规则
48
+ ## 报告生成规则
46
49
 
47
50
  两类报告,规则不同:
48
51
 
49
52
  | 类型 | 操作 | 规则 |
50
53
  |------|------|------|
51
54
  | **TSO 优化报告** | `report list` / `report create` / `report push` 等 | 由平台生成,直接操作,不需要额外询问维度 |
52
- | **分析报告**(Agent 撰写) | `google-analysis *` / `report tiktok-*` / `report bing-*` / `report meta-overview` 拉数据后撰写 | 按下方规则执行;子命令与模板见 `references/account-analytics.md` |
55
+ | **一般报告**(Agent 撰写) | `google-analysis *` / `report tiktok-*` / `report bing-*` / `report meta-overview` 拉数据后撰写 | 按下方规则执行;子命令与模板见 `references/account-analytics.md` |
56
+ ### TSO优化报告
57
+ 只支持google平台,除非用户提到 优化报告否则一般不走这个流程
53
58
 
54
- ### 分析报告做法
59
+ ### 一般报告做法(默认做法)
55
60
  1. 询问用户需要生成哪些维度的报告,或直接生成默认报告:包含以下维度:执行摘要、每日投放趋势、月度汇总、广告系列表现、设备分布、地域分布、关键词表现、优化建议
56
61
  2. 需输出 HTML 时:**默认**以 `report-templates/report-template.html` 为样式基准(适用于一切总结性、报告性、汇总性成稿);若场景更适合作正式件、深色、单页等,再从 `report-templates/report-template*.html` 中选或询问用户,并对照 `report-templates/README.md`
57
62
  3. 输出成html后可以转成pdf方便用户查看
58
63
  ---
59
64
 
60
-
61
- ## 业务流程速查
62
-
63
- | 场景 | 参考 |
64
- |------|------|
65
- | 开通新广告账户(Google/TikTok/Bing/Kwai/Yandex) | `references/workflows.md` 流程一 |
66
- | AI 智投草稿 → 发布 Google 广告 | `references/workflows.md` 流程二 |
67
- | 手动搭建 Google 广告(系列→组→词→广告) | `references/workflows.md` 流程三 |
68
- | 查看 AI 优化建议并执行 | `references/workflows.md` 流程四 |
69
- | 创建/管理智能预警规则 | `references/workflows.md` 流程五 |
70
- | TSO 优化报告 → 推送 → 查看链接 | `references/workflows.md` 流程六 |
71
- | CLI 拉数撰写的分析/诊断报告 | `references/workflows.md` 流程六点五 + `references/account-analytics.md` + `report-templates/README.md` |
72
- | 开票申请完整流程 | `references/workflows.md` 流程七 |
73
- | 定期拉取 TikTok/Meta 广告线索 | `references/workflows.md` 流程八 |
74
- | 账户分享 / OAuth 重授权 / 解绑 | `references/workflows.md` 流程九 |
75
- | 日/周消耗数据巡检 | `references/workflows.md` 流程十 |
76
- | 媒体转账到账核查 | `references/workflows.md` 流程十一 |
77
- | TSO 首页看板 CLI 巡检 | `references/workflows.md` 流程十二 + `references/tso-home.md` |
78
- | AIGC 广告方案生成(全 CLI) | `references/workflows.md` 流程十三 |
79
- | 网站诊断与落地页评估 | `references/workflows.md` 流程十四 |
80
- | 账户管理(关闭/BM绑定/BC绑定/激活/邮箱) | `references/workflows.md` 流程十五 |
81
- | 生成合规关键词/广告文案 | `references/google-ads-compliance.md` 全文 |
82
- | 关键词策略与优化 | `references/google-ads-keyword-strategy.md` 全文 |
83
- | 投放后持续优化 | `references/google-ads-keyword-optimization.md` 全文 |
84
- | 创建/优化广告创意 | `references/google-ads-creative-optimization.md` 全文 |
85
- | 设计系列架构/调优投放 | `references/google-ads-campaign-optimization.md` 全文 |
86
- | **创建广告前输出确认方案** | `references/google-ads-launch-plan-template.md` 全文 |
87
-
88
- ---
89
-
90
- ## 常用命令速查
91
-
92
- | 场景 | 命令 |
93
- |------|------|
94
- | 首次登录 | `siluzan-tso login` |
95
- | 查看配置 | `siluzan-tso config show` |
96
- | 查询广告账户 | `siluzan-tso list-accounts -m Google` |
97
- | 账户激活/充值账单明细 | `siluzan-tso account-active-bills -m Google --id <entityId>`(`entityId` 来自 `list-accounts --json`,非 mediaCustomerId;详见 `references/accounts.md`) |
98
- | 查询账户余额 | `siluzan-tso balance -m Google -a <mediaCustomerId>` |
99
- | 查询投放数据 | `siluzan-tso stats -m Google -a <mediaCustomerId>` |
100
- | TSO 首页(网页) | `config show` 取 `webUrl` → `{webUrl}/v3/foreign_trade/tso/home` |
101
- | 查广告主组(TikTok 等取 magKey) | `siluzan-tso open-account list-groups` |
102
- | Google 开户(脚本) | `siluzan-tso open-account google --company "…" --promotion-link "…" --promotion-type b2c ...`(**无需 magKey**) |
103
- | Google 开户时区列表 | `siluzan-tso open-account google-timezones`(可加 `--keyword`) |
104
- | 开户记录(网页,提交开户后确认/查进度;**勿用** `manageAccounts`) | `config show` 取 `webUrl` → `{webUrl}/v3/foreign_trade/tso/accountOpeningHistory` |
105
- | TikTok 开户时区列表 | `siluzan-tso open-account tiktok-timezones`(可加 `--keyword`) |
106
- | TikTok 行业列表 | `siluzan-tso open-account tiktok-industries`(两级结构,传叶子节点 ID) |
107
- | TikTok 注册地列表 | `siluzan-tso open-account tiktok-areas`(`--registered-area` 的合法值) |
108
- | TikTok 开户 | `siluzan-tso open-account tiktok --advertiser-id <magKey> ...` |
109
- | BingV2 行业列表 | `siluzan-tso open-account bing-industries`(`--trade-id` 的合法值) |
110
- | 查询 Google 被封账户(可提现) | `siluzan-tso account withdraw-list` |
111
- | 提交 Google 被封账户提现申请 | `siluzan-tso account withdraw-submit --accounts <entityId>`(**仅 Google**) |
112
- | 添加 OAuth 授权 | `siluzan-tso account auth -m Google` |
113
- | 解除授权 / 解绑 | `siluzan-tso account delink --id <entityId>` |
114
- | Google MCC 绑定 | `siluzan-tso account mcc-bind --customers <mediaCustomerId> --mcc <MCC客户ID>` |
115
- | Google MCC 解绑 | `siluzan-tso account mcc-unbind --customers <mediaCustomerId> --mcc <MCC客户ID>` |
116
- | 账号分享 | `siluzan-tso account share --id <entityId> --phone <手机号>` |
117
- | TikTok 关闭账户 | `siluzan-tso account close --accounts <mediaCustomerId>` |
118
- | Meta BM 绑定 | `siluzan-tso account bm-bind --account-id <mediaCustomerId> --bm-id <bmId>` |
119
- | TikTok BC 绑定 | `siluzan-tso account bc-bind --customers <mediaCustomerId> --bc-ids <bcId>` |
120
- | TikTok BC 解绑 | `siluzan-tso account bc-unbind --customers <mediaCustomerId> --bc-id <bcId>` |
121
- | Google 账户激活(网页) | `{webUrl}/v3/foreign_trade/tso/manageAccounts` |
122
- | AIGC 方案数据准备 | `siluzan-tso ad smart prepare -a <accountId> --url <url> -w "词1,词2"`(详见 `references/aigc.md`) |
123
- | 优化报告列表 | `siluzan-tso report list -m Google` |
124
- | 优化报告推送 | 页 `/dataReport/optimizationReport`:`report push list|create|update|history|receive-emails|start|stop|delete`;记录页 `/dataReport/pushRecord` 对应 `push history --setting-id <entityId>`;详见 `references/reporting.md` |
125
- | TikTok 账户分析(总览/系列/受众等) | `siluzan-tso report tiktok-overview -a <mediaCustomerId> [--json]`(另有 `tiktok-campaigns`、`tiktok-audience` 等,见 `report --help`);详见 `references/account-analytics.md` |
126
- | Bing(BingV2)账户分析 | `siluzan-tso report bing-overview -a <mediaCustomerId> [--json]`(区间不可含今天/昨天;另有 `bing-keywords`、`bing-search-terms` 等,见 `report --help`);详见 `references/account-analytics.md` |
127
- | 充值 / 钱包(网页) | 见 `references/finance.md` |
128
- | 媒体转账记录 | `siluzan-tso transfer list -m Google` |
129
- | 提交账户间转账 | `siluzan-tso transfer create -m Google --out <转出ID> --in <转入ID> --amount <金额>` |
130
- | 开票记录 | `siluzan-tso invoice list` |
131
- | 异步批量 / 智投记录 | `siluzan-tso ad batch list`(详见 `references/aigc.md`) |
132
- | 记录 / 草稿详情 | `siluzan-tso ad batch get --id <id>` |
133
- | 发布草稿 | `siluzan-tso ad batch publish --id <id>` |
134
- | 更新草稿 | `siluzan-tso ad batch update --id <id> --budget <n>` |
135
- | AI 广告优化 | 托管中:`optimize list -a <id>`。已脱管:全量筛 `optimize list --match-media-customer-id <Google客户号> --json` 取批次 `id`,再 `optimize get` / `optimize children --parent-id`;系列列表 `optimize records`(勿依赖 `-a`);详见 `references/optimize.md` |
136
- | Google 广告诊断链接 | `siluzan-tso diagnostic` |
137
- | 线索表单(TikTok) | `siluzan-tso clue -m TikTok -a <advertiserId>` |
138
- | 线索表单(Meta) | `siluzan-tso clue -m Meta -a <pageId>` |
139
- | 智能预警列表 | `siluzan-tso forewarning list -m Google` |
140
- | 创建预警规则 | `siluzan-tso forewarning create -m Google --name "..." --accounts <ids> --field cost --operator GREATER_EQUALS --value 500` |
141
- | Google 广告系列列表 | `siluzan-tso ad campaigns -a <accountId>` |
142
- | Google 广告系列创建(走 AI 创建 API) | `siluzan-tso ad campaign-create -a <accountId> --customer-name "..." --name "..." --budget <n> --bidding MANUAL_CPC --location-ids <id> --adgroup-name "..." --max-cpc <n>` |
143
- | Google 广告组创建 | `siluzan-tso ad adgroup-create -a <accountId> --campaign-id <id> ...` |
144
- | Google 自适应搜索广告编辑(RSA) | `siluzan-tso ad ad-edit -a <accountId> --id <adId>`,可选 `--headlines`、`--descriptions`、`--final-url`、`--path1`、`--path2`、`--status`(Enabled 或 Paused) |
145
- | Google 关键字推荐 | `siluzan-tso keyword -k "running shoes"` |
146
- | Google 搜索关键词编辑 | `siluzan-tso ad keyword-edit -a <accountId> --id <keywordId>`,可选 `--text`、`--match-type`(Broad/Phrase/Exact)、`--max-cpc`、`--final-url`;接口为 `PUT .../keywordmanagement/Keyword/{account}/batch`,成功后 id 可能变化,见 `references/google-ads.md` |
147
- | Google 搜索关键词删除 | `siluzan-tso ad keyword-delete -a <accountId> --id <keywordId> --adgroup-id <adGroupId>`;`DELETE .../keywordmanagement/Keyword/{account}/batch`,body `[{adGroupId,id}]`,成功响应常为空 |
148
- | Google 搜索字词报告 | `siluzan-tso ad search-terms -a <accountId> [--start YYYY-MM-DD] [--end YYYY-MM-DD]`(**仅 Google**,只读) |
149
-
150
- ---
151
-
152
65
  ## 自动更新规则
153
-
154
66
  CLI 命令执行后可能在输出末尾出现以下两种标记,Agent 必须按对应规则处理:
155
-
156
67
  ### `[SILUZAN_FORCE_UPDATE]` — 强制更新(必须,不可跳过)
157
-
158
68
  当前版本已低于最低要求版本,**必须先升级再继续**:
159
-
160
69
  1. 立即执行 `siluzan-tso update`
161
70
  2. 告知用户:当前版本过旧,已自动升级,请重新执行刚才的操作
162
71
  3. 不得在升级前继续执行任何业务命令
163
-
164
72
  ### `[SILUZAN_UPDATE_AVAILABLE]` — 可选更新
165
-
166
73
  有新版本可用,但当前版本仍可正常使用:
167
-
168
74
  1. 执行 `siluzan-tso update`
169
75
  2. 更新完成后继续执行原本的用户任务
170
-
171
76
  > 两种情况下,`siluzan-tso update` 都会同步刷新 Skill 文件,新版本可能包含参数或流程变更。
172
-
173
77
  ---
174
78
 
175
79
  ## AI 行为规范
@@ -178,12 +82,15 @@ CLI 命令执行后可能在输出末尾出现以下两种标记,Agent 必须
178
82
  - **使用 --json 处理数据**:需对返回数据做计算或筛选时,加 `--json`,再用 `node -e` 过滤提取(见 `references/tips.md`)。
179
83
  - **不要猜测账户 ID**:`entityId` ≠ `mediaCustomerId`,两者均来自 `list-accounts`。
180
84
  - **媒体类型区分大小写**:`Google`、`TikTok`、`MetaAd`、`BingV2`、`Kwai`。
181
- - **Google 网关**:使用 `ad`、`keyword`、`account mcc-*` 前,先 `config show` 确认 `googleApiUrl` 已配置。
182
- - **时区**:所有日期按北京时间(UTC+8),`optimize` 命令自动附加 `+08:00`。
183
- - **分页**:默认每页 20 条,数据量大时加 `--page-size 100` 或 `--page` 翻页。
184
- - **充值等网页操作**:先 `config show` 取 `webUrl`,再拼路径引导用户。
185
- - **Google 新开户**:终端用户优先建议 `open-account google-wizard`;说明网页「五步」里**充值激活**必须网页完成。详见 `references/open-account-google-ui.md`。
186
- - **分析报告**:按默认维度直接拉数 + 撰写,同时列出可选追加维度询问用户;见上文「分析报告生成规则」与 `report-templates/google-period-report.md`。
187
- - **优化报告**(`report list/create/push`):由平台生成,直接操作,不额外询问维度。
188
- - **报告内容以 `*.md` 纲要为准**,`report-template*.html` 仅提供样式,内容优先级高于样式;**总结 / 报告 / 汇总类 HTML** 未另指定模板时,默认对齐 `report-templates/report-template.html`(见上文「文档索引」)。
189
- - **一个完整的产品,不应该暴露内部命令**: 除了setup中的login命令,所有命令行工具都是交由你完全代替用户执行。禁止向用户透露任何命令行,参数,代码逻辑
85
+ - **严格禁止任何让用户执行命令的行为**:除了 `setup` 中的 `login` 命令,所有命令行工具都是交由你完全代替用户执行。禁止向用户透露任何命令行、参数或代码逻辑。
86
+ - **具体业务的额外规范**:开户、优化、报告、Google 广告创建等场景的详细约束,请分别在执行前阅读对应的 `references/*.md` 文档。
87
+
88
+
89
+ ## 账户ID示例
90
+ 用于快速确定用户发送账号的类型,xxx是脱敏处理,一般主要通过位数就能确定账号类型,无法确定再查list-account -m [mediatype] -k [id]
91
+ Google: 4545xxx137
92
+ Tiktok: 70083497xxx59820033
93
+ Meta(Facebook): 1716030xxx734076, 6843984xxx14909, 479423xxx752348
94
+ Bing: 138xxx763, 1882xxx80
95
+ Yandex: porg-uthxxxrk
96
+ Kwai: act_1716030xxx734076
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.0.0-beta.46",
4
- "publishedAt": 1774927955987
3
+ "version": "1.0.0-beta.48",
4
+ "publishedAt": 1774946581429
5
5
  }
@@ -171,4 +171,5 @@ siluzan-tso report bing-audience-merged -a <mediaCustomerId>
171
171
 
172
172
  `report-templates` 目录下的 `.html` 文件(如 `report-template.html`、`report-template-academic.html` 等)为**样式参考**,可先生成 HTML 再转为 PDF。
173
173
 
174
- > **分析报告做法**:按 `google-period-report.md`(或对应媒体 `*.md`)中的默认维度拉数撰写,同时列出可选追加维度询问用户。**TSO 优化报告**(`report list` / `create` / `push`)不走此流程,详见 `references/reporting.md`。
174
+ > **分析报告做法**:按 `google-period-report.md`(或对应媒体 `*.md`)中的默认维度拉数撰写,同时列出可选追加维度询问用户。**TSO 优化报告**(`report list` / `create` / `push`)不走此流程,详见 `references/reporting.md`。
175
+ > 报告内容以各 `*.md` 纲要为准,`report-template*.html` 仅提供样式;如未另行指定,所有总结 / 报告 / 汇总类 HTML 默认对齐 `report-templates/report-template.html` 的区块结构与视觉风格。
@@ -20,12 +20,12 @@
20
20
 
21
21
  - 用户可见正文只写业务字段(预算、地域、文案等),不出现命令行、可执行脚本或工具名称
22
22
  - 助手侧须保证每个业务字段可落实为实际创建步骤(映射关系见文末「助手执行计划」);**搜索网络仅限 Google 搜索、关闭搜索合作伙伴与展示网络**为必选策略
23
- - 关键词和广告文案必须通过合规检查(参考 `google-ads-compliance.md` 第十一章)
23
+ - 关键词和广告文案必须通过合规检查(参考 `references/google-ads-rules/google-ads-compliance.md` 第十一章)
24
24
  - 敏感行业须额外标注合规要求(参考 `sensitive-industries.md`)
25
25
 
26
26
  ### 各模块推荐数量一览
27
27
 
28
- 以下与 `google-ads-compliance.md` 第七章、`google-ads-keyword-strategy.md`、`google-ads-creative-optimization.md` 第一章与第五章对齐;**正文结构以本节下「模板正文」中 Google Ads 搜索详细执行方案为准**。生成计划时按推荐条数填满表格,勿仅用少量示例占位。
28
+ 以下与 `references/google-ads-rules/google-ads-compliance.md` 第七章、`references/google-ads-rules/google-ads-keyword-strategy.md`、`references/google-ads-rules/google-ads-creative-optimization.md` 第一章与第五章对齐;**正文结构以本节下「模板正文」中 Google Ads 搜索详细执行方案为准**。生成计划时按推荐条数填满表格,勿仅用少量示例占位。
29
29
 
30
30
  | 模块 | 最少 | 推荐 | 上限 / 说明 |
31
31
  |------|------|------|----------------|
@@ -190,7 +190,7 @@ AI 生成计划时,按以下格式输出。`{{占位符}}` 由 AI 根据用户
190
190
  | … | … | … | … |
191
191
  | Headline 15(上限) | {{文案}} | {{N}} | 自由轮换 |
192
192
 
193
- (Headlines **推荐 12–15 条**;主题分配仍参考 `google-ads-creative-optimization.md` 1.2 六类主题法。)
193
+ (Headlines **推荐 12–15 条**;主题分配仍参考 `references/google-ads-rules/google-ads-creative-optimization.md` 1.2 六类主题法。)
194
194
 
195
195
  | 资产类型 | 广告文案 | 字符数 | 后台设置指令 |
196
196
  |---|---|---|---|
@@ -211,7 +211,7 @@ Display URL:`{{domain}}/{{path1}}/{{path2}}`(Path1/Path2 各 ≤ 15 字符
211
211
 
212
212
  **数量**:Sitelink **推荐 6–8**;Callout **推荐 6–8**;Structured Snippet **至少 1 组,推荐 1–2 组**,每组 **≥4 值**;**CALL** 有合规号码则 **1 条**;**Lead Form** 按业务 **0–1 套**。
213
213
 
214
- **联系方式**:电话走 **CALL**;**无独立「邮箱」附加信息类型**,邮箱用 **Sitelink** 指向 `mailto:` 或联系页(勿写入 RSA 正文,见 `google-ads-compliance.md`)。
214
+ **联系方式**:电话走 **CALL**;**无独立「邮箱」附加信息类型**,邮箱用 **Sitelink** 指向 `mailto:` 或联系页(勿写入 RSA 正文,见 `references/google-ads-rules/google-ads-compliance.md`)。
215
215
 
216
216
  #### 附加链接(Sitelinks)
217
217
 
@@ -241,7 +241,7 @@ Display URL:`{{domain}}/{{path1}}/{{path2}}`(Path1/Path2 各 ≤ 15 字符
241
241
  | **每周** | **砍烂词**:某关键词花费 > {{如:$15}} 且无有效转化(或无线索/WhatsApp 等约定动作),**暂停**;**调出价**:有效 B2B/目标动作词可提价 **10%–15%**,争取**绝对页首展示份额** |
242
242
  | **每月** | 核对 CRM/销售数据,算真实 ROI;对「垃圾线索」来源词**降价或暂停**;评估是否满足切换 **tCPA / 智能出价** 的数据门槛 |
243
243
 
244
- **阶段总览**(与 `google-ads-campaign-optimization.md` 可对照,不替代上表日常动作):
244
+ **阶段总览**(与 `references/google-ads-rules/google-ads-campaign-optimization.md` 可对照,不替代上表日常动作):
245
245
 
246
246
  | 阶段 | 时间 | 重点任务 |
247
247
  |---|---|---|
@@ -269,7 +269,7 @@ Display URL:`{{domain}}/{{path1}}/{{path2}}`(Path1/Path2 各 ≤ 15 字符
269
269
 
270
270
  ## 五、合规检查清单
271
271
 
272
- **条数**:以下 **8 条**逐项勾选(与 `google-ads-compliance.md` 第十一章呼应,不增删序号以免漏检)。
272
+ **条数**:以下 **8 条**逐项勾选(与 `references/google-ads-rules/google-ads-compliance.md` 第十一章呼应,不增删序号以免漏检)。
273
273
 
274
274
  - [ ] 所有 headline ≤ 30 字符(CJK 按 2 字符/字计算)
275
275
  - [ ] 所有 description ≤ 90 字符
@@ -2,21 +2,50 @@
2
2
  > 所属 skill:`siluzan-tso`。
3
3
  ---
4
4
 
5
- ## 相关文档规范
5
+ ## 操作顺序建议
6
+
7
+ > **强制流程总览(AI 必须严格遵守)**
8
+ > 1)先完整阅读所有规则文档 → 2)向用户补齐关键信息提问 → 3)在规则约束下设计广告计划 → 4)按模板输出方案并获得用户「明确确认」 → 5)**仅在已确认的前提下**执行任何结构性改动。
9
+
10
+ ### 第一步:规则文档阅读(不得跳过)
6
11
 
7
- 在创建相关内容时,需要阅读下面的文档以提高广告的整体质量
12
+ 操作开始前,**AI 必须先阅读完下面所有文档**,并在心智模型中内化规则后,才能进入任何「方案规划 / 广告创建 / 调整」步骤,严禁只读 `google-ads-launch-plan-template.md` 就直接出方案。
8
13
 
9
14
  | 文档地址 | 文档内容 |
10
15
  |----------|-----------|
11
- | `references/google-ads/google-ads-keyword-strategy.md` | **关键词策略与优化技巧**:匹配类型策略、分组结构、否定词技巧、出价意图分层、搜索词挖掘、竞品策略、PMax/AI Max 协同、信号污染防治 |
12
- | `references/google-ads/google-ads-keyword-optimization.md` | **关键词持续优化指南**:基于投放数据的迭代优化闭环——指标解读、决策框架(暂停/提价/降价/加否定)、优化节奏、转化归因、预算再分配、衰减检测、竞争响应、CRM 反馈 |
13
- | `references/google-ads/google-ads-creative-optimization.md` | **广告创意与素材优化**:RSA 六类主题法、Ad Strength 评分、文案 A/B 测试、创意疲劳管理、附加信息(Sitelink/Callout/Snippet/Image)优化、DKI/倒计时/IF 函数、落地页 CRO、PMax 创意策略、多语言管理 |
14
- | `references/google-ads/google-ads-campaign-optimization.md` | **广告系列结构与投放优化**:系列类型选择决策树、电商/线索/本地/SaaS 架构模板、出价策略校准与启动协议、地域/设备优化、转化追踪(Enhanced Conversions/离线导入/价值规则)、预算优化、网络设置、实验设计、账户健康诊断 |
15
- | `references/google-ads/google-ads-creation-plan.md` | **广告创建确认方案模板**(**创建前必读**):执行任何广告创建命令前,必须按此模板输出完整方案等待用户确认——系列配置、关键词列表、RSA 文案、附加信息、合规检查、执行计划;含等待确认话术和特殊场景(AIGC/关键词追加/草稿发布)处理规则 |
16
- | `references/google-ads/google-ads-compliance.md` | **Google 广告合规指南**:关键词 & 文案审核通过规则、编辑规范、禁止内容、虚假承诺处理、商标规则、多语言规则 |
17
- | `references/google-ads/google-ads-launch-plan-template.md` | **广告创建计划输出模板**:必须使用这个模板输出广告计划|
18
- | `references/google-ads/sensitive-industries.md` | **敏感行业合规细则**:酒精 / 赌博 / 金融 / 加密 / 医疗 / 法律等 12 个行业的关键词生成规则与地区限制 |
19
- ## 操作顺序建议
16
+ | `references/google-ads-rules/google-ads-keyword-strategy.md` | **关键词策略与优化技巧**:匹配类型策略、分组结构、否定词技巧、出价意图分层、搜索词挖掘、竞品策略、PMax/AI Max 协同、信号污染防治 |
17
+ | `references/google-ads-rules/google-ads-keyword-optimization.md` | **关键词持续优化指南**:基于投放数据的迭代优化闭环——指标解读、决策框架(暂停/提价/降价/加否定)、优化节奏、转化归因、预算再分配、衰减检测、竞争响应、CRM 反馈 |
18
+ | `references/google-ads-rules/google-ads-creative-optimization.md` | **广告创意与素材优化**:RSA 六类主题法、Ad Strength 评分、文案 A/B 测试、创意疲劳管理、附加信息(Sitelink/Callout/Snippet/Image)优化、DKI/倒计时/IF 函数、落地页 CRO、PMax 创意策略、多语言管理 |
19
+ | `references/google-ads-rules/google-ads-campaign-optimization.md` | **广告系列结构与投放优化**:系列类型选择决策树、电商/线索/本地/SaaS 架构模板、出价策略校准与启动协议、地域/设备优化、转化追踪(Enhanced Conversions/离线导入/价值规则)、预算优化、网络设置、实验设计、账户健康诊断 |
20
+ | `references/google-ads-rules/google-ads-launch-plan-template.md` | **广告创建确认方案模板**(**创建前必读**):执行任何广告创建命令前,必须按此模板输出完整方案等待用户确认——系列配置、关键词列表、RSA 文案、附加信息、合规检查、执行计划;含等待确认话术和特殊场景(AIGC/关键词追加/草稿发布)处理规则 |
21
+ | `references/google-ads-rules/google-ads-compliance.md` | **Google 智能体合规总则**:关键词 & 文案审核通过规则、编辑规范、禁止内容、虚假承诺处理、商标规则、多语言规则,**是所有创意/关键词生成的底线约束** |
22
+ | `references/google-ads-rules/sensitive-industries.md` | **敏感行业补充细则**:酒精 / 赌博 / 金融 / 加密 / 医疗 / 法律等 12 个行业的关键词生成规则与地区限制,**当用户所属行业命中时必须优先遵守** |
23
+
24
+ > **AI Agent 具体要求:**
25
+ > - 若当前会话中尚未阅读上述任一文件,AI 必须先主动阅读,再继续下一步流程,而不是直接生成广告计划或文案。
26
+ > - 在首次阅读后,AI 需用自己的话向用户**简要复述**上述文档中与本次任务强相关的 3~5 条关键合规/策略要点,并询问用户是否有本地特殊限制需要补充。
27
+ > - 后续生成的关键词、文案、出价与结构,必须**显式遵守这些规则**;一旦与规则冲突,应以规则优先,并向用户说明原因(例如:某些词因合规或商标问题被自动剔除)。
28
+
29
+ ### 第二步:向用户补齐关键信息
30
+
31
+ 在进入计划设计前,AI 应最少询问并确认以下关键信息(可按需追加):
32
+ - **业务与转化目标**:行业、主营产品/服务、主要转化动作(表单提交 / 电话咨询 / 在线下单 等)。
33
+ - **目标地区与语言**:主要投放国家/地区、语言组合、多语言站点情况。
34
+ - **预算与节奏**:日预算区间、是否有阶段性活动(如大促 / 节日档期)、允许的试错周期。
35
+ - **历史投放情况**:是否已有历史账户/系列/关键词表现数据,是否有必须保留/禁止使用的词或文案。
36
+ - **合规与品牌限制**:是否涉及敏感行业、是否有品牌词 / 合作方词 / 法律风控要求等。
37
+
38
+ ### 第三步:根据规则与信息生成计划并确认
39
+
40
+ 最终需要按照 `references/google-ads-rules/google-ads-launch-plan-template.md`
41
+ 生成对应的计划,与用户沟通确认。**在该方案中,AI 必须:**
42
+ - **引用并遵守**前述规则文档中的关键条款(尤其是合规与敏感行业部分),必要时在方案对应章节标注「来源规则」。
43
+ - **解释核心决定的依据**,例如为何采用某类匹配结构、为何排除某类词、为何推荐某种出价策略。
44
+ - **明确列出风险点与替代方案**,帮助用户在确认前做出知情决策。
45
+
46
+ **只有在用户通过自然语言明确表示「同意 / 确认按此方案执行」之后**,AI 才能真正开始下面的操作;在用户未确认前,不得对账户做任何结构性改动(系列 / 广告组 / 关键词 / 创意)。
47
+
48
+ > **AI Agent 额外要求**:即使用户强烈要求「不用看方案、直接创建」,也必须先按上述模板输出一次完整 Markdown 投放方案,并在对话中列出**已参考的规则文档列表**(`google-ads.md` 与 `references/google-ads-rules/` 目录下的文件),让用户有机会发现问题后再执行,防止误投和配置错误。
20
49
 
21
50
  Google 广告管理的典型工作流:
22
51
 
@@ -986,8 +1015,8 @@ siluzan-tso ad geo remove \
986
1015
  # 第一步:确认配置
987
1016
  siluzan-tso config show
988
1017
 
989
- # 第二步:查询账户,获取 mediaCustomerId(accountId)
990
- siluzan-tso list-accounts -m Google --json
1018
+ # 第二步:查询账户, 确认用户信息
1019
+ siluzan-tso list-accounts -m Google --json -k [mediaCustomerId]
991
1020
  # 假设 accountId = 6326027735
992
1021
 
993
1022
  # 第三步:查看现有广告系列,确认 campaign_id
@@ -15,7 +15,7 @@ siluzan-tso optimize children --parent-id <id> # 广告系列级明细
15
15
  |------|------|
16
16
  | `-a, --account <id>` | 账户 `mediaCustomerId`(走接口筛选;**已脱管账户可能为空**) |
17
17
  | `--match-media-customer-id <id>` | **仅 `list`**:不按接口筛账户,拉全量后自动翻页、客户端匹配 `mediaCustomerId`(适合已不在 Siluzan 托管、但历史上仍有优化批次的 Google 客户号) |
18
- | `--start / --end <date>` | 日期范围(YYYY-MM-DD,自动附加 +08:00 |
18
+ | `--start / --end <date>` | 日期范围(YYYY-MM-DD,所有日期按北京时间(UTC+8)解释,调用时自动附加 `+08:00` 时区偏移) |
19
19
  | `--id <id>` | `optimize get` 专用:UUID。常见来源——**账户批次**:`optimize list --json` 的 `items[].id` / `entityId`;**系列级记录**:`optimize records --json` 的 `items[].id` |
20
20
  | `--parent-id <id>` | 父级 ID(`children` 专用;与账户批次 `list` 里 `items[].id` 一致) |
21
21
  | `--json` | 输出原始 JSON(`list` / `records` / `children`) |
@@ -71,6 +71,10 @@ siluzan-tso config show
71
71
 
72
72
  ---
73
73
 
74
+ ## 使用 webUrl 进行网页操作
75
+
76
+ - 涉及充值、账户激活、首页看板等**必须在网页完成**的操作时,应先通过 `siluzan-tso config show` 获取 `webUrl` 值,再按各业务文档提供的相对路径拼接完整链接,引导用户在浏览器中完成后续步骤。
77
+
74
78
  ## 更新 CLI 与 Skill 文件
75
79
 
76
80
  CLI 在每次命令执行后会静默检查新版本,有更新时提示;**推荐一键升级并刷新 Skill**:
@@ -227,6 +227,13 @@ Object.entries(first ?? {}).forEach(([k,v]) => console.log(' ', k, ':', JSON.str
227
227
 
228
228
  ---
229
229
 
230
+ ## 通用分页与查询建议
231
+
232
+ - 绝大多数列表类命令默认每页 20 条记录,数据量较大时建议显式指定分页参数。
233
+ - 建议在拉取大批量数据时使用命令自带的 `--page-size`(如设置为 `100`)与 `--page` 组合翻页,确认无更多数据后再停止,避免遗漏。
234
+
235
+ ---
236
+
230
237
  ## AI Agent 使用规范
231
238
 
232
239
  - **优先用 `--json` 而不是解析人类友好输出**:文字输出格式可能变化,JSON 结构稳定。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.0.0-beta.46",
3
+ "version": "1.0.0-beta.48",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "type": "module",
6
6
  "bin": {