siluzan-tso-cli 1.1.18 → 1.1.19-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.
Files changed (98) hide show
  1. package/README.md +8 -7
  2. package/assets/siluzan-ads/references/hosted-automation-user-catalog.md +17 -19
  3. package/dist/index.js +1112 -874
  4. package/dist/skill/SKILL.md +66 -38
  5. package/dist/skill/_meta.json +2 -2
  6. package/dist/skill/references/account-analytics.md +95 -88
  7. package/dist/skill/references/accounts.md +10 -9
  8. package/dist/skill/references/finance.md +5 -5
  9. package/dist/skill/references/google-ads-rules/google-ads-account-audit.md +1 -0
  10. package/dist/skill/references/google-ads-rules/google-ads-keyword-optimization.md +1 -1
  11. package/dist/skill/references/google-ads-rules/google-ads-landing-page-discovery-via-webfetch.md +72 -0
  12. package/dist/skill/references/google-ads-rules/google-ads-launch-plan-template.md +25 -16
  13. package/dist/skill/references/google-ads.md +236 -1025
  14. package/dist/skill/references/google-analysis-batch.md +53 -46
  15. package/dist/skill/references/hosted-automation-monitoring-json.md +10 -10
  16. package/dist/skill/references/hosted-automation-optimize-ab-winner.md +3 -3
  17. package/dist/skill/references/hosted-automation-optimize-index.md +5 -5
  18. package/dist/skill/references/hosted-automation-optimize-scale.md +2 -2
  19. package/dist/skill/references/hosted-automation-optimize-weak-downbid.md +5 -5
  20. package/dist/skill/references/hosted-automation-scenarios.md +5 -5
  21. package/dist/skill/references/hosted-automation-self-control.md +24 -23
  22. package/dist/skill/references/hosted-automation-user-catalog.md +17 -19
  23. package/dist/skill/references/keyword-planner-workflows.md +104 -0
  24. package/dist/skill/references/open-account-google-ui.md +0 -1
  25. package/dist/skill/references/reporting.md +2 -2
  26. package/dist/skill/references/setup.md +21 -22
  27. package/dist/skill/references/tips.md +2 -1
  28. package/dist/skill/references/tso-home.md +1 -1
  29. package/dist/skill/references/workflows.md +10 -4
  30. package/dist/skill/references/write-audit-restore.md +39 -6
  31. package/dist/skill/report-templates/README.md +1 -0
  32. package/dist/skill/report-templates/REPORT-WORKFLOW.md +4 -0
  33. package/dist/skill/report-templates/google-period-report.md +16 -16
  34. package/dist/skill/report-templates/okki-weekly-google-client.md +105 -0
  35. package/dist/skill/scripts/install.ps1 +2 -2
  36. package/dist/skill/scripts/install.sh +2 -2
  37. package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +2 -14
  38. package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +1 -3
  39. package/eval/cases/accounts-single-balance-not-bulk.scenario.json +3 -14
  40. package/eval/cases/budget-display-not-raw-micros.scenario.json +1 -8
  41. package/eval/cases/clue-meta-leads-json.scenario.json +2 -14
  42. package/eval/cases/clue-tiktok-leads-json.scenario.json +2 -11
  43. package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +3 -9
  44. package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +3 -9
  45. package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +3 -9
  46. package/eval/cases/finance-invoice-info-list.scenario.json +3 -11
  47. package/eval/cases/forewarning-list-google.scenario.json +3 -14
  48. package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +2 -6
  49. package/eval/cases/google-analysis-keywords-route.scenario.json +2 -14
  50. package/eval/cases/human-p1-multiturn.scenario.json +1 -5
  51. package/eval/cases/meta-single-balance-not-bulk.scenario.json +3 -17
  52. package/eval/cases/open-account-bing-noninteractive.scenario.json +1 -4
  53. package/eval/cases/open-account-google-noninteractive.scenario.json +1 -3
  54. package/eval/cases/open-account-tiktok-license-file.scenario.json +1 -3
  55. package/eval/cases/optimize-list-by-account.scenario.json +3 -11
  56. package/eval/cases/p1-single-account-profile.scenario.json +1 -11
  57. package/eval/cases/p2-balance-scan-bulk.scenario.json +2 -9
  58. package/eval/cases/p3-accounts-digest.scenario.json +1 -5
  59. package/eval/cases/p4-period-report-window.scenario.json +1 -8
  60. package/eval/cases/report-list-google.scenario.json +2 -11
  61. package/eval/cases/report-push-list-google.scenario.json +2 -11
  62. package/eval/cases/reporting-vs-account-analytics-routing.scenario.json +1 -4
  63. package/eval/cases/setup-login-or-env.scenario.json +1 -3
  64. package/eval/cases/setup-siluzan-data-permission-env.scenario.json +1 -3
  65. package/eval/cases/skill-optimize-vs-google-ads-distinction.scenario.json +1 -4
  66. package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +2 -6
  67. package/eval/cases/time-range-user-delegates-default.scenario.json +1 -8
  68. package/eval/cases/tips-json-filtering.scenario.json +1 -3
  69. package/eval/cases/tips-large-json-pagination.scenario.json +1 -3
  70. package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +1 -3
  71. package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +6 -18
  72. package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +1 -8
  73. package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +2 -11
  74. package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +1 -3
  75. package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +2 -11
  76. package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +1 -4
  77. package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +2 -14
  78. package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +2 -14
  79. package/eval/cases/uj-ops-open-google-b2c-usd-shenzhen.scenario.json +1 -4
  80. package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +2 -6
  81. package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +3 -17
  82. package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +2 -9
  83. package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +1 -3
  84. package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +3 -17
  85. package/eval/cases/uj-patrol-google-balances-low.scenario.json +2 -11
  86. package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +3 -14
  87. package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +2 -14
  88. package/eval/stub-fixtures/balance-meta.json +3 -1
  89. package/eval/stub-fixtures/clue-meta.json +6 -1
  90. package/eval/stub-fixtures/clue-tiktok.json +3 -1
  91. package/eval/stub-fixtures/forewarning-create-ok.json +5 -1
  92. package/eval/stub-fixtures/forewarning-records.json +3 -1
  93. package/eval/stub-fixtures/google-analysis.json +81 -21
  94. package/eval/stub-fixtures/invoice-billable.json +3 -1
  95. package/eval/stub-fixtures/invoice-list.json +14 -2
  96. package/eval/stub-fixtures/report-push-list.json +3 -1
  97. package/package.json +2 -2
  98. package/scripts/postinstall.mjs +1 -2
