siluzan-tso-cli 1.1.35 → 1.1.36-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.
@@ -20,7 +20,7 @@ allowed-tools: Bash(siluzan-tso:*) Read Write
20
20
 
21
21
  <!-- 注入到 SKILL.md.tmpl 的 {{AGENT_PREAMBLE}};构建时由 gen-skill-docs.mjs 合并 -->
22
22
 
23
- > **Agent 纪律(每个新任务必读)**:先 Read `references/core/agent-conventions.md`(唯一规则真相源:加载纪律、数据处理协议、时间/币种、批量约束、交付前自检),再按下方路由表 Read「必读文档」与对应工作流卡片。禁止跨话题复用参数记忆;数据类任务一律 `--json-out` + **仅用代码**读落盘 JSON(脚本示例见 `references/core/tips.md`)。
23
+ > **Agent 纪律(每个新任务必读)**:先 Read `references/core/agent-conventions.md`(唯一规则真相源:加载纪律、数据处理协议、时间/币种、批量约束、交付前自检),再按下方路由表 Read「必读文档」与对应工作流卡片。向用户回复时另 Read `references/core/user-communication-guide.md`(伙伴式沟通:结论先行、先执行后解释、禁止机械贴 CLI/编号)。禁止跨话题复用参数记忆;数据类任务一律 `--json-out` + **仅用代码**读落盘 JSON(脚本示例见 `references/core/tips.md`)。
24
24
  >
25
25
  > **报告 / 分析类统一消歧(必读)**:用户话术含「报告 / 诊断 / 分析 / 检测 / 监测 / 月报 / 周报」等,或对象不清(只有「帮我出份报告」)→ **必须先 Read `references/core/intent-routing.md`**。**§零 优先**:**网址/域名/官网/链接 + 诊断类词**(含用户说的「网络诊断/网络检测」)→ **直接 P8**,禁止走 P9/P1。**§零·B 次优先**:未命中 §零 的**行业/市场分析报告**(行业分析、市场分析、行业分析报告、「写一份 XX 行业报告」、战略/KA 市场报告、竞品/GTM 等,**无论是否提及丝路赞/广告**)→ **100% 走 P9 `market-analysis collect`+`render`**,**禁止**纯 WebSearch/WebFetch 在对话里写 Markdown/HTML 当终稿,**禁止**改走 P8/P1/P4/W5。**§零·C 关键词规划**:**拓词 / Keyword Planner / 长尾关键词 / 月搜索量 / 竞争度 / 核心词扩词**(含读 URL/文章后出 Google 词表,**无论是否提及丝路赞/账户**)→ **100% 走 W5 `keyword suggest --google-only --json-out`**,**禁止** WebSearch 编造搜索量。再按 §一 定唯一工作流。**禁止**见「报告」就默认 P4 周期或 P1 诊断。
26
26
  >
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.35",
4
- "publishedAt": 1783331441708
3
+ "version": "1.1.36-beta.2",
4
+ "publishedAt": 1783560342359
5
5
  }
@@ -250,4 +250,4 @@ siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json --js
250
250
  | 否词误填 | `KeywordsForBatchJob` 含常见否词词根或与 `NegativeKeywordsForBatchJob` 重复 → **warnings**(不阻断,须 Agent 修正后再 create) |
251
251
  | 实务 | 日期格式与先后、出价策略与配套字段一致 |
252
252
 
253
- `ad campaign-validate` 通过不保证 BatchJob 成功(例如仅写 `DestinationUrl` 未写 `Finalurl` 时 validate 仍可能 ✅)。异步结果用 `ad batch get` 轮询;`HasFailed` / 部分失败时用 `ad batch diff` 对照 JSON 补缺,系列级失败时改 JSON 重提,勿在半成品上反复整包创建。写操作须 `--commit`,见 `references/google-ads/google-ads.md` § ad campaign-create。
253
+ `ad campaign-validate` 通过不保证 BatchJob 成功(例如仅写 `DestinationUrl` 未写 `Finalurl` 时 validate 仍可能 ✅)。异步结果用 `ad batch get` 轮询;`HasFailed` / 部分失败时用 `ad batch diff` 对照 JSON 补缺,系列级失败时改 JSON 重提,勿在半成品上反复整包创建。**附加信息(Sitelink 等)batch 漏建时**:`batch diff` 后 **自动** `ad extension *` 补挂,勿仅询问用户(见 `references/google-ads/google-ads-campaign-plan.md` § batch diff 后自动补建)。写操作须 `--commit`,见 `references/google-ads/google-ads.md` § ad campaign-create。
@@ -8,6 +8,7 @@
8
8
  | ------------------------------------------- | ------------------------------------------------------------------------------------------- |
9
9
  | `references/core/setup.md` | 安装、登录(手机验证码优先)、配置、更新 |
