siluzan-tso-cli 1.1.58 → 1.1.59-beta.1
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 +2 -1
- package/dist/index.js +30 -2
- package/dist/skill/SKILL.md +1 -1
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts-list.md +1 -1
- package/dist/skill/references/accounts/accounts-permissions.md +2 -2
- package/dist/skill/references/accounts/finance.md +1 -1
- package/dist/skill/references/accounts/open-account-by-media.md +1 -1
- package/dist/skill/references/accounts/open-account-google-ui.md +1 -1
- package/dist/skill/references/analytics/keyword-planner-workflows.md +29 -17
- package/dist/skill/references/analytics/rag.md +1 -1
- package/dist/skill/references/analytics/reporting.md +5 -5
- package/dist/skill/references/core/intent-routing.md +4 -2
- package/dist/skill/references/core/setup.md +5 -5
- package/dist/skill/references/core/workflows.md +2 -2
- package/dist/skill/references/misc/tso-home.md +2 -2
- package/dist/skill/scripts/install.ps1 +3 -3
- package/dist/skill/scripts/install.sh +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ HTML 报告模板外部资源:**ECharts** 统一使用 `https://staticpn.siluz
|
|
|
43
43
|
在**用户的目标项目根目录**执行(根据用户使用的助手选择 `--ai`):
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install -g siluzan-tso-cli
|
|
46
|
+
npm install -g siluzan-tso-cli@beta
|
|
47
47
|
siluzan-tso init --ai cursor # 写入 Cursor(默认)
|
|
48
48
|
siluzan-tso init --ai cursor,claude # 同时写入多个平台
|
|
49
49
|
siluzan-tso init --ai all # 写入所有支持的平台
|
|
@@ -51,6 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
|
|
|
51
51
|
siluzan-tso init --force # 强制覆盖已存在文件
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
+
> **注意**:当前为测试版(1.1.59-beta.1),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
54
55
|
|
|
55
56
|
| 助手 | 建议 `--ai` |
|
|
56
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -4049,7 +4049,7 @@ var DEFAULT_API_BASE;
|
|
|
4049
4049
|
var init_defaults = __esm({
|
|
4050
4050
|
"src/config/defaults.ts"() {
|
|
4051
4051
|
"use strict";
|
|
4052
|
-
DEFAULT_API_BASE = "https://tso-api.siluzan.com";
|
|
4052
|
+
DEFAULT_API_BASE = "https://tso-api-ci.siluzan.com";
|
|
4053
4053
|
}
|
|
4054
4054
|
});
|
|
4055
4055
|
|
|
@@ -129429,6 +129429,13 @@ async function runKeywordSuggest(opts) {
|
|
|
129429
129429
|
return !excludes.some((exc) => kw.includes(exc));
|
|
129430
129430
|
});
|
|
129431
129431
|
}
|
|
129432
|
+
const beforeVolumeFilter = items3.length;
|
|
129433
|
+
items3 = filterByMinMonthlySearch(items3, opts.minMonthlySearch);
|
|
129434
|
+
if (opts.minMonthlySearch != null && opts.minMonthlySearch > 0 && items3.length !== beforeVolumeFilter) {
|
|
129435
|
+
console.error(
|
|
129436
|
+
` [keyword] \u6708\u641C\u7D22\u91CF >= ${opts.minMonthlySearch}\uFF1A\u4FDD\u7559 ${items3.length} \u6761\uFF0C\u53BB\u6389 ${beforeVolumeFilter - items3.length} \u6761\uFF08\u7F3A\u641C\u7D22\u91CF\u89C6\u4E3A 0\uFF09`
|
|
129437
|
+
);
|
|
129438
|
+
}
|
|
129432
129439
|
if (accountId) {
|
|
129433
129440
|
try {
|
|
129434
129441
|
const accountNormSet = await fetchAccountPositiveKeywordNormSet(
|
|
@@ -129566,6 +129573,23 @@ function microsItemToBidAmounts(item) {
|
|
|
129566
129573
|
)
|
|
129567
129574
|
};
|
|
129568
129575
|
}
|
|
129576
|
+
function filterByMinMonthlySearch(items3, minMonthlySearch) {
|
|
129577
|
+
if (minMonthlySearch == null || !Number.isFinite(minMonthlySearch) || minMonthlySearch <= 0) {
|
|
129578
|
+
return items3;
|
|
129579
|
+
}
|
|
129580
|
+
return items3.filter((item) => {
|
|
129581
|
+
const volume = Number(item.montlySearch);
|
|
129582
|
+
return Number.isFinite(volume) && volume >= minMonthlySearch;
|
|
129583
|
+
});
|
|
129584
|
+
}
|
|
129585
|
+
function parseMinMonthlySearch(raw) {
|
|
129586
|
+
const value = Number(raw);
|
|
129587
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
129588
|
+
console.error("\n\u274C --min-monthly-search \u5FC5\u987B\u662F\u5927\u4E8E\u7B49\u4E8E 0 \u7684\u6570\u5B57\u3002\n");
|
|
129589
|
+
process.exit(1);
|
|
129590
|
+
}
|
|
129591
|
+
return value;
|
|
129592
|
+
}
|
|
129569
129593
|
function attachBaseCliOptions(cmd) {
|
|
129570
129594
|
attachJsonOutOption(cmd);
|
|
129571
129595
|
cmd.option("--verbose", "\u8F93\u51FA\u8BE6\u7EC6\u9519\u8BEF\u5806\u6808").option("--token <jwt>", "\u4E34\u65F6\u4F7F\u7528\u7684 JWT Token\uFF08\u8986\u76D6 ~/.siluzan/config.json\uFF09");
|
|
@@ -129584,7 +129608,10 @@ function register23(program2) {
|
|
|
129584
129608
|
).option(
|
|
129585
129609
|
"--geo <ids>",
|
|
129586
129610
|
"geoTargetConstant ID\uFF08\u5148 keyword geo-list\uFF1B\u4F8B 2840=\u7F8E\u56FD\uFF09\u3002\u591A\u4E2A ID \u4E3A\u6C47\u603B\u6307\u6807\uFF1B\u5206\u5E02\u573A\u987B\u591A\u6B21\u8C03\u7528\u3001\u6BCF\u6B21\u53EA\u4F20\u4E00\u4E2A"
|
|
129587
|
-
).option("--url <url>", "\u516C\u53F8/\u4EA7\u54C1\u7F51\u5740\uFF08\u586B\u5199\u540E\u89E6\u53D1\u7F51\u5740\u62D3\u8BCD\uFF1B\u4E0E --google-only \u4E92\u65A5\uFF09").option("--google-only", "\u4EC5 Google Keyword Planner\uFF0C\u4E0D\u53E0\u52A0\u7F51\u5740\u62D3\u8BCD").option("--include <words>", "\u7ED3\u679C\u5FC5\u987B\u5305\u542B\u7684\u8BCD\uFF0C\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694").option("--exclude <words>", "\u7ED3\u679C\u4E0D\u5305\u542B\u7684\u8BCD\uFF0C\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694").
|
|
129611
|
+
).option("--url <url>", "\u516C\u53F8/\u4EA7\u54C1\u7F51\u5740\uFF08\u586B\u5199\u540E\u89E6\u53D1\u7F51\u5740\u62D3\u8BCD\uFF1B\u4E0E --google-only \u4E92\u65A5\uFF09").option("--google-only", "\u4EC5 Google Keyword Planner\uFF0C\u4E0D\u53E0\u52A0\u7F51\u5740\u62D3\u8BCD").option("--include <words>", "\u7ED3\u679C\u5FC5\u987B\u5305\u542B\u7684\u8BCD\uFF0C\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694").option("--exclude <words>", "\u7ED3\u679C\u4E0D\u5305\u542B\u7684\u8BCD\uFF0C\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694").option(
|
|
129612
|
+
"--min-monthly-search <n>",
|
|
129613
|
+
"\u4E22\u6389\u6708\u641C\u7D22\u91CF\u4F4E\u4E8E\u8BE5\u503C\u7684\u8BCD\uFF1B\u7F3A\u641C\u7D22\u91CF\u89C6\u4E3A 0\u3002\u7528\u6237\u8981\u6709\u641C\u7D22\u70ED\u5EA6\u65F6\u7528 1"
|
|
129614
|
+
).action(async (opts) => {
|
|
129588
129615
|
await runKeywordSuggest({
|
|
129589
129616
|
token: opts.token,
|
|
129590
129617
|
account: opts.account,
|
|
@@ -129594,6 +129621,7 @@ function register23(program2) {
|
|
|
129594
129621
|
include: opts.include,
|
|
129595
129622
|
exclude: opts.exclude,
|
|
129596
129623
|
googleOnly: opts.googleOnly,
|
|
129624
|
+
minMonthlySearch: opts.minMonthlySearch == null ? void 0 : parseMinMonthlySearch(opts.minMonthlySearch),
|
|
129597
129625
|
jsonOut: opts.jsonOut,
|
|
129598
129626
|
verbose: opts.verbose
|
|
129599
129627
|
});
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: siluzan-tso
|
|
3
|
-
description: 丝路赞 TSO 广告平台(Google/Bing/Yandex/TikTok/MetaAd),凡涉及丝路赞/TSO、投广告、出价预算、广告账户管理,或需要做行业分析/市场分析/行业分析报告(含「写一份 XX 行业报告」「电商/制造/医疗等行业报告」「市场调查/战略市场/KA 市场报告」「竞品/GTM/市场格局/行业趋势」等,无论是否提及丝路赞/广告/客户)须加载本 skill。【§零·最高优先】网址/域名/官网+诊断/检测/监测/评估/体检/报告/符合投放要求/能不能投(含「网络诊断」混说)→P8 website-diagnosis collect(禁纯WebFetch/肉眼看页),禁止P9/P1/W3、禁止A/B/C/D追问;细则见 intent-routing.md §零。【§零·B·次高优先】未命中§零时,行业/市场分析报告类话术→必走P9 market-analysis collect+render出HTML,禁止纯WebSearch/WebFetch在对话里写Markdown/HTML当终稿、禁止改走P8/P1/P4/W5/google-analysis;细则见 references/core/intent-routing.md §零·B。【§零·C·关键词规划】Google Ads/谷歌广告拓词、关键词规划/推荐、Keyword Planner、长尾关键词、月搜索量/搜索量、竞争度、核心词/种子词扩词(含「阅读网址/文章/页面后针对核心词出带搜索量词表」,无论是否提及丝路赞/TSO/账户)→必走W5 keyword -k … --google-only --
|
|
3
|
+
description: 丝路赞 TSO 广告平台(Google/Bing/Yandex/TikTok/MetaAd),凡涉及丝路赞/TSO、投广告、出价预算、广告账户管理,或需要做行业分析/市场分析/行业分析报告(含「写一份 XX 行业报告」「电商/制造/医疗等行业报告」「市场调查/战略市场/KA 市场报告」「竞品/GTM/市场格局/行业趋势」等,无论是否提及丝路赞/广告/客户)须加载本 skill。【§零·最高优先】网址/域名/官网+诊断/检测/监测/评估/体检/报告/符合投放要求/能不能投(含「网络诊断」混说)→P8 website-diagnosis collect(禁纯WebFetch/肉眼看页),禁止P9/P1/W3、禁止A/B/C/D追问;细则见 intent-routing.md §零。【§零·B·次高优先】未命中§零时,行业/市场分析报告类话术→必走P9 market-analysis collect+render出HTML,禁止纯WebSearch/WebFetch在对话里写Markdown/HTML当终稿、禁止改走P8/P1/P4/W5/google-analysis;细则见 references/core/intent-routing.md §零·B。【§零·C·关键词规划】Google Ads/谷歌广告拓词、关键词规划/推荐、Keyword Planner、长尾关键词、月搜索量/搜索量、竞争度、核心词/种子词扩词(含「阅读网址/文章/页面后针对核心词出带搜索量词表」,无论是否提及丝路赞/TSO/账户)→必走W5,一次 keyword -k … --google-only --min-monthly-search,禁止分批洗词脚本,禁止WebSearch/WebFetch编造搜索量当终稿;细则见 references/core/intent-routing.md §零·C。【报告/诊断消歧】其余报告类话术禁止默认某一CLI——行业/市场/战略/行业分析报告→P9 market-analysis(必走collect+render,禁止纯WebSearch代替);Google账户ID+健康诊断→P1 google-ads-diagnosis;只要周期数据/8维/花费转化汇总/Excel→P4;Google/谷歌广告月度报告、月总结与规划、季度报告、Q3汇总、Q4规划、季度汇报、投放季报、客户版、大族模板、下月规划→P10 google-quarterly;Meta/TikTok/Bing周期→P4/P4-FB;多账户对比→P3/P5;OKKI周报→P6;Google询盘→P7;官网+明确要搜索广告方案/campaign JSON→W3;Meta Instant Form 线索广告→W13;仅要词表+搜索量/竞争度→W5;平台优化报告列表/推送→W7;对象仍不清→Read intent-routing.md。【账户】列表/余额/消耗/激活账单(W1)、多账户余额预警 balance-scan(P2)、多户消耗汇总 accounts-digest(P3)、五大媒体开户与进度(W2)、分享/解绑/MCC/BC/BM/权限(W9)。【投放】**搭建仅 Google+Meta**:Google Search/PMax(W3,无 Display;含 CRUD/PMax/batch W4);Meta Instant Form(W13)。TikTok/Bing/Yandex **不能建广告**。另:拓词 W5、optimize W6。【财务】充值/钱包、转账记录、发票/开票/抬头(W8);写操作审计与 restore。【运营】智能预警 forewarning 创建/启停/记录(W10)、TikTok/Meta 线索 clue(W11)、日周巡检(W12)、宿主编排/投放自控/异常监控(hosted-automation)。【其他】RAG 知识库检索、Meta/Facebook 周期与诊断 HTML、Google/Meta 周期 Excel、多账户 google-analysis-batch。
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: 需要 Node.js 18+、已安装 siluzan-tso-cli,通过 send-login-code + login 或 config set 完成鉴权
|
|
6
6
|
metadata:
|
package/dist/skill/_meta.json
CHANGED
|
@@ -170,7 +170,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
|
|
|
170
170
|
| 状态 | 含义 | 下一步操作 |
|
|
171
171
|
| ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
172
172
|
| `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
|
|
173
|
-
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
|
|
173
|
+
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
|
|
174
174
|
| `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
|
|
175
175
|
|
|
176
176
|
---
|
|
@@ -490,7 +490,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
490
490
|
|
|
491
491
|
| 功能 | 媒体 | 网页路径 |
|
|
492
492
|
| --------------------------------------- | ------ | ------------------------------------------------- |
|
|
493
|
-
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
|
|
493
|
+
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
|
|
494
494
|
|
|
495
495
|
**Agent 建议话术**:
|
|
496
496
|
|
|
@@ -499,5 +499,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
499
499
|
siluzan-tso config show # 查看 webUrl 字段
|
|
500
500
|
|
|
501
501
|
# 账户激活(Google)→ 引导至账户管理页
|
|
502
|
-
# https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
|
|
502
|
+
# https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
|
|
503
503
|
```
|
|
@@ -126,7 +126,7 @@ siluzan-tso config show
|
|
|
126
126
|
|
|
127
127
|
### 充值页链接(按媒体 × 类型)
|
|
128
128
|
|
|
129
|
-
链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
|
|
129
|
+
链接模式:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
|
|
130
130
|
|
|
131
131
|
| 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
|
|
132
132
|
| ------------------------- | --------------------- | ------------------------------------------- |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 各媒体开户
|
|
2
2
|
|
|
3
|
-
> 网页链接:`https://www.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
|
|
3
|
+
> 网页链接:`https://www-ci.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
|
|
4
4
|
> 多命令串联见 `references/core/workflows.md` § 流程一。
|
|
5
5
|
|
|
6
6
|
## Contents
|
|
@@ -65,7 +65,7 @@ siluzan-tso open-account google-wizard
|
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
siluzan-tso account-history -m Google
|
|
68
|
-
# 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
|
|
68
|
+
# 审核通过后:config show → https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
---
|
|
@@ -18,6 +18,19 @@
|
|
|
18
18
|
> **拓词命令**读本文;**建户 JSON + validate + create** 读 `references/google-ads/google-ads-campaign-plan.md`。关键词数量规则:`references/google-ads/rules/google-ads-keyword-taxonomy.md`。
|
|
19
19
|
> **数据口径**:`siluzan-tso keyword` 默认走 `keywordidea/google`(共享 MCC,出价 **USD**);传 **`-a <mediaCustomerId>`** 时走 `keywordrecommendation/recommend/{id}/google`,出价币种为 `list-accounts` 的 **`currencyCode`**(如 CNY)。可选 `--url` 叠加 **网址拓词**(`websitereco`)。与 **`google-analysis` 投放表现**不是同一套数据。
|
|
20
20
|
|
|
21
|
+
## 一次拓词(默认)
|
|
22
|
+
|
|
23
|
+
竞品词、产品词、核心词全部放进 **同一次** `-k`。用户要「有搜索热度」时加 `--min-monthly-search 1`(缺搜索量视为 0,会被丢掉)。用户给了具体下限(如约 3000)就用该下限。
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
siluzan-tso keyword -k "scania truck,scania tipper,daf truck,daf tipper" -a 4460948284 --google-only --min-monthly-search 1
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- 命令打印的表就是交付物。不要为洗词、按品牌分桶、逐条查看 JSON 再写一轮 Python / Node。
|
|
30
|
+
- 用户没点名国家时 **不要** `--geo`,也 **不要** `keyword geo-list`。常见 ID 已写在下文,点名了国家再加 `--geo`。
|
|
31
|
+
- 某几个种子完全没有量时,只为这几个种子再补 **一次** `-k`。不要按品牌循环改脚本。
|
|
32
|
+
- 用户明确要 Excel 时才加 `--json-out`,并用 **一次** 脚本把已经滤好的 `items` 写成 xlsx,然后 `present_files`。不要边滤边改脚本。
|
|
33
|
+
|
|
21
34
|
---
|
|
22
35
|
|
|
23
36
|
## 路径选择(拓词前先定分支)
|
|
@@ -51,17 +64,17 @@
|
|
|
51
64
|
|
|
52
65
|
1. 种子词仅来自:**用户已给出的词**、账户内 `google-analysis` 抽词、或(可选)**RAG 知识库**片段——**不要**再联网搜索补种子。
|
|
53
66
|
2. ```bash
|
|
54
|
-
siluzan-tso keyword -k "种子1,种子2,..." --google-only --
|
|
67
|
+
siluzan-tso keyword -k "种子1,种子2,..." --google-only --min-monthly-search 1
|
|
55
68
|
```
|
|
56
|
-
(`--google-only` 即使误传 `--url`
|
|
57
|
-
3. 词包说明首行标注:**数据来源:Google Keyword Planner(`keywordidea/google
|
|
69
|
+
(`--google-only` 即使误传 `--url` 也会忽略网址拓词。命令打印的表就是交付物,不要再写脚本洗词。)
|
|
70
|
+
3. 词包说明首行标注:**数据来源:Google Keyword Planner(`keywordidea/google`)**。用户要 Excel 时才加 `--json-out`,并只写一次导出脚本。
|
|
58
71
|
4. 若 `source` 为 `"Cgy"` 的条目仍存在,须在说明中单独标注,勿称为 Google Planner 原生建议。
|
|
59
72
|
|
|
60
73
|
---
|
|
61
74
|
|
|
62
75
|
## 九类场景索引
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
月搜索量下限用 `--min-monthly-search`,不要再写脚本滤掉 0 搜索量。分组、否词、匹配策略仍可读落盘 JSON;逐步命令见「场景编排」。
|
|
65
78
|
|
|
66
79
|
| # | 场景 | 编排 |
|
|
67
80
|
| --- | ------------------------------------------------------------------------------- | ------------------------------------------------ |
|
|
@@ -69,7 +82,7 @@
|
|
|
69
82
|
| 0 | **先 RAG 再拓词**:客户产品/行业背景 → 种子词与 `--url` | §0 |
|
|
70
83
|
| 1 | 竞品网址 + 种子拓词:至少一个 `-k` + `--url`,落盘后去重/排序/截 Top N | §1 |
|
|
71
84
|
| 2 | 多种子长尾:`-k "种子1,种子2,..."` | §2 |
|
|
72
|
-
| 3 |
|
|
85
|
+
| 3 | 按规则洗词:月搜索量阈值用 `--min-monthly-search`;排除词根用 `--exclude` | §2 |
|
|
73
86
|
| 4 | 账户关键词表现 + 市场侧指标:`google-analysis` keywords → 抽词 → 分批 `keyword` | §3 |
|
|
74
87
|
| 5 | 搜索词 + 拓词:浪费流量 / 否词线索 | §4 |
|
|
75
88
|
| 6 | 高商业意图粗筛:CPC、竞争度、搜索量 | §5 |
|
|
@@ -89,18 +102,15 @@
|
|
|
89
102
|
**执行**:
|
|
90
103
|
|
|
91
104
|
1. (可选)WebFetch 用户 URL,提取产品语境与同义词,**补充** `-k` 种子;**禁止**用文章臆测搜索量。
|
|
92
|
-
2.
|
|
105
|
+
2. 核心词放进 **同一次** `-k`。搜索量下限用 `--min-monthly-search`,不要分批,也不要再写脚本滤搜索量:
|
|
93
106
|
|
|
94
107
|
```bash
|
|
95
|
-
siluzan-tso keyword -k "fish gelatin,porcine gelatin,..." --
|
|
108
|
+
siluzan-tso keyword -k "fish gelatin,porcine gelatin,..." --google-only --min-monthly-search 1500
|
|
96
109
|
```
|
|
97
110
|
|
|
98
|
-
-
|
|
111
|
+
- 用户没点名国家时不要加 `--geo`,也不要先跑 `keyword geo-list`。点名了市场再用下文的常见 ID,例如美国 `--geo 2840`。
|
|
99
112
|
|
|
100
|
-
3.
|
|
101
|
-
- 按 `montlySearch` 过滤(如 1500–6000 视为「约 3000」区间);
|
|
102
|
-
- 按 `competition` / `competitionV2` 筛「中低」(LOW / MEDIUM 或数值阈值,以当次 outline 为准);
|
|
103
|
-
- 每个核心词保留 Top N(用户指定如 30 条);不足时扩大 `-k` 变体或放宽阈值并在说明中标注。
|
|
113
|
+
3. 竞争度「中低」看命令输出的 `competitionV2`(LOW / MEDIUM)。某个核心词一条都没有时,只为这个词再补一次 `-k`。用户指定了每个核心词保留 Top N 时,在这一次结果里截断并在说明里写明。
|
|
104
114
|
4. 交付 Markdown/表格:**英文关键词 | 中文翻译 | 所属核心词 | 月搜索量 | 竞争度 | 目标市场**。目标市场用落盘 JSON 根上的 `targetMarket.label`(例如「美国(2840)」),表题写明 **月搜索量不是全球**。把 `targetMarket.note` 写进表头说明。首行仍注明 **Google Keyword Planner(`keywordidea/google`)**。用户拿官方规划师对数字时,先核对规划师选的是不是同一个国家;选「全球」或别的国家时数字本来就不会一致。
|
|
105
115
|
|
|
106
116
|
**禁止**:纯 WebSearch/WebFetch 输出带「月搜索量」的终稿;禁止跳过 `keyword` CLI。
|
|
@@ -196,9 +206,9 @@ siluzan-tso keyword -k "structural adhesive,SG-200,curtain wall bonding" --url "
|
|
|
196
206
|
### 2)核心词长尾裂变 + 自定义过滤
|
|
197
207
|
|
|
198
208
|
1. ```bash
|
|
199
|
-
siluzan-tso keyword -k "种子1,种子2,..." [--include "<须含片段>"] [--exclude "<排除片段>"] --
|
|
209
|
+
siluzan-tso keyword -k "种子1,种子2,..." [--include "<须含片段>"] [--exclude "<排除片段>"] [--min-monthly-search <下限>] --google-only
|
|
200
210
|
```
|
|
201
|
-
2.
|
|
211
|
+
2. 月搜索量下限用 `--min-monthly-search`,排除求职/零售等词根用 `--exclude`。不要再写脚本把 `montlySearch` 滤一轮。
|
|
202
212
|
|
|
203
213
|
### 3)旧账户关键词 + 叠市场侧 CPC/热度
|
|
204
214
|
|
|
@@ -207,8 +217,8 @@ siluzan-tso keyword -k "structural adhesive,SG-200,curtain wall bonding" --url "
|
|
|
207
217
|
1. 拉账户表现:
|
|
208
218
|
`siluzan-tso google-analysis -a <mediaCustomerId> --sections keywords --start <S> --end <E> --json-out ./snap-ga`
|
|
209
219
|
2. 从落盘 JSON 抽取关键词文案(字段路径以该次 **`keywords-*.outline.txt`** 为准)。
|
|
210
|
-
3.
|
|
211
|
-
`siluzan-tso keyword -k "词A,词B,..." --
|
|
220
|
+
3. 抽出来的词放进 **同一次** `-k`(要有搜索热度时加 `--min-monthly-search 1`)。只有接口明确拒绝过长 body 时才拆成第二次,不要按品牌循环。
|
|
221
|
+
`siluzan-tso keyword -k "词A,词B,..." --google-only --min-monthly-search 1`
|
|
212
222
|
4. 报告中**分栏说明**:左列为账户内指标(花费/转化等),右列为 `keyword` 返回的搜索量/CPC/竞争度(市场参考)。
|
|
213
223
|
|
|
214
224
|
### 4)搜索词辅助(浪费流量 / 否词线索)
|
|
@@ -238,7 +248,7 @@ siluzan-tso keyword -k "structural adhesive,SG-200,curtain wall bonding" --url "
|
|
|
238
248
|
## 单命令速查
|
|
239
249
|
|
|
240
250
|
```bash
|
|
241
|
-
siluzan-tso keyword -k "<必填,逗号分隔多词>" [-a <mediaCustomerId>] [--geo <id[,id...]>] [--url <url>] [--google-only] [--include <words>] [--exclude <words>] [--json-out ./snap] [--json-out <dir>] [--verbose]
|
|
251
|
+
siluzan-tso keyword -k "<必填,逗号分隔多词>" [-a <mediaCustomerId>] [--geo <id[,id...]>] [--url <url>] [--google-only] [--min-monthly-search <n>] [--include <words>] [--exclude <words>] [--json-out ./snap] [--json-out <dir>] [--verbose]
|
|
242
252
|
siluzan-tso keyword geo-list [--country-code <codes>] [--name-contains <text>] [--json-out ./snap] [--json-out <dir>]
|
|
243
253
|
```
|
|
244
254
|
|
|
@@ -246,6 +256,8 @@ siluzan-tso keyword geo-list [--country-code <codes>] [--name-contains <text>] [
|
|
|
246
256
|
|
|
247
257
|
`--google-only`:只调 Google 推荐主接口(有 `-a` 为账户接口,无 `-a` 为 `keywordidea/google`),不叠加 `--url` 的网址拓词;**分支 B(仅 Google)必加**。
|
|
248
258
|
|
|
259
|
+
`--min-monthly-search`:丢掉 `montlySearch` 低于该值的行;字段缺失视为 0。用户要「有搜索热度」时传 `1`。
|
|
260
|
+
|
|
249
261
|
**返回字段**(与后端 `Samm.Core.Service.KeywordRecommendation` 对齐):根级 **`targetMarket`**(`label` 是给用户看的目标市场,如「美国(2840)」;没传 `--geo` 时为「未限定国家」;`note` 说明搜索量不是全球)。根级与每条 **`bidAmountCurrency`**(无账户=`USD`;有账户=`list-accounts` 的 `currencyCode`);`averageCpc` / `lowTopOfPageBid` / `highTopOfPageBid`(微元 ÷1,000,000,**与 `bidAmountCurrency` 一致**)。另有 `keyword` / `montlySearch` / `monthlySearchVolumes` / `competition` / `competitionV2` / `source` 等;**有 `-a` 时**每条多 **`alreadyInAccount`**(`0` | `1`)。交给用户的表必须带 `targetMarket.label`,并写明不是全球。
|
|
250
262
|
|
|
251
263
|
与只读账户关键词列表、否词 CRUD 的对照:查询见 **`google-ads-read.md`**,写入见 **`google-ads-write.md`**。
|
|
@@ -190,9 +190,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
|
|
|
190
190
|
|
|
191
191
|
| 媒体 | 报告类型 | URL 模板 |
|
|
192
192
|
| ------ | ---------------- | ----------------------------------------------------------- |
|
|
193
|
-
| Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
194
|
-
| Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
|
|
195
|
-
| TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
193
|
+
| Google | 日报(Daily) | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
194
|
+
| Google | 小时报(Hourly) | `https://www-ci.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
|
|
195
|
+
| TikTok | 日报 | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
196
196
|
|
|
197
197
|
`entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
|
|
198
198
|
|
|
@@ -205,8 +205,8 @@ siluzan-tso report list -m Google --json-out ./snap
|
|
|
205
205
|
|
|
206
206
|
# 第二步:查看 webUrl
|
|
207
207
|
siluzan-tso config show
|
|
208
|
-
# webUrl: https://www.siluzan.com
|
|
208
|
+
# webUrl: https://www-ci.siluzan.com
|
|
209
209
|
|
|
210
210
|
# 第三步:拼接链接(Google 日报)
|
|
211
|
-
# https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
|
|
211
|
+
# https://www-ci.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
|
|
212
212
|
```
|
|
@@ -113,8 +113,8 @@
|
|
|
113
113
|
### C.2 命中后的 Agent 行为(强制)
|
|
114
114
|
|
|
115
115
|
1. **直接定工作流 W5** → Read `workflows.md` W5 + `analytics/keyword-planner-workflows.md`。
|
|
116
|
-
2. **必走 CLI
|
|
117
|
-
3. **网址/文章**:可用 WebFetch 读页面
|
|
116
|
+
2. **必走 CLI,一次 `-k`**:`siluzan-tso keyword -k "种子1,种子2,..." [--url "<落地页>"] [--geo <id>] --google-only [--min-monthly-search <下限>]`。要官方 Planner 指标时 **必加 `--google-only`**。用户要有搜索热度时 `--min-monthly-search 1`。用户没点名国家时不要 `--geo`,也不要 `keyword geo-list`。
|
|
117
|
+
3. **网址/文章**:可用 WebFetch 读页面 **仅归纳种子词与产品语境**。**月搜索量 / 竞争度 / CPC 只能来自这次 `keyword` 命令的输出**(`montlySearch`、`competition`/`competitionV2`、`averageCpc`)。搜索量下限用 `--min-monthly-search`,不要再写脚本把同一批词滤好几轮。
|
|
118
118
|
4. **交付列**(用户未指定时):英文关键词、中文翻译、所属核心词、月搜索量、竞争度、**目标市场**。目标市场抄落盘 JSON 的 `targetMarket.label`,表题写明 **不是全球**。表头注明 **数据来源:Google Keyword Planner(`keywordidea/google`)**。
|
|
119
119
|
|
|
120
120
|
### C.3 与 W3 / P8 / P9 区分
|
|
@@ -131,6 +131,8 @@
|
|
|
131
131
|
- **禁止**跳过 `keyword`,用 WebSearch / 模型臆测 **月搜索量、竞争度** 充当终稿。
|
|
132
132
|
- **禁止**因用户未提「丝路赞 / TSO / 账户 ID」就认为不适用本 skill。
|
|
133
133
|
- **禁止**把「阅读文章归纳行业词」当作 Planner 指标来源(文章 → 种子;指标 → CLI)。
|
|
134
|
+
- **禁止**把种子拆成多批 `-k`,或为洗词反复写 Python / Node。某个种子没有量时只补一次。
|
|
135
|
+
- **禁止**在用户没点名国家时调用 `keyword geo-list` 或默认加上美国 `--geo 2840`。
|
|
134
136
|
|
|
135
137
|
### C.5 示例(全部 → W5,必走 `keyword` CLI)
|
|
136
138
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
## 安装 CLI
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install -g siluzan-tso-cli
|
|
13
|
+
npm install -g siluzan-tso-cli@beta
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
---
|
|
@@ -64,7 +64,7 @@ siluzan-tso config set --api-key <Key> # 或 config 直接写入
|
|
|
64
64
|
siluzan-tso config set --token <Token> # 备用:设置 JWT Token
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
API Key 获取入口:`https://www.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
67
|
+
API Key 获取入口:`https://www-ci.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
# 第 1 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
|
|
@@ -127,9 +127,9 @@ siluzan-tso config show
|
|
|
127
127
|
|
|
128
128
|
```
|
|
129
129
|
构建环境 : production
|
|
130
|
-
apiBaseUrl : https://tso-api.siluzan.com
|
|
131
|
-
googleApiUrl : https://googleapi.mysiluzan.com
|
|
132
|
-
webUrl : https://www.siluzan.com
|
|
130
|
+
apiBaseUrl : https://tso-api-ci.siluzan.com
|
|
131
|
+
googleApiUrl : https://googleapi-ci.mysiluzan.com
|
|
132
|
+
webUrl : https://www-ci.siluzan.com
|
|
133
133
|
apiKey : abcd****1234
|
|
134
134
|
```
|
|
135
135
|
|
|
@@ -118,8 +118,8 @@
|
|
|
118
118
|
- **必读**:`references/analytics/keyword-planner-workflows.md`;客户/品牌背景先 `references/analytics/rag.md`。
|
|
119
119
|
- **步骤**:
|
|
120
120
|
1. (可选)WebFetch 读用户 URL/文章 **仅归纳种子词**;或 RAG:`rag list --rag-only --json-out ./snap` → `rag query … --json-out ./snap`。
|
|
121
|
-
2. 拓词(**必 `--google-only
|
|
122
|
-
3.
|
|
121
|
+
2. 拓词(**必 `--google-only`**,种子放进同一次 `-k`):`keyword -k "种子1,种子2,..." [--url "<落地页>"] [--geo <id>] --google-only [--min-monthly-search <下限>]`。用户要有搜索热度时下限用 `1`。用户没点名国家时不要 `--geo`,也不要 `keyword geo-list`。
|
|
122
|
+
3. 命令打印的表就是交付物(含 `montlySearch` / `averageCpc` / `competition`)。不要再写脚本按品牌洗词。某个种子没有量时只为它再补一次 `-k`。标注 **数据来源:Google Keyword Planner**。传了 `--geo` 时写明 **目标市场(不是全球)**,抄 `targetMarket.label`。
|
|
123
123
|
- **产物**:表格列含英文词、中文翻译、所属核心词、月搜索量、竞争度、**目标市场**(`targetMarket.label`,并写明不是全球)。指标**仅**来自 CLI;联网/文章语境与 Planner 指标**分列标注**;账户内 `google-analysis keywords` 表现**不可**与市场侧拓词合并。完整 campaign 见 **W3**。
|
|
124
124
|
|
|
125
125
|
---
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
siluzan-tso config show # 取 webUrl
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
首页地址:`https://www.siluzan.com/v3/foreign_trade/tso/home`
|
|
9
|
+
首页地址:`https://www-ci.siluzan.com/v3/foreign_trade/tso/home`
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -25,7 +25,7 @@ siluzan-tso config show # 取 webUrl
|
|
|
25
25
|
|
|
26
26
|
## 推荐话术
|
|
27
27
|
|
|
28
|
-
1. **「和首页一样的总览」** → 打开 `https://www.siluzan.com/v3/foreign_trade/tso/home`。
|
|
28
|
+
1. **「和首页一样的总览」** → 打开 `https://www-ci.siluzan.com/v3/foreign_trade/tso/home`。
|
|
29
29
|
2. **「某个 Google 账户昨天花了多少」** → `list-accounts -m Google` + `stats -m Google -a <id>`。
|
|
30
30
|
3. **「有待充值账户」** → 说明聚合数据在首页;CLI 可 `list-accounts` + `balance` 逐户排查,或引导充值页。
|
|
31
31
|
|
|
@@ -9,11 +9,11 @@ $ErrorActionPreference = 'Stop'
|
|
|
9
9
|
# -- Package info (injected at build time) ------------------------------------
|
|
10
10
|
$PKG_NAME = 'siluzan-tso-cli'
|
|
11
11
|
# PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
|
|
12
|
-
$PKG_VERSION = '1.1.
|
|
12
|
+
$PKG_VERSION = '1.1.59-beta.1'
|
|
13
13
|
$CLI_BIN = 'siluzan-tso'
|
|
14
14
|
$SKILL_LABEL = 'Siluzan TSO'
|
|
15
|
-
$INSTALL_CMD = 'npm install -g siluzan-tso-cli'
|
|
16
|
-
$WEB_BASE = 'https://www.siluzan.com'
|
|
15
|
+
$INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
|
|
16
|
+
$WEB_BASE = 'https://www-ci.siluzan.com'
|
|
17
17
|
|
|
18
18
|
# -- Constants ----------------------------------------------------------------
|
|
19
19
|
$NODE_MAJOR_MIN = 18
|
|
@@ -9,11 +9,11 @@ set -euo pipefail
|
|
|
9
9
|
# -- Package info (injected at build time) ------------------------------------
|
|
10
10
|
readonly PKG_NAME="siluzan-tso-cli"
|
|
11
11
|
# PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
|
|
12
|
-
readonly PKG_VERSION="1.1.
|
|
12
|
+
readonly PKG_VERSION="1.1.59-beta.1"
|
|
13
13
|
readonly CLI_BIN="siluzan-tso"
|
|
14
14
|
readonly SKILL_LABEL="Siluzan TSO"
|
|
15
|
-
readonly INSTALL_CMD="npm install -g siluzan-tso-cli"
|
|
16
|
-
readonly WEB_BASE="https://www.siluzan.com"
|
|
15
|
+
readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
|
|
16
|
+
readonly WEB_BASE="https://www-ci.siluzan.com"
|
|
17
17
|
|
|
18
18
|
# -- Constants ----------------------------------------------------------------
|
|
19
19
|
readonly NODE_MAJOR_MIN=18
|