siluzan-tso-cli 1.1.29-beta.2 → 1.1.29-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 (169) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +3174 -867
  3. package/dist/skill/AGENTS.md +30 -31
  4. package/dist/skill/SKILL.md +16 -33
  5. package/dist/skill/_meta.json +2 -2
  6. package/dist/skill/assets/campaign-create-keyword-test.fixed.json +10 -33
  7. package/dist/skill/assets/campaign-create-template.json +2 -0
  8. package/dist/skill/assets/campaign-create-template.md +114 -99
  9. package/dist/skill/assets/market-analysis-rules.md +55 -55
  10. package/dist/skill/assets/meta-period-report-rules.md +61 -60
  11. package/dist/skill/assets/pmax-asset-group-template.json +12 -4
  12. package/dist/skill/assets/pmax-asset-group-template.md +25 -0
  13. package/dist/skill/assets/pmax-brand-assets-template.json +25 -0
  14. package/dist/skill/assets/pmax-brand-assets-template.md +22 -0
  15. package/dist/skill/assets/pmax-brand-guidelines-enable-template.json +24 -0
  16. package/dist/skill/assets/pmax-brand-guidelines-enable-template.md +22 -0
  17. package/dist/skill/assets/pmax-create-template.json +41 -2
  18. package/dist/skill/assets/pmax-create-template.md +84 -51
  19. package/dist/skill/assets/pmax-lead-form-template.json +36 -0
  20. package/dist/skill/assets/pmax-lead-form-template.md +70 -0
  21. package/dist/skill/assets/pmax-signals-template.json +2 -6
  22. package/dist/skill/assets/pmax-whatsapp-template.json +26 -0
  23. package/dist/skill/assets/pmax-whatsapp-template.md +45 -0
  24. package/dist/skill/assets/website-diagnosis-rules.md +67 -67
  25. package/dist/skill/references/README.md +78 -65
  26. package/dist/skill/references/accounts/accounts.md +99 -105
  27. package/dist/skill/references/accounts/finance.md +23 -79
  28. package/dist/skill/references/accounts/open-account-by-media.md +84 -81
  29. package/dist/skill/references/accounts/open-account-google-ui.md +24 -24
  30. package/dist/skill/references/analytics/account-analytics.md +94 -103
  31. package/dist/skill/references/analytics/facebook-analysis-guide.md +61 -61
  32. package/dist/skill/references/analytics/google-analysis-batch.md +2 -2
  33. package/dist/skill/references/analytics/keyword-planner-workflows.md +22 -23
  34. package/dist/skill/references/analytics/market-analysis-guide.md +31 -25
  35. package/dist/skill/references/analytics/rag.md +20 -20
  36. package/dist/skill/references/analytics/reporting.md +4 -4
  37. package/dist/skill/references/analytics/website-diagnosis-guide.md +24 -24
  38. package/dist/skill/references/core/agent-conventions.md +136 -106
  39. package/dist/skill/references/core/cli-enums.md +47 -53
  40. package/dist/skill/references/core/playbooks.md +42 -41
  41. package/dist/skill/references/core/subagent-orchestration.md +40 -40
  42. package/dist/skill/references/core/tips.md +18 -61
  43. package/dist/skill/references/core/workflows.md +36 -29
  44. package/dist/skill/references/google-ads/google-ads-campaign-plan.md +25 -24
  45. package/dist/skill/references/google-ads/google-ads.md +81 -57
  46. package/dist/skill/references/google-ads/pmax-api.md +138 -34
  47. package/dist/skill/references/google-ads/rules/README.md +15 -15
  48. package/dist/skill/references/google-ads/rules/google-ads-account-audit.md +22 -22
  49. package/dist/skill/references/google-ads/rules/google-ads-compliance.md +27 -27
  50. package/dist/skill/references/google-ads/rules/google-ads-keyword-strategy.md +15 -15
  51. package/dist/skill/references/google-ads/rules/google-ads-keyword-taxonomy.md +32 -22
  52. package/dist/skill/references/google-ads/rules/google-ads-launch-plan-template.md +32 -30
  53. package/dist/skill/references/google-ads/rules/google-ads-pmax-guide.md +3 -1
  54. package/dist/skill/references/misc/tso-home.md +8 -8
  55. package/dist/skill/references/operations/clue.md +1 -1
  56. package/dist/skill/references/operations/forewarning.md +1 -1
  57. package/dist/skill/references/operations/hosted-automation-optimize-index.md +2 -2
  58. package/dist/skill/references/operations/hosted-automation-scenarios.md +5 -5
  59. package/dist/skill/references/operations/hosted-automation-self-control.md +15 -15
  60. package/dist/skill/references/operations/hosted-automation-user-catalog.md +13 -13
  61. package/dist/skill/references/operations/optimize.md +8 -8
  62. package/dist/skill/references/report-templates/README.md +45 -0
  63. package/dist/skill/references/report-templates/REPORT-WORKFLOW.md +114 -0
  64. package/dist/skill/references/report-templates/bing-period-report.md +65 -0
  65. package/dist/skill/references/report-templates/google-account-diagnosis-report.md +83 -0
  66. package/dist/skill/references/report-templates/google-ads-diagnosis.md +378 -0
  67. package/dist/skill/references/report-templates/google-inquiry-analysis.md +543 -0
  68. package/dist/skill/references/report-templates/google-period-report-excel.md +126 -0
  69. package/dist/skill/references/report-templates/google-period-report.md +60 -0
  70. package/dist/skill/references/report-templates/market-analysis-report.md +40 -0
  71. package/dist/skill/references/report-templates/meta-account-diagnosis-report.md +74 -0
  72. package/dist/skill/references/report-templates/meta-period-report-excel.md +230 -0
  73. package/dist/skill/references/report-templates/meta-period-report.md +219 -0
  74. package/dist/skill/references/report-templates/okki-weekly-google-client.md +217 -0
  75. package/dist/skill/references/report-templates/tiktok-period-report.md +56 -0
  76. package/dist/skill/references/report-templates/website-diagnosis-report.md +79 -0
  77. package/dist/skill/report-templates/README.md +16 -14
  78. package/dist/skill/report-templates/REPORT-WORKFLOW.md +13 -13
  79. package/dist/skill/report-templates/google-account-diagnosis-report.md +1 -1
  80. package/dist/skill/report-templates/google-ads-diagnosis.md +21 -21
  81. package/dist/skill/report-templates/google-inquiry-analysis.md +44 -44
  82. package/dist/skill/report-templates/google-period-report-excel.md +24 -24
  83. package/dist/skill/report-templates/google-period-report.md +23 -23
  84. package/dist/skill/report-templates/market-analysis-report.md +1 -1
  85. package/dist/skill/report-templates/meta-period-report-excel.md +72 -64
  86. package/dist/skill/report-templates/meta-period-report.html +706 -428
  87. package/dist/skill/report-templates/meta-period-report.md +61 -60
  88. package/dist/skill/report-templates/okki-weekly-google-client.md +26 -26
  89. package/dist/skill/report-templates/report-template-academic.html +1 -1
  90. package/dist/skill/report-templates/report-template-dark.html +1 -1
  91. package/dist/skill/report-templates/report-template-formal.html +1 -1
  92. package/dist/skill/report-templates/report-template-mobile.html +1 -1
  93. package/dist/skill/report-templates/report-template-onepager.html +1 -1
  94. package/dist/skill/report-templates/report-template-print.html +1 -1
  95. package/dist/skill/report-templates/report-template.html +1 -1
  96. package/dist/skill/report-templates/website-diagnosis-report.html +1731 -1653
  97. package/dist/skill/report-templates/website-diagnosis-report.md +21 -23
  98. package/dist/skill/scripts/install.ps1 +1 -1
  99. package/dist/skill/scripts/install.sh +1 -1
  100. package/dist/skill/snippets/handoff-p7-inquiry.md +5 -5
  101. package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +2 -14
  102. package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +1 -3
  103. package/eval/cases/accounts-single-balance-not-bulk.scenario.json +3 -14
  104. package/eval/cases/budget-display-not-raw-micros.scenario.json +1 -8
  105. package/eval/cases/clue-meta-leads-json.scenario.json +2 -14
  106. package/eval/cases/clue-tiktok-leads-json.scenario.json +2 -11
  107. package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +3 -9
  108. package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +3 -9
  109. package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +3 -9
  110. package/eval/cases/facebook-analysis-google-section-aliases.scenario.json +2 -11
  111. package/eval/cases/facebook-analysis-not-google-keywords.scenario.json +3 -10
  112. package/eval/cases/facebook-analysis-period-default.scenario.json +2 -14
  113. package/eval/cases/finance-invoice-info-list.scenario.json +3 -11
  114. package/eval/cases/forewarning-list-google.scenario.json +3 -14
  115. package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +2 -6
  116. package/eval/cases/google-analysis-keywords-route.scenario.json +2 -14
  117. package/eval/cases/human-p1-multiturn.scenario.json +1 -5
  118. package/eval/cases/meta-single-balance-not-bulk.scenario.json +3 -17
  119. package/eval/cases/no-legacy-json-flag.scenario.json +2 -6
  120. package/eval/cases/open-account-google-noninteractive.scenario.json +1 -3
  121. package/eval/cases/open-account-tiktok-license-file.scenario.json +1 -3
  122. package/eval/cases/optimize-list-by-account.scenario.json +3 -11
  123. package/eval/cases/p1-single-account-profile.scenario.json +1 -11
  124. package/eval/cases/p2-balance-scan-bulk.scenario.json +2 -9
  125. package/eval/cases/p3-accounts-digest.scenario.json +1 -5
  126. package/eval/cases/p4-fb-meta-period-report.scenario.json +2 -12
  127. package/eval/cases/p4-period-report-window.scenario.json +1 -8
  128. package/eval/cases/pmax-asset-group-create-with-bg.scenario.json +15 -0
  129. package/eval/cases/pmax-brand-edit-routing.scenario.json +12 -0
  130. package/eval/cases/pmax-edit-not-campaign-edit.scenario.json +15 -0
  131. package/eval/cases/pmax-enable-brand-guidelines.scenario.json +15 -0
  132. package/eval/cases/pmax-no-assets-update-brand-fields.scenario.json +12 -0
  133. package/eval/cases/rag-before-keyword-expand.scenario.json +1 -11
  134. package/eval/cases/rag-list-then-query.scenario.json +2 -14
  135. package/eval/cases/report-list-google.scenario.json +2 -11
  136. package/eval/cases/report-push-list-google.scenario.json +2 -11
  137. package/eval/cases/setup-login-or-env.scenario.json +1 -3
  138. package/eval/cases/setup-siluzan-data-permission-env.scenario.json +1 -3
  139. package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +2 -6
  140. package/eval/cases/time-range-user-delegates-default.scenario.json +1 -8
  141. package/eval/cases/tips-json-out-filtering.scenario.json +1 -3
  142. package/eval/cases/tips-large-json-pagination.scenario.json +1 -3
  143. package/eval/cases/uj-ad-campaign-validate-before-create-stub.scenario.json +2 -11
  144. package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +1 -3
  145. package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +6 -18
  146. package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +1 -8
  147. package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +2 -11
  148. package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +1 -3
  149. package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +2 -11
  150. package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +1 -4
  151. package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +2 -17
  152. package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +2 -14
  153. package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +2 -6
  154. package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +3 -17
  155. package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +1 -5
  156. package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +1 -3
  157. package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +3 -17
  158. package/eval/cases/uj-patrol-google-balances-low.scenario.json +2 -11
  159. package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +3 -14
  160. package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +2 -14
  161. package/eval/stub-fixtures/facebook-analysis.json +24 -4
  162. package/eval/stub-fixtures/meta-overview.json +4 -1
  163. package/eval/stub-fixtures/pmax-asset-group-create-ok.json +12 -0
  164. package/eval/stub-fixtures/pmax-brand-assets-edit-ok.json +11 -0
  165. package/eval/stub-fixtures/pmax-brand-guidelines-enable-ok.json +11 -0
  166. package/eval/stub-fixtures/pmax-edit-ok.json +11 -0
  167. package/eval/stub-fixtures/pmax-get-bg-on.json +20 -0
  168. package/package.json +1 -1
  169. package/dist/skill/references/core/deliverable-preflight.md +0 -109
