siluzan-tso-cli 1.1.20-beta.17 → 1.1.20-beta.19
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 -2
- package/dist/skill/SKILL.md +136 -132
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/assets/campaign-create-template.json +19 -8
- package/dist/skill/assets/campaign-create-template.md +73 -3
- package/dist/skill/references/google-ads-campaign-plan.md +2 -2
- package/dist/skill/references/google-ads.md +2 -0
- package/dist/skill/references/keyword-planner-workflows.md +24 -3
- package/dist/skill/scripts/install.ps1 +1 -1
- package/dist/skill/scripts/install.sh +1 -1
- 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.19),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -114185,7 +114185,7 @@ Google Ads \u56FD\u5BB6/\u5730\u533A\u5E38\u91CF\uFF08\u5171 ${n} \u6761\uFF09
|
|
|
114185
114185
|
]
|
|
114186
114186
|
);
|
|
114187
114187
|
console.log(
|
|
114188
|
-
'\n\u62D3\u8BCD\u65F6\u6307\u5B9A\u5730\u533A\uFF1Asiluzan-tso keyword -k "\u79CD\u5B50" --geo <id
|
|
114188
|
+
'\n\u62D3\u8BCD\u65F6\u6307\u5B9A\u5730\u533A\uFF1Asiluzan-tso keyword -k "\u79CD\u5B50" --geo <id>\n \u4F8B\uFF1A\u7F8E\u56FD=2840\uFF0C\u4E2D\u56FD=2826\n \u591A\u4E2A --geo \u4E3A\u6C47\u603B\u6570\u636E\uFF1B\u5206\u5E02\u573A\u5BF9\u6BD4\u8BF7\u591A\u6B21\u8C03\u7528\u3001\u6BCF\u6B21\u53EA\u4F20\u4E00\u4E2A id\n'
|
|
114189
114189
|
);
|
|
114190
114190
|
}
|
|
114191
114191
|
async function runKeywordSuggest(opts) {
|
|
@@ -114377,7 +114377,7 @@ function register21(program2) {
|
|
|
114377
114377
|
attachBaseCliOptions(keywordCmd);
|
|
114378
114378
|
keywordCmd.requiredOption("-k, --keyword <words>", "\u641C\u7D22\u8BCD\uFF0C\u591A\u4E2A\u9017\u53F7\u5206\u9694").option(
|
|
114379
114379
|
"--geo <ids>",
|
|
114380
|
-
"geoTargetConstant ID\
|
|
114380
|
+
"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"
|
|
114381
114381
|
).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").action(async (opts) => {
|
|
114382
114382
|
await runKeywordSuggest({
|
|
114383
114383
|
token: opts.token,
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: siluzan-tso
|
|
3
3
|
description: >-
|
|
4
|
-
Siluzan TSO 广告 skill(siluzan-tso-cli):Google/Bing/Yandex/TikTok/Kwai
|
|
5
|
-
各能力执行细节按本文「功能以及对应文档」表路由到 references/;周期报告、OKKI 周报、Google 账户询盘分析等固定触发模板见 report-templates/ 与 REPORT-WORKFLOW.md,有提供rag(知识库查询)
|
|
4
|
+
Siluzan TSO 广告 skill(siluzan-tso-cli):Google/Bing/Yandex/TikTok/Kwai 账户开户与管理、Google Ads CRUD、数据分析、优化报告、智能预警、TikTok/Meta 线索、发票财务,并提供 RAG 知识库查询,google广告关键词推荐,
|
|
6
5
|
license: MIT
|
|
7
6
|
metadata:
|
|
8
7
|
requires: nodejs,siluzan-tso-cli
|
|
@@ -11,7 +10,7 @@ allowed-tools: Bash(siluzan-tso:*) Read Write
|
|
|
11
10
|
|
|
12
11
|
# Siluzan TSO Skill
|
|
13
12
|
|
|
14
|
-
本 Skill
|
|
13
|
+
本 Skill 只保留任务边界、文档路由与执行规则。业务细节、参数、模板均以 references 文档为准。
|
|
15
14
|
|
|
16
15
|
---
|
|
17
16
|
|
|
@@ -26,67 +25,52 @@ allowed-tools: Bash(siluzan-tso:*) Read Write
|
|
|
26
25
|
irm https://unpkg.com/siluzan-tso-cli@latest/dist/skill/scripts/install.ps1 | iex
|
|
27
26
|
```
|
|
28
27
|
|
|
29
|
-
Windows 注意:部分 Agent 客户端通过 PowerShell / cmd
|
|
28
|
+
Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令时存在兼容问题。命令异常时请改装 [Git for Windows](https://git-scm.com/download/win),在 Git Bash 中执行 Bash 版安装命令。
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
登录与配置见 `references/setup.md`。**401 换凭据时优先「手机号 + 验证码」**:`send-login-code` → `login --phone --code`。
|
|
32
31
|
|
|
33
32
|
---
|
|
34
33
|
|
|
35
|
-
##
|
|
36
|
-
|
|
37
|
-
| 文档 | 功能
|
|
38
|
-
| ----------------------------------------------- |
|
|
39
|
-
| `references/setup.md` |
|
|
40
|
-
| `references/workflows.md` | 多步骤业务流程、跨命令串联
|
|
41
|
-
| `references/tips.md` |
|
|
42
|
-
| `references/accounts.md` |
|
|
43
|
-
| `references/currency.md` |
|
|
44
|
-
| `references/open-account-by-media.md` | 各媒体开户、参数与资料要求
|
|
45
|
-
| `references/google-ads-campaign-plan.md`
|
|
46
|
-
| `references/google-ads.md` | Google Ads
|
|
47
|
-
| `references/keyword-planner-workflows.md` | `keyword` / `google-analysis` 拓词编排(不含建户 JSON 流程)
|
|
48
|
-
| `references/rag.md` |
|
|
49
|
-
| `references/reporting.md` |
|
|
50
|
-
| `references/account-analytics.md` |
|
|
51
|
-
| `references/google-analysis-batch.md` |
|
|
52
|
-
| `references/optimize.md` | AI
|
|
53
|
-
| `references/clue.md` | TikTok / Meta 线索表单
|
|
54
|
-
| `references/forewarning.md` |
|
|
55
|
-
| `references/hosted-automation-user-catalog.md` |
|
|
56
|
-
| `references/finance.md` |
|
|
57
|
-
| `references/write-audit-restore.md` | 本机写审计、`--commit
|
|
58
|
-
| `report-templates/report-template.html` |
|
|
59
|
-
| `report-templates/okki-weekly-google-client.md` |
|
|
60
|
-
| `report-templates/google-inquiry-analysis.md` |
|
|
61
|
-
| `references/geo-continents.json` | 国家中文名 → 7
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
`--commit`:所有写/修改命令都有 commit 字段,填写修改前后的值,方便后期排查或恢复。
|
|
34
|
+
## 功能路由
|
|
35
|
+
|
|
36
|
+
| 文档 | 功能 |
|
|
37
|
+
| ----------------------------------------------- | -------------------------------------------------------------------------- |
|
|
38
|
+
| `references/setup.md` | 安装、登录(手机验证码优先)、配置、环境切换、更新 |
|
|
39
|
+
| `references/workflows.md` | 多步骤业务流程、跨命令串联 |
|
|
40
|
+
| `references/tips.md` | `--json-out` 落盘 + 脚本读盘 + outline 先行(节省上下文) |
|
|
41
|
+
| `references/accounts.md` | 账户列表、余额、消耗、开户记录;授权/解绑/分享/MCC/BC/BM/邮箱授权 |
|
|
42
|
+
| `references/currency.md` | 账户币种 CNY/USD:字段来源、符号、跨币种禁止求和 |
|
|
43
|
+
| `references/open-account-by-media.md` | 各媒体开户、参数与资料要求 |
|
|
44
|
+
| `references/google-ads-campaign-plan.md` | Google 新建搜索系列:双轨入口、7 步流水线、`campaign-validate/create` |
|
|
45
|
+
| `references/google-ads.md` | Google Ads 命令:CRUD、batch、拒审字段 |
|
|
46
|
+
| `references/keyword-planner-workflows.md` | `keyword` / `google-analysis` 拓词编排(不含建户 JSON 流程) |
|
|
47
|
+
| `references/rag.md` | 知识库检索(`rag list` + `rag query`):客户产品/行业事实 |
|
|
48
|
+
| `references/reporting.md` | TSO 优化报告(Google/TikTok)生成、推送、查看 |
|
|
49
|
+
| `references/account-analytics.md` | 账户分析数据拉取与诊断报告模板 |
|
|
50
|
+
| `references/google-analysis-batch.md` | 多账户 × 多维度 Google 数据批处理(`run/resume/status`) |
|
|
51
|
+
| `references/optimize.md` | AI 优化建议记录、详情、历史 |
|
|
52
|
+
| `references/clue.md` | TikTok / Meta 线索表单 |
|
|
53
|
+
| `references/forewarning.md` | 智能预警规则与微信推送 |
|
|
54
|
+
| `references/hosted-automation-user-catalog.md` | 高阶预警:预算/ROI 自控、异常监控、自动优化、自动化风控 |
|
|
55
|
+
| `references/finance.md` | 转账、开票、发票抬头、充值 |
|
|
56
|
+
| `references/write-audit-restore.md` | 本机写审计、`--commit`、补偿 `audit restore-plan/restore-apply` |
|
|
57
|
+
| `report-templates/report-template.html` | HTML 报告样式 |
|
|
58
|
+
| `report-templates/okki-weekly-google-client.md` | OKKI 周报:固定话术 + Agent 写 Excel(无 CLI 写表命令) |
|
|
59
|
+
| `report-templates/google-inquiry-analysis.md` | Google 询盘分析:严格 3 个月窗口 + 用户提供询盘 + 8 Sheet xlsx |
|
|
60
|
+
| `references/geo-continents.json` | 国家中文名 → 7 大洲映射,供询盘分析 Sheet 3/4/6 透视使用 |
|
|
66
61
|
|
|
67
62
|
---
|
|
68
63
|
|
|
69
64
|
## 职责划分
|
|
70
65
|
|
|
71
|
-
| 由 **本 Skill + CLI** 保证
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
| `references/google-ads.md` 等与命令、字段含义对齐
|
|
77
|
-
|
|
78
|
-
具体检查项见 `references/hosted-automation-self-control.md`、异常监控 JSON 键名见 `references/hosted-automation-monitoring-json.md`、自动优化见 `references/hosted-automation-optimize-index.md`、总览见 `references/workflows.md`。
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Skill 使用方式
|
|
83
|
-
|
|
84
|
-
- **报告生成(推荐)**:`google-analysis … --json-out <目录>`(通过 `--sections` 选取维度),**须编写并执行代码**(Node/Python)从目录读取 JSON 完成计算再写出最终文件。详见 `references/account-analytics.md`。**禁止**用 `Read` 扫 JSON 后在对话里手填数,**禁止**在报告脚本中以字面量写死应从 JSON 得到的业务数据。
|
|
85
|
-
- **广告账户**:开户→`references/open-account-by-media.md`;管理→`references/accounts.md`;分析→`references/account-analytics.md`;Google **新建搜索系列**→`references/google-ads-campaign-plan.md`;Google **CRUD/编辑/batch**→`references/google-ads.md`
|
|
86
|
-
- **需要客户/产品背景**(拓词、方案、报告背景段):先 `references/rag.md` → `rag list` + `rag query`,再衔接 `keyword` / `ad` / `google-analysis`
|
|
87
|
-
- **仅调用接口、无需你输出**:优化记录(`references/optimize.md`)、线索表单(`references/clue.md`)、预警(`references/forewarning.md`)、财务(`references/finance.md`)
|
|
66
|
+
| 由 **本 Skill + CLI** 保证 | 由 **宿主客户端 / 外部调度** 负责 |
|
|
67
|
+
| ----------------------------------------------------------------------------------- | ------------------------------------------------------- |
|
|
68
|
+
| 命令拉取所需的结构化字段(Agent:`--json-out <目录>` 落盘后读文件) | 何时触发一轮检查(cron、事件、对话触发) |
|
|
69
|
+
| 写命令语义清晰,文档给出写后如何用读命令复核 | IF 条件(多指标 AND/OR、滑动时间窗)的计算与决策 |
|
|
70
|
+
| 金额、ID、字段口径与文档一致(`*Display`、`entityId` vs `mediaCustomerId`) | 命中后的触达(钉钉/飞书/Slack)与 P1/工单流程 |
|
|
71
|
+
| `references/google-ads.md` 等与命令、字段含义对齐 | 多账户、多系列的批处理循环、限速、失败重试策略 |
|
|
88
72
|
|
|
89
|
-
|
|
73
|
+
具体清单见 `references/hosted-automation-self-control.md`、`hosted-automation-monitoring-json.md`、`hosted-automation-optimize-index.md`、`workflows.md`。
|
|
90
74
|
|
|
91
75
|
---
|
|
92
76
|
|
|
@@ -100,83 +84,100 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
|
|
|
100
84
|
2. 涉及写入/修改/删除的操作必须与用户确认
|
|
101
85
|
3. 按计划执行,说明每步意图
|
|
102
86
|
4. 用成对的读命令复核写入结果;异步任务每 5s 轮询直到完成
|
|
103
|
-
5.
|
|
87
|
+
5. 全部完成后预测用户下一步操作
|
|
88
|
+
|
|
89
|
+
### 执行模式速查
|
|
90
|
+
|
|
91
|
+
- **数据交付类**(`google-analysis` / `stats` / `ad campaigns` 等带 `--json-out`):必须脚本读盘转换,规范见下方「数据转换硬规范」。
|
|
92
|
+
- **客户/产品背景**(拓词、方案、报告背景段):先 `rag list` + `rag query`,再衔接 `keyword` / `ad` / `google-analysis`。
|
|
93
|
+
- **仅调用接口、无需输出转换**:优化记录、线索表单、预警、财务命令。
|
|
104
94
|
|
|
105
95
|
### 硬规范
|
|
106
96
|
|
|
107
|
-
- **账户状态 ≠
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
- **先查账户再操作**:`list-accounts -m [mediaType] -k [mediaCustomerId]`;**涉及金额前必读 `references/currency.md`**,从 `ma.currencyCode` 确定 CNY/USD,**禁止**默认 Google=美金。
|
|
111
|
-
- **使用 `--json-out` 处理数据**:处理顺序:先读 `outlineFile`(schema 描述,扩展名 **`.outline.txt`** 不是 `.json`,**禁止 `require()`**,用 `fs.readFileSync(outlineFile,'utf8')` 取最后一行 TS 式类型字面量即可了解全部字段路径)→ 再让脚本读 `writtenFiles[0]`(真实数据 JSON)做聚合。**outline 通常几百字节、JSON 常见几 MB,先读 outline 能节省 2~3 个数量级的上下文**——尤其多账户多维度场景,直接 `Read` 全量 JSON 几次就把对话窗口塞满了。**禁止**把 outline 当数据、跳过 outline 猜字段、把 outline 内容贴给用户当结论。
|
|
112
|
-
- **CLI 输出忠实**:数值与 ID 须与本次落盘 JSON 或表格 stdout 一致,不编造示例 ID。`data` 为空时只说明「当前返回无记录」并附原始 JSON 路径。
|
|
97
|
+
- **账户状态 ≠ 系列状态**:`stats` / `balance` / `list-accounts` 的 `status` 只表示账户是否可用;系列状态必须来自 `ad campaigns`。
|
|
98
|
+
- **数据时效性**:涉及「今天/当天/今日消耗」「实时消耗排行」前,必读 `references/account-analytics.md` 顶部「数据时效性」表。TikTok / Yandex / BingV2 / Kwai 仍是 `accountsoverview` 同步昨天数据,**不能查今天**。
|
|
99
|
+
- **先查账户再操作**:`list-accounts -m [mediaType] -k [mediaCustomerId]`;涉及金额前必读 `references/currency.md`,从 `ma.currencyCode` 确定 CNY/USD,**禁止**默认 Google=美金。
|
|
113
100
|
- **不猜测账户 ID**:`entityId` ≠ `mediaCustomerId`,两者均来自 `list-accounts`。
|
|
114
101
|
- **媒体类型区分大小写**:`Google`、`TikTok`、`MetaAd`、`BingV2`、`Kwai`。
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
102
|
+
- **CLI 输出忠实**:数值与 ID 须与本次落盘 JSON / stdout 一致,不编造示例 ID;`data` 为空时只说「当前返回无记录」并附 JSON 路径。
|
|
103
|
+
- **破坏性操作必须确认 + `--commit`**:账户解绑/关闭/取消分享、BC/MCC 解绑、删除预警/报告/广告/关键词、发票申请、广告发布等。所有写/修改命令的 `--commit` 字段填写修改前后的值,便于排查或恢复。
|
|
104
|
+
- **不确定时读文档**:先读对应 references 或用 `-h` 查看帮助,不要猜参数。
|
|
105
|
+
- **Google 新建搜索系列**:流程仅在 `references/google-ads-campaign-plan.md` 维护。
|
|
106
|
+
- **Google 开户**:`open-account google-wizard` 仅限真实 TTY;Agent/自动化用非交互 `open-account google ...`,审核进度用 `account-history`。
|
|
118
107
|
- **主动更新**:详见 `references/setup.md`。
|
|
119
108
|
|
|
109
|
+
### 数据转换硬规范
|
|
110
|
+
|
|
111
|
+
本 Skill 下**所有**业务数据均以 CLI `--json-out`(或用户提供的同构 JSON)落盘为唯一真相源。Agent **不得**在对话或脚本里「代替」磁盘数据。
|
|
112
|
+
|
|
113
|
+
| 必须 | 禁止 |
|
|
114
|
+
| ---- | ---- |
|
|
115
|
+
| 编写并**执行** Node/Python 脚本:`readFile` / `require` 读落盘 JSON → 计算 → 写出(报告、xlsx、转换后 JSON、控制台表) | 用 `Read` 读大 JSON 后在回复里手填、改数、心算汇总 |
|
|
116
|
+
| **先 outline 后 JSON**:`outlineFile`(`.outline.txt`,几百字节)→ `writtenFiles[0]`(真实数据 JSON,常几 MB)。outline 末行是 TS 类型字面量,`fs.readFileSync` 读取即可知道全部字段路径 | 跳过 outline 猜字段名;把 outline 当数据贴给用户当结论 |
|
|
117
|
+
| 字段路径以 `outlineFile` + 当次 `writtenFiles` / manifest 为准 | 把国家名、ID、金额、词表、系列名等**业务值**写成源码字面量常量(包括「示例」「默认值」「占位」) |
|
|
118
|
+
| 映射表 / 模板契约在运行时加载(`geo-continents.json`、`campaign-create-template.json`) | 复制配置条目进源码常量 |
|
|
119
|
+
| 脚本输出与落盘 JSON 可复核(同路径、同键) | 用「上次对话记住的数」「示例数」「占位数」写入交付物 |
|
|
120
|
+
|
|
121
|
+
**允许的字面量**(非业务数据):输出目录、Sheet/列标题、技术格式(小数位、日期)、`focusCountries` 等**用户当轮明确给出**的配置(建议落盘为 `config.json` 再读,避免散落源码)。
|
|
122
|
+
|
|
123
|
+
完整示例见 `references/tips.md` § 处理顺序、§ 已有 JSON 时。
|
|
124
|
+
|
|
120
125
|
### 时间范围强制反问
|
|
121
126
|
|
|
122
|
-
|
|
127
|
+
涉及「投放数据 / 消耗 / 报告 / 周报 / 月报 / 优化建议」的任务,用户未给明确起止日期时**必须反问**(示例:A) 最近完整自然周 B) 本月 1 号到昨天 C) 自定义 YYYY-MM-DD)。给出范围后,报告首行标注 `统计区间:YYYY-MM-DD ~ YYYY-MM-DD(货币:XXX)`。
|
|
123
128
|
|
|
124
129
|
**例外**(不反问):
|
|
125
130
|
|
|
126
131
|
- `list-accounts` 全量:用 `--json-out`,注意翻页
|
|
127
132
|
- 「昨天」单日 stats:默认 `Asia/Shanghai` 日历日;先 `list-accounts` 再 `stats`
|
|
128
|
-
- 仅持有 `entityId`:先 `list-accounts`
|
|
133
|
+
- 仅持有 `entityId`:先 `list-accounts` 解出 `mediaCustomerId`,**禁止**把 `entityId` 传给 `stats -a` / `balance -a`
|
|
129
134
|
- `forewarning records`、`invoice list`「本月」、TikTok `clue`「最近一周」:见对应 references
|
|
130
135
|
|
|
131
|
-
|
|
136
|
+
**默认值白名单**(仅用户明确授权「你决定」时使用):
|
|
132
137
|
|
|
133
138
|
| 场景 | 默认窗口 |
|
|
134
139
|
| ----------------------- | ------------------------------- |
|
|
135
|
-
|
|
|
140
|
+
| 日常巡检 / 余额扫描 | `now - 7d` ~ `now - 1d` |
|
|
136
141
|
| 周报 | 上一个完整自然周(周一 ~ 周日) |
|
|
137
142
|
| 月报 | 上一个完整自然月(1 号 ~ 月末) |
|
|
138
143
|
| Google 关键词/系列分析 | `now - 30d` ~ `now - 1d` |
|
|
139
144
|
| MetaAd 账户分析 | 不得默认,必须问 |
|
|
140
145
|
|
|
141
|
-
###
|
|
142
|
-
|
|
143
|
-
- **币种只认接口字段**:`list-accounts` → `items[].ma.currencyCode`;`balance`/`stats`/`google-analysis overview` → 各行或根级 `currencyCode`。**同一媒体可同时有 CNY 与 USD 账户**(尤其 Google),不得凭媒体猜币种。
|
|
144
|
-
- **符号**:`CNY` → **¥**;`USD` → **$**。全文禁止 CNY 用 `$`、USD 用 `¥`。
|
|
145
|
-
- **多账户**:按 `currencyCode` 分表或分币种小计;**禁止**把不同币种金额直接相加。
|
|
146
|
-
- **报告首行**:`统计区间:YYYY-MM-DD ~ YYYY-MM-DD(货币:CNY|USD)`(单账户写该账户币种;多账户在表头或分块标明)。
|
|
147
|
-
- 细则与字段表见 **`references/currency.md`**。
|
|
148
|
-
|
|
149
|
-
### 金额与品牌名
|
|
146
|
+
### 币种、金额与品牌名(速查)
|
|
150
147
|
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
148
|
+
- **币种只认接口字段**:`list-accounts` → `items[].ma.currencyCode`;`balance` / `stats` / `google-analysis overview` → 各行或根级 `currencyCode`。同媒体可同时有 CNY 与 USD 账户(尤其 Google),不得凭媒体猜币种。
|
|
149
|
+
- **符号**:`CNY` → **¥**;`USD` → **$**。多账户按 `currencyCode` 分表或分币种小计,**禁止**跨币种求和。报告首行:`统计区间:YYYY-MM-DD ~ YYYY-MM-DD(货币:CNY|USD)`。
|
|
150
|
+
- **金额单位统一为「元」**:账户/投放金额字段以**元**为单位,报告保留 2 位小数(`¥50.00 CNY` / `$50.00 USD`)。
|
|
151
|
+
- **常用字段**:
|
|
152
|
+
- `ad campaigns --json/--json-out` → `budget`(元,与 `campaign-edit --budget` 同口径)
|
|
153
|
+
- `ad groups --json` → `maxCPCAmountYuan` / `targetCpaAmountYuan`(元)
|
|
154
|
+
- `google-analysis campaigns-*.json` → `budgetAmountYuan` / `campaignTargetCpaYuan` / `maximizeConversionsTargetCpaYuan` / `spend` / `averageCpc` / `costPerConversion`(均元)
|
|
155
|
+
- `keyword --json` → 美元 `averageCpcUSD` / `lowTopOfPageBidUSD` / `highTopOfPageBidUSD`;人民币同名 CNY 字段;根级 `usdToCnyExchangeRate`、`bidAmountCurrency:"USD"`;限定市场用 `keyword geo-list` + `--geo <id>`(**多 id 一次调用 = 汇总指标**;分市场对比须多次调用、每次只传一个 `--geo`,见 `references/keyword-planner-workflows.md`)
|
|
156
|
+
- **品牌名优先级**:(1) 用户明确提供 → (2) `list-accounts.mag.advertiserName` → (3) 用户提供网址 → 域名占位并标注 `[待确认品牌名]`。**严禁**把英文域名翻译为虚构中文品牌。
|
|
157
|
+
- 完整字段表见 `references/currency.md`。
|
|
157
158
|
|
|
158
159
|
### 批量任务硬约束
|
|
159
160
|
|
|
160
|
-
| 任务
|
|
161
|
-
|
|
|
162
|
-
| 多账户余额 / 预算不足预警
|
|
163
|
-
| 多账户投放画像
|
|
164
|
-
| 多账户 × 多维度 Google 数据
|
|
165
|
-
| 多系列诊断
|
|
161
|
+
| 任务 | 推荐命令 | 禁止 |
|
|
162
|
+
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
|
|
163
|
+
| 多账户余额 / 预算不足预警 | `balance-scan -m <媒体> --threshold-days 7`(已知 ID 子集加 `-a id1,id2,...`) | 逐账户 `balance --accounts ...` |
|
|
164
|
+
| 多账户投放画像 | `accounts-digest -m <媒体> [-a ...] --start --end --json-out <dir>`(传 `-a` 跳过翻页;公司名 `advertiserName` 会缺失) | 逐账户 `stats` |
|
|
165
|
+
| 多账户 × 多维度 Google 数据 | 全量:`google-analysis-batch run`(省略 `-a`);2~10 子集:`google-analysis -a id1,id2,...`(自动转发 batch);≥10 子集或需 resume:`google-analysis-batch run -a` | 外层 for-loop;先 `list-accounts -m Google` 再把 ID 拼进 `-a` |
|
|
166
|
+
| 多系列诊断 | `ad campaigns --json-out <dir>` + node 读文件过滤 | 逐系列 `ad campaign-get` |
|
|
166
167
|
|
|
167
|
-
**`google-analysis-batch`
|
|
168
|
+
**`google-analysis-batch` 纪律**(详见 `references/google-analysis-batch.md`):
|
|
168
169
|
|
|
169
|
-
1.
|
|
170
|
-
2.
|
|
170
|
+
1. 拉全量 Google 数据时**省略** `-a`;CLI 内部自动拉清单。
|
|
171
|
+
2. 中断后**必须** `resume --run-id <id>`,**禁止**重新 `run`。
|
|
171
172
|
3. stdout 始终是单行 JSON(`kind=siluzan-tso-batch-summary`);进度读 `progress.json`、轨迹读 `state/tasks.jsonl`。
|
|
172
173
|
4. 退出码:`0` 全成功 / `2` 部分成功 / `3` 全失败或 Token 失效 / `4` 用法错误。
|
|
173
|
-
5. 401
|
|
174
|
+
5. 401 → 整批终止 + `tokenInvalidated:true`;按 `references/setup.md` 优先手机验证码重登录后 `resume`。
|
|
174
175
|
|
|
175
|
-
|
|
176
|
+
无批量命令时(如 117 个 Bing 账户剩余天数):先 `list-accounts --json-out <dir>` 一次性拿全量 → `node -e` 本地计算 → 只对命中账户做后续操作。
|
|
176
177
|
|
|
177
178
|
### 运行时长与进度
|
|
178
179
|
|
|
179
|
-
预估超 2 分钟的任务先告知预计耗时;超 5 分钟未完成时主动检查并告知用户。长任务中断后用对应 resume 入口续跑,**禁止**直接重跑 `run`。
|
|
180
|
+
预估超 2 分钟的任务先告知预计耗时;超 5 分钟未完成时主动检查并告知用户。长任务中断后用对应 `resume` 入口续跑,**禁止**直接重跑 `run`。
|
|
180
181
|
|
|
181
182
|
---
|
|
182
183
|
|
|
@@ -184,7 +185,7 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
|
|
|
184
185
|
|
|
185
186
|
### P1 · 单账户投放画像
|
|
186
187
|
|
|
187
|
-
1.
|
|
188
|
+
1. 反问时间范围(已授权默认时按白名单并写明区间)。
|
|
188
189
|
2. `list-accounts -m Google -k <mediaCustomerId> --json-out ./snap-p1`
|
|
189
190
|
3. `stats -m Google -a <mediaCustomerId> --start <S> --end <D> --json-out ./snap-p1`
|
|
190
191
|
4. `ad campaigns -a <mediaCustomerId> --start <S> --end <D> --json-out ./snap-p1`
|
|
@@ -196,18 +197,18 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
|
|
|
196
197
|
|
|
197
198
|
```bash
|
|
198
199
|
siluzan-tso balance-scan -m BingV2 --threshold-days 7 --json-out ./snap-p2
|
|
199
|
-
# 可选:--min-balance 100
|
|
200
|
+
# 可选:--min-balance 100 / --target-days 60
|
|
200
201
|
```
|
|
201
202
|
|
|
202
203
|
按 `remainingDays` 升序输出;消耗过低的僵尸账户不纳入预警。
|
|
203
204
|
|
|
204
|
-
**已知 ID
|
|
205
|
+
**已知 ID 子集**(轻量画像):
|
|
205
206
|
|
|
206
207
|
```bash
|
|
207
208
|
siluzan-tso balance-scan -m Google -a id1,id2,id3 --json-out ./snap-p2-subset
|
|
208
209
|
```
|
|
209
210
|
|
|
210
|
-
|
|
211
|
+
跳过翻页全部展示(不按阈值丢弃);`hitReason="none"` 表示未触阈值。
|
|
211
212
|
|
|
212
213
|
### P3 · 多账户投放画像汇总
|
|
213
214
|
|
|
@@ -215,9 +216,9 @@ siluzan-tso balance-scan -m Google -a id1,id2,id3 --json-out ./snap-p2-subset
|
|
|
215
216
|
siluzan-tso accounts-digest -m Google -a id1,id2,... --start <S> --end <D> --json-out ./snap-p3
|
|
216
217
|
```
|
|
217
218
|
|
|
218
|
-
1.
|
|
219
|
+
1. 反问时间范围后执行。
|
|
219
220
|
2. 基于落盘 `data.items` 与 `meta.totals` 生成报告,**不要**再逐账户 `stats`。
|
|
220
|
-
3.
|
|
221
|
+
3. 表格覆盖用户请求的**每一个** ID;某 ID 未返回时仍占一行标注「未返回」。
|
|
221
222
|
4. 跨币种账户按 `currencyCode` 分表或分币种小计。
|
|
222
223
|
|
|
223
224
|
### P4 · Google 账户周期报告
|
|
@@ -226,23 +227,13 @@ siluzan-tso accounts-digest -m Google -a id1,id2,... --start <S> --end <D> --jso
|
|
|
226
227
|
2. 按 P1 步骤拿数据,用 `report-templates/google-period-report.md` 模板输出,首行标注统计区间和货币。
|
|
227
228
|
3. 报告须含:账户概览、投放趋势、Top 关键词/系列/地区分布、优化建议。
|
|
228
229
|
|
|
229
|
-
### P6 · OKKI 周报(客户同步话术,数据仍走现有 CLI)
|
|
230
|
-
|
|
231
|
-
> **触发**:用户话术含 **`使用okki周报模板`** / **`OKKI 周报`** / **`okki 周报`** 等,且指向 Google 账户 + 日期区间。
|
|
232
|
-
|
|
233
|
-
1. **不要**按 `google-period-report.md` 展开默认 8 维并追问追加;改读 **`report-templates/okki-weekly-google-client.md`** 全文并按其结构交付。
|
|
234
|
-
2. 确认 `mediaCustomerId` 与 `--start` / `--end`(未给齐则按上文「时间范围强制反问」)。
|
|
235
|
-
3. 同一 `--json-out` 目录执行模板中的命令组合:`list-accounts`(可选但推荐)、`stats`、`balance`、`google-analysis --sections overview,campaigns,keywords,search-terms,campaign-device,campaign-geo`。
|
|
236
|
-
4. **先 outline 后脚本**:见 `references/tips.md`;交付话术 + 多 Sheet `.xlsx`(版式见模板「必选交付」节,**无** CLI 写表命令)。
|
|
237
|
-
5. 遵守硬规范:金额读 `*Yuan`、禁止手填业务数、禁止编造 ID。
|
|
238
|
-
|
|
239
230
|
### P5 · 多账户多维度报告
|
|
240
231
|
|
|
241
232
|
> 适用:账户数 ≥ 2 且需拉取 ≥ 2 个 google-analysis 维度。**禁止**外层 for-loop。
|
|
242
233
|
|
|
243
|
-
|
|
234
|
+
**入口选择**:全量 → 省略 `-a`;2~10 子集 → `google-analysis -a id1,id2,...`(自动转发 batch);≥10 子集或需 resume → `google-analysis-batch run -a id1,id2,...`
|
|
244
235
|
|
|
245
|
-
1.
|
|
236
|
+
1. 反问时间范围 + 维度(默认 `campaigns,geographic,keywords`,可按需追加)。
|
|
246
237
|
2. **执行**:
|
|
247
238
|
|
|
248
239
|
```bash
|
|
@@ -264,15 +255,25 @@ siluzan-tso accounts-digest -m Google -a id1,id2,... --start <S> --end <D> --jso
|
|
|
264
255
|
|
|
265
256
|
3. **中断后只能 resume**:`siluzan-tso google-analysis-batch resume --json-out ./snap-p5 --run-id <runId>`
|
|
266
257
|
4. **只读进度**:`siluzan-tso google-analysis-batch status --json-out ./snap-p5 --run-id <runId>`
|
|
267
|
-
5. **产物消费**:路径在 stdout 摘要的 `writtenFiles` / `outlineFile
|
|
258
|
+
5. **产物消费**:路径在 stdout 摘要的 `writtenFiles` / `outlineFile`;先 outline 后 JSON 再脚本,详见 `references/tips.md` § 处理顺序(批跑禁止 `Read` 全量 JSON 猜字段)。
|
|
259
|
+
|
|
260
|
+
### P6 · OKKI 周报
|
|
268
261
|
|
|
269
|
-
|
|
262
|
+
> **触发**:用户话术含 `使用okki周报模板` / `OKKI 周报` / `okki 周报` 等,且指向 Google 账户 + 日期区间。
|
|
270
263
|
|
|
271
|
-
|
|
264
|
+
1. **不要**按 `google-period-report.md` 展开默认 8 维;改读 `report-templates/okki-weekly-google-client.md` 全文并按其结构交付。
|
|
265
|
+
2. 确认 `mediaCustomerId` 与 `--start` / `--end`(未给齐按「时间范围强制反问」)。
|
|
266
|
+
3. 同一 `--json-out` 目录执行模板中的命令组合:`list-accounts`(可选但推荐)、`stats`、`balance`、`google-analysis --sections overview,campaigns,keywords,search-terms,campaign-device,campaign-geo`。
|
|
267
|
+
4. **先 outline 后脚本** → 交付话术 + 多 Sheet `.xlsx`(版式见模板「必选交付」节,无 CLI 写表命令)。
|
|
268
|
+
5. 遵守硬规范:金额读 `*Yuan`、禁止手填业务数、禁止编造 ID。
|
|
269
|
+
|
|
270
|
+
### P7 · Google 账户询盘分析
|
|
271
|
+
|
|
272
|
+
> **触发**:用户话术含 `Goog账户询盘分析` / `Google 账户询盘分析` / `分析XXX Google账号的询盘效果` / `我给你询盘信息分析Google账号XXX效果`,或同时包含「询盘 + 账户 + Google」三要素。
|
|
272
273
|
>
|
|
273
|
-
> **不要**按 `google-period-report.md` 默认 8 维流程;改读
|
|
274
|
+
> **不要**按 `google-period-report.md` 默认 8 维流程;改读 `report-templates/google-inquiry-analysis.md` 全文。
|
|
274
275
|
|
|
275
|
-
1. **时间窗口强约束**:**严格 3 个月** = 分析月份 + 向前 2 个完整自然月。**禁止**扩展到 7
|
|
276
|
+
1. **时间窗口强约束**:**严格 3 个月** = 分析月份 + 向前 2 个完整自然月。**禁止**扩展到 7 个月(即使样表是 7 个月);样表 4~7 列旧数据在 Sheet 4/6 跨 7 月写时**留空或不写**,仅写当前 3 月。
|
|
276
277
|
2. **询盘资料入场**:
|
|
277
278
|
- **流程 A**(用户已附文件):宿主 Agent 解析任意载体(xlsx/csv/pdf/截图/文本表格)→ 抽取询盘行 → 落盘 `./snap-inquiry/inquiries.json`(字段见模板「询盘字段清单」)。
|
|
278
279
|
- **流程 B**(仅给账户 ID):先反问账户 + 分析月份,同时贴出字段清单 + 1 行示例让用户回贴/上传。**禁止**自行编造询盘数据。
|
|
@@ -291,46 +292,49 @@ siluzan-tso accounts-digest -m Google -a id1,id2,... --start <S> --end <D> --jso
|
|
|
291
292
|
siluzan-tso google-analysis -a <mediaCustomerId> --start <M3S> --end <M3E> \
|
|
292
293
|
--sections campaigns,geographic --json-out ./snap-inquiry/m3
|
|
293
294
|
```
|
|
294
|
-
4. **先 outline
|
|
295
|
-
5. **国家 → 大洲映射**:脚本里读 `references/geo-continents.json`,未命中标 `未知大洲` 不阻塞,结尾打印未命中清单。Sheet 3 国家透视 / Sheet 6 国家维度 / Sheet 4
|
|
296
|
-
6. **必产 8 Sheet xlsx
|
|
297
|
-
7. 遵守 SKILL 硬规范:金额读 `*Yuan` 字段(CLI 出口已统一为元,`budgetAmountYuan` 等同口径)、禁止手填业务数、禁止编造 ID。
|
|
295
|
+
4. **先 outline 后脚本** → 聚合脚本读 JSON → 计算 8 Sheet 数据(同 P6 / `references/tips.md`)。
|
|
296
|
+
5. **国家 → 大洲映射**:脚本里读 `references/geo-continents.json`,未命中标 `未知大洲` 不阻塞,结尾打印未命中清单。Sheet 3 国家透视 / Sheet 6 国家维度 / Sheet 4 下半区切片**均按行的 `countryNameZh` 字段聚合**(CLI 已用 Google Ads geotargets 字典把 city / region 归并到国家,未命中回落 `countryOrRegionZh`)。Sheet 4「重点国 vs 非重点国」按 `focusCountries`(中文国家名数组,运营未指定时默认取分析月询盘 Top1 国家,详见 `report-templates/google-inquiry-analysis.md` 「重点国家配置」节)判桶,用 `focusCountries.includes(countryNameZh)`;**禁止**硬编码任何具体国家名。
|
|
297
|
+
6. **必产 8 Sheet xlsx**:版式 / Sheet 名 / 列定义 / 数值格式以 `report-templates/google-inquiry-analysis.md` 为准;**只能**由 Agent 在当前环境执行脚本(Node `xlsx` / `exceljs` 或 Python `openpyxl`)生成,**禁止**假设 `siluzan-tso … excel` 这类 CLI 子命令存在。
|
|
298
298
|
|
|
299
299
|
---
|
|
300
300
|
|
|
301
301
|
## Tips
|
|
302
302
|
|
|
303
|
-
### 账户 ID
|
|
303
|
+
### 账户 ID 示例(先用位数判断类型,不确定再 `list-accounts -m [mediaType] -k [id]`)
|
|
304
304
|
|
|
305
305
|
- Google: `454xxx5137` 或 `270-xxx-0720`(去掉 `-`)
|
|
306
|
-
-
|
|
307
|
-
- Meta(Facebook): `1716030xxx734076
|
|
308
|
-
- Bing: `138xxx763
|
|
306
|
+
- TikTok: `70083497xxx59820033`
|
|
307
|
+
- Meta(Facebook): `1716030xxx734076`、`6843984xxx14909`、`479423xxx752348`
|
|
308
|
+
- Bing: `138xxx763`、`1882xxx80`
|
|
309
309
|
- Yandex: `porg-uthxxxrk`
|
|
310
310
|
- Kwai: `act_1716030xxx734076`
|
|
311
311
|
|
|
312
312
|
### 常见 HTTP 状态码
|
|
313
313
|
|
|
314
314
|
- **400**:参数错误,查看对应 reference 或用 `-h` 了解命令用法
|
|
315
|
-
- **401**:平台方返回则需用户重新授权;**我方凭据失效**则优先
|
|
316
|
-
- **500
|
|
315
|
+
- **401**:平台方返回则需用户重新授权;**我方凭据失效**则优先 `send-login-code` + `login --phone --code`(TTY 下也可 `siluzan-tso login` / `config set …`),见 `references/setup.md`
|
|
316
|
+
- **500**:服务可能正在部署/升级,建议反馈给 Siluzan 相关人员
|
|
317
317
|
|
|
318
318
|
### 报告模板外部资源
|
|
319
319
|
|
|
320
|
-
|
|
320
|
+
HTML 交付物的 `report-templates/*.html` 可能引用外部 CDN;离线环境需先将资源下载到本地并修改模板引用路径。
|
|
321
321
|
|
|
322
322
|
---
|
|
323
323
|
|
|
324
324
|
## 风险预警与自动化
|
|
325
325
|
|
|
326
|
-
|
|
326
|
+
详见 `references/hosted-automation-user-catalog.md`。加载本 skill 时必须主动向用户介绍:
|
|
327
|
+
|
|
328
|
+
- **预算 & ROI 控制**:单日预算熔断、CPA 飙升自动降价、连续空耗自动暂停
|
|
329
|
+
- **异常监控与报警**:账户封禁检测、落地页死链强停、广告素材拒审提醒、花费异动监控、余额枯竭预警
|
|
330
|
+
- **自动优化**:差广告降价/关停、高转化提价扩量、A/B 测试自动决出胜者
|
|
327
331
|
|
|
328
332
|
---
|
|
329
333
|
|
|
330
334
|
## 消息平台语法规范
|
|
331
335
|
|
|
332
|
-
需 webhook
|
|
336
|
+
需 webhook 等方式发送消息时,先阅读对应平台文档:
|
|
333
337
|
|
|
334
338
|
- 企业微信:https://developer.work.weixin.qq.com/document/path/99110
|
|
335
339
|
- 飞书:https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot
|
|
336
|
-
-
|
|
340
|
+
- 其他平台默认 markdown 输出
|
package/dist/skill/_meta.json
CHANGED
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
"_meta": {
|
|
3
3
|
"schema": "campaign-create/v2",
|
|
4
4
|
"doc": "campaign-create-template.md",
|
|
5
|
-
"note": "以 _ 开头的键仅作说明,CLI 提交前会剥离;字段名一律 PascalCase,直接对齐后端 CampaignCreationRecord + Campaign 契约"
|
|
5
|
+
"note": "以 _ 开头的键仅作说明,CLI 提交前会剥离;字段名一律 PascalCase,直接对齐后端 CampaignCreationRecord + Campaign 契约",
|
|
6
|
+
"agentPitfalls": [
|
|
7
|
+
"campaign-validate 不支持 --json-out, --json ",
|
|
8
|
+
"RSA 须同时写 DestinationUrl 与 Finalurl(后端必填 Finalurl;仅有 DestinationUrl 时 validate 可能仍通过)",
|
|
9
|
+
"SITELINK 须写 AssetFieldType: SITELINK(与 typeV2 一致)",
|
|
10
|
+
"提交前:ad campaign-validate → 用户确认 → ad campaign-create(勿对 validate 加 --json-out)"
|
|
11
|
+
]
|
|
6
12
|
},
|
|
7
13
|
|
|
8
14
|
"account": "REPLACE_mediaCustomerId",
|
|
@@ -16,11 +22,9 @@
|
|
|
16
22
|
|
|
17
23
|
"campaign": {
|
|
18
24
|
"_comment_budget": "金额字段(Budget / TargetSpend_BidCeilingAmount / TargetCpa_BidingAmount / 各 AdGroup.MaxCPCAmount)以主币种「元」填写,CLI 提交前自动 ×100 转「分」",
|
|
19
|
-
|
|
20
25
|
"Name": "Search_Brand_US_2026",
|
|
21
26
|
"StatusV2": "Enabled",
|
|
22
27
|
"ChannelTypeV2": "SEARCH",
|
|
23
|
-
|
|
24
28
|
"BiddingStrategyTypeV2": "TARGET_SPEND",
|
|
25
29
|
"Budget": 100,
|
|
26
30
|
"BudgetShared": false,
|
|
@@ -28,20 +32,16 @@
|
|
|
28
32
|
"BudgetBudgetDeliveryMethodV2": "STANDARD",
|
|
29
33
|
"TargetSpend_BidCeilingAmount": 1.5,
|
|
30
34
|
"ManualCpc_EnhancedCpcEnabled": false,
|
|
31
|
-
|
|
32
35
|
"TargetGoogleSearch": true,
|
|
33
36
|
"TargetSearchNetwork": false,
|
|
34
37
|
"TargetContentNetwork": false,
|
|
35
38
|
"TargetPartnerSearchNetwork": false,
|
|
36
|
-
|
|
37
39
|
"PositiveGeoTargetType": 0,
|
|
38
40
|
"NegativeGeoTargetType": 0,
|
|
39
41
|
"DSADomainName": "",
|
|
40
42
|
"DSALanguageCode": "en",
|
|
41
|
-
|
|
42
43
|
"StartTime": "2026-04-01",
|
|
43
44
|
"EndTime": "2037-12-30",
|
|
44
|
-
|
|
45
45
|
"targetedLocations": [{ "id": "2840", "bidModifier": 0, "bidModifierSpecified": false }],
|
|
46
46
|
"excludedLocations": [],
|
|
47
47
|
"excludedIpAddresses": [],
|
|
@@ -72,6 +72,16 @@
|
|
|
72
72
|
"typeV2": "CALL",
|
|
73
73
|
"AssetFieldType": "CALL",
|
|
74
74
|
"Properties": { "ContryCode": "US", "PhoneNumber": "+1 800-555-0100" }
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"typeV2": "SITELINK",
|
|
78
|
+
"Level": "Campaign",
|
|
79
|
+
"Properties": {
|
|
80
|
+
"Text": "About Us",
|
|
81
|
+
"Line2": "xxx",
|
|
82
|
+
"Line3": "xxxx",
|
|
83
|
+
"DestinationUrl": "https://www.example.com/about"
|
|
84
|
+
}
|
|
75
85
|
}
|
|
76
86
|
],
|
|
77
87
|
|
|
@@ -107,10 +117,11 @@
|
|
|
107
117
|
|
|
108
118
|
"AdsForBatchJob": [
|
|
109
119
|
{
|
|
110
|
-
"
|
|
120
|
+
"_comment_finalurl": "Finalurl 与 DestinationUrl 填相同 URL;勿只写 DestinationUrl(BatchJob 会报 Finalurl 缺失)",
|
|
111
121
|
"TypeV2": "RESPONSIVE_SEARCH_AD",
|
|
112
122
|
"DestinationUrl": "https://www.example.com/products",
|
|
113
123
|
"Finalurl": "https://www.example.com/products",
|
|
124
|
+
"AdTitle": null,
|
|
114
125
|
"Path1": "products",
|
|
115
126
|
"Path2": "brand",
|
|
116
127
|
"headlinePart1": "Brand Name Official Store",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**`ad campaign-create` 提交前**,CLI 在 JSON 原文之外额外处理(不影响 validate 读到的「元」口径):
|
|
8
8
|
|
|
9
|
-
1. 剥除以 `_` 开头的注解键(如 `_meta`、`_comment_budget`);
|
|
9
|
+
1. 剥除以 `_` 开头的注解键(如 `_meta`、`_comment_budget`、`_comment_finalurl`);
|
|
10
10
|
2. 外层 body:`account` → 数字 `customerId`;补全 `KeywordRecommendationsV2`(按广告组名,`Value` 可为 `[]`);`googleDataRecordId` 缺省为 `""`(与 Web 智投一致);
|
|
11
11
|
3. `campaign` 金额字段「元」→「分」(×100);
|
|
12
12
|
4. `ExtensionsForBatchJob` 中 SITELINK 的 `Properties` 规范化(见下文「SITELINK」)。
|
|
@@ -15,12 +15,78 @@ JSON 模板:同目录 [`campaign-create-template.json`](campaign-create-templa
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## Agent 常见坑(实战)
|
|
19
|
+
|
|
20
|
+
> 摘自真实创建流水:多次 `--json-out` 误用、validate 通过但 create 因 `Finalurl` 失败。提交前对照本表,避免重复踩坑。
|
|
21
|
+
|
|
22
|
+
### CLI 参数(勿混用)
|
|
23
|
+
|
|
24
|
+
| 命令 | 支持 `--json-out`? | 推荐用法 |
|
|
25
|
+
| ---- | :-----------------: | -------- |
|
|
26
|
+
| `ad campaign-validate` | **否** | `siluzan-tso ad campaign-validate --config-file ./campaign.json` 或加 `--json`;规范化输出用 `--write-normalized ./campaign.normalized.json` |
|
|
27
|
+
| `ad campaign-create` | **是**(较新版本) | 落盘任务响应:`--json-out ./snap-campaign`;与 `--json` 互斥。若报 `unknown option --json-out`,升级 `siluzan-tso` 或暂用 `--json` |
|
|
28
|
+
| `ad batch get` / `ad batch diff` | **是** | 轮询与 diff 结果落盘,见 `references/tips.md` |
|
|
29
|
+
|
|
30
|
+
**禁止**:对 `campaign-validate` 加 `--json-out`(会报参数不支持,浪费多轮重试)。
|
|
31
|
+
|
|
32
|
+
### RSA 落地页:`Finalurl` 必填
|
|
33
|
+
|
|
34
|
+
后端 BatchJob **要求**每条 `AdsForBatchJob[]` 带 **`Finalurl`**(小写 url)。仅写 `DestinationUrl` 时:
|
|
35
|
+
|
|
36
|
+
- `ad campaign-validate` **可能仍显示通过**(校验用 `Finalurl ?? DestinationUrl` 只检查 URL 格式,不强制字段存在);
|
|
37
|
+
- `ad campaign-create` / BatchJob **会失败**(报 `Finalurl` 缺失类错误)。
|
|
38
|
+
|
|
39
|
+
**正确写法**(两字段同值):
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
"DestinationUrl": "https://www.example.com/products",
|
|
43
|
+
"Finalurl": "https://www.example.com/products",
|
|
44
|
+
"AdTitle": null
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
生成 JSON 后可用脚本批量补全(勿手改几十条):
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
# 与实战 fix_campaign_v2.py 同逻辑:缺 Finalurl 则从 DestinationUrl 复制
|
|
51
|
+
for ag in camp.get("AdGroupsForBatchJob", []):
|
|
52
|
+
for ad in ag.get("AdsForBatchJob", []):
|
|
53
|
+
if "Finalurl" not in ad:
|
|
54
|
+
ad["Finalurl"] = ad.get("DestinationUrl", "")
|
|
55
|
+
if "AdTitle" not in ad:
|
|
56
|
+
ad["AdTitle"] = None
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### SITELINK 附加信息
|
|
60
|
+
|
|
61
|
+
每条 `typeV2: "SITELINK"` 须同时有 **`AssetFieldType": "SITELINK"`**(模板已示例)。缺省时部分账户 BatchJob 会失败。
|
|
62
|
+
|
|
63
|
+
### 推荐命令顺序(单系列)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
siluzan-tso ad campaign-validate --config-file ./campaign.json
|
|
67
|
+
# 用户确认方案后:
|
|
68
|
+
siluzan-tso ad campaign-create --config-file ./campaign.json --json-out ./snap-campaign
|
|
69
|
+
siluzan-tso ad batch get --id <taskId> --config-file ./campaign.json --json-out ./snap-campaign
|
|
70
|
+
siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json --json-out ./snap-campaign
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`Creating` 时每 5–10s 轮询 `batch get`,**勿**重复 `campaign-create`。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
18
77
|
## Agent 编排
|
|
19
78
|
|
|
20
79
|
流程、双轨入口、`campaign-validate` 门禁与分层规则阅读:**`references/google-ads-campaign-plan.md`**(本文件仅字段契约,不重复流水线)。
|
|
21
80
|
|
|
22
81
|
一个 JSON 对应一个广告系列;多系列使用多个 JSON 文件(可选 `campaign-manifest.json`,见 campaign-plan)。
|
|
23
82
|
|
|
83
|
+
**提交前自检(代码改 JSON,不手填 Markdown):**
|
|
84
|
+
|
|
85
|
+
1. 每条 RSA:`Finalurl` 与 `DestinationUrl` 同值;可选 `AdTitle: null`;
|
|
86
|
+
2. 每条 SITELINK:`AssetFieldType` = `SITELINK`;
|
|
87
|
+
3. `ad campaign-validate` 通过(**不加** `--json-out`);
|
|
88
|
+
4. 用户确认后再 `campaign-create`。
|
|
89
|
+
|
|
24
90
|
---
|
|
25
91
|
|
|
26
92
|
## 外层字段(CampaignCreationRecord)
|
|
@@ -111,6 +177,8 @@ JSON 模板:同目录 [`campaign-create-template.json`](campaign-create-templa
|
|
|
111
177
|
|
|
112
178
|
| 字段 | 类型 | 说明 |
|
|
113
179
|
| ---- | ---- | ---- |
|
|
180
|
+
| `typeV2` | string | 必填 `SITELINK` |
|
|
181
|
+
| `AssetFieldType` | string | **必填** `SITELINK`(与 `typeV2` 一致;缺省会导致部分账户 BatchJob 失败) |
|
|
114
182
|
| `level` / `Level` | string | 系列级填 `Campaign` |
|
|
115
183
|
| `Properties` | object | 键值均为字符串;见下表 |
|
|
116
184
|
| `Properties.Text` | string | 链接文字(必填)。可写 `LinkText`,提交前会映射为 `Text` |
|
|
@@ -147,7 +215,9 @@ JSON 模板:同目录 [`campaign-create-template.json`](campaign-create-templa
|
|
|
147
215
|
| 字段 | 类型 | 必填 | 说明 |
|
|
148
216
|
| ----------------------------- | -------- | :--: | --------------------------------------------- |
|
|
149
217
|
| `TypeV2` | string | | RSA 填 `RESPONSIVE_SEARCH_AD` |
|
|
150
|
-
| `DestinationUrl`
|
|
218
|
+
| `DestinationUrl` | string | ✅ | 展示/编辑用落地页 URL |
|
|
219
|
+
| `Finalurl` | string | ✅ | **后端 BatchJob 必填**;与 `DestinationUrl` 填**相同** URL。勿只写前者——validate 可能仍通过,create 会失败 |
|
|
220
|
+
| `AdTitle` | null \| string | | 可选;无标题时写 `null`(与 Web 智投一致) |
|
|
151
221
|
| `Path1` / `Path2` | string | | 显示路径,**≤ 15 字符**(CJK 按 2 计) |
|
|
152
222
|
| `headlinePart1/2/3` | string | ✅ | 前 3 条标题;**每条 ≤ 30 字符**(CJK 按 2 计) |
|
|
153
223
|
| `AddtionalHeadlines` | string[] | | 第 4–15 条标题(合计 ≤ 15) |
|
|
@@ -165,4 +235,4 @@ JSON 模板:同目录 [`campaign-create-template.json`](campaign-create-templa
|
|
|
165
235
|
| Google Ads BatchJob | RSA 字段数与字符上限;关键词词面非空;SITELINK `Line2`/`Line3` ≤25 字且不可 null;系列名不可与在投/暂停系列重名 |
|
|
166
236
|
| CLI 实务 | `Budget > 0`、地理/语言至少 1 项、日期格式与先后、出价策略与配套字段 |
|
|
167
237
|
|
|
168
|
-
`ad campaign-validate` 通过不保证 BatchJob
|
|
238
|
+
`ad campaign-validate` 通过不保证 BatchJob 成功(例如仅写 `DestinationUrl` 未写 `Finalurl` 时 validate 仍可能 ✅)。异步结果用 `ad batch get` 轮询;`HasFailed` / 部分失败时用 `ad batch diff` 对照 JSON 补缺,系列级失败时改 JSON 重提,勿在半成品上反复整包创建。写操作须 `--commit`,见 `references/google-ads.md` § ad campaign-create。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
| 轨 | 条件 | 动作 |
|
|
8
8
|
|----|------|------|
|
|
9
|
-
| **直读直写** | 用户已给账户/预算/组/词/RSA 等结构化数据 |
|
|
9
|
+
| **直读直写** | 用户已给账户/预算/组/词/RSA 等结构化数据 | 通过代码转换为 campaign-create直接可用的 JSON → validate → 确认 → create |
|
|
10
10
|
| **方案先行** | 无完整结构,或要求「先出方案」 | 读本文件 + 必读规则 → 生成 JSON → validate → Markdown → 确认 → create |
|
|
11
11
|
|
|
12
12
|
**硬约束**
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
## 校验与创建(命令速查)
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
siluzan-tso ad campaign-validate --config-file ./campaign.json [--json] [--write-normalized <path>]
|
|
75
|
+
siluzan-tso ad campaign-validate --config-file ./campaign.json [--json] [--write-normalized <path>] --commit "xxx"
|
|
76
76
|
siluzan-tso ad campaign-create --config-file ./campaign.json
|
|
77
77
|
siluzan-tso ad batch get --id <taskId> --config-file ./campaign.json
|
|
78
78
|
siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json
|
|
@@ -267,6 +267,8 @@ siluzan-tso keyword -k <搜索词> [--geo <geoTargetConstantIds>] [--url <url>]
|
|
|
267
267
|
siluzan-tso keyword geo-list [--country-code <US,CN,...>] [--name-contains <text>] [--json]
|
|
268
268
|
```
|
|
269
269
|
|
|
270
|
+
`--geo` 传多个 ID(如 `2840,2826`)时,返回的搜索量/CPC/竞争度为**跨所传地区的汇总数据**,响应中**无**按地区拆分的字段。若要分别查看各市场指标,须**多次调用**且每次 `--geo` **只传一个** ID(详见 **`references/keyword-planner-workflows.md`**「多地区 `--geo`」)。
|
|
271
|
+
|
|
270
272
|
`--url` 触发网址拓词(`websitereco`)并合并进结果;与 `--google-only` 互斥(仅 Google Keyword Planner 时用后者)。`--include`/`--exclude` 为本地过滤。仅 Google、不联网搜索的 Agent 编排见 **`references/keyword-planner-workflows.md`**「分支 B」。
|
|
271
273
|
|
|
272
274
|
---
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
>
|
|
5
5
|
> **数据口径**:`siluzan-tso keyword` 走网关 `keywordidea/google`(Google Keyword Planner 市场指标);可选 `--url` 叠加 **网址拓词**(`websitereco`,非 Google API)。与账户内 **`google-analysis` 投放表现**不是同一套数据,文档与回复中须区分「市场参考」与「账户实际花费/转化」。
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
## 路径选择(拓词前先定分支)
|
|
@@ -74,12 +75,32 @@ Google Keyword Planner 的搜索量/CPC 与**目标国家/地区**相关。CLI
|
|
|
74
75
|
siluzan-tso keyword geo-list --json-out ./snap-geo
|
|
75
76
|
# 或按代码过滤:--country-code US,CN
|
|
76
77
|
```
|
|
77
|
-
2.
|
|
78
|
+
2. **带地区拓词**(单次只传 **一个** ID 时,指标对应该市场):
|
|
78
79
|
```bash
|
|
79
|
-
siluzan-tso keyword -k "pipe" --geo 2840
|
|
80
|
+
siluzan-tso keyword -k "pipe" --geo 2840 --json-out ./snap-kw-us
|
|
80
81
|
```
|
|
81
82
|
|
|
82
|
-
常见 ID(与 `ad campaign-create --location-ids` 同源):美国 `2840`,中国 `2826
|
|
83
|
+
常见 ID(与 `ad campaign-create --location-ids` 同源):美国 `2840`,中国 `2826`。
|
|
84
|
+
|
|
85
|
+
### ⚠️ 多地区 `--geo`:返回汇总数据,无法按地区拆分
|
|
86
|
+
|
|
87
|
+
`--geo` 可传多个 ID(逗号分隔,如 `--geo 2840,2826`),网关会把它们一并传给 `keywordidea/google?geoTargetConstantIds=...`。此时 Google Keyword Planner 返回的 `montlySearch`、CPC、竞争度等是**跨所传地区的汇总/合并口径**,**不是**「每个国家各一行」或 JSON 里带 `geoTargetConstantId` 分字段。
|
|
88
|
+
|
|
89
|
+
| 需求 | 做法 |
|
|
90
|
+
| ---- | ---- |
|
|
91
|
+
| 只要「美国+中国合在一起」的市场参考 | 一次调用:`--geo 2840,2826` |
|
|
92
|
+
| 要对比美国 vs 中国各自搜索量/CPC | **多次调用**,每次 `--geo` **只传一个** ID,分别 `--json-out` 到不同目录(如 `./snap-kw-us`、`./snap-kw-cn`) |
|
|
93
|
+
|
|
94
|
+
**禁止**把 `--geo 2840,2826` 的单次落盘结果当成「美国一套、中国一套」两张表;报告里若写多市场对比,须注明数据来源为分次 `keyword` 调用。
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 正确:分市场各查一次
|
|
98
|
+
siluzan-tso keyword -k "pipe" --geo 2840 --json-out ./snap-kw-us
|
|
99
|
+
siluzan-tso keyword -k "pipe" --geo 2826 --json-out ./snap-kw-cn
|
|
100
|
+
|
|
101
|
+
# 易误解:单次多 geo 只有汇总指标,无法在 items[] 内按国家拆开
|
|
102
|
+
siluzan-tso keyword -k "pipe" --geo 2840,2826 --json-out ./snap-kw-merged
|
|
103
|
+
```
|
|
83
104
|
|
|
84
105
|
---
|
|
85
106
|
|
|
@@ -9,7 +9,7 @@ $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.20-beta.
|
|
12
|
+
$PKG_VERSION = '1.1.20-beta.19'
|
|
13
13
|
$CLI_BIN = 'siluzan-tso'
|
|
14
14
|
$SKILL_LABEL = 'Siluzan TSO'
|
|
15
15
|
$INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
|
|
@@ -9,7 +9,7 @@ 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.20-beta.
|
|
12
|
+
readonly PKG_VERSION="1.1.20-beta.19"
|
|
13
13
|
readonly CLI_BIN="siluzan-tso"
|
|
14
14
|
readonly SKILL_LABEL="Siluzan TSO"
|
|
15
15
|
readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
|