@@ -0,0 +1,72 @@
1
+ # 通过页面抓取推断产品详情页 / 列表页(内部指引)
2
+
3
+ > **用途**:在制定 **Google 搜索广告**投放方案时,用户只提供官网根域名或泛首页,需要为广告组推荐**更合适的最终到达网址**(优先 **PDP 产品详情页**,其次 **PLP 产品列表/分类页**)。本流程说明助手侧如何用 **webfetch**(或等价的「抓取公开 HTML」能力)分析站点结构,**不向终端用户复述工具名称或技术细节**——对用户只输出业务结论与推荐 URL 列表。
4
+
5
+ > **边界**:仅抓取**用户已授权、可公开访问**的页面;遵守站点 robots 与频率礼貌;若页面主体内容由前端 JS 动态渲染且抓取结果为空,须**停止猜测**,改为请用户提供站点地图、后台导出的商品链接或手动指定落地页。
6
+
7
+ ---
8
+
9
+ ## 何时启用
10
+
11
+ - 已确认推广网站域名或首页 URL,但**尚未**拿到明确的产品详情链接。
12
+ - `google-ads-launch-plan-template.md` 中「搜索广告方案生成」专项要求为各广告组对齐 **PDP / PLP**,需要补齐 URL。
13
+
14
+ ---
15
+
16
+ ## 推荐流程(按顺序)
17
+
18
+ ### 1. 固定起点 URL
19
+
20
+ - 使用用户给出的**官网首页**或**主业务落地域名**(含 `https://`)。
21
+ - 若用户给的是短链或跳转链,先解析到稳定的主域首页再抓取。
22
+
23
+ ### 2. 首次抓取(首页)
24
+
25
+ - 对首页发起 **webfetch**,获取 HTML 正文(或可见文本 + 链接列表,视工具返回而定)。
26
+ - 从结果中收集**站内**链接:`href` 指向同域或已声明的电商子域的路径。
27
+ - 优先关注导航文案含以下语义的链接(多语言站点按实际文案匹配):`产品`、`商品`、`目录`、`分类`、`商店`、`Shop`、`Products`、`Catalog`、`Collections` 等。
28
+
29
+ ### 3. 抓取候选「列表层」页面
30
+
31
+ - 对步骤 2 中得到的 **1–3 个**最像「全站产品入口」的 URL 再各做一次 webfetch。
32
+ - 在列表页 HTML 中查找**重复出现的商品卡片链接模式**(同一 DOM 结构下多条 `a[href]` 指向相似路径)。
33
+ - 记录高频路径前缀,例如:`/product/`、`/products/`、`/p/`、`/item/`、`/shop/`、`/collections/.../products/` 等。
34
+
35
+ ### 4. 抽样详情页(PDP)
36
+
37
+ - 从列表页抽取 **2–5 条**不同类目下的商品链接(避免只抽同一 SP 下的重复款)。
38
+ - 对每条 PDP 再 webfetch 一次,确认:
39
+ - HTTP 状态为成功(非 404/重定向死链);
40
+ - 页面标题或主标题与广告将要推广的产品线一致;
41
+ - 页面具备**可转化要素**(价格/询价/加购/规格参数/联系方式等至少一类),否则降级为「备选」并在方案中说明风险。
42
+
43
+ ### 5. 输出给投放方案的内容
44
+
45
+ - **默认落地页**:优先写经确认的 **PDP**;若产品线多、需用一个入口承接,可写 **PLP** 并说明「按意图拆组后各组再换独立 PDP」。
46
+ - **Sitelink / 附加链接**:可将步骤 3 中不同分类 PLP、步骤 4 中代表性 PDP 写入模板「附加链接」表。
47
+ - **不要在用户可见方案中**出现「webfetch」「抓取」「爬虫」等字样;只写「根据贵站公开页面结构,建议使用以下落地页……」类业务表述。
48
+
49
+ ---
50
+
51
+ ## 失败与回退
52
+
53
+ | 情况 | 处理 |
54
+ | ------------------------ | ------------------------------------------------------------------- |
55
+ | 首页抓取超时或内容过短 | 请用户提供 **产品列表页直链** 或 **XML/HTML 站点地图** URL。 |
56
+ | 列表页无稳定商品链接模式 | 请客户提供后台导出的 **商品 Feed 链接列** 或任意 **3 条真实 PDP**。 |
57
+ | 全站强依赖登录后可见 | 说明无法代推断;请客户发送**可匿名访问**的示例 PDP/PLP。 |
58
+ | 多语言多域 | 与投放地域、广告语言对齐后,只对**目标域**重复步骤 2–4。 |
59
+
60
+ ---
61
+
62
+ ## 与合规、质量得分的关系
63
+
64
+ - 最终 URL 必须与广告文案、关键词**主题一致**(参见 `google-ads-compliance.md` 落地页相关章节)。
65
+ - 推断出的 URL 在写入计划前,应用户确认或标注「待客户确认链接有效性」;**勿**将明显测试环境(staging)、带 `noindex` 的占位页作为主推落地页。
66
+
67
+ ---
68
+
69
+ ## 关联文档
70
+
71
+ - `google-ads-launch-plan-template.md` — 投放计划模板及「搜索广告方案生成」专项表。
72
+ - `google-ads-keyword-strategy.md` — 关键词分层与长尾策略(与落地页意图对齐)。
@@ -41,6 +41,15 @@
41
41
  | 潜在客户表单(Lead Form) | 0 | **线索类 B2B 可 1 套** | 在 Google Ads 后台配置;CLI 当前无对应命令时由助手说明后台步骤 |