@@ -7,15 +7,15 @@
7
7
 
8
8
  ## 原始业务输入(collect)
9
9
 
10
- | 字段 | CLI 选项 | 必填 |
11
- | ---- | -------- | ---- |
12
- | 客户名称 | `--customer-name` | 四选一* |
13
- | 客户网站 | `--website` | 四选一* |
14
- | 所属行业 | `--industry` | 四选一* |
15
- | 核心产品 | `--core-products` | 四选一* |
16
- | 商业定位 | `--business-position` | 否 |
17
- | 目标市场 | `--target-market` | 默认「全球」 |
18
- | 时间范围 | `--time-range` | 默认「近12个月」 |
10
+ | 字段 | CLI 选项 | 必填 |
11
+ | -------- | --------------------- | ---------------- |
12
+ | 客户名称 | `--customer-name` | 四选一\* |
13
+ | 客户网站 | `--website` | 四选一\* |
14
+ | 所属行业 | `--industry` | 四选一\* |
15
+ | 核心产品 | `--core-products` | 四选一\* |
16
+ | 商业定位 | `--business-position` | 否 |
17
+ | 目标市场 | `--target-market` | 默认「全球」 |
18
+ | 时间范围 | `--time-range` | 默认「近12个月」 |
19
19
 
20
20
  \* 至少一项。目标市场非中国时,**禁止**用中国数据替代目标市场分析。