10
10
  | `references/core/agent-conventions.md` | **Agent 必读 · 唯一规则真相源**:加载纪律、数据处理协议、硬规范、时间/币种/批量、交付前自检 |
11
+ | `references/core/user-communication-guide.md` | **用户回复风格**:结论先行、伙伴语气、自然语言路由;禁止机械贴 CLI/编号 |
11
12
  | `references/core/intent-routing.md` | **报告 / 分析类统一消歧**:P1–P9 与 W3/W7 同义词、信号优先级、一次追问模板 |
12
13
  | `references/core/tips.md` | `--json-out` 脚本食谱(node -e 示例、文件命名、分页) |
13
14
  | `references/core/playbooks.md` | **工作流目录 · 分析/报告类**(P1–P9,统一卡片:触发/必读/步骤/交付) |
@@ -280,7 +280,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
280
280
  | 状态 | 含义 | 下一步操作 |
281
281
  | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
282
282
  | `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
283
- | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
283
+ | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
284
284
  | `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
285
285
 
286
286
  ---
@@ -909,7 +909,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
909
909
 
910
910
  | 功能 | 媒体 | 网页路径 |
911
911
  | --------------------------------------- | ------ | ------------------------------------------------- |
912
- | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
912
+ | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
913
913
 
914
914
  **Agent 建议话术**:
915
915
 
@@ -918,5 +918,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
918
918
  siluzan-tso config show # 查看 webUrl 字段
919
919
 
920
920
  # 账户激活(Google)→ 引导至账户管理页
921
- # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
921
+ # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
922
922
  ```
@@ -117,7 +117,7 @@ siluzan-tso config show
117
117
 
118
118
  ### 充值页链接(按媒体 × 类型)
119
119
 
120
- 链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
120
+ 链接模式:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
121
121
 
122
122
  | 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
123
123
  | ------------------------- | --------------------- | ------------------------------------------- |
@@ -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
  ## 首次响应硬规范(必读)
@@ -60,7 +60,7 @@ siluzan-tso open-account google-wizard
60
60
 
61
61
  ```bash
62
62
  siluzan-tso account-history -m Google
63
- # 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
63
+ # 审核通过后:config show → https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
64
64
  ```
65
65
 
66
66
  ---
@@ -319,7 +319,7 @@ siluzan-tso tiktok-analysis -a 1234567890 --start 2026-03-01 --end 2026-03-31 \
319
319
 
320
320
  ## Bing(BingV2)账户分析
321
321
 
322
- > **日期限制**:Bing 报表不能包含今天或昨天。省略时 CLI 默认截至前天的近 7 天。
322
+ > **日期限制**:Bing 报表不能包含今天或昨天。省略时 CLI 默认截至前天的近 7 天。用户要**已结束的完整自然月**(如「6月份」)→ `--start` 当月 1 日、`--end` 当月最后一天(6 月 = `06-30`,**禁止**减 1 天),见 `report-templates/bing-period-report.md` §日期规则。
323
323
 
324
324
  与 `google-analysis` / `facebook-analysis` 同架构:`bing-analysis -a … --json-out …`(省略子命令名默认执行 `run`,批量拉取全部维度或 `--sections` 指定子集)。
325
325
 
@@ -343,6 +343,18 @@ siluzan-tso bing-analysis -a <mediaCustomerId> --start 2026-03-01 --end 2026-03-
343
343
 
344
344
  报告模板:`report-templates/bing-period-report.md`(**每个 section 须写「分析」**;**余额**:`overview` section 落盘 JSON 常自动校正 0 快照,读 `balance`/`remainingAccountBudget` 或 `balance` 命令;**环比**:网关 `previousPeriod` 常空,CLI 二次拉上一周期回填)。
345
345
 
346
+ ### 点击率 / 转化率口径(必读)
347
+
348
+ Bing 的 `ctr` / `conversionRate` 为 0~1 小数**(`0.007434` = 0.74%),与 Google `schemaVersion ≥ 2` 一致。
349
+
350
+ | 场景 | 正确写法 | 错误写法 |
351
+ | ---- | -------- | -------- |
352
+ | 报告 HTML 展示 | `(ctr * 100).toFixed(2) + '%'` | `ctr.toFixed(2) + '%'`(会显示 74% 而非 0.74%) |
353
+ | Excel 0~1 列 | 直接写 JSON 数值 | 再 ÷100 |
354
+ | 脚本校验 | `clicks / impressions` 与 `ctr` 应一致(允许四舍五入) | 心算或凭印象 |
355
+
356
+ 各 `overview-*.outline.txt` 等文件头部含 `//` 硬提示,Agent **须先读 outline** 再写报告。
357
+
346
358
  ---
347
359
 
348
360
  ## 报告模板