42
42
  | 合规提示下的限制条目(Tier 2/3) | — | **每条实质限制 2–4 条** | 过少易漏项,过多影响可读性 |
43
43
 
44
+ ### 搜索广告方案生成(Google · 搜索广告)
45
+
46
+ **适用**:媒体为 **Google**、广告类型为 **搜索广告**、场景为 **搜索广告投放方案 / 计划生成**(含 AI 填表与向用户确认前的草案)。除上表与模板正文外,须满足下表;**落地页 URL 仅靠域名无法对齐时**,助手侧可按 `references/google-ads-rules/google-ads-landing-page-discovery-via-webfetch.md` 用 **webfetch** 分析公开页面结构以推断 **PDP / PLP**(对用户说明只用业务语言,不暴露工具名)。
47
+
48
+ | 需求 | 优化方案 | 原因 |
49
+ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
50
+ | 广告的落地页 | **优先推荐**产品**详情页(PDP)**;若无独立 PDP 或需承接多 SKU,可推荐**产品列表/分类页(PLP)**。不做「必须用 PDP」的硬性一刀切,但须在计划正文(尤其 3.2 默认落地页、3.3 各广告组、RSA 最终到达网址)中**写明每个 URL 的角色**(PDP / PLP)及与产品线、关键词意图的对应关系。仅首页/公司介绍页不足以作为高意图组主落地页时,须尝试按上文独立文档流程补全 PDP/PLP 候选。 | 搜索流量购买意图强;**详情页**内容与广告/关键词一致度高,通常更利于**质量得分**与**转化**。 |
51
+ | 广告关键词 | 在核心词、词组与完全匹配之外,**显式增加长尾词**:含**型号、规格、材质、场景、用途、地域、行业细分、问题型**等修饰;建议每组正向词中 **长尾意图词占比约 30–50%**(可与泛词分属不同广告组以保持组内意图一致)。数量仍须满足上表「每广告组 20–30 条推荐」区间,**避免**仅用少量头部词占位。 | 方案生成阶段易出现**词量少、偏泛词**;长尾可覆盖细分意图、改善匹配质量并便于否定词迭代。 |
52
+
44
53
  ---