21
21
 
@@ -27,76 +27,76 @@
27
27
 
28
28
  ### 封面
29
29
 
30
- | 维度 | 必含内容 |
31
- | ---- | -------- |
30
+ | 维度 | 必含内容 |
31
+ | -------- | -------------------------------------------- |
32
32
  | 报告标识 | 标题含「战略市场分析」或「KA客户」+ 目标市场 |
33
- | 执行摘要 | 核心结论段或 KPI/metric 卡片(非仅标题) |
33
+ | 执行摘要 | 核心结论段或 KPI/metric 卡片(非仅标题) |
34
34
 
35
35
  ### 一、市场与趋势诊断
36
36
 
37
- | # | 维度 | 必含内容 |
38
- | - | ---- | -------- |
39
- | 1.1 | 全球市场规模与增长 | TAM/SAM/SOM 或「市场规模」+ CAGR/增长率;**须有 Chart.js 图** |
40
- | 1.2 | 赛道与生态定位 | 价值链/产业链表:上游·中游·下游·服务层 |
41
- | 1.3 | 目标市场国家拆解 | 按国家/区域:规模、增长、优先级、潜力(宜含美/加/墨或用户指定市场) |
42
- | 1.4 | 技术趋势 PESTEL | 政策/经济/社会/技术/环境/法规 ≥6 维表或等价结构 |
43
- | 1.5 | 中期预测 | 未来 3–5 年趋势 + **假设依据** |
37
+ | # | 维度 | 必含内容 |
38
+ | --- | ------------------ | ------------------------------------------------------------------- |
39
+ | 1.1 | 全球市场规模与增长 | TAM/SAM/SOM 或「市场规模」+ CAGR/增长率;**须有 ECharts 图** |
40
+ | 1.2 | 赛道与生态定位 | 价值链/产业链表:上游·中游·下游·服务层 |
41
+ | 1.3 | 目标市场国家拆解 | 按国家/区域:规模、增长、优先级、潜力(宜含美/加/墨或用户指定市场) |
42
+ | 1.4 | 技术趋势 PESTEL | 政策/经济/社会/技术/环境/法规 ≥6 维表或等价结构 |
43
+ | 1.5 | 中期预测 | 未来 3–5 年趋势 + **假设依据** |
44
44
 
45
45
  ### 二、目标行业深度洞察
46
46
 
47
- | # | 维度 | 必含内容 |
48
- | - | ---- | -------- |
49
- | 2.1 | 核心痛点 | **≥4 项**,每条有业务含义(非一句话带过) |
50
- | 2.2 | 法规与合规 | 核心法规表 + 技术应对 + **合规溢价/成本估算** |
47
+ | # | 维度 | 必含内容 |
48
+ | --- | ------------ | ---------------------------------------------------------------- |
49
+ | 2.1 | 核心痛点 | **≥4 项**,每条有业务含义(非一句话带过) |
50
+ | 2.2 | 法规与合规 | 核心法规表 + 技术应对 + **合规溢价/成本估算** |
51
51
  | 2.3 | 业务场景流程 | **原流程 vs 介入后新流程**(BPMN 文本)+ 效率/成本量化(如 30%) |
52
52
 
53
53
  ### 三、目标受众与场景
54
54
 
55
- | # | 维度 | 必含内容 |
56
- | - | ---- | -------- |
57
- | 3.1 | 受众分析 | 用户总量/市场规模;**≥4 类用户群体表**(特征/痛点/价值) |
55
+ | # | 维度 | 必含内容 |
56
+ | --- | ---------- | ------------------------------------------------------------ |
57
+ | 3.1 | 受众分析 | 用户总量/市场规模;**≥4 类用户群体表**(特征/痛点/价值) |
58
58
  | 3.2 | 场景与价值 | 核心功能、差异化、应用场景、用户价值与企业价值;**须有图表** |
59
59
 
60
60
  ### 四、竞争策略与定位
61
61
 
62
- | # | 维度 | 必含内容 |
63
- | - | ---- | -------- |
64
- | 4.1 | 竞品识别 | 点名 **≥3** 个主要竞品/对标品牌 |
65
- | 4.2 | 功能性能对比 | 对比表 **≥10 行维度** × 我方 + ≥3 竞品 + 性能指标行 |
66
- | 4.3 | 竞争空白 | **功能、场景、用户群、地域** 四类空白(至少覆盖 3 类) |
67
- | 4.4 | 定位与差异化 | **一句定位陈述** + **3 个差异化维度** |
62
+ | # | 维度 | 必含内容 |
63
+ | --- | ------------ | ------------------------------------------------------ |
64
+ | 4.1 | 竞品识别 | 点名 **≥3** 个主要竞品/对标品牌 |
65
+ | 4.2 | 功能性能对比 | 对比表 **≥10 行维度** × 我方 + ≥3 竞品 + 性能指标行 |
66
+ | 4.3 | 竞争空白 | **功能、场景、用户群、地域** 四类空白(至少覆盖 3 类) |
67
+ | 4.4 | 定位与差异化 | **一句定位陈述** + **3 个差异化维度** |
68
68
 
69
69
  ### 五、增长与品牌策略
70
70
 
71
- | # | 维度 | 必含内容 |
72
- | - | ---- | -------- |
71
+ | # | 维度 | 必含内容 |
72
+ | --- | ---------- | ---------------------------------------------------------------- |
73
73
  | 5.1 | GTM 三阶段 | 试点启动 → 规模复制 → 生态扩展;每阶段:目标、动作、**KPI、ROI** |
