siluzan-tso-cli 1.1.20-beta.1 → 1.1.20-beta.2

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
@@ -51,7 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
51
51
  siluzan-tso init --force # 强制覆盖已存在文件
52
52
  ```
53
53
 
54
- > **注意**:当前为测试版(1.1.20-beta.1),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.20-beta.2),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -112340,15 +112340,11 @@ async function fetchUrlKeywords(url, keywords, verbose) {
112340
112340
  async function runKeywordSuggest(opts) {
112341
112341
  const config = loadConfig(opts.token);
112342
112342
  const googleApiUrl = requireGoogleApi2(config);
112343
- if (!opts.accountId) {
112344
- console.error("\n\u274C \u8BF7\u63D0\u4F9B\u5E7F\u544A\u8D26\u6237 ID\uFF08-a / --account <mediaCustomerId>\uFF09\n");
112345
- process.exit(1);
112346
- }
112347
112343
  if (opts.keywords.length === 0) {
112348
112344
  console.error("\n\u274C \u8BF7\u81F3\u5C11\u63D0\u4F9B\u4E00\u4E2A\u5173\u952E\u8BCD\uFF08-k / --keyword\uFF09\n");
112349
112345
  process.exit(1);
112350
112346
  }
112351
- const apiUrl = `${googleApiUrl}/keywordrecommendation/recommend/${encodeURIComponent(opts.accountId)}/google`;
112347
+ const apiUrl = `${googleApiUrl}/keywordidea/google`;
112352
112348
  let items = [];
112353
112349
  try {
112354
112350
  const data = await apiFetch2(
@@ -112425,13 +112421,8 @@ async function runKeywordSuggest(opts) {
112425
112421
  }
112426
112422
  var register21 = defineCommand({
112427
112423
  name: "keyword",
112428
- description: "Google \u5173\u952E\u5B57\u63A8\u8350\uFF08\u8D26\u6237\u7EA7\uFF0C\u9700\u6307\u5B9A mediaCustomerId\uFF1BGoogle API \u5730\u5740\u4ECE TSO API \u81EA\u52A8\u63A8\u5BFC\uFF0C\u53EF\u901A\u8FC7 SILUZAN_GOOGLE_API \u73AF\u5883\u53D8\u91CF\u8986\u76D6\uFF09",
112424
+ description: "Google \u5173\u952E\u5B57\u63A8\u8350\uFF08\u5171\u4EAB MCC\uFF0C\u65E0\u9700\u7ED1\u8D26\u6237\uFF1BGoogle API \u5730\u5740\u4ECE TSO API \u81EA\u52A8\u63A8\u5BFC\uFF0C\u53EF\u901A\u8FC7 SILUZAN_GOOGLE_API \u73AF\u5883\u53D8\u91CF\u8986\u76D6\uFF09",
112429
112425
  options: [
112430
- {
112431
- flags: "-a, --account <id>",
112432
- description: "\u5E7F\u544A\u8D26\u6237 mediaCustomerId\uFF08\u7528 list-accounts -m Google -k <id> \u6821\u9A8C\uFF09",
112433
- required: true
112434
- },
112435
112426
  { flags: "-k, --keyword <words>", description: "\u641C\u7D22\u8BCD\uFF0C\u591A\u4E2A\u9017\u53F7\u5206\u9694", required: true },
112436
112427
  { flags: "--url <url>", description: "\u516C\u53F8/\u4EA7\u54C1\u7F51\u5740\uFF08\u586B\u5199\u540E\u89E6\u53D1\u7F51\u5740\u62D3\u8BCD\uFF09" },
112437
112428
  { flags: "--include <words>", description: "\u7ED3\u679C\u5FC5\u987B\u5305\u542B\u7684\u8BCD\uFF0C\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694" },
@@ -112440,7 +112431,6 @@ var register21 = defineCommand({
112440
112431
  handler: async (opts) => {
112441
112432
  await runKeywordSuggest({
112442
112433
  token: opts.token,
112443
- accountId: opts.account,
112444
112434
  keywords: opts.keyword.split(",").map((s) => s.trim()).filter(Boolean),
112445
112435
  url: opts.url,
112446
112436
  include: opts.include,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.20-beta.1",
4
- "publishedAt": 1778824706433
3
+ "version": "1.1.20-beta.2",
4
+ "publishedAt": 1778828241807
5
5
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 拓词、竞品网址拓词、词包清洗、否词、建户关键词结构:**先 Read 本文件**,再按需打开 `references/google-ads.md`(命令参数)与 `references/google-ads-rules/google-ads-keyword-strategy.md`(匹配与分组原则)。
4
4
  >
5
- > **数据口径**:`siluzan-tso keyword` 走网关 `keywordrecommendation/recommend/{mediaCustomerId}/google`(**账户级**关键字创意/体量与竞价参考;**必须**带 `-a/--account`),可选 `--url` 叠加站内网址拓词服务;与账户内 **`google-analysis` 投放表现**不是同一套数据,文档与回复中须区分「市场参考」与「账户实际花费/转化」。
5
+ > **数据口径**:`siluzan-tso keyword` 走网关 `keywordidea/google`(市场侧关键字创意/体量与竞价参考;后端使用共享 MCC + 缓存全局 OAuth Token,**无需用户绑账户**),可选 `--url` 叠加站内网址拓词服务;与账户内 **`google-analysis` 投放表现**不是同一套数据,文档与回复中须区分「市场参考」与「账户实际花费/转化」。
6
6
 
7
7
  ---
8
8
 
@@ -12,9 +12,8 @@
12
12
 
13
13
  | # | 场景 | 编排 |
14
14
  | - | ---- | ---- |
15
- | 0 | **每次调用都必先确认账户 ID**:`siluzan-tso list-accounts -m Google -k <关键词>` 查到 `mediaCustomerId`,作为下面所有 `-a` 的取值;**禁止猜 ID** | |
16
- | 1 | 竞品网址 + 种子拓词:`-a <id>` + 至少一个 `-k` + `--url`,落盘后去重/排序/截 Top N | §1 |
17
- | 2 | 多种子长尾:`-a <id>` + `-k "种子1,种子2,..."` | §2 |
15
+ | 1 | 竞品网址 + 种子拓词:至少一个 `-k` + `--url`,落盘后去重/排序/截 Top N | §1 |
16
+ | 2 | 多种子长尾:`-k "种子1,种子2,..."` | §2 |
18
17
  | 3 | 按规则洗词:月搜索量阈值、排除词根、排除类意图等 | §2(JSON) |
19
18
  | 4 | 账户关键词表现 + 市场侧指标:`google-analysis` keywords → 抽词 → 分批 `keyword` | §3 |
20
19
  | 5 | 搜索词 + 拓词:浪费流量 / 否词线索 | §4 |
@@ -50,14 +49,14 @@
50
49
 
51
50
  1. 选定至少 **1 个种子词** `-k`(品类、品牌或竞品站上的核心产品词均可);**不可**仅传 URL。
52
51
  2. ```bash
