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 +1 -1
- package/dist/index.js +2 -12
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/keyword-planner-workflows.md +12 -15
- package/package.json +1 -1
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.
|
|
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}/
|
|
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\
|
|
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,
|
package/dist/skill/_meta.json
CHANGED
|
@@ -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` 走网关 `
|
|
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
|
-
|
|
|
16
|
-
|
|
|
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 -
|
|
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 -
|
|
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 -
|
|
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 -
|
|
82
|
-
2. 对落盘 `items` 按 `averageCpc`(JSON 内常为微单位;表格 stdout 已换算展示)、`competition` / `competitionV2`、`montlySearch`
|
|
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 -
|
|
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-*` 各节。
|