74
- | 5.2 | 品牌传播 | 品牌主张、价值、差异化信息、渠道与内容策略 |
75
- | 5.3 | 营销战术 | 内容营销、渠道营销、KOL/口碑、销售模式 |
74
+ | 5.2 | 品牌传播 | 品牌主张、价值、差异化信息、渠道与内容策略 |
75
+ | 5.3 | 营销战术 | 内容营销、渠道营销、KOL/口碑、销售模式 |
76
76
 
77
77
  ### 六、实施、资源与风险
78
78
 
79
- | # | 维度 | 必含内容 |
80
- | - | ---- | -------- |
81
- | 6.1 | 里程碑 | 任务表:阶段/任务/负责人/成果/指标 |
82
- | 6.2 | 资源预算 | 人力/技术/市场分配或预算比例 |
79
+ | # | 维度 | 必含内容 |
80
+ | --- | -------- | -------------------------------------------- |
81
+ | 6.1 | 里程碑 | 任务表:阶段/任务/负责人/成果/指标 |
82
+ | 6.2 | 资源预算 | 人力/技术/市场分配或预算比例 |
83
83
  | 6.3 | 风险矩阵 | 市场/竞争/技术/运营风险 + **每类 ≥2 条应对** |
84
84
 
85
85
  ### 附录
86
86
 
87
- | # | 维度 | 必含内容 |
88
- | - | ---- | -------- |
89
- | A.1 | 数据来源 | 机构、报告名、日期或 URL 清单 |
90
- | A.2 | 调研方法 | 桌面研究/访谈/问卷等 |
91
- | A.3 | 术语表 | 解释 ROI、CAGR、GTM、BPMN 等 **≥3** 个缩写 |
87
+ | # | 维度 | 必含内容 |
88
+ | --- | -------- | ------------------------------------------ |
89
+ | A.1 | 数据来源 | 机构、报告名、日期或 URL 清单 |
90
+ | A.2 | 调研方法 | 桌面研究/访谈/问卷等 |
91
+ | A.3 | 术语表 | 解释 ROI、CAGR、GTM、BPMN 等 **≥3** 个缩写 |
92
92
 
93
93
  ### 呈现规范(HTML)
94
94
 
95
- | 维度 | 要求 |
96
- | ---- | ---- |
97
- | Chart.js | 引用 CDN + `new Chart` 图表 |
98
- | 来源脚注 | 图表/关键表配 `Source:` 或「来源」 |
99
- | 版式 | Bootstrap CDN;商务深蓝;max-width 1200px;每 slide 页码点 |
95
+ | 维度 | 要求 |
96
+ | -------- | ------------------------------------------------------------------------------------------- |
97
+ | ECharts | 统一引用 `https://staticpn.siluzan.com/assets/slz/homeCDN/echarts.js` + `echarts.init` 图表 |
98
+ | 来源脚注 | 图表/关键表配 `Source:` 或「来源」 |
99
+ | 版式 | Bootstrap CDN;商务深蓝;max-width 1200px;每 slide 页码点 |
100
100
 
101
101
  ---
102
102
 
@@ -127,8 +127,8 @@
127
127
 
128
128
  ## 与「账户分析 / 网站诊断」区分
129
129
 
130
- | 能力 | 说明 |
131
- | ---- | ---- |
132
- | 本报告 | 行业/竞品/GTM 战略,公开市场调研 |
133
- | google-analysis | 广告投放数据 |
134
- | website-diagnosis | 落地页 6 模块评分 |
130
+ | 能力 | 说明 |
131
+ | ----------------- | -------------------------------- |
132
+ | 本报告 | 行业/竞品/GTM 战略,公开市场调研 |
133
+ | google-analysis | 广告投放数据 |
134
+ | website-diagnosis | 落地页 6 模块评分 |
@@ -8,13 +8,13 @@
8
8
 
9
9
  ## 与网站诊断的对照(为何 FB 报告会显得「建议太少」)
10
10
 
11
- | 网站诊断(P8) | Meta 周期报告(P4-FB) |
12
- | -------------- | ---------------------- |
13
- | `website-diagnosis-rules.md` 规定 29 子项全覆盖 | 本文件规定 **5 维数据 + 叙事 + 建议** 全覆盖 |
14
- | 每项 `issue` + `suggestion`(较差项以「强烈建议:」开头) | 每条建议 `content` 须 **引用当次数字** + **可执行动作** |
15
- | `coreIssuesIds` + `PriorityPlan` 高/中/低 | `priorityPlan` + `narrative.recommendations` 4 条 + `supplementaryRecommendations` |
16
- | HTML 由 `render` 渲染全部章节 | HTML **必须**填 `executiveSummary`、`healthDiagnosis`、`sections.*.insight` 等(见下) |
17
- | 交付前 Read HTML 对照章节清单 | 交付前 Read HTML/xlsx 对照 `deliverable-preflight.md` § P4-FB |
11
+ | 网站诊断(P8) | Meta 周期报告(P4-FB) |
12
+ | --------------------------------------------------------- | -------------------------------------------------------------------------------------- |
13
+ | `website-diagnosis-rules.md` 规定 29 子项全覆盖 | 本文件规定 **5 维数据 + 叙事 + 建议** 全覆盖 |
14
+ | 每项 `issue` + `suggestion`(较差项以「强烈建议:」开头) | 每条建议 `content` 须 **引用当次数字** + **可执行动作** |
15
+ | `coreIssuesIds` + `PriorityPlan` 高/中/低 | `priorityPlan` + `narrative.recommendations` 4 条 + `supplementaryRecommendations` |
16
+ | HTML 由 `render` 渲染全部章节 | HTML **必须**填 `executiveSummary`、`healthDiagnosis`、`sections.*.insight` 等(见下) |
17
+ | 交付前 Read HTML 对照章节清单 | 交付前 Read HTML/xlsx 对照 `deliverable-preflight.md` § P4-FB |
18
18
 
19
19
  **常见失误(导致建议偏少)**:
20
20
 
@@ -35,45 +35,45 @@
35
35
 
36
36
  ### 1. `narrative.overall`(整体表现)
37
37
 