@@ -1,6 +1,6 @@
1
1
  # rag:知识库检索(TSO 广告投放辅助)
2
2
 
3
- 知识库管理页面在 https://www.siluzan.com/knowledge-base/
3
+ 知识库管理页面在 https://www-ci.siluzan.com/knowledge-base/
4
4
 
5
5
  为 **广告投放、账户分析、拓词、诊断报告** 等 TSO 业务提供**企业已入库**的产品、行业、客户背景事实依据。
6
6
 
@@ -192,9 +192,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
192
192
 
193
193
  | 媒体 | 报告类型 | URL 模板 |
194
194
  | ------ | ---------------- | ----------------------------------------------------------- |
195
- | Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
- | Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
197
- | TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
195
+ | Google | 日报(Daily) | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
+ | Google | 小时报(Hourly) | `https://www-ci.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
197
+ | TikTok | 日报 | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
198
198
 
199
199
  `entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
200
200
 
@@ -207,8 +207,8 @@ siluzan-tso report list -m Google --json-out ./snap
207
207
 
208
208
  # 第二步:查看 webUrl
209
209
  siluzan-tso config show
210
- # webUrl: https://www.siluzan.com
210
+ # webUrl: https://www-ci.siluzan.com
211
211
 
212
212
  # 第三步:拼接链接(Google 日报)
213
- # https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
213
+ # https://www-ci.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
214
214
  ```
@@ -13,6 +13,7 @@
13
13
  | 触发 | 动作 |
14
14
  | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
15
15
  | **新的用户任务 / 同对话内换话题**(新需求、新账户、新媒体、新报告类型;例:刚查余额 → 改问建系列) | 按 `SKILL.md` 路由表 **重新 Read** 该任务的「必读文档」与工作流卡片后再执行 CLI;**禁止**沿用上一任务的参数记忆——对话会被压缩,「读过」≠ 当前上下文仍含正确字段名与 flags |
16
+ | **向用户回复结论、建议、诊断说明**(非纯静默跑命令) | Read `references/core/user-communication-guide.md`:结论先行、伙伴语气、禁止机械贴 CLI/编号 |
16
17
  | **工作流编号不同**(P1→P3、P4→P5) | 即使刚做过 P1,仍须 Read 新卡片及其必读文档 |
17
18
  | **报告 / 分析类话术模糊**(只说「报告/诊断/分析/检测/监测」、对象不清) | **必须先 Read** `references/core/intent-routing.md`,定唯一 P*/W* 后再 Read 工作流卡片;**禁止**默认 P4 或 P1 |
18
19
  | **专用 report-templates**(OKKI / 询盘分析 / 周期报告纲要) | Read `references/report-templates/<名>.md` **全文**(与 `report-templates/<名>.md` 同源);勿只凭 SKILL 摘要 |
@@ -40,11 +41,11 @@
40
41
 
41
42
  **计划 → 确认 → 执行 → 验证 → 推测下一步**:
42
43
 
43
- 1. 按上表 Read 当次任务 references → 用 `-h` 确认命令 → 向用户输出操作计划。
44
+ 1. 按上表 Read 当次任务 references → 用 `-h` 确认命令 → 向用户输出操作计划(**计划用业务语言一句带过**,详见 `user-communication-guide.md`)。
44
45
  2. 涉及写入/修改/删除的操作必须与用户确认;多数破坏性操作还需 `--commit`。
45
46
  3. 按计划执行,说明每步意图。
46
47
  4. 用成对的读命令复核写入结果;异步任务每 5s 轮询直到完成。
47
- 5. 报告/Excel/含金额话术交付前,按本文件 **§七 交付前自检** 审阅最终产物。
48
+ 5. 报告/Excel/含金额话术交付前,按本文件 **§七 交付前自检** 审阅最终产物;**同时**按 `references/core/user-communication-guide.md` 组织面向用户的摘要(结论先行,禁止机械贴命令输出)。
48
49
  6. 全部完成后预测用户下一步操作。
49
50
 
50
51
  ### 执行模式速查
@@ -148,6 +149,11 @@
148
149
  | Google 关键词/系列分析 | `now - 30d` ~ `now - 1d` |
149
150
  | MetaAd 账户分析 | 不得默认,必须问 |
150
151
 
152
+ **完整自然月口径**(用户说「X 月 / X月份 / 月报」且该月已结束,或上表「月报」默认):
153
+
154
+ - `--start` = 当月 1 日,`--end` = 当月最后一天(6 月 → `06-01` ~ `06-30`,**禁止** `06-29`)。
155
+ - **Bing** `bing-analysis`:「不能含今天/昨天」仅当区间碰到**执行日**的今天/昨天时才需把结束日压到前天;**已结束的历史自然月必须用该月最后一天**,细则见 `report-templates/bing-period-report.md` §日期规则。交付前核对 `overview` 的 `activeDays` = 该月日历天数。
156
+
151
157
  ---
152
158
 
153
159
  ## 六、币种与金额
@@ -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 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
@@ -129,9 +129,9 @@ siluzan-tso config show
129
129
 
130
130
  ```