45
54
 
46
55
  ## 模板正文
@@ -122,19 +131,19 @@ AI 生成计划时,按以下格式输出。`{{占位符}}` 由 AI 根据用户
122
131
  | 出价策略(次月) | {{如:近 30 天满 30 个目标转化后,切换为目标每次转化费用 tCPA = $X}} | {{同逻辑或单独写 tCPA}} | {{…}} |
123
132
  | 广告轮换 | 优先展示效果最佳的广告 | 同左 | 同左 |
124
133
 
125
- > **落地页**:各系列默认 URL 在下方广告组/创意节中按组填写;若全账户统一落地页,可在本表下增加一行「默认落地页 | {{URL}}」。
134
+ > **落地页(搜索方案)**:**优先**各广告组使用 **产品详情页(PDP)** URL;若无 PDP 则使用 **产品列表/分类页(PLP)**,并在表中标注与关键词意图的对应关系。若用户仅提供首页,助手侧推断 PDP/PLP 的流程见 `references/google-ads-rules/google-ads-landing-page-discovery-via-webfetch.md`。各系列默认 URL 仍在下方广告组/创意节中按组填写;若全账户统一落地页,可在本表下增加一行「默认落地页 | {{URL}}(PDP/PLP)」。
126
135
 
127
136
  ---
128
137
 
129
138
  ### 3.3 广告组(Ad Group)与关键词矩阵
130
139
 
131
- **原则**:每一个广告组内的关键词**意图必须高度一致**,广告文案与落地页与意图对齐,**质量得分(Quality Score)**才容易拉高。匹配符号:`[完全]`、`"词组"`、广泛无括号。
140
+ **原则**:每一个广告组内的关键词**意图必须高度一致**,广告文案与落地页与意图对齐,**质量得分(Quality Score)**才容易拉高。匹配符号:`[完全]`、`"词组"`、广泛无括号。**搜索广告方案生成**时须在每组中补足**长尾词**(参见文首「搜索广告方案生成」专项表),与头词、词组、完全匹配分层搭配,避免整组仅为短泛词。
132
141
 
133
142
  #### 系列 1:{{系列名称}}
134
143
 
135
144
  | 广告组名称 | 核心关键词(带匹配符号) | 对应搜索意图 | 建议基准出价 (CPC) |
136
145
  | ------------- | ------------------------------------------------------------- | -------------- | ------------------ |
137
- | {{AG 1 名称}} | {{`"词1"` / `[词2]` / 广泛词 …,补足 1020 条时在组下列全表}} | {{意图一句话}} | {{币种区间或定额}} |
146
+ | {{AG 1 名称}} | {{`"词1"` / `[词2]` / 广泛词 …,补足 2030 条时在组下列全表(须含长尾,见文首专项)}} | {{意图一句话}} | {{币种区间或定额}} |
138
147
  | {{AG 2 名称}} | {{…}} | {{…}} | {{…}} |
139
148
 
140
149
  (每个广告组下可再拆「关键词」子表:| 关键词 | 匹配类型 | 格式 |,列满推荐条数,勿停留在 3 条示例。)
@@ -383,18 +392,18 @@ siluzan-tso ad geo add -a {{CID}} --campaign-id <ID> --location-id <排除地域
383
392
 
384
393
  在生成计划前,至少确认以下信息(缺失则向用户询问):
385
394
 