38
- | 要求 | 细则 |
39
- | ---- | ---- |
40
- | 字数 | **≥ 120 字**(中文) |
38
+ | 要求 | 细则 |
39
+ | -------- | ------------------------------------------------------------------------------------------ |
40
+ | 字数 | **≥ 120 字**(中文) |
41
41
  | 必含数字 | 花费、`results`、CPL(`costPerResult`)、`reach`、`impressions`、`frequency` **至少 5 项** |
42
- | 必含口径 | `resultType`、`attributionSetting`(写入 `meta` 并在段中提及) |
43
- | 可选 | 若有 `previousPeriod`,写 1~2 句环比(花费 ±%、CPL ±%) |
42
+ | 必含口径 | `resultType`、`attributionSetting`(写入 `meta` 并在段中提及) |
43
+ | 可选 | 若有 `previousPeriod`,写 1~2 句环比(花费 ±%、CPL ±%) |
44
44
 
45
45
  ### 2. `narrative.regional[]`(区域 / 广告组)
46
46
 
47
- | 要求 | 细则 |
48
- | ---- | ---- |
49
- | 条数 | **每个** `ad-sets` 中花费 >0 的广告组 **各 1 段**(不得合并成 1 句带过) |
50
- | 字数 | 每段 **≥ 80 字** |
51
- | 必含 | 组名、花费占比或绝对值、线索数、`costPerResult`、频次;判断「曝光不足 / 频次过高 / 效率领先」 |
52
- | 数据依据 | `ad-sets-<id>.json` → `adGroups[]` |
47
+ | 要求 | 细则 |
48
+ | -------- | --------------------------------------------------------------------------------------------- |
49
+ | 条数 | **每个** `ad-sets` 中花费 >0 的广告组 **各 1 段**(不得合并成 1 句带过) |
50
+ | 字数 | 每段 **≥ 80 字** |
51
+ | 必含 | 组名、花费占比或绝对值、线索数、`costPerResult`、频次;判断「曝光不足 / 频次过高 / 效率领先」 |
52
+ | 数据依据 | `ad-sets-<id>.json` → `adGroups[]` |
53
53
 
54
54
  ### 3. `narrative.country`(国家报告)
55
55
 
56
- | 要求 | 细则 |
57
- | ---- | ---- |
58
- | 字数 | **≥ 80 字** |
59
- | 必含 | CPL **最低** 与 **最高** 国家名及具体 CPL;中间梯队 1~2 国;花费集中度 |
60
- | 数据依据 | `country-<id>.json` → `countries[]` |
56
+ | 要求 | 细则 |
57
+ | -------- | ----------------------------------------------------------------------- |
58
+ | 字数 | **≥ 80 字** |
59
+ | 必含 | CPL **最低** 与 **最高** 国家名及具体 CPL;中间梯队 1~2 国;花费集中度 |
60
+ | 数据依据 | `country-<id>.json` → `countries[]` |
61
61
 
62
62
  ### 4. `narrative.recommendations[]`(固定 4 条标题)
63
63
 
64
64
  **必须恰好 4 条**,`title` 仅限下表枚举;`content` 须**数据驱动**,不得模板空话。
65
65
 
66
- | title | content 最低要求(每条 **≥ 150 字**) |
67
- | ----- | ------------------------------------- |
68
- | **简化表单问题** | 结合 **高频次 + 高 CPL** 的国家/组(写出名称与数字);建议字段从 N 减到 3;说明预期对 CPL 的影响 |
69
- | **区域调整** | 按 **具体广告组** 写语言/市场策略(如土/葡/德);引用各组 CPL 对比;写清「加谁、减谁、暂停谁」 |
70
- | **预算重构** | 给出 **具体比例**(如 4:3:3 或按 spend 占比调整);测试周期(7/14 天);优胜劣汰阈值(CPL > 账户均值 ×1.2 则减 30%) |
71
- | **素材建议** | 按 **平台**(IG/FB)与 **国家** 分述;素材套数、视频时长、形态;至少点名 1 个高花费低结果创意/版位 |
66
+ | title | content 最低要求(每条 **≥ 150 字**) |
67
+ | ---------------- | -------------------------------------------------------------------------------------------------------------------- |
68
+ | **简化表单问题** | 结合 **高频次 + 高 CPL** 的国家/组(写出名称与数字);建议字段从 N 减到 3;说明预期对 CPL 的影响 |
69
+ | **区域调整** | 按 **具体广告组** 写语言/市场策略(如土/葡/德);引用各组 CPL 对比;写清「加谁、减谁、暂停谁」 |
70
+ | **预算重构** | 给出 **具体比例**(如 4:3:3 或按 spend 占比调整);测试周期(7/14 天);优胜劣汰阈值(CPL > 账户均值 ×1.2 则减 30%) |
71
+ | **素材建议** | 按 **平台**(IG/FB)与 **国家** 分述;素材套数、视频时长、形态;至少点名 1 个高花费低结果创意/版位 |
72
72
 
73
73
  **建议前缀(对齐网站诊断)**:
74
74
 
75
- - 问题严重(CPL > 均值 1.3 倍、频次 >2.5、零成效花费 >$50)→ `content` 以 **「强烈建议:」** 开头
76
- - 其余优化项 → **「推荐优化:」** 开头
75
+ - 问题严重(CPL > 均值 1.3 倍、频次 >2.5、零成效花费 >$50)→ `content` 以 **「强烈建议:」** 开头
76
+ - 其余优化项 → **「推荐优化:」** 开头
77
77
 
78
78
  ---
79
79
 
@@ -81,15 +81,15 @@
81
81
 
82
82
  在 4 条固定标题之外,**必须**再写 **7 维清单**,每条 `{ "dimension", "issue", "suggestion" }`:
83
83
 