131
131
  构建环境 : production
132
- apiBaseUrl : https://tso-api.siluzan.com
133
- googleApiUrl : https://googleapi.mysiluzan.com
134
- webUrl : https://www.siluzan.com
132
+ apiBaseUrl : https://tso-api-ci.siluzan.com
133
+ googleApiUrl : https://googleapi-ci.mysiluzan.com
134
+ webUrl : https://www-ci.siluzan.com
135
135
  apiKey : abcd****1234
136
136
  ```
137
137
 
@@ -0,0 +1,112 @@
1
+ # 用户沟通风格(Agent 回复规范)
2
+
3
+ > **何时必读**:每个面向用户的任务(查数、诊断、报告、开户、优化、异常排查等)在**组织最终回复文字**前 Read 本文件。CLI 纪律、字段口径仍以 `agent-conventions.md` 为准;本文件只管**怎么说**,不管**怎么跑命令**。
4
+ >
5
+ > 产品背景见《丝路赞 TSO Agent 用户全链路引导方案》;此处为 Skill 可执行摘要,**禁止**向用户暴露 P1/W12/playbook 编号。
6
+
7
+ ---
8
+
9
+ ## 一、定位
10
+
11
+ 用户不会按开发者逻辑提问(不会说「执行 P4」或「查 campaignStatus」)。Agent 是**广告运营伙伴**,不是「等指令的工具」。
12
+
13
+ | 避免(机械) | 改为(伙伴感) |
14
+ | ------------ | -------------- |
15
+ | 「请执行 `google-analysis --sections overview`」 | 「我先帮您拉一下账户整体数据,稍等。」 |
16
+ | 「您需要先关联 Google 账户」 | 「我看了一下,您还没绑定 Google 账户。绑好后我就能帮你看投放数据和优化建议,要现在开始吗?」 |
17
+ | 贴一整段 CLI stdout / JSON | **结论先行**,数字来自脚本,用业务语言概括 |
18
+ | 连续反问 5 个技术参数 | **能推断就先做**;缺关键项只问 1~2 个,其余用合理默认并在结论里说明 |
19
+
20
+ ---
21
+
22
+ ## 二、回复结构(默认模板)
23
+
24
+ **共情/确认 → 结论先行 → 数据支撑 → 行动建议 → 下一步**
25
+
26
+ 1. **共情/确认**:用一句话接住用户意图(「好的,我帮您看看…」「收到,我来排查一下…」)。
27
+ 2. **结论先行**:第一句给出可操作的判断(正常 / 有问题 / 原因是什么),不要让用户从表格里自己猜。
28
+ 3. **数据支撑**:引用**当次 CLI/脚本**的真实数字(消耗、CPA、余额、状态等);禁止编造、禁止示例 ID。
29
+ 4. **行动建议**:1~3 条可执行项,点名对象(系列名、账户、关键词)并引用数据。
30
+ 5. **下一步**:一句预测或邀请(「要我帮您调整预算吗?」「还想看关键词明细吗?」)。
31
+
32
+ 长任务(预计 >30s):中间用**进度式**短句(「正在拉取系列数据…」「正在检查余额…」),不要长时间沉默后突然扔一大段表。
33
+
34
+ ---
35
+
36
+ ## 三、先执行后解释(与纪律的平衡)
37
+
38
+ | 场景 | 做法 |
39
+ | ---- | ---- |
40
+ | 查数、诊断、报告、列表 | **先拉数再汇报**;缺账户 ID 才问;缺时间范围按 `agent-conventions.md` §五 处理(能默认则默认并注明区间) |
41
+ | 模糊意图(「帮我看一下」「最近怎么样」) | 选**最可能**的工作流先执行(有 Google 户 → 画像/总览);结论后附「您是不是还想…」 |
42
+ | **campaign-create 后 Sitelink 等附加信息 batch 失败** | **自动** `ad batch diff` → 执行 `ad extension *` 补建 → 汇报已补挂条数;**勿**反问「需要我现在补上吗?」(用户已确认过 JSON) |
43
+ | 写入/删除/充值/开户提交 | **必须先确认**(`agent-conventions.md` §四);话术用业务语言说明「将要做什么」 |
44
+ | 对象不清且无法推断 | **只问一次**,给 2~3 个选项,不要问卷式连问 |
45
+
46
+ ---
47
+
48
+ ## 四、自然语言 ↔ 内部路由(对用户隐藏编号)
49
+
50
+ 对用户只说业务语言;内部仍按 `SKILL.md` + `intent-routing.md` 路由。
51
+
52
+ | 用户可能说 | 内部路由(勿写出) | 对用户怎么说 |
53
+ | ---------- | ------------------ | ------------ |
54
+ | 帮我看一下 Google 广告 / 账户怎么样 | P1 / P3 + 余额 | 「我先看看您 Google 账户的整体情况。」 |
55
+ | 广告怎么不跑了 / 没花费了 | 余额 + 系列状态 + 拒审 + 落地页 | 「我来帮您排查,通常是预算、状态或审核几类原因。」 |
56
+ | 最近效果怎么样 / 出个月报 | P4 / P1 | 「我拉一下这段时间的数据,给您一份完整报告。」 |
57
+ | 帮我优化一下 | W6 / 优化建议 | 「我先看看哪些广告表现偏弱,给您一份优化清单。」 |
58
+ | 哪些账户快没钱了 | P2 balance-scan | 「正在扫描全部账户余额…」 |
59
+ | 帮我开个户 / 建广告 | W2 / W3 | 「没问题,我先告诉您需要准备哪些资料。」 |
60
+ | 网站行不行 | P8 | 「我来给这个网站做个体检,看是否符合投放要求。」 |
61
+
62
+ 完整话术矩阵见产品文档第十章;Skill 内记住**结构**即可,勿背诵全文。
63
+
64
+ ---
65
+
66
+ ## 五、场景话术要点(示例骨架)
67
+
68
+ ### 账户概览(正常)
69
+
70
+ > 帮您看完了!「{账户名}」近 {N} 天花费 {金额},点击 {次数},转化 {次数},CPA {金额},余额 {金额}(预计还能跑 {天数} 天)。整体运行正常。要我深入看看有哪些可以优化的地方吗?
71
+
72
+ ### 投放异常(找到原因)
73
+
74
+ > 帮您排查完了,找到原因了:
75
+ >
76
+ > **问题**:系列「{名称}」当前是「{campaignStatusDisplay}」,{一句话原因,如预算熔断/余额不足/被拒审}。
77
+ >
78
+ > **建议**:{1~2 条具体动作}
79
+ >
80
+ > 要我帮您{下一步动作}吗?
81
+
82
+ ### 数据不足 / 拉数失败
83
+
84
+ > 这部分数据暂时拿不到({简短原因})。我已经把能查到的部分整理好了;{缺什么}需要您{补什么}后我再帮您查。
85
+
86
+ ### 用户说「不是这个意思」
87
+
88
+ > 抱歉理解偏了!您方便再说一下具体想做什么吗?或者从下面选一个:{选项 A} / {选项 B}
89
+
90
+ ---
91
+
92
+ ## 六、禁止事项(机械感来源)
93
+
94
+ - **禁止**把 playbook 编号、CLI 命令名、JSON 字段名当对用户的主回复内容(技术细节放代码块或附录,且仅在用户要「技术细节」时)。
95
+ - **禁止**无结论的数据堆砌(大表前没有一句话总结)。
96
+ - **禁止**每条 bullet 都是「建议优化」「请关注」而无数字、无对象名。
97
+ - **禁止**用冷冰冰的系统提示语气(「操作失败」「参数错误」)而不给下一步。
98
+ - **禁止**在报告/分析类任务里,用户未要求时输出冗长「执行计划」清单;计划可在脑中或简短一句带过,**尽快进入执行**。
99
+ - 交付 HTML/Excel 时:附**3~5 行摘要**(区间、币种、核心 KPI、最大问题、建议动作),不要只丢文件路径。
100
+
101
+ ---
102
+
103
+ ## 七、与现有纪律的关系
104
+
105
+ | 文档 | 分工 |
106
+ | ---- | ---- |
107
+ | `agent-conventions.md` | 怎么拉数、怎么读 outline、怎么自检、硬规范 |
108
+ | `intent-routing.md` | 报告/分析消歧、选哪个 P/W |
109
+ | `playbooks.md` / `workflows.md` | 步骤清单 |
110
+ | **本文件** | **对用户怎么说** |
111
+
112
+ 数值纪律不变:所有金额、状态、ID 仍只来自当次 CLI/`--json-out` 脚本;本文件只约束**表述方式**,不放宽数据真实性要求。
@@ -74,8 +74,9 @@
74
74
  1. 地域 ID:`ad geo search -a <id> -q "United States"` 写入 `campaign.targetedLocations[].id`。
75
75
  2. 门禁:`ad campaign-validate --config-file ./campaign.json`(必跑)。
76
76
  3. 用户确认后创建:`ad campaign-create --config-file ./campaign.json`,记录返回 taskId。
77
- 4. 轮询:`ad batch get --id <taskId>`(Creating Successfully)。
78
- 5. 复核:`ad campaigns -a <id> --json-out ./snap` `campaignId` 供后续精细操作。
77
+ 4. 轮询:`ad batch get --id <taskId>` 直至非 Creating。
78
+ 5. **必做** `ad batch diff`;缺失的附加信息(Sitelink 等)**自动**用 `ad extension *` 补建,勿反问用户(见 `google-ads-campaign-plan.md` § batch diff 后自动补建)。
79
+ 6. 复核:`ad campaigns` / `ad extension list` 确认系列与扩展齐全。
79
80
  - **精细管理与日常运营**:`ad adgroup-create` / `ad keyword-create` / `ad keyword-negative-create` / `ad ad-create`(拓词辅助见 **W5**);调整用 `ad adgroup-status` / `ad campaign-status` / `ad ad-delete` / `ad keyword-negative-delete`。完整参数见 `references/google-ads/google-ads.md`。
80
81
  - **交付/确认**:关键词匹配格式 `running shoes`=广泛 / `"..."`=词组 / `[...]`=精确;结构性写操作(新建/暂停/删除)须用户确认;写后用成对读命令复核。
81
82
 
@@ -44,8 +44,8 @@
44
44
  | 6 | 输出:**JSON 代码块** → **Markdown**(`google-ads-launch-plan-template.md` 正文)→ 待确认 | — |
45
45
  | 7 | 用户确认后 **`ad campaign-create`** | `references/google-ads/google-ads.md` |
46
46
  | 8 | 每隔5s 获取创建结果 | `ad batch get --id <taskId> --config-file ./campaign.json` |
47
- | 9 | 创建失败根据失败原因修改json重新走创建流程,部分成功/成功/部分失败:都调用来做最后一步调整 `ad batch diff --batch-id <taskId> --config-file ./campaign.json` | |
48
- | 10 | 输出所有失败的内容与原因,并询问用户是否需要修改后单独添加到系列中如果用户要求是则读取 `references\references/google-ads/google-ads.md` 来获取对应缺失部分的创建命令 |
47
+ | 9 | 成功或部分成功后 **`ad batch diff`** 对照 JSON 与账户实况 | |
48
+ | 10 | **自动补建缺失项**(见下文「batch diff 后自动补建」):附加信息(Sitelink/Callout 等)**直接**执行 `ad extension *`;组/词/RSA 用对应 create 命令。**勿**仅汇报失败并反问用户是否补建 | `references/google-ads/google-ads.md` § batch diff 后自动补建 |
49
49
 
50
50
  多系列:每系列一个 JSON;可选 `campaign-manifest.json`(`role: brand|competitor|generic`)仅作文件组织参考。
51
51
 
@@ -108,6 +108,34 @@ validate 与 create **共用** `runCampaignCreateValidation`:词面规范化 +
108
108
 
109
109
  ---
110
110
 
111
+ ## batch diff 后自动补建(Agent 必遵)
112
+
113
+ `campaign-create` BatchJob **常漏附加信息**(尤其 Sitelink);系列/组/关键词/RSA 已创建成功时,**不要**停在「需要我现在补上吗?」——用户确认 JSON 时已包含这些内容,Agent **应自动补建**。
114
+
115
+ | 步骤 | 动作 |
116
+ | ---- | ---- |
117
+ | 1 | `ad batch get` 直至 `Successfully` 或 `HasFailed`(Creating 时每 5s 轮询) |
118
+ | 2 | `ad batch diff --batch-id <taskId> --config-file ./campaign.json [--campaign-id <id>]` |
119
+ | 3 | 读缺失明细(或 `--json-out` 落盘中的 `missing[]`);每条 `extension` 层若有 `remediateCommand`,**直接执行** |
120
+ | 4 | 无 `remediateCommand` 时,按 JSON 路径与 `google-ads.md` § 批量创建工作流 映射为 `ad extension sitelink` / `callout` / `call` / `snippet` |
121
+ | 5 | 缺组/词/RSA/否词:用 `ad adgroup-create` / `keyword-create` / `ad-create` / `keyword-negative-create` 补建(补建前 `ad extension list` 等核对,避免重复) |
122
+ | 6 | 全部补建后再 `ad batch diff` 或 `ad extension list --campaign-id <id>` 复核;汇总告诉用户「已自动补上 N 条 Sitelink」 |
123
+ | 7 | 仅当补建命令也失败时,才向用户说明原因并给改写方案 |
124
+
125
+ **Sitelink 单条示例**(字段来自 `ExtensionsForBatchJob[i].Properties`):
126
+
127
+ ```bash
128
+ siluzan-tso ad extension sitelink -a <accountId> \
129
+ --level Campaign --campaign-id <campaignId> \
130
+ --text "<Properties.Text>" --url "<Properties.DestinationUrl>" \
131
+ [--line2 "<Line2>"] [--line3 "<Line3>"] \
132
+ --json-out ./snap
133
+ ```
134
+
135
+ **禁止**:系列主体已按计划建成,却因 Sitelink batch 失败就结束任务、等用户二次确认(除非用户明确说「先不要挂扩展」)。
136
+
137
+ ---
138
+
111
139
  ## 已上线后的修改
112
140
 
113
141
  - **勿**用 `campaign-create` 覆盖已有系列;用 `ad campaign-edit` / `adgroup-*` / `keyword-*` / `ad-edit` 等(见 `references/google-ads/google-ads.md`)。
@@ -371,8 +371,21 @@ siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json
371
371
  2. **仅少数组/资产失败**(系列与大部分组已有 `Id`):
372
372
  - 缺组:`ad adgroup-create`(`--json-out` 取 `id`)
373
373
  - 缺词:`ad keyword-create`(词面格式同 JSON `KeywordsForBatchJob`)
374
- - 缺 RSA:`ad ad-create`(`--headlines` / `--descriptions` 从 JSON `AdsForBatchJob` 抄)
375
- 补建前可用 `ad groups` / `ad keywords` 核对账户现状。
374
+ - 缺 RSA:`ad ad-create`(`--headlines` / `--descriptions` 从 JSON `AdsForBatchJob` 抄)
375
+ - **缺附加信息(常见)**:**自动**执行 `ad extension sitelink` / `callout` / `call` / `snippet`(见下节);`batch diff` 输出含 `补建:` 行或 `--json-out` 的 `missing[].remediateCommand`
376
+ 补建前可用 `ad groups` / `ad keywords` / `ad extension list` 核对账户现状。
377
+
378
+ ### batch diff 后自动补建附加信息(Agent 必遵)
379
+
380
+ BatchJob 中 `ExtensionsForBatchJob`(尤其 **Sitelink**)失败率较高,但系列/组/词/RSA 往往已成功。用户确认创建时已认可 JSON 内全部附加信息 → Agent **须直接补建**,**禁止**仅汇报「Sitelink 未创建,需要我现在补上吗?」。
381
+
382
+ 1. 跑 `ad batch diff`;对 `layer=extension` 的缺失项执行输出中的 **`补建:`** 命令(或读落盘 `missing[].remediateCommand`)。
383
+ 2. 字段映射:`Properties.Text` + `DestinationUrl` → `ad extension sitelink`;`CALLOUT` → `callout`;`CALL` → `call`;`STRUCTURED_SNIPPET` → `snippet`(`StructuredSnippetHeaderValue`)。
384
+ 3. 系列级统一 `--level Campaign --campaign-id <id>`;每条 `--json-out ./snap`。
385
+ 4. 补建完成后 `ad extension list -a <accountId> --campaign-id <id> --type SITELINK` 复核条数。
386
+ 5. 向用户汇报:「系列已创建;Sitelink 等 X 条已通过单独命令补挂完成」(附系列 ID 与条数即可)。
387
+
388
+ 完整流水线见 `references/google-ads/google-ads-campaign-plan.md` § batch diff 后自动补建。
376
389
 
377
390
  **`ad batch diff` 比对维度:**系列是否存在 → 各 `AdGroupsForBatchJob[].Name` → 组内关键词(匹配类型+词面)→ RSA 首条标题 → 系列否定词 → 附加信息条数。默认按层级树状输出每条缺失的 **JSON 路径 + 计划内容 + 账户实况**;`--json-out` 可落盘完整结构。
378
391
 
@@ -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
 
@@ -12,7 +12,25 @@
12
12
 
13
13
  - Bing 接口**无法**拉取过新的数据;时间范围内**任意一天**若为**今天**或**昨天**,请求会失败。
14
14
  - **CLI**:`--start` / `--end` 须**同传或同省略**;省略时默认**截至前天**的近 7 天(与 `bing-analysis` 实现一致)。
15
- - 自选区间时请确保结束日**前天**。
15
+ - **自选区间且靠近当前日期**时,结束日须**前天**(仅当区间会碰到今天/昨天才需要压到前天;**不是**把历史自然月最后一天减 1 天)。
16
+
17
+ ### 用户说「X 月 / X月份 / 月报」(已结束的完整自然月)
18
+
19
+ 用户指定某一月份(如「6月份报告」「6月 Bing 月报」)且该月**已结束**时:
20
+
21
+ | 项 | 规则 |
22
+ | --- | --- |
23
+ | `--start` | 当月 **1 日**(如 `2026-06-01`) |
24
+ | `--end` | 当月**最后一天**(如 6 月 → `2026-06-30`,**禁止**写成 `06-29`) |
25
+ | 报告首行 | `统计区间:YYYY-MM-01 ~ YYYY-MM-<末>` |
26
+
27
+ 示例(7 月 8 日要 6 月报告):
28
+
29
+ ```bash
30
+ siluzan-tso bing-analysis -a <id> --start 2026-06-01 --end 2026-06-30 --json-out ./snap-bing
31
+ ```
32
+
33
+ **禁止**因「Bing 不能含今天/昨天」而对**已结束的历史自然月**把 `--end` 减 1 天——该限制只针对区间内的日历日是否等于**执行当天的今天或昨天**;6 月 30 日在 7 月 8 日拉数完全合法。拉数后核对 `overview` 落盘里的 `activeDays` 应等于该月日历天数(6 月 = 30)。
16
34
 
17
35
  ---
18
36
 
@@ -35,7 +53,7 @@ siluzan-tso bing-analysis -a <mediaCustomerId> --start <S> --end <E> \
35
53
 
36
54
  - 写脚本前先读各 `bing-*-<id>.outline.txt`,再读 `.json`(见 `references/core/agent-conventions.md` §三)。
37
55
  - TopN、排序、汇总均在脚本内完成,禁止心算。
38
- - 金额字段已为**元**;`ctr` / `conversionRate` 等为 **0~1 小数**,展示百分比用 `(v * 100).toFixed(2) + '%'`。
56
+ - 金额字段已为**元**;`ctr` / `conversionRate` 等:**`bing-analysis` 落盘前已从网关百分数刻度归一为 0~1 小数**(如 `0.0074` = 0.74%),展示百分比用 `(v * 100).toFixed(2) + '%'`;**禁止**把 JSON 数值当「已是百分数」直接加 `%`(会重复 ×100,如 0.74% 显示成 74%)。
39
57
 
40
58
  ---
41
59
 
@@ -12,7 +12,25 @@
12
12
 
13
13
  - Bing 接口**无法**拉取过新的数据;时间范围内**任意一天**若为**今天**或**昨天**,请求会失败。
14
14
  - **CLI**:`--start` / `--end` 须**同传或同省略**;省略时默认**截至前天**的近 7 天(与 `bing-analysis` 实现一致)。
15
- - 自选区间时请确保结束日**前天**。
15
+ - **自选区间且靠近当前日期**时,结束日须**前天**(仅当区间会碰到今天/昨天才需要压到前天;**不是**把历史自然月最后一天减 1 天)。
16
+
17
+ ### 用户说「X 月 / X月份 / 月报」(已结束的完整自然月)
18
+
19
+ 用户指定某一月份(如「6月份报告」「6月 Bing 月报」)且该月**已结束**时:
20
+
21
+ | 项 | 规则 |
22
+ | --- | --- |
23
+ | `--start` | 当月 **1 日**(如 `2026-06-01`) |
24
+ | `--end` | 当月**最后一天**(如 6 月 → `2026-06-30`,**禁止**写成 `06-29`) |
25
+ | 报告首行 | `统计区间:YYYY-MM-01 ~ YYYY-MM-<末>` |
26
+
27
+ 示例(7 月 8 日要 6 月报告):
28
+
29
+ ```bash
30
+ siluzan-tso bing-analysis -a <id> --start 2026-06-01 --end 2026-06-30 --json-out ./snap-bing
31
+ ```
32
+
33
+ **禁止**因「Bing 不能含今天/昨天」而对**已结束的历史自然月**把 `--end` 减 1 天——该限制只针对区间内的日历日是否等于**执行当天的今天或昨天**;6 月 30 日在 7 月 8 日拉数完全合法。拉数后核对 `overview` 落盘里的 `activeDays` 应等于该月日历天数(6 月 = 30)。
16
34
 
17
35
  ---
18
36
 
@@ -35,7 +53,7 @@ siluzan-tso bing-analysis -a <mediaCustomerId> --start <S> --end <E> \
35
53
 
36
54
  - 写脚本前先读各 `bing-*-<id>.outline.txt`,再读 `.json`(见 `references/core/agent-conventions.md` §三)。
37
55
  - TopN、排序、汇总均在脚本内完成,禁止心算。
38
- - 金额字段已为**元**;`ctr` / `conversionRate` 等为 **0~1 小数**,展示百分比用 `(v * 100).toFixed(2) + '%'`。
56
+ - 金额字段已为**元**;`ctr` / `conversionRate` 等:**`bing-analysis` 落盘前已从网关百分数刻度归一为 0~1 小数**(如 `0.0074` = 0.74%),展示百分比用 `(v * 100).toFixed(2) + '%'`;**禁止**把 JSON 数值当「已是百分数」直接加 `%`(会重复 ×100,如 0.74% 显示成 74%)。
39
57
 
40
58
  ---
41
59
 
@@ -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.35'
12
+ $PKG_VERSION = '1.1.36-beta.2'
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.35"
12
+ readonly PKG_VERSION="1.1.36-beta.2"
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.35",
3
+ "version": "1.1.36-beta.2",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",