53
- siluzan-tso keyword -a <mediaCustomerId> -k "<种子>" --url "<竞品或落地页 URL>" --json-out ./snap-kw
52
+ siluzan-tso keyword -k "<种子>" --url "<竞品或落地页 URL>" --json-out ./snap-kw
54
53
  ```
55
54
  3. 合并去重、按搜索量/CPC/竞争度排序、截断 Top N、写「词包说明」:**由 AI 对落盘 JSON 处理**(CLI 不内置「相关度 Top 200」参数)。
56
55
 
57
56
  ### 2)核心词长尾裂变 + 自定义过滤
58
57
 
59
58
  1. ```bash
60
- siluzan-tso keyword -a <mediaCustomerId> -k "种子1,种子2,..." [--include "<须含片段>"] [--exclude "<排除片段>"] --json-out ./snap-kw
59
+ siluzan-tso keyword -k "种子1,种子2,..." [--include "<须含片段>"] [--exclude "<排除片段>"] --json-out ./snap-kw
61
60
  ```
62
61
  2. 月搜索量阈值、排除求职/零售等意图:**对 JSON 中 `montlySearch`(字段名与网关一致)等做程序或 AI 过滤**;`--exclude` 仅做子串级粗滤。
63
62
 
@@ -67,7 +66,7 @@
67
66
  `siluzan-tso google-analysis -a <mediaCustomerId> --sections keywords --start <S> --end <E> --json-out ./snap-ga`
68
67
  2. 从落盘 JSON 抽取关键词文案(字段路径以该次 **`keywords-*.outline.txt`** 为准)。
69
68
  3. 分批调用(避免单次 body 过大):
70
- `siluzan-tso keyword -a <mediaCustomerId> -k "词A,词B,..." --json-out ./snap-kw-batchN`
69
+ `siluzan-tso keyword -k "词A,词B,..." --json-out ./snap-kw-batchN`
71
70
  4. 报告中**分栏说明**:左列为账户内指标(花费/转化等),右列为 `keyword` 返回的搜索量/CPC/竞争度(市场参考)。
72
71
 
73
72
  ### 4)搜索词辅助(浪费流量 / 否词线索)
@@ -78,8 +77,8 @@
78
77
 
79
78
  ### 5)高商业意图粗筛(出价 + 竞争度 + 搜索量)
80
79
 
81
- 1. `siluzan-tso keyword -a <mediaCustomerId> -k "..." --json-out ./snap-kw`
82
- 2. 对落盘 `items` 按 `averageCpc`(JSON 内常为微单位;表格 stdout 已换算展示)、`competition` / `competitionV2`、`montlySearch` 综合排序截断;**勿承诺**「页首出价高位」等 CLI 未文档化字段,除非当次 outline 中明确存在。
80
+ 1. `siluzan-tso keyword -k "..." --json-out ./snap-kw`
81
+ 2. 对落盘 `items` 按 `averageCpc`(JSON 内常为微单位;表格 stdout 已换算展示)、`competition` / `competitionV2`、`montlySearch` 综合排序截断;此外 `lowTopOfPageBidMicros` / `highTopOfPageBidMicros`(页首出价 20/80 分位,**微单位**)可用于评估合理出价区间。
83
82
 
84
83
  ### 6)Campaign → AdGroup → 关键词 映射表 + 匹配建议
85
84
 
@@ -90,7 +89,7 @@
90
89
  ### 7)拓词结果标准化导出
91
90
 
92
91
  1. ```bash