84
- | dimension | issue(发现了什么) | suggestion(怎么办) |
85
- | --------- | ------------------- | -------------------- |
86
- | 预算与广告组 | 点名高 `spendPercentage`、差 `costPerResult` 的组 | 降预算 %、暂停、或合并受众 |
87
- | 平台与版位 | `publisherPlatform` + `platformPosition` 组合 | 减投差版位、加码 winner 平台 |
88
- | 地域 | 高消耗低结果国家 | geo 排除 / 收窄 / 单独组 |
89
- | 受众 | 低效 age×gender | 排除或降 bid;扩量高效段 |
90
- | 创意 | 高花费低 `results` 的 ad | 关停、复制 winner 结构 |
91
- | 频次与疲劳 | `frequency` >2.5 且转化差 | 扩受众、换创意、降预算 |
92
- | 接口限制 | 无按日/关键词等 | 一句说明「Meta 接口未提供」,**禁止编造** |
84
+ | dimension | issue(发现了什么) | suggestion(怎么办) |
85
+ | ------------ | ------------------------------------------------- | ----------------------------------------- |
86
+ | 预算与广告组 | 点名高 `spendPercentage`、差 `costPerResult` 的组 | 降预算 %、暂停、或合并受众 |
87
+ | 平台与版位 | `publisherPlatform` + `platformPosition` 组合 | 减投差版位、加码 winner 平台 |
88
+ | 地域 | 高消耗低结果国家 | geo 排除 / 收窄 / 单独组 |
89
+ | 受众 | 低效 age×gender | 排除或降 bid;扩量高效段 |
90
+ | 创意 | 高花费低 `results` 的 ad | 关停、复制 winner 结构 |
91
+ | 频次与疲劳 | `frequency` >2.5 且转化差 | 扩受众、换创意、降预算 |
92
+ | 接口限制 | 无按日/关键词等 | 一句说明「Meta 接口未提供」,**禁止编造** |
93
93
 
94
94
  每条 `suggestion` **≥ 60 字**,须含 **至少 1 个当次数字或名称**。
95
95
 
@@ -102,10 +102,10 @@
102
102
  ```jsonc
103
103
  {
104
104
  "priorityPlan": {
105
- "high": ["…", "…"], // ≥2 条,本周必须做
106
- "medium": ["…", "…"], // ≥2 条
107
- "low": ["…", "…"] // ≥2 条,持续优化
108
- }
105
+ "high": ["…", "…"], // ≥2 条,本周必须做
106
+ "medium": ["…", "…"], // ≥2 条
107
+ "low": ["…", "…"], // ≥2 条,持续优化
108
+ },
109
109
  }
110
110
  ```
111
111
 
@@ -117,21 +117,22 @@
117
117
 
118
118
  用户未指定 Excel 时,除 §一~§三外 **还必须** 填写:
119
119
 
120
- | 字段 | 最低要求 |
121
- | ---- | -------- |
122
- | `executiveSummary` | **3~5 段**,每段 **≥ 80 字**;解释「为什么」而不只报数;可拆自 `narrative.overall` 但须加深因果 |
123
- | `healthDiagnosis.lifecyclePhase` | `test-market` / `find-winner` / `scale` 三选一 |
124
- | `healthDiagnosis.lifecycleVerdict` | **≥ 60 字**,结合总花费与维度分散度 |
125
- | `healthDiagnosis.fourQuestions` | **恰好 4 张卡片**(钱花得值不值 / 赢在哪 / 输在哪 / 下月重点) |
126
- | 每张 `fourQuestions[]` | `verdict` + `evidence` **≥2 条**(含数字)+ `action` **≥ 40 字** |
127
- | `healthDiagnosis.scorecard` | **≥ 6 行**(平台、国家、广告组、受众等分项红绿灯) |
128
- | `sections.platform.insight` | **≥ 200 字** |
129
- | `sections.country.insight` | **≥ 200 字** |
130
- | `sections.adSets.insight` | **≥ 200 字** |
131
- | `sections.audience` | `goldenProfile` **≥3 条** + `antiProfile` **≥2 条** + `insight` **≥ 150 字** |
132
- | `sections.landingPage.rows` | **≥ 3 行**(心理阻碍 / 数据信号 / 推演 / 优先级) |
133
- | `abTests` | **≥ 3 个**实验(变量、假设、成功标准) |
134
- | `actionChecklist` | `today` **≥2**、`thisWeek` **≥3**、`thisMonth` **≥3** 条可执行项 |
120
+ | 字段 | 最低要求 |
121
+ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
122
+ | `executiveSummary` | **3~5 段**,每段 **≥ 80 字**;解释「为什么」而不只报数;可拆自 `narrative.overall` 但须加深因果 |
123
+ | `healthDiagnosis.lifecyclePhase` | `test-market` / `find-winner` / `scale` 三选一。**可省略**:`render --snapshot-dir` 按花费与集中度自动推断;若手写须与数据一致(render 校验 `lifecyclePhase` vs `lifecyclePhaseInferred`) |
124
+ | `healthDiagnosis.lifecycleVerdict` | **≥ 60 字**,结合总花费与维度分散度;可随 phase 由 CLI 补全 |
125
+ | **阶段判定(CLI 推断口径)** | **测市场**:总花费 &lt; $200,或活跃维度 ≥4 且赢家花费占比 &lt;35%;**放量**:Top 广告组花费/结果占比 ≥55% CPL 账户均值;**找赢家**:其余有优劣分化但未高度集中 |
126
+ | `healthDiagnosis.fourQuestions` | **恰好 4 张卡片**(钱花得值不值 / 赢在哪 / 输在哪 / 下月重点) |
127
+ | 每张 `fourQuestions[]` | `verdict` + `evidence` **≥2 条**(含数字)+ `action` **≥ 40 字** |
128
+ | `healthDiagnosis.scorecard` | **≥ 6 行**有效行;每行须 `item` / `data` / `signal`(green\|yellow\|red) / `signalLabel` / `advice`。**可省略**:`render --snapshot-dir` 自动补全;render 校验行数与字段完整性 |
129
+ | `sections.platform.insight` | **≥ 200 字** |
130
+ | `sections.country.insight` | **≥ 200 字** |
131
+ | `sections.adSets.insight` | **≥ 200 字** |
132
+ | `sections.audience` | `goldenProfile` **≥3 条** + `antiProfile` **≥2 条** + `insight` **≥ 150 字** |
133
+ | `sections.landingPage.rows` | **≥ 3 行**(心理阻碍 / 数据信号 / 推演 / 优先级) |
134
+ | `abTests` | **≥ 3 个**实验(变量、假设、成功标准) |
135
+ | `actionChecklist` | `today` **≥2**、`thisWeek` **≥3**、`thisMonth` **≥3** 条可执行项 |
135
136
 
136
137
  **禁止**:HTML 中大量「(待 Agent 撰写)」占位;交付前 Read HTML 确认无空节。
137
138
 
@@ -152,7 +153,7 @@
152
153
  - [ ] `narrative.recommendations` 4 条,每条 content ≥150 字且含真实数字
153
154
  - [ ] `supplementaryRecommendations` 7 维齐全
154
155
  - [ ] `priorityPlan` high/medium/low 各 ≥2 条
