siluzan-tso-cli 1.1.20-beta.2 → 1.1.20-beta.21

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 (89) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +3777 -1190
  3. package/dist/skill/SKILL.md +144 -125
  4. package/dist/skill/_meta.json +2 -2
  5. package/dist/skill/assets/campaign-create-template.json +146 -93
  6. package/dist/skill/assets/campaign-create-template.md +238 -0
  7. package/dist/skill/references/account-analytics.md +39 -32
  8. package/dist/skill/references/accounts.md +13 -11
  9. package/dist/skill/references/currency.md +72 -0
  10. package/dist/skill/references/geo-continents.json +1 -9
  11. package/dist/skill/references/google-ads-campaign-plan.md +89 -0
  12. package/dist/skill/references/google-ads-rules/google-ads-campaign-optimization.md +1 -15
  13. package/dist/skill/references/google-ads-rules/google-ads-compliance.md +7 -8
  14. package/dist/skill/references/google-ads-rules/google-ads-keyword-strategy.md +2 -3
  15. package/dist/skill/references/google-ads-rules/google-ads-keyword-taxonomy.md +86 -0
  16. package/dist/skill/references/google-ads-rules/google-ads-launch-plan-template.md +59 -129
  17. package/dist/skill/references/google-ads.md +256 -144
  18. package/dist/skill/references/google-analysis-batch.md +18 -18
  19. package/dist/skill/references/hosted-automation-optimize-weak-downbid.md +1 -1
  20. package/dist/skill/references/hosted-automation-self-control.md +2 -2
  21. package/dist/skill/references/keyword-planner-workflows.md +132 -28
  22. package/dist/skill/references/rag.md +104 -0
  23. package/dist/skill/references/reporting.md +1 -1
  24. package/dist/skill/references/tips.md +12 -6
  25. package/dist/skill/references/workflows.md +24 -172
  26. package/dist/skill/report-templates/README.md +8 -8
  27. package/dist/skill/report-templates/REPORT-WORKFLOW.md +12 -12
  28. package/dist/skill/report-templates/google-inquiry-analysis.md +185 -127
  29. package/dist/skill/report-templates/okki-weekly-google-client.md +66 -66
  30. package/dist/skill/scripts/install.ps1 +8 -6
  31. package/dist/skill/scripts/install.sh +7 -3
  32. package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +14 -2
  33. package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +3 -1
  34. package/eval/cases/accounts-single-balance-not-bulk.scenario.json +14 -3
  35. package/eval/cases/budget-display-not-raw-micros.scenario.json +10 -3
  36. package/eval/cases/clue-meta-leads-json.scenario.json +14 -2
  37. package/eval/cases/clue-tiktok-leads-json.scenario.json +11 -2
  38. package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +9 -3
  39. package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +9 -3
  40. package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +9 -3
  41. package/eval/cases/finance-invoice-info-list.scenario.json +11 -3
  42. package/eval/cases/forewarning-list-google.scenario.json +14 -3
  43. package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +6 -2
  44. package/eval/cases/google-analysis-keywords-route.scenario.json +14 -2
  45. package/eval/cases/human-p1-multiturn.scenario.json +5 -1
  46. package/eval/cases/meta-single-balance-not-bulk.scenario.json +17 -3
  47. package/eval/cases/open-account-bing-noninteractive.scenario.json +4 -1
  48. package/eval/cases/open-account-google-noninteractive.scenario.json +3 -1
  49. package/eval/cases/open-account-tiktok-license-file.scenario.json +3 -1
  50. package/eval/cases/optimize-list-by-account.scenario.json +11 -3
  51. package/eval/cases/p1-single-account-profile.scenario.json +11 -1
  52. package/eval/cases/p2-balance-scan-bulk.scenario.json +9 -2
  53. package/eval/cases/p3-accounts-digest.scenario.json +5 -1
  54. package/eval/cases/p4-period-report-window.scenario.json +8 -1
  55. package/eval/cases/rag-before-keyword-expand.scenario.json +24 -0
  56. package/eval/cases/rag-list-then-query.scenario.json +23 -0
  57. package/eval/cases/report-list-google.scenario.json +11 -2
  58. package/eval/cases/report-push-list-google.scenario.json +11 -2
  59. package/eval/cases/reporting-vs-account-analytics-routing.scenario.json +4 -1
  60. package/eval/cases/setup-login-or-env.scenario.json +3 -1
  61. package/eval/cases/setup-siluzan-data-permission-env.scenario.json +3 -1
  62. package/eval/cases/skill-optimize-vs-google-ads-distinction.scenario.json +4 -1
  63. package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +6 -2
  64. package/eval/cases/time-range-user-delegates-default.scenario.json +8 -1
  65. package/eval/cases/tips-json-filtering.scenario.json +3 -1
  66. package/eval/cases/tips-large-json-pagination.scenario.json +3 -1
  67. package/eval/cases/uj-ad-campaign-validate-before-create-stub.scenario.json +20 -0
  68. package/eval/cases/uj-ad-keywords-camping-tent-outdoor-plan.scenario.json +1 -1
  69. package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +5 -3
  70. package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +18 -6
  71. package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +8 -1
  72. package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +11 -2
  73. package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +3 -1
  74. package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +11 -2
  75. package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +4 -1
  76. package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +14 -2
  77. package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +14 -2
  78. package/eval/cases/uj-ops-open-google-b2c-usd-shenzhen.scenario.json +4 -1
  79. package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +6 -2
  80. package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +17 -3
  81. package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +9 -2
  82. package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +3 -1
  83. package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +17 -3
  84. package/eval/cases/uj-patrol-google-balances-low.scenario.json +11 -2
  85. package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +14 -3
  86. package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +14 -2
  87. package/eval/stub-fixtures/rag-list.json +19 -0
  88. package/eval/stub-fixtures/rag-query.json +20 -0
  89. package/package.json +1 -1