93
- siluzan-tso keyword -a <mediaCustomerId> -k "..." [--url ...] [--include ...] [--exclude ...] --json-out ./snap-kw
92
+ siluzan-tso keyword -k "..." [--url ...] [--include ...] [--exclude ...] --json-out ./snap-kw
94
93
  ```
95
94
  2. 消费顺序:**先**读该目录下 `cli-manifest*.json` 与 **`*.outline.txt`(字段结构)**,**再**用脚本 `require()` 或聚合逻辑读真实数据 JSON;禁止跳过 outline 猜字段。总约定见 **`references/tips.md`**。
96
95
 
@@ -99,11 +98,9 @@
99
98
  ## 单命令速查
100
99
 
101
100
  ```bash
102
- siluzan-tso keyword \
103
- -a <mediaCustomerId> # 必填:广告账户 ID(list-accounts -m Google -k <id> 校验)
104
- -k "<必填,逗号分隔多词>" \
105
- [--url <url>] [--include <words>] [--exclude <words>] \
106
- [--json] [--json-out <dir>] [--verbose]
101
+ siluzan-tso keyword -k "<必填,逗号分隔多词>" [--url <url>] [--include <words>] [--exclude <words>] [--json] [--json-out <dir>] [--verbose]
107
102
  ```
108
103
 
104
+ **返回字段**(与后端 `Samm.Core.Service.KeywordRecommendation` 对齐):`keyword` / `montlySearch` / `averageCpc`(微单位)/ `competition`(0~1 数值)/ `competitionV2`(`Low/Medium/High/Unknown`)/ `keywordPlanCompetitionLevel`(1~4 整数)/ `lowTopOfPageBidMicros` / `highTopOfPageBidMicros`(页首出价 P20/P80,微单位)/ `source`(`"Google"` 或 `"Cgy"`)。后端已按 `keywordPlanCompetitionLevel` 降序排序。
105
+
109
106
  与只读账户关键词列表、否词 CRUD 的对照仍归 **`references/google-ads.md`** 中 `ad keywords` / `ad keyword-*` 各节。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.20-beta.1",
3
+ "version": "1.1.20-beta.2",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",