155
- - [ ] HTML:`executiveSummary` ≥3 段、`fourQuestions` =4、`scorecard` ≥6
156
+ - [ ] HTML:`executiveSummary` ≥3 段、`fourQuestions` =4、`lifecyclePhase` 与快照推断一致(或省略由 CLI 补全)、`scorecard` ≥6 行且每行五字段齐全
156
157
  - [ ] HTML:`sections.platform/country/adSets.insight` 各 ≥200 字
157
158
  - [ ] HTML:`actionChecklist` 三列非空;`abTests` ≥3
158
159
  - [ ] Excel:总数据 Sheet 叙事块 4 节齐全,无 1 句话敷衍
@@ -1,16 +1,24 @@
1
1
  {
2
- "_comment": "追加 PMax 资产组:POST .../campaign/pmax/{campaignId}/asset-group",
2
+ "_meta": {
3
+ "schema": "pmax-asset-group/v2",
4
+ "doc": "pmax-asset-group-template.md",
5
+ "note": "POST .../campaign/pmax/{campaignId}/asset-group",
6
+ "agentPitfalls": [
7
+ "提交前 CLI 自动 GET 活动详情判断 Brand Guidelines",
8
+ "BG 生效(_brandGuidelinesActive=true)时 businessName/Logo 可省略,CLI 自动剔除",
9
+ "BG 未生效时 businessName + Logo 必填",
10
+ "勿在 BG 生效后对 AG 用 pmax-assets-update 改 BUSINESS_NAME/LOGO"
11
+ ]
12
+ },
3
13
  "account": "6326027735",
4
14
  "campaignId": "12345678901",
5
15
  "name": "AG-Second",
6
16
  "finalUrls": ["https://www.example.com/landing"],
7
- "businessName": "Test Brand Co",
8
17
  "headlines": ["Headline one ok", "Headline two ok", "Headline three ok"],
9
18
  "longHeadlines": ["Long headline for performance max"],
10
19
  "descriptions": ["Description one ok", "Description two ok"],
11
20
  "imagePaths": {
12
21
  "marketing": "./images/marketing.jpg",
13
- "square": "./images/square.jpg",
14
- "logo": "./images/logo.png"
22
+ "square": "./images/square.jpg"
15
23
  }
16
24
  }
@@ -0,0 +1,25 @@
1
+ # `ad pmax-asset-group-create` JSON
2
+
3
+ 在同一 PMax 活动下追加资产组。
4
+
5
+ ```bash
6
+ siluzan-tso ad pmax-get -a <accountId> --campaign-id <cid> --json-out ./snap
7
+ siluzan-tso ad pmax-asset-group-create --config-file ./ag.json --json-out ./snap
8
+ ```
9
+
10
+ 模板:[`pmax-asset-group-template.json`](pmax-asset-group-template.json)
11
+
12
+ ## Brand Guidelines 分支(Agent 必读)
13
+
14
+ CLI **自动** GET 活动详情,无需手填开关:
15
+
16
+ | `_brandGuidelinesActive`(来自 pmax-get) | JSON 要求 |
17
+ | ----------------------------------------- | ----------------------------------------------------------------------- |
18
+ | `true` | **省略** `businessName`、`logoImage*`、`imagePaths.logo`(仅横图+方图) |
19
+ | `false` | **必填** `businessName` + Logo(三图齐全) |
20
+
21
+ 若 JSON 在 BG 生效时仍含品牌字段,CLI 会警告并忽略(不阻断)。
22
+
23
+ ## 字段
24
+
25
+ 与 `pmax-create` 资产组部分相同(`name`、`finalUrls`、标题/描述、营销图)。`campaignId` 必填。
@@ -0,0 +1,25 @@
1
+ {
2
+ "_meta": {
3
+ "schema": "pmax-brand-assets/v1",
4
+ "doc": "pmax-brand-assets-template.md",
5
+ "note": "PATCH .../campaign/pmax/{campaignId}/brand-assets;Brand Guidelines 已开启时使用",
6
+ "agentPitfalls": [
7
+ "须先 ad pmax-get 确认 _brandGuidelinesActive=true",
8
+ "BG 生效时勿用 pmax-assets-update 改 BUSINESS_NAME/LOGO(会 400)",
9
+ "至少传一项:businessName、logoImage*、landscapeLogoImage* 或 brandGuidelines",
10
+ "mainColor 与 accentColor 须成对",
11
+ "Logo 可填 imagePaths.logo,CLI 自动上传"
12
+ ]
13
+ },
14
+ "account": "REPLACE_mediaCustomerId",
15
+ "campaignId": "REPLACE_campaignId",
16
+ "businessName": "Renamed Brand Co",
17
+ "imagePaths": {
18
+ "logo": "./REPLACE_logo_1200x1200.png"
19
+ },
20
+ "brandGuidelines": {
21
+ "mainColor": "#112233",
22
+ "accentColor": "#445566",
23
+ "predefinedFontFamily": "Roboto"
24
+ }
25
+ }
@@ -0,0 +1,22 @@
1
+ # `ad pmax-brand-assets-edit` PATCH JSON
2
+
3
+ Brand Guidelines(BG)**已开启**时,改商家名 / Logo / 主色字体走 Campaign 级接口。
4
+
5
+ ```bash
6
+ siluzan-tso ad pmax-get -a <accountId> --campaign-id <cid> --json-out ./snap
7
+ # 确认 _brandGuidelinesActive === true 后:
8
+ siluzan-tso ad pmax-brand-assets-edit -a <accountId> --campaign-id <cid> \
9
+ --patch-file ./brand-patch.json --json-out ./snap
10
+ ```
11
+
12
+ 模板:[`pmax-brand-assets-template.json`](pmax-brand-assets-template.json)
13
+
14
+ | 字段 | 说明 |
15
+ | ------------------------------------------------------------------------------------- | ------------------ |
16
+ | `businessName` | 商家名(≤25 字符) |
17
+ | `logoImageAssetId` / `logoImageBase64` / `imagePaths.logo` | Logo 三选一 |
18
+ | `landscapeLogoImageAssetId` / `landscapeLogoImageBase64` / `imagePaths.landscapeLogo` | 可选横版 Logo |
19
+ | `brandGuidelines.mainColor` / `accentColor` | 须成对 |
20
+ | `brandGuidelines.predefinedFontFamily` | 如 `Roboto` |
21
+
22
+ **至少传一项**。改完后 `ad pmax-get` 刷新,品牌读 `brandAssets[]`。
@@ -0,0 +1,24 @@
1
+ {
2
+ "_meta": {
3
+ "schema": "pmax-brand-guidelines-enable/v1",
4
+ "doc": "pmax-brand-guidelines-enable-template.md",
5
+ "note": "POST .../campaign/pmax/{campaignId}/brand-guidelines/enable;启用后不可关闭",
6
+ "agentPitfalls": [
7
+ "仅当 pmax-get 显示 _brandGuidelinesActive=false 时使用",
8
+ "autoPopulateBrandAssets=true 时可省略 businessName/Logo(Google 自动选)",
9
+ "Travel Goals PMax 不支持 BG",
10
+ "启用成功后改品牌走 ad pmax-brand-assets-edit"
11
+ ]
12
+ },
13
+ "account": "REPLACE_mediaCustomerId",
14
+ "campaignId": "REPLACE_campaignId",
15
+ "autoPopulateBrandAssets": false,
16
+ "businessName": "Example Brand Co",
17
+ "imagePaths": {
18
+ "logo": "./REPLACE_logo_1200x1200.png"
19
+ },
20
+ "brandGuidelines": {
21
+ "mainColor": "#112233",
22
+ "accentColor": "#445566"
23
+ }
24
+ }
@@ -0,0 +1,22 @@
1
+ # `ad pmax-brand-guidelines-enable` JSON
2
+
3
+ 存量 PMax 活动启用 Brand Guidelines(**不可关闭**)。
4
+
5
+ ```bash
6
+ siluzan-tso ad pmax-get -a <accountId> --campaign-id <cid> --json-out ./snap
7
+ # _brandGuidelinesActive === false 时:
8
+ siluzan-tso ad pmax-brand-guidelines-enable --config-file ./enable-bg.json --json-out ./snap
9
+ ```
10
+
11
+ 模板:[`pmax-brand-guidelines-enable-template.json`](pmax-brand-guidelines-enable-template.json)
12
+
13
+ | 字段 | 必填 | 说明 |
14
+ | ------------------------- | :--: | -------------------------------------------------------------- |
15
+ | `account` | ✅ | 媒体客户 ID |
16
+ | `campaignId` | ✅ | 活动 ID |
17
+ | `autoPopulateBrandAssets` | | 默认 `false`;`true` 时 Google 自动选品牌资产 |
18
+ | `businessName` | 条件 | `autoPopulateBrandAssets=false` 时必填 |
19
+ | Logo 相关 | 条件 | `autoPopulateBrandAssets=false` 时必填(同 brand-assets 模板) |
20
+ | `brandGuidelines` | | 可选样式 |
21
+
22
+ 启用后:`pmax-asset-group-create` 可省略 `businessName`/Logo;改品牌用 `pmax-brand-assets-edit`。
@@ -7,8 +7,16 @@
7
7
  "勿与 Search campaign-create-template.json 混用(PMax 走 POST .../campaign/pmax,非 batch-asyncs)",