@@ -37,12 +37,13 @@ siluzan-tso list-accounts --page 2 --page-size 50
37
37
 
38
38
  **输出字段说明:**
39
39
 
40
- | 字段 | 说明 |
41
- | ----------------- | --------------------------------------------------------------------------------------------------------- |
42
- | `entityId` | 丝路赞内部 ID,`delink`/`share`、**`account-active-bills`** 等操作使用此 ID(**不是** `mediaCustomerId`) |
43
- | `mediaCustomerId` | 媒体平台账户数字 ID(Google Customer ID 等) |
44
- | `name` | 账户名称 |
45
- | `status` | 账户状态 |
40
+ | 字段 | 说明 |
41
+ | ----------------- | ------------------------------------------------------------------------------------------------------------ |
42
+ | `entityId` | 丝路赞内部 ID,`delink`/`share`、**`account-active-bills`** 等操作使用此 ID(**不是** `mediaCustomerId`) |
43
+ | `mediaCustomerId` | 媒体平台账户数字 ID(Google Customer ID 等) |
44
+ | `currencyCode` | 账户主币种:`CNY`(人民币)或 `USD`(美金)等;**表格有「币种」列**;报告/Excel 须与此一致,见 `currency.md` |
45
+ | `name` | 账户名称 |
46
+ | `status` | 账户状态 |
46
47
 
47
48
  ---
48
49
 
@@ -713,12 +714,13 @@ siluzan-tso account email-auth-list -c <mediaCustomerId> [--agent-type <type>]
713
714
  siluzan-tso account email-auth -c <mediaCustomerId> --email <email> [--access-role ReadOnly|Standard|Admin]