386
- | 必须 | 信息 | 用途 |
387
- | ---- | -------------------------------- | ----------------------------------------------------- |
388
- | ✅ | 广告账户 ID | 关联投放账户(执行时由助手使用,勿向用户解释命令行) |
389
- | ✅ | 推广的产品/服务 | 决定关键词和文案方向 |
390
- | ✅ | 目标(线索/销售/曝光) | 决定系列类型和出价策略 |
391
- | ✅ | 月度预算 | 计算日预算、系列数量与 3.2 表各列预算 |
392
- | ✅ | 投放地域 | 地域定向与地域 ID |
393
- | ✅ | 落地页 URL | 落地页与最终到达网址 |
394
- | 建议 | 客服电话、邮箱或联系页 URL | **CALL** 与「邮件/联系」**Sitelink** |
395
- | 建议 | 目标 CPA、首月最高 CPC、转化门槛 | **Manual CPC / Max Clicks / tCPA** 切换条件(见下表) |
396
- | 建议 | 竞品/行业背景 | 关键词矩阵与否定词包 |
397
- | 建议 | 已有投放数据 | 优化起点 |
395
+ | 必须 | 信息 | 用途 |
396
+ | ---- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
397
+ | ✅ | 广告账户 ID | 关联投放账户(执行时由助手使用,勿向用户解释命令行) |
398
+ | ✅ | 推广的产品/服务 | 决定关键词和文案方向 |
399
+ | ✅ | 目标(线索/销售/曝光) | 决定系列类型和出价策略 |
400
+ | ✅ | 月度预算 | 计算日预算、系列数量与 3.2 表各列预算 |
401
+ | ✅ | 投放地域 | 地域定向与地域 ID |
402
+ | ✅ | 落地页 URL | 最终到达网址;**搜索方案优先 PDP,其次 PLP**(参见文首专项表;可配合 `google-ads-landing-page-discovery-via-webfetch.md` 推断) |
403
+ | 建议 | 客服电话、邮箱或联系页 URL | **CALL** 与「邮件/联系」**Sitelink** |
404
+ | 建议 | 目标 CPA、首月最高 CPC、转化门槛 | **Manual CPC / Max Clicks / tCPA** 切换条件(见下表) |
405
+ | 建议 | 竞品/行业背景 | 关键词矩阵与否定词包 |
406
+ | 建议 | 已有投放数据 | 优化起点 |
398
407
 
399
408
  ### 字段填充规则
400
409
 
@@ -404,7 +413,7 @@ siluzan-tso ad geo add -a {{CID}} --campaign-id <ID> --location-id <排除地域
404
413
  | 系列命名 | 遵循 `[类型]_[目标]_[定向]_[地域]_[匹配]` 规范(参考 `google-ads-campaign-optimization.md` 2.1 节);可与业务名并用(如「B2B 源头寻源」) |
405
414
  | 出价策略(首月) | **产品默认**:核心系列用 **Manual CPC**,且**关闭 eCPC**,写明建议 CPC 上限区间;测流/爆款系列可用 **Maximize Clicks + 最高 CPC**;与 `TARGET_SPEND` 等等价映射以实际 CLI/API 可选值为准时在助手侧转换,**用户可见正文始终用 Google Ads 界面用语** |
406
415
  | 出价策略(次月) | **产品默认**:近 **30 天满 30 个**约定转化(如表单)后切换 **tCPA**;无足够数据则延续人工或 Max Clicks 并写明条件 |
407
- | 关键词(每广告组) | **组内意图高度一致**;**最少 5、推荐 10–20**;`[完全]` / `"词组"` / 广泛分层(`google-ads-keyword-strategy.md`) |
416
+ | 关键词(每广告组) | **组内意图高度一致**;**最少 5、推荐 10–20**(与文首一览表 20–30 条推荐对齐时以一览表为准);`[完全]` / `"词组"` / 广泛分层(`google-ads-keyword-strategy.md`);**搜索方案生成须含足量长尾词**(文首「搜索广告方案生成」专项) |
408
417
  | 否定词 | **账户级 5 类词包**填满模板表;系列级补充 5–10 条;上线后搜索词**每日**迭代 |
409
418
  | RSA | **12–15** 标题、**4** 描述;**至少 H1、H2 与 D1** 在表中标注【固定📌】及目标位置与理由;字符合规见第十一章字数≤30 |
410
419
  | 附加信息 | Sitelink **6–8**(可含 OEM/验厂/报价/目录/联系);Callout **6–8**;Snippet **≥1 组、每组 ≥4 值**;**Lead Form** 线索业务建议填标题与必填字段 |