8
8
  "budget / targetCpa_BidingAmount 填主币种「元」,CLI 提交前 ×100 转 API 整型",
9
9
  "三张图:只填 imagePaths(pmax-create 会自动上传为 assetId);勿把 Base64 写入 JSON",
10
+ "brandGuidelinesEnabled 省略时网关默认 true(Google v21+);品牌在 Campaign 级 brandAssets[],首个 AG 不含 Logo/商家名",
11
+ "改已上线品牌:先 pmax-get 看 _brandGuidelinesActive;true 用 pmax-brand-assets-edit,false 用 pmax-assets-update 或 pmax-brand-guidelines-enable",
10
12
  "本地视频:填 videoPath(或别名 video);创建后 CLI 自动 PyAPI 上传并链接,与 --json-out 无关",
11
- "提交前:ad pmax-validate → 用户确认 → ad pmax-create"
13
+ "提交前:ad pmax-validate → 用户确认 → ad pmax-create",
14
+ "campaignExtensions 默认必填:宣传信息≥20、结构化摘要≥20、站内链接≥6、leadForm、businessMessage",
15
+ "文案门禁:headlines 15、longHeadlines 5(Google 上限须填满)、descriptions 5",
16
+ "勿用 Search 的 ExtensionsForBatchJob;PMax 用 campaignExtensions(CLI 会尝试自动转换 CALLOUT/SNIPPET)",
17
+ "Lead Gen/B2B 询盘方案:默认保留 campaignExtensions.leadForm(勿只写 callouts/snippets);用户明确不要表单才删 leadForm",
18
+ "方案 Markdown 须单列「潜在客户表单」节(标题/描述/字段/privacyPolicyUrl);与 JSON 一致",
19
+ "不需要任何附加资产时设 skipCampaignExtensions: true(勿仅删除 campaignExtensions 块)"
12
20
  ]
13
21
  },
14
22
 
@@ -38,5 +46,36 @@
38
46
  "targetedLanguages": [{ "id": 1000 }],
39
47
  "biddingStrategyTypeV2": "MAXIMIZE_CONVERSIONS",
40
48
  "targetCpa_BidingAmount": 0,
41
- "targetRoas": 0
49
+ "targetRoas": 0,
50
+
51
+ "campaignExtensions": {
52
+ "callouts": ["Free shipping", "24/7 support"],
53
+ "structuredSnippets": [
54
+ {
55
+ "header": "Services",
56
+ "values": ["Design", "Install", "Support"]
57
+ }
58
+ ],
59
+ "leadForm": {
60
+ "businessName": "Example Brand Co",
61
+ "headline": "Get a free quote",
62
+ "description": "Tell us about your project.",
63
+ "privacyPolicyUrl": "https://www.example.com/privacy",
64
+ "finalUrl": "https://www.example.com",
65
+ "fields": [
66
+ { "inputType": "FULL_NAME" },
67
+ { "inputType": "EMAIL" },
68
+ { "inputType": "PHONE_NUMBER" }
69
+ ]
70
+ },
71
+ "businessMessage": {
72
+ "starterMessage": "Hi! How can we help you today?",
73
+ "callToActionSelection": "CONTACT_US",
74
+ "callToActionDescription": "Message us on WhatsApp",
75
+ "whatsapp": {
76
+ "countryCode": "US",
77
+ "phoneNumber": "2125550100"
78
+ }
79
+ }
80
+ }
42
81
  }