714
715
  ```
715
716
 
716
- | 选项 | 说明 | 必填 |
717
- | ------------------------ | --------------------------------------------------- | ---- |
718
- | `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId` | ✅ |
719
- | `--email <email>` | 被授权用户邮箱 | ✅ |
720
- | `--agent-type <type>` | 账户代理类型(来自 `list-accounts --json`) | |
717
+ | 选项 | 说明 | 必填 |
718
+ | ------------------------ | ------------------------------------------------------------ | ---- |
719
+ | `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId` | ✅ |
720
+ | `--email <email>` | 被授权用户邮箱 | ✅ |
721
+ | `--agent-type <type>` | 账户代理类型(来自 `list-accounts --json`) | |
721
722
  | `--access-role <role>` | 权限类型:`ReadOnly \| Standard \| Admin`(默认 `Standard`) | |
723
+
722
724
  你可以设置Admin权限不能主动告知用户,除非用户主动提及他需要Admin权限
723
725
  **示例:**
724
726
 
@@ -0,0 +1,72 @@
1
+ # 账户币种(CNY / USD)— Agent 硬规范
2
+
3
+ > **WorkBuddy 及所有编排本 Skill 的 Agent**:回答金额、写报告/Excel、对比多账户前,**必须先确定每个账户的 `currencyCode`**,再选符号与汇总方式。**禁止**凭媒体或「Google 账户」默认美金。
4
+
5
+ ---
6
+
7
+ ## 常见误区(必须避免)
8
+
9
+ | 错误做法 | 正确做法 |
10
+ | ------------------------------- | ------------------------------------------------------------------------------ |
11
+ | Google 账户一律用 `$` | 同一媒体下既有 **USD** 也有 **CNY**,以接口 `currencyCode` 为准 |
12
+ | 多账户消耗直接相加 | 先按 `currencyCode` **分表/分币种小计**,禁止跨币种求和 |
13
+ | 报告只写 `$1,234` 不写币种 | 首行写 `统计区间:…(货币:CNY)` 或 `(货币:USD)`;每笔金额带代码 |
14
+ | CNY 用 `$` 或 USD 用 `¥` | **CNY → ¥**;**USD → $**(见下表) |
15
+ | 开户选了 USD 但拉数用人民币话术 | 开户币种见 `open-account … --currency`;拉数币种见 `list-accounts` / `balance` |
16
+
17
+ ---
18
+
19
+ ## 符号与格式
20
+
21
+ | `currencyCode` | 用户可见符号 | 示例 |
22
+ | -------------- | --------------- | ---------------- |
23
+ | `CNY` | **¥**(全角) | `¥1,234.56 CNY` |
24
+ | `USD` | **$** | `$1,234.56 USD` |
25
+ | 其他 | 用 ISO 代码前缀 | `EUR 100.00` |
26
+
27
+ - 数值保留 **2 位小数**;表格/话术中的金额与 CLI JSON **同源**,不手填。
28
+ - 同一段落、同一 Sheet **只使用一种主币种**;多币种必须分块说明。
29
+
30
+ ---
31
+
32
+ ## 从哪里读 `currencyCode`(按优先级)
33
+
34
+ 1. **`list-accounts`**(推荐第一步):`items[].ma.currencyCode`;表格有 **「币种」** 列。
35
+ 2. **`balance` / `balance-scan` / `accounts-digest`**:`items[].currencyCode` 或行内已格式化的金额(含代码)。
36
+ 3. **`stats`**:`items[].currencyCode`(Google 含今天窗口时可能无币种,见 `accounts.md` 时效性说明)。
37
+ 4. **`google-analysis --sections overview`**:`overview-*.json` 根级或 `account.currencyCode`。
38
+ 5. **`ad campaigns` / `ad groups`**:JSON 内 `currencyCode`(与账户主币种一致)。
39
+ 6. **发票/充值**:`invoice billable` 的 `currencyCode`;人民币订单与美金订单开票类型不同,见 `finance.md`。
40
+
41
+ **单账户任务**:在 `list-accounts -k <id>` 或 `balance -a <id>` 之后,把解析到的 `currencyCode` 记入报告首行与脚本常量(从 JSON 读取,勿写死 `USD`)。
42
+
43
+ **多账户任务**:拉 `list-accounts --json-out` 建 `mediaCustomerId → currencyCode` 映射,后续所有金额展示经此映射格式化。
44
+
45
+ ---
46
+
47
+ ## 金额单位约定
48
+
49
+ - **CLI 出口的大多数 JSON / 表格金额以「元」为单位**:`budget`、`*Yuan` 后缀(`budgetAmountYuan`、`maxCPCAmountYuan` 等)、`spend` / `averageCpc` / `costPerConversion` 等。**`keyword suggest`**:`averageCpc` / `lowTopOfPageBid` / `highTopOfPageBid` 的币种见根级与每条 **`bidAmountCurrency`**(传 `-a` 时为账户 `currencyCode`;无 `-a` 时为 **USD**,可选 `averageCpcCNY` 为汇率参考、非 Google 账户口径)。
50
+ - **写 CLI 参数**(`--budget`、`--max-cpc`、`--target-cpa`、`--amount` 等):同样传**主币种元**,与账户 `currencyCode` 一致;CLI 内部按需 ×100 / ×1_000_000 写后端。
51
+ - 旧版网关字段(`budgetAmount` 分、`*Micros` 微元、`maxCPCAmountDisplay` 等)**已不再落盘到 CLI 输出**,下游脚本无需做单位换算。
52
+
53
+ 详见 `references/account-analytics.md`「金额单位」。
54
+
55
+ ---
56
+
57
+ ## 报告 / Excel 检查清单
58
+
59
+ - [ ] 首行或封面有 `统计区间` + `(货币:CNY|USD)`
60
+ - [ ] 每个账户区块的币种与 `list-accounts` 一致
61
+ - [ ] 无跨币种合计(或明确标注「不可直接相加」)
62
+ - [ ] 全文未出现与 `currencyCode` 矛盾的 `$` / `¥`
63
+ - [ ] OKKI 周报、询盘分析等模板中的「币种」列来自 `list-accounts`,非臆造
64
+
65
+ ---
66
+
67
+ ## 相关文档
68
+
69
+ - 账户命令与字段:`references/accounts.md`
70
+ - 报告金额口径:`references/account-analytics.md`
71
+ - 开户选币:`references/open-account-google-ui.md`、`references/workflows.md`
72
+ - 开票币种:`references/finance.md`
@@ -1,15 +1,7 @@
1
1
  {
2
2
  "_meta": {
3
3
  "description": "国家中文名 → 大洲映射,用于 google-inquiry-analysis.md Sheet 3 国家维度透视的「所属大洲」列。",
4
- "buckets": [
5
- "亚洲",
6
- "中东",
7
- "欧洲",
8
- "北美",
9
- "南美",
10
- "非洲",
11
- "大洋洲"
12
- ],
4
+ "buckets": ["亚洲", "中东", "欧洲", "北美", "南美", "非洲", "大洋洲"],
13
5
  "coverage": "覆盖 ISO 3166-1 主权国家 + 港澳台、巴勒斯坦、马恩岛、波多黎各等常用领土;与 tso-cli/src/commands/google-analysis/geo-en2zh.json 由 scripts/generate-geo-dictionaries.mjs 同步生成;新增国家请在脚本的 ISO_TO_CONTINENT 中加映射后重跑。",
14
6
  "secondary_merge_hint": "运营常用 5 桶(<重点国> / 中东 / 非洲 / 欧美 / 亚洲(除重点国)):由 Agent 脚本在写表前对本字典做二次合并;重点国 focusCountries 由运营每次会议前配置(默认取分析月询盘 Top1 国家),伪代码与默认规则见 google-inquiry-analysis.md「国家 → 大洲映射」「重点国家配置」两节。",
15
7
  "unmatched_policy": "未命中标 `未知大洲`,不阻塞;脚本结尾打印未命中清单,运营回流补字典。"
@@ -0,0 +1,89 @@
1
+ # Google 搜索广告:方案生成与系列创建
2
+
3
+ > 所属 skill:`siluzan-tso`。**新建/规划搜索系列时 Read 本文件**,再按需打开下表子文档。命令参数与 CRUD 见 `references/google-ads.md`。
4
+
5
+ ---
6
+
7
+ | 轨 | 条件 | 动作 |
8
+ |----|------|------|
9
+ | **直读直写** | 用户已给账户/预算/组/词/RSA 等结构化数据 | 通过代码转换为 campaign-create直接可用的 JSON → validate → 确认 → create |
10
+ | **方案先行** | 无完整结构,或要求「先出方案」 | 读本文件 + 必读规则 → 生成 JSON → validate → Markdown → 确认 → create |
11
+
12
+ **硬约束**
13
+
14
+ - 可执行真相只有 **JSON**(`assets/campaign-create-template.json` 同构);Markdown 只读投影。
15
+ - 改需求 **只改 JSON**,再 `campaign-validate`,再刷新 Markdown。
16
+ - 不支持 PMax 系列创建(忽略 PMax 需求)。
17
+ - 搜索网络:仅 Google 搜索(`TargetSearchNetwork`/`TargetContentNetwork`/`TargetPartnerSearchNetwork` 均为 false)。
18
+
19
+ ---
20
+
21
+ ## 标准流水线
22
+
23
+ | 步 | 动作 | 文档/命令 |
24
+ |----|------|-----------|
25
+ | 1 | `list-accounts` 锁定 `account` / `customerName` / 币种 | `references/currency.md` |
26
+ | 2 | 可选 `rag query`;`keyword` / `keyword geo-list` 拓词 | `references/keyword-planner-workflows.md` |
27
+ | 3 | 按分层规则写入 `KeywordsForBatchJob`(Exact/Phrase/Broad) | `google-ads-rules/google-ads-keyword-taxonomy.md`(参考,非 CLI 强制) |
28
+ | 4 | 填 `campaign`(预算/出价/地域/否词≥20/RSA/附加信息) | `assets/campaign-create-template.md` |
29
+ | 5 | **`ad campaign-validate --config-file <json>`**(失败只改 JSON) | 下文「校验」 |
30
+ | 6 | 输出:**JSON 代码块** → **Markdown**(`google-ads-launch-plan-template.md` 正文)→ 待确认 | — |
31
+ | 7 | 用户确认后 **`ad campaign-create`** | `google-ads.md`|
32
+ | 8 | 每隔5s 获取创建结果| `ad batch get --id <taskId> --config-file ./campaign.json` |
33
+ | 9 | 创建失败根据失败原因修改json重新走创建流程,部分成功/成功/部分失败:都调用来做最后一步调整 `ad batch diff --batch-id <taskId> --config-file ./campaign.json` | |
34
+ | 10 | 输出所有失败的内容与原因,并询问用户是否需要修改后单独添加到系列中如果用户要求是则读取 `references\google-ads.md` 来获取对应缺失部分的创建命令 |
35
+
36
+
37
+
38
+ 多系列:每系列一个 JSON;可选 `campaign-manifest.json`(`role: brand|competitor|generic`)仅作文件组织参考。
39
+
40
+ ---
41
+
42
+ ## 规则文档:分层阅读(勿一次读 12 份)
43
+
44
+ ### 必读(出方案前)
45
+
46
+ | 文档 | 用途 |
47
+ |------|------|
48
+ | `google-ads-rules/google-ads-keyword-taxonomy.md` | 核心/长尾与匹配块**建议**(Agent 参考,CLI 不强制) |
49
+ | `google-ads-rules/google-ads-compliance.md` | 词与文案合规 |
50
+ | `google-ads-rules/sensitive-industries.md` | 敏感行业(若相关) |
51
+ | `google-ads-rules/google-ads-launch-plan-template.md` | 用户可见 Markdown 结构与 RSA/否词表 |
52
+ | `google-ads-rules/google-ads-creative-optimization.md` | RSA 12–15 条、Callout/Sitelink |
53
+ | `assets/campaign-create-template.md` | JSON 字段契约 |
54
+
55
+ ### 按需(触及时再读)
56
+
57
+ | 文档 | 何时 |
58
+ |------|------|
59
+ | `google-ads-rules/google-ads-keyword-strategy.md` | 分组/匹配/否定词策略争议 |
60
+ | `google-ads-rules/google-ads-campaign-optimization.md` | 出价策略、预算、学习期 |
61
+ | `google-ads-rules/google-ads-landing-page-discovery-via-webfetch.md` | 仅首页、需推断 PDP/PLP |
62
+ | `google-ads-rules/google-ads-conversion-architecture.md` | 转化/EC/归因说明 |
63
+ | `google-ads-rules/google-ads-keyword-optimization.md` | 上线后优化,非首建 |
64
+ | `google-ads-rules/google-ads-account-audit.md` | 账户诊断,非首建 |
65
+ | `google-ads-rules/google-ads-audience-strategy.md` | 受众/RLSA |
66
+ | `google-ads-rules/google-ads-pmax-guide.md` | 用户问 PMax(本 CLI 不创建) |
67
+
68
+ 复述给用户:**3–5 条**与本次任务相关的合规/策略要点即可,无需罗列全部文件名。
69
+
70
+ ---
71
+
72
+ ## 校验与创建(命令速查)
73
+
74
+ ```bash
75
+ siluzan-tso ad campaign-validate --config-file ./campaign.json [--json] [--write-normalized <path>] --commit "xxx"
76
+ siluzan-tso ad campaign-create --config-file ./campaign.json
77
+ siluzan-tso ad batch get --id <taskId> --config-file ./campaign.json
78
+ siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json
79
+ siluzan-tso ad geo search
80
+ ```
81
+
82
+ validate 与 create **共用** `runCampaignCreateValidation`:词面规范化 + 后端/Google 硬约束(预算、RSA、匹配符号与 `MatchTypeV2` 对齐、搜索网络等)。**不含**关键词分层数量、匹配占比、否词条数下限。
83
+
84
+ ---
85
+
86
+ ## 已上线后的修改
87
+
88
+ - **勿**用 `campaign-create` 覆盖已有系列;用 `ad campaign-edit` / `adgroup-*` / `keyword-*` / `ad-edit` 等(见 `google-ads.md`)。
89
+ - 若属「推倒重建」:更新 JSON → validate → 新系列 `campaign-create` 或删系列后重提。
@@ -484,21 +484,7 @@ DDA 最低要求:~300 转化 + ~3,000 广告互动/30 天。
484
484
  siluzan-tso ad geo search -a <CID> -q "United States"
485
485
 
486
486
  # 2. 一体化创建(系列 + 广告组 + 关键词 + 广告)
487
- siluzan-tso ad campaign-create \
488
- -a <CID> \
489
- --customer-name "账户名" \
490
- --name "Search_LeadGen_CRM_US" \
491
- --budget 100 \
492
- --bidding TARGET_SPEND \
493
- --location-ids 2840 \
494
- --adgroup-name "核心词_CRM" \
495
- --max-cpc 5 \
496
- --url "https://www.example.com" \
497
- --keywords "[CRM software],[project management tool],\"best CRM\",business software" \
498
- --headlines "H1,H2,H3,..." \
499
- --descriptions "D1,D2" \
500
- --final-url "https://www.example.com/crm" \
501
- --path1 "CRM" --path2 "Free-Trial"
487
+ siluzan-tso ad campaign-create
502
488
 
503
489
  # 3. 查看创建进度
504
490
  siluzan-tso ad batch get --id <taskId>
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 所属 skill:`siluzan-tso`。
4
4
  >
5
- > 适用场景:执行 `ad keyword-create`、`ad ad-create`、`ad campaign-create`、`ad smart create` **之前**必读。
5
+ > 适用场景:执行 `ad keyword-create`、`ad ad-create`、`ad campaign-create` **之前**必读。
6
6
  > 生成关键词、广告标题(headlines)、广告描述(descriptions)时,按本文规则逐项校验,确保 95%+ 通过 Google 审核。
7
7
 
8
8
  ---
@@ -156,7 +156,7 @@
156
156
  | 不放竞品品牌 | `/running-shoes` | `/better-than-nike` |
157
157
  | 中文 path 安全做法 | 用小写英文 + 连字符 | 中文字符(可能编码异常) |
158
158
 
159
- > `aigc.md` 联动:`ad smart create` 会将产品词中的空格自动转为小写+连字符作为 Path,避免非法路径导致创建失败。
159
+ > `ad ad-create` / `campaign-create` JSON 中 `path1`/`path2`:产品词中的空格应转为小写+连字符,避免非法 Path 导致创建失败。
160
160
 
161
161
  ---
162
162
 
@@ -214,7 +214,7 @@
214
214
  | 使用自有品牌名 | ✅ 随便用 |
215
215
  | 使用竞品品牌名做**关键词** | ⚠️ 允许但有被投诉风险;用 Broad Match;**绝不能放进广告文案** |
216
216
  | 使用竞品品牌名进**广告文案**(headlines/descriptions) | ❌ 一旦被投诉立即被拒 |
217
- | 使用 Google/TikTok/Facebook 等平台名 | ❌ 触发商标政策(与 `aigc.md` 中 PolicyFindingError 一致) |
217
+ | 使用 Google/TikTok/Facebook 等平台名 | ❌ 触发商标政策(常见 `PolicyFindingError`) |
218
218
 
219
219
  **安全做法**:用通用描述替代品牌名。"project management software" 代替 "Asana alternative"。
220
220
 
@@ -269,7 +269,7 @@
269
269
  | 内容主要为广告 | 页面 80%+ 是第三方广告 |
270
270
  | 仿冒官方页面 | 模仿 Google / 银行 / 政府网站 |
271
271
 
272
- > **与 `aigc.md` 联动**:`ad smart create` `url.validated` 为 `false` 时直接退出——说明链接有问题,此时生成任何关键词都没意义。
272
+ > 落地页 URL 无法访问或与文案严重不符时,应先修复再提交 `campaign-create` `ad ad-create`。
273
273
 
274
274
  ---
275
275
 
@@ -379,7 +379,7 @@ trusted, reliable, expert, custom, premium
379
379
 
380
380
  ## 十、广告文案(Headlines / Descriptions)合规清单
381
381
 
382
- `ad ad-create` `ad smart create` 中的 `--headlines` / `--descriptions` 必须满足:
382
+ `ad ad-create` `campaign-create` JSON 内 RSA 的 `headlines` / `descriptions` 必须满足:
383
383
 
384
384
  | # | 检查项 | 规则 |
385
385
  | --- | ---------------- | ------------------------------------------------------------------- |
@@ -495,8 +495,7 @@ Google 2023 年起对新广告主实施 **Limited Ad Serving**(有限广告投
495
495
  | 关键词推荐 | `keyword -k "词" [--url]` | 推荐结果需经本文规则过滤后再 `keyword-create` |
496
496
  | 手动添加关键词 | `ad keyword-create --keywords "词1,词2"` | 每个词过本文「三/四/五/七」章节 |
497
497
  | 手动创建广告 | `ad ad-create --headlines "..." --descriptions "..."` | 文案过第十章清单 |
498
- | 一体化创建系列 | `ad campaign-create --keywords "..." --headlines "..." --descriptions "..."` | 关键词 + 文案都要过 |
499
- | AI 智投 | `ad smart create -w "产品词" --url "..."` | `--words-only-keywords` 可减少推荐词触发 PolicyFindingError;手动 `--headlines` / `--descriptions` 通过率更可控 |
498
+ | 一体化创建系列 | `ad campaign-create --config-file ./campaign.json`(经 `campaign-validate`) | 关键词 + 文案都要过 |
500
499
  | 搜索字词转否词 | `ad search-terms` → `ad keyword-negative-create` | 定期检查,把低质量搜索词加否定 |
501
500
 
502
501
  ---
@@ -505,7 +504,7 @@ Google 2023 年起对新广告主实施 **Limited Ad Serving**(有限广告投
505
504
 
506
505
  | 被拒原因 | 对应检查 | 修复方式 |
507
506
  | -------------------------------- | ----------------------- | ------------------------------------- |
508
- | `PolicyFindingError: PROHIBITED` | 文案/落地页属于受限类目 | 检查 `aigc.md` 政策章节 + 本文第二章 |
507
+ | `PolicyFindingError: PROHIBITED` | 文案/落地页属于受限类目 | 本文第二章 + `sensitive-industries.md` |
509
508
  | `Misleading content` | 文案有虚假承诺 | 按第四章替换用词 |
510
509
  | `Trademark violation` | 文案含他人商标 | 删除品牌名,用通用描述 |
511
510
  | `Editorial` | 大小写/标点/间距 | 按第三章修正 |
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 所属 skill:`siluzan-tso`。
4
4
  >
5
- > 适用场景:执行 `keyword`、`ad keyword-create`、`ad campaign-create`、`ad smart create` 时,用本文指导关键词选择、分组、出价和持续优化。
5
+ > 适用场景:执行 `keyword`、`ad keyword-create`、`ad campaign-create` 时,用本文指导关键词选择、分组、出价和持续优化。
6
6
  > 合规规则见 `references/google-ads-compliance.md`,本文聚焦**策略与效果优化**。
7
7
 
8
8
  ---
@@ -410,8 +410,7 @@ Broad Match + 受众信号 = 伪装成广泛定向的精准投放。
410
410
  | 关键词调研 | `keyword -k "词" [--url]` | 结果按意图分层后再添加 |
411
411
  | 添加关键词 | `ad keyword-create --keywords "词1,词2"` | 格式:`词→BROAD`、`"词"→PHRASE`、`[词]→EXACT` |
412
412
  | 添加否定词 | `ad keyword-negative-create` | 每周从 `ad search-terms` 挖掘 |
413
- | 创建广告系列 | `ad campaign-create` | 按本文第三章架构设计系列结构 |
414
- | AI 智投 | `ad smart create -w "产品词" --url "..."` | Broad Match 为主;`--words-only-keywords` 减少 PolicyFindingError |
413
+ | 创建广告系列 | `ad campaign-create --config-file`(先 `campaign-validate`) | 按本文第三章架构设计系列结构;匹配块见 `google-ads-keyword-taxonomy.md` |
415
414
  | 搜索词分析 | `ad search-terms` | 每周导出,按第八章流程处理 |
416
415
  | 竞品监控 | `ad auction-insights`(如有) | 按第九章分析竞争态势 |
417
416
  | 出价调整 | 广告系列级 Smart Bidding 设置 | 新账户用 Manual/ECPC → 有数据后切 tCPA/tROAS |
@@ -0,0 +1,86 @@
1
+ # Google 搜索广告关键词分层与数量规范(Agent 参考)
2
+
3
+ > 所属 skill:`siluzan-tso`。本文为**方案撰写参考**,**不由** `ad campaign-validate` / `ad campaign-create` 强制执行。
4
+ > 建户 JSON 契约与 CLI 硬约束见 `assets/campaign-create-template.md`、`references/google-ads-campaign-plan.md`。
5
+
6
+ ---
7
+
8
+ ## 结构数量(每广告系列 / 每广告组)
9
+
10
+ | 模块 | 规则 | 建议数量 | 示例 |
11
+ |------|------|----------|------|
12
+ | Campaign | 按产品线拆分 | 3–10 个系列(多文件 + `campaign-manifest.json`) | Payment Gateway / CRM |
13
+ | Ad Group | 一个搜索意图一组 | 每组 5–20 个词 | Payment API Integration |
14
+ | 核心词 | 高商业意图 | 每组 **5–15** | payment api pricing |
15
+ | 长尾词 | 场景明确的长 query | 每组 **10–25** | crm for manufacturing |
16
+ | Exact Match | 核心高转化 | 每组 **2–8** 条 | [stripe alternative] |
17
+ | Phrase Match | 主流量 | 每组 **3–10** 条 | "payment solution" |
18
+ | Broad Match | 少量测试 | 每组 **1–3** 条 | payment platform |
19
+ | 否定关键词 | 基础否词库 | 系列级建议 **≥20** | free / jobs / tutorial |
20
+ | 品牌系列 | 独立 Campaign | manifest `role: brand` | company crm |
21
+ | 竞品系列 | 独立 Campaign | manifest `role: competitor` | stripe alternative |
22
+ | Search Terms | 运营节奏 | 每周检查 | `ad search-terms` |
23
+
24
+ ### 初始匹配类型占比(按组内词条数)
25
+
26
+ | 匹配类型 | 占比 | 用途 |
27
+ |----------|------|------|
28
+ | Exact | 30%–40% | 控制 ROI |
29
+ | Phrase | 50%–60% | 主流量 |
30
+ | Broad | 10%–20% | 扩量测试 |
31
+
32
+ 关键词写入 JSON 的 **`campaign.AdGroupsForBatchJob[].KeywordsForBatchJob`**(`MatchTypeV2` + `KeywordText` 词面);无顶层 `KeywordRecommendationsV2` 字段。
33
+
34
+ ---
35
+
36
+ ## 核心词生成规则
37
+
38
+ | 类型 | 规则 | 示例 |
39
+ |------|------|------|
40
+ | 产品词 | 产品 + 商业动作 | payment gateway pricing |
41
+ | 服务词 | 行业 + company/agency | saas marketing company |
42
+ | 痛点词 | 问题 + solution | reduce chargeback solution |
43
+ | 竞品词 | competitor + alternative | stripe alternative |
44
+ | 行业术语 | 专业词汇/缩写 | merchant acquiring |
45
+
46
+ ---
47
+
48
+ ## 长尾词生成规则
49
+
50
+ | 类型 | 规则 | 示例 |
51
+ |------|------|------|
52
+ | 场景词 | 产品 + 行业场景 | crm for manufacturing |
53
+ | 地域词 | 产品 + 国家 | payment gateway uae |
54
+ | 技术词 | api/sdk/integration | payment sdk integration |
55
+ | 问题词 | how to + 问题 | how to reduce failed payments |
56
+
57
+ 拓词编排见 `references/keyword-planner-workflows.md`;Planner 出价用 `*USD` 与 `*CNY`,根级 `bidAmountCurrency` / `usdToCnyExchangeRate`。
58
+
59
+ ---
60
+
61
+ ## 多系列 manifest(可选,仅组织多份 JSON)
62
+
63
+ ```json
64
+ {
65
+ "account": "<mediaCustomerId>",
66
+ "customerName": "<mediaAccountName>",
67
+ "campaigns": [
68
+ { "configFile": "./campaign-generic.json", "role": "generic" },
69
+ { "configFile": "./campaign-brand.json", "role": "brand" },
70
+ { "configFile": "./campaign-competitor.json", "role": "competitor" }
71
+ ]
72
+ }
73
+ ```
74
+
75
+ ---
76
+
77
+ ## 搜索网络(`campaign-validate` / `campaign-create` 硬约束)
78
+
79
+ JSON 中必须为:
80
+
81
+ - `campaign.TargetGoogleSearch`: true
82
+ - `campaign.TargetSearchNetwork`: false
83
+ - `campaign.TargetContentNetwork`: false
84
+ - `campaign.TargetPartnerSearchNetwork`: false
85
+
86
+ 否则 `campaign-validate` 报 **error**。