siluzan-tso-cli 1.1.13 → 1.1.14-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/assets/siluzan-ads/references/hosted-automation-user-catalog.md +40 -0
- package/dist/index.js +371 -55
- package/dist/skill/SKILL.md +78 -37
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/account-analytics.md +69 -2
- package/dist/skill/references/accounts.md +8 -5
- package/dist/skill/references/clue.md +5 -0
- package/dist/skill/references/finance.md +9 -5
- package/dist/skill/references/forewarning.md +7 -0
- package/dist/skill/references/google-ads-rules/google-ads-campaign-optimization.md +3 -2
- package/dist/skill/references/google-ads.md +123 -101
- package/dist/skill/references/hosted-automation-monitoring-json.md +94 -0
- package/dist/skill/references/hosted-automation-optimize-ab-winner.md +69 -0
- package/dist/skill/references/hosted-automation-optimize-index.md +32 -0
- package/dist/skill/references/hosted-automation-optimize-scale.md +99 -0
- package/dist/skill/references/hosted-automation-optimize-weak-downbid.md +94 -0
- package/dist/skill/references/hosted-automation-scenarios.md +23 -0
- package/dist/skill/references/hosted-automation-self-control.md +216 -0
- package/dist/skill/references/hosted-automation-user-catalog.md +40 -0
- package/dist/skill/references/open-account-google-ui.md +0 -6
- package/dist/skill/references/reporting.md +4 -2
- package/dist/skill/references/setup.md +5 -5
- package/dist/skill/references/tips.md +6 -0
- package/dist/skill/references/tso-home.md +1 -1
- package/dist/skill/references/workflows.md +14 -1
- package/dist/skill/report-templates/google-account-diagnosis-report.md +1 -1
- package/dist/skill/report-templates/google-period-report.md +1 -0
- package/dist/skill/scripts/install.ps1 +2 -2
- package/dist/skill/scripts/install.sh +2 -2
- package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +23 -0
- package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +12 -0
- package/eval/cases/accounts-single-balance-not-bulk.scenario.json +23 -0
- package/eval/cases/budget-display-not-raw-micros.scenario.json +17 -0
- package/eval/cases/clue-meta-leads-json.scenario.json +23 -0
- package/eval/cases/clue-tiktok-leads-json.scenario.json +20 -0
- package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +15 -0
- package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +15 -0
- package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +15 -0
- package/eval/cases/destructive-unshare-needs-confirm.scenario.json +9 -0
- package/eval/cases/finance-invoice-info-list.scenario.json +17 -0
- package/eval/cases/forewarning-list-google.scenario.json +20 -0
- package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +12 -0
- package/eval/cases/google-analysis-keywords-route.scenario.json +23 -0
- package/eval/cases/hosted-sop-cpa-spike-downbid.scenario.json +14 -0
- package/eval/cases/hosted-sop-daily-budget-circuit-breaker.scenario.json +13 -0
- package/eval/cases/hosted-sop-empty-spend-pause-p1.scenario.json +14 -0
- package/eval/cases/human-p1-multiturn.scenario.json +17 -0
- package/eval/cases/meta-single-balance-not-bulk.scenario.json +26 -0
- package/eval/cases/open-account-bing-noninteractive.scenario.json +13 -0
- package/eval/cases/open-account-google-noninteractive.scenario.json +12 -0
- package/eval/cases/open-account-tiktok-license-file.scenario.json +12 -0
- package/eval/cases/optimize-list-by-account.scenario.json +17 -0
- package/eval/cases/p1-single-account-profile.scenario.json +20 -0
- package/eval/cases/p2-balance-scan-bulk.scenario.json +18 -0
- package/eval/cases/p3-accounts-digest.scenario.json +20 -0
- package/eval/cases/p4-period-report-window.scenario.json +17 -0
- package/eval/cases/report-list-google.scenario.json +20 -0
- package/eval/cases/report-push-list-google.scenario.json +20 -0
- package/eval/cases/reporting-vs-account-analytics-routing.scenario.json +13 -0
- package/eval/cases/setup-login-or-env.scenario.json +12 -0
- package/eval/cases/setup-siluzan-data-permission-env.scenario.json +19 -0
- package/eval/cases/skill-async-poll-guidance.scenario.json +9 -0
- package/eval/cases/skill-optimize-vs-google-ads-distinction.scenario.json +13 -0
- package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +12 -0
- package/eval/cases/time-range-must-ask.scenario.json +16 -0
- package/eval/cases/time-range-user-delegates-default.scenario.json +17 -0
- package/eval/cases/tips-json-filtering.scenario.json +12 -0
- package/eval/cases/tips-large-json-pagination.scenario.json +19 -0
- package/eval/cases/uj-ad-bluetooth-keywords-exclude-cheap-free.scenario.json +9 -0
- package/eval/cases/uj-ad-keywords-camping-tent-outdoor-plan.scenario.json +9 -0
- package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +12 -0
- package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +29 -0
- package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +17 -0
- package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +20 -0
- package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +12 -0
- package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +20 -0
- package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +13 -0
- package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +23 -0
- package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +23 -0
- package/eval/cases/uj-ops-open-google-b2c-usd-shenzhen.scenario.json +13 -0
- package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +12 -0
- package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +23 -0
- package/eval/cases/uj-patrol-all-media-balance-stats-forewarning.scenario.json +9 -0
- package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +18 -0
- package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +12 -0
- package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +23 -0
- package/eval/cases/uj-patrol-google-balances-low.scenario.json +20 -0
- package/eval/cases/uj-roi-full-google-account-diagnosis.scenario.json +9 -0
- package/eval/cases/uj-roi-keywords-high-cpa-low-cvr-triage.scenario.json +9 -0
- package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +20 -0
- package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +23 -0
- package/eval/stub-fixtures/accounts-digest.json +33 -0
- package/eval/stub-fixtures/ad-campaigns.json +14 -0
- package/eval/stub-fixtures/balance-meta.json +6 -0
- package/eval/stub-fixtures/balance-scan.json +21 -0
- package/eval/stub-fixtures/balance.json +6 -0
- package/eval/stub-fixtures/clue-meta.json +7 -0
- package/eval/stub-fixtures/clue-tiktok.json +7 -0
- package/eval/stub-fixtures/forewarning-create-ok.json +1 -0
- package/eval/stub-fixtures/forewarning-records.json +7 -0
- package/eval/stub-fixtures/generic-ok.json +1 -0
- package/eval/stub-fixtures/google-analysis-search-terms.json +10 -0
- package/eval/stub-fixtures/google-analysis.json +7 -0
- package/eval/stub-fixtures/invoice-billable.json +7 -0
- package/eval/stub-fixtures/invoice-info-list.json +13 -0
- package/eval/stub-fixtures/invoice-list.json +10 -0
- package/eval/stub-fixtures/list-accounts.json +13 -0
- package/eval/stub-fixtures/optimize-list.json +7 -0
- package/eval/stub-fixtures/report-push-list.json +7 -0
- package/eval/stub-fixtures/stats.json +9 -0
- package/package.json +7 -2
- package/scripts/postinstall.mjs +27 -2
- package/dist/skill/references/open-account-by-media.md +0 -61
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
> - 若当前会话中尚未阅读上述任一文件,AI 必须先主动阅读,再继续下一步流程,而不是直接生成广告计划或文案。
|
|
33
33
|
> - 在首次阅读后,AI 需用自己的话向用户**简要复述**上述文档中与本次任务强相关的 3~5 条关键合规/策略要点,并询问用户是否有本地特殊限制需要补充。
|
|
34
34
|
> - 后续生成的关键词、文案、出价与结构,必须**显式遵守这些规则**;一旦与规则冲突,应以规则优先,并向用户说明原因(例如:某些词因合规或商标问题被自动剔除)。
|
|
35
|
+
> - **方案阶段措辞**:输出结构/投放方案时,用「方案草案 / 结构蓝图 / 待你确认后再执行」等表述;**避免**「可立即执行 / 拿到参数就立刻跑命令」等暗示可跳过用户确认的说法。回复开头宜有一行**已读规则文档清单**(本 `google-ads.md` + 上表 `references/google-ads-rules/` 中实际打开的文件名)。
|
|
35
36
|
|
|
36
37
|
### 第二步:向用户补齐关键信息
|
|
37
38
|
|
|
@@ -124,7 +125,7 @@ siluzan-tso ad campaigns -a 6326027735 --start 2026-03-01 --end 2026-03-31
|
|
|
124
125
|
siluzan-tso ad campaigns -a 6326027735 --json
|
|
125
126
|
```
|
|
126
127
|
|
|
127
|
-
|
|
128
|
+
输出字段:名称、状态、类型、预算、点击数、展示数(具体字段名以 `--json` 为准;另有 CLI 派生的 `statusDisplay`、`budgetDisplay` 等便于阅读)。
|
|
128
129
|
|
|
129
130
|
---
|
|
130
131
|
|
|
@@ -199,36 +200,38 @@ siluzan-tso ad adgroup-create \
|
|
|
199
200
|
--campaign-id <campaignId> \
|
|
200
201
|
--campaign-name <campaignName> \
|
|
201
202
|
--name <adGroupName> \
|
|
202
|
-
--max-cpc
|
|
203
|
+
--max-cpc <主币种金额>
|
|
203
204
|
```
|
|
204
205
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
|
|
|
210
|
-
| `--
|
|
211
|
-
| `--
|
|
212
|
-
| `--
|
|
206
|
+
> **金额单位**:`--max-cpc` 为 **主币种金额**(如 `1.5` 表示 ¥1.50),CLI 内部 `Math.round(value × 100)` 写入「分」字段,与前端表单 `arithmetic.times(maxCPCAmount, 100)`、`ad adgroup-edit` 完全一致。**禁止** 按 Google micros(×1,000,000)填写。
|
|
207
|
+
|
|
208
|
+
| 选项 | 说明 | 必填 |
|
|
209
|
+
| ------------------------ | ---------------------------------------------------------- | ---- |
|
|
210
|
+
| `-a, --account <id>` | Google mediaCustomerId | ✅ |
|
|
211
|
+
| `--campaign-id <id>` | 所属广告系列 ID(来自 `campaigns --json`) | ✅ |
|
|
212
|
+
| `--campaign-name <name>` | 所属广告系列名称 | ✅ |
|
|
213
|
+
| `--name <name>` | 广告组名称 | ✅ |
|
|
214
|
+
| `--max-cpc <amount>` | 最高 CPC 出价,主币种金额(如 `1.5` = ¥1.50;CLI 内部 ×100)| ✅ |
|
|
215
|
+
| `--status <status>` | `ENABLED \| PAUSED`(默认 `ENABLED`) | |
|
|
213
216
|
|
|
214
217
|
**示例:**
|
|
215
218
|
|
|
216
219
|
```bash
|
|
217
|
-
# 在广告系列下创建广告组,最高 CPC 1
|
|
220
|
+
# 在广告系列下创建广告组,最高 CPC ¥1
|
|
218
221
|
siluzan-tso ad adgroup-create \
|
|
219
222
|
-a 6326027735 \
|
|
220
223
|
--campaign-id campaign_001 \
|
|
221
224
|
--campaign-name "品牌推广_春季" \
|
|
222
225
|
--name "核心词_跑步鞋" \
|
|
223
|
-
--max-cpc
|
|
226
|
+
--max-cpc 1
|
|
224
227
|
|
|
225
|
-
#
|
|
228
|
+
# 创建时设为暂停状态,最高 CPC ¥1.5
|
|
226
229
|
siluzan-tso ad adgroup-create \
|
|
227
230
|
-a 6326027735 \
|
|
228
231
|
--campaign-id campaign_001 \
|
|
229
232
|
--campaign-name "品牌推广_春季" \
|
|
230
233
|
--name "竞品词" \
|
|
231
|
-
--max-cpc
|
|
234
|
+
--max-cpc 1.5 \
|
|
232
235
|
--status PAUSED
|
|
233
236
|
```
|
|
234
237
|
|
|
@@ -255,6 +258,43 @@ siluzan-tso ad adgroup-status -a 6326027735 --id adgroup_001 --status Enabled
|
|
|
255
258
|
|
|
256
259
|
---
|
|
257
260
|
|
|
261
|
+
### 广告组编辑(名称 / 最高 CPC / 组级目标 CPA)
|
|
262
|
+
|
|
263
|
+
先用 **`ad groups … --json`** 查看当前的 **`maxCPCAmountDisplay`**、**`targetCpaAmountDisplay`**(主币种金额)等,再用本命令只改传入的字段。
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
siluzan-tso ad adgroup-edit \
|
|
267
|
+
-a <accountId> \
|
|
268
|
+
--id <adGroupId> \
|
|
269
|
+
[--name <新名称>] \
|
|
270
|
+
[--max-cpc <主币种金额>] \
|
|
271
|
+
[--target-cpa <主币种金额>] \
|
|
272
|
+
[--start <YYYY-MM-DD>] [--end <YYYY-MM-DD>]
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
> **金额单位(必读)**:所有金额参数均按 **主币种金额** 传入(如 `1.5` 表示 ¥1.50);CLI 内部 `Math.round(value × 100)` 写入后端「分」字段,与 `ad campaign-edit`、前端表单完全一致。**禁止** 按 Google micros(×1,000,000)填写。
|
|
276
|
+
|
|
277
|
+
| 选项 | 说明 |
|
|
278
|
+
|------|------|
|
|
279
|
+
| `--max-cpc` | 最高 CPC,主币种金额(与 `ad groups --json` 中 **`maxCPCAmountDisplay`** 对齐)。 |
|
|
280
|
+
| `--target-cpa` | 组级目标 CPA,主币种金额(与 `ad groups --json` 中 **`targetCpaAmountDisplay`** 对齐)。写入 **> 0** 才会更新。 |
|
|
281
|
+
| `--name` | 新名称(可选)。 |
|
|
282
|
+
|
|
283
|
+
**示例:**
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# 先取 JSON,读取 maxCPCAmountDisplay / targetCpaAmountDisplay(主币种金额)算新值后再写回
|
|
287
|
+
siluzan-tso ad groups -a 6326027735 --json
|
|
288
|
+
|
|
289
|
+
# 把最高 CPC 调整到 ¥2
|
|
290
|
+
siluzan-tso ad adgroup-edit -a 6326027735 --id 195548094874 --max-cpc 2
|
|
291
|
+
|
|
292
|
+
# 设置目标 CPA = ¥50,并改名
|
|
293
|
+
siluzan-tso ad adgroup-edit -a 6326027735 --id 195548094874 --target-cpa 50 --name "核心词_降价后"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
258
298
|
### 广告组删除
|
|
259
299
|
|
|
260
300
|
```bash
|
|
@@ -277,11 +317,12 @@ siluzan-tso ad adgroup-delete -a 6326027735 --id adgroup_001
|
|
|
277
317
|
siluzan-tso ad list -a <accountId> [选项]
|
|
278
318
|
```
|
|
279
319
|
|
|
280
|
-
| 选项 | 说明
|
|
281
|
-
| ------------------------ |
|
|
282
|
-
| `-a, --account <id>` | Google mediaCustomerId(必填)
|
|
283
|
-
| `--start / --end <date>` | 统计日期范围
|
|
284
|
-
| `--
|
|
320
|
+
| 选项 | 说明 |
|
|
321
|
+
| ------------------------ | -------------------------------------------------------------------- |
|
|
322
|
+
| `-a, --account <id>` | Google mediaCustomerId(必填) |
|
|
323
|
+
| `--start / --end <date>` | 统计日期范围 |
|
|
324
|
+
| `--include-deleted` | 包含已删除的广告(默认不传;传则网关加 `readDeleted=true`,审计/排障用) |
|
|
325
|
+
| `--json` | 输出原始 JSON |
|
|
285
326
|
|
|
286
327
|
**示例:**
|
|
287
328
|
|
|
@@ -293,6 +334,28 @@ siluzan-tso ad list -a 6326027735
|
|
|
293
334
|
siluzan-tso ad list -a 6326027735 --json
|
|
294
335
|
```
|
|
295
336
|
|
|
337
|
+
### 拒审与政策(`ad list --json`)
|
|
338
|
+
|
|
339
|
+
使用 **`siluzan-tso ad list -a <accountId> [--start/--end] --json`**(或 **`siluzan-tso google-analysis ads … --json`**,与 `references/account-analytics.md` 中 `ads` 子命令一致)巡检素材审核状态。
|
|
340
|
+
|
|
341
|
+
**在 JSON 中可重点查看的键名(以当次 stdout 为准,多为 camelCase):**
|
|
342
|
+
|
|
343
|
+
- **`policyApprovalStatusV2`**(及可能出现的 **`policyApprovalStatus`**):审核总状态。常见数值含义(若为数字):**`2`** 表示不通过(拒审)、**`3`** 表示受限通过;若为字符串则按字面量解析。
|
|
344
|
+
- **`approvalStatusDetails`**:政策相关说明的**摘要串**,多条证据之间常用 **`;`** 分隔。**不提供**与控制台一一对应的「政策主题」结构化数组;需要更细粒度编码时须另辟数据源或与维护方确认。
|
|
345
|
+
- **`statusV2`**:广告启用状态;排除已移除条目时用 **`Removed`** 等值过滤(以实际枚举为准)。
|
|
346
|
+
|
|
347
|
+
**同源拉数**:`ad list` 与 **`google-analysis ads`** 在默认参数下列表数据一致;任选其一做拒审巡检即可,仍以 **当次 `--json`** 为准。若使用 **`ad list --include-deleted`**,会多传 `readDeleted=true`,与未带该参数的 **`google-analysis ads`** 口径可能不一致。
|
|
348
|
+
|
|
349
|
+
### 转化与价值(`ad list --json`,需网关已返回对应字段)
|
|
350
|
+
|
|
351
|
+
在已部署的 Google 网关上,创意列表 JSON 中除 **`spend`**、**`conversions`**、**`impressions`**、**`ctr`** 等外,还可关注(键名以当次输出为准):
|
|
352
|
+
|
|
353
|
+
- **`allConversions`**
|
|
354
|
+
- **`conversionsValue`**
|
|
355
|
+
- **`conversionsValuePerImpression`**(可能由后端计算属性序列化;若无则用 **`conversionsValue / impressions`** 在聚合后自行计算)
|
|
356
|
+
|
|
357
|
+
带 **`--start` / `--end`** 时,底层按日分段,**同一创意 `id` 可能多行**;做窗口汇总或 A/B 比较前须在宿主 **按 `id` 聚合** 后再算比率。宿主编排下的 **自动优化 SOP** 见 **`references/hosted-automation-optimize-index.md`**。
|
|
358
|
+
|
|
296
359
|
---
|
|
297
360
|
|
|
298
361
|
### 创建广告(自适应搜索广告 RSA)
|
|
@@ -562,11 +625,11 @@ siluzan-tso ad batch get --id <recordId>
|
|
|
562
625
|
siluzan-tso ad batch update --id <recordId> [选项]
|
|
563
626
|
```
|
|
564
627
|
|
|
565
|
-
| 选项 | 说明
|
|
566
|
-
| ------------------------ |
|
|
567
|
-
| `--budget <amount>` |
|
|
568
|
-
| `--url <url>` | 新推广链接
|
|
569
|
-
| `--campaign-name <name>` | 新广告系列名称
|
|
628
|
+
| 选项 | 说明 |
|
|
629
|
+
| ------------------------ | ------------------------------------------------------------------- |
|
|
630
|
+
| `--budget <amount>` | 新日预算,主币种金额(如 `85` 表示 ¥85;CLI 内部自动 ×100 写入「分」) |
|
|
631
|
+
| `--url <url>` | 新推广链接 |
|
|
632
|
+
| `--campaign-name <name>` | 新广告系列名称 |
|
|
570
633
|
|
|
571
634
|
### publish — 发布草稿
|
|
572
635
|
|
|
@@ -621,7 +684,7 @@ siluzan-tso keyword -k "running shoes" --json
|
|
|
621
684
|
|
|
622
685
|
> - 默认行为:不加 `--draft` 时,CLI 直接走「立即发布」路径(`DraftStatus: Published`)。
|
|
623
686
|
> - 草稿行为:加上 `--draft` 时,仅创建草稿记录(`DraftStatus: Draft`),需后续用 `ad batch publish` 才真正提交给 Google。
|
|
624
|
-
>
|
|
687
|
+
> 广告组、关键词、广告创意的分步创建请使用 `adgroup-create`、`keyword-create`、`ad-create` 等命令。
|
|
625
688
|
> 任务异步处理,任务 ID 可通过 `ad batch get --id <id>` 跟进进度。
|
|
626
689
|
|
|
627
690
|
---
|
|
@@ -758,33 +821,42 @@ siluzan-tso ad campaign-edit \
|
|
|
758
821
|
-a <accountId> \
|
|
759
822
|
--id <campaignId> \
|
|
760
823
|
[--name <新名称>] \
|
|
761
|
-
[--budget
|
|
824
|
+
[--budget <主币种金额>] \
|
|
762
825
|
[--bidding <出价策略>] \
|
|
763
|
-
[--bid-ceiling
|
|
826
|
+
[--bid-ceiling <主币种金额>] \
|
|
827
|
+
[--target-cpa <主币种金额>] \
|
|
764
828
|
[--search-network true|false] \
|
|
765
829
|
[--content-network true|false]
|
|
766
830
|
```
|
|
767
831
|
|
|
832
|
+
> **金额单位(必读)**:所有金额参数均按 **主币种金额**(如 `100` 表示 ¥100,支持小数 `10.5`)传入;CLI 内部 `Math.round(value × 100)` 写入后端「分」字段,与前端表单、`ad campaign-create`、`ad batch update` 完全一致。**禁止** 按 Google micros(×1,000,000)口径填写,会被后端按「分」解读,导致金额放大 10000 倍。
|
|
833
|
+
|
|
768
834
|
| 选项 | 说明 |
|
|
769
835
|
| ------------------- | ------------------------------------------------------------------------- |
|
|
770
836
|
| `--name` | 新广告系列名称 |
|
|
771
|
-
| `--budget` |
|
|
837
|
+
| `--budget` | 新日预算,主币种金额(如 `100` = ¥100;`10.5` = ¥10.50) |
|
|
772
838
|
| `--bidding` | 出价策略:`TARGET_SPEND` \| `TARGET_CPA` \| `TARGET_ROAS` \| `MANUAL_CPC` |
|
|
773
|
-
| `--bid-ceiling` | `TARGET_SPEND`
|
|
774
|
-
| `--target-cpa` | `TARGET_CPA` 目标 CPA
|
|
839
|
+
| `--bid-ceiling` | `TARGET_SPEND` 出价上限,主币种金额(`0` = 不限) |
|
|
840
|
+
| `--target-cpa` | `TARGET_CPA` 目标 CPA,主币种金额 |
|
|
775
841
|
| `--search-network` | 投放 Google 搜索:`true` \| `false` |
|
|
776
842
|
| `--content-network` | 投放展示网络:`true` \| `false` |
|
|
777
843
|
|
|
778
844
|
**示例:**
|
|
779
845
|
|
|
780
846
|
```bash
|
|
781
|
-
#
|
|
847
|
+
# 修改名称和预算(日预算 ¥5000)
|
|
782
848
|
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 \
|
|
783
|
-
--name "搜索-春季促销-2026" --budget
|
|
849
|
+
--name "搜索-春季促销-2026" --budget 5000
|
|
850
|
+
|
|
851
|
+
# 在原预算基础上 +10 元(典型相对运算流程):
|
|
852
|
+
# 1) 先 GET 系列详情,读出 budgetDisplay(主币种)
|
|
853
|
+
# 2) 计算新值(主币种)= budgetDisplay + 10
|
|
854
|
+
# 3) 把新值(主币种)作为 --budget 传入;CLI 内部自动 ×100
|
|
855
|
+
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 --budget 10.01
|
|
784
856
|
|
|
785
857
|
# 切换出价策略为 TARGET_CPA,目标 CPA 2 USD
|
|
786
858
|
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 \
|
|
787
|
-
--bidding TARGET_CPA --target-cpa
|
|
859
|
+
--bidding TARGET_CPA --target-cpa 2
|
|
788
860
|
```
|
|
789
861
|
|
|
790
862
|
---
|
|
@@ -808,18 +880,18 @@ siluzan-tso ad adgroup-rename -a 6326027735 --id 195548094874 --name "核心词_
|
|
|
808
880
|
|
|
809
881
|
## ad ad-edit — 广告创意编辑(自适应搜索广告 RSA)
|
|
810
882
|
|
|
811
|
-
|
|
883
|
+
与网页端一致:先用 **`siluzan-tso ad list -a <accountId> [--start/--end] --json`** 取得该广告的完整 JSON,再用本命令只修改传入的选项;未改动的字段由 **`siluzan-tso`** 按列表原值带回。
|
|
812
884
|
|
|
813
|
-
CLI
|
|
885
|
+
CLI 会自动附带数据权限相关请求头,减少权限类错误。
|
|
814
886
|
|
|
815
|
-
###
|
|
887
|
+
### `ad list --json` 常见键名与 CLI 选项(常用)
|
|
816
888
|
|
|
817
|
-
|
|
|
889
|
+
| 列表 JSON 键名 | 说明 | CLI |
|
|
818
890
|
| --------------------------------------------------- | --------------------------------------- | ------------------------------------------- |
|
|
819
891
|
| `id` | 广告 ID | `--id` |
|
|
820
892
|
| `activeuseridg` | 账户 mediaCustomerId | `-a` / `--account` |
|
|
821
893
|
| `headlinePart1` / `headlinePart2` / `headlinePart3` | 前 3 条标题 | `--headlines` 前 3 项 |
|
|
822
|
-
| `AddtionalHeadlines` | 第 4~15
|
|
894
|
+
| `AddtionalHeadlines` | 第 4~15 条标题(历史拼写 Addtional) | `--headlines` 第 4 项起 |
|
|
823
895
|
| `adDescription` / `adDescription2` | 前 2 条描述 | `--descriptions` 前 2 项 |
|
|
824
896
|
| `AddtionalAdDescriptions` | 第 3~4 条描述 | `--descriptions` 第 3 项起 |
|
|
825
897
|
| `finalUrl` | 落地页 | `--final-url` |
|
|
@@ -842,30 +914,6 @@ siluzan-tso ad ad-edit \
|
|
|
842
914
|
[--status Enabled|Paused]
|
|
843
915
|
```
|
|
844
916
|
|
|
845
|
-
**与 curl 等价的网页请求形态(示意,勿把真实 Token 写入文档或仓库):**
|
|
846
|
-
|
|
847
|
-
```http
|
|
848
|
-
PUT {googleApi}/admanagement/campaign/{activeuseridg}/{id}
|
|
849
|
-
Content-Type: application/json
|
|
850
|
-
|
|
851
|
-
{
|
|
852
|
-
"id": "<adId>",
|
|
853
|
-
"activeuseridg": "<account>",
|
|
854
|
-
"headlinePart1": "...",
|
|
855
|
-
"headlinePart2": "...",
|
|
856
|
-
"headlinePart3": "...",
|
|
857
|
-
"adDescription": "...",
|
|
858
|
-
"adDescription2": "...",
|
|
859
|
-
"adGroupId": "...",
|
|
860
|
-
"adGroup": "...",
|
|
861
|
-
"finalUrl": "https://...",
|
|
862
|
-
"path1": "...",
|
|
863
|
-
"path2": "...",
|
|
864
|
-
"typeV2": "RESPONSIVE_SEARCH_AD",
|
|
865
|
-
"statusV2": "Paused"
|
|
866
|
-
}
|
|
867
|
-
```
|
|
868
|
-
|
|
869
917
|
**示例:**
|
|
870
918
|
|
|
871
919
|
```bash
|
|
@@ -885,7 +933,7 @@ siluzan-tso ad ad-edit -a 6326027735 --id 802428202775 --status Paused
|
|
|
885
933
|
|
|
886
934
|
## ad keyword-delete — 搜索关键词删除
|
|
887
935
|
|
|
888
|
-
|
|
936
|
+
先用 **`siluzan-tso ad keywords -a <accountId> … --json`** 取得关键词 **`id`** 与 **`adGroupId`**,再执行删除。成功时 CLI 正常结束;可用 **`ad keywords --json`** 再次核对列表。
|
|
889
937
|
|
|
890
938
|
```bash
|
|
891
939
|
siluzan-tso ad keyword-delete \
|
|
@@ -894,16 +942,7 @@ siluzan-tso ad keyword-delete \
|
|
|
894
942
|
--adgroup-id <adGroupId>
|
|
895
943
|
```
|
|
896
944
|
|
|
897
|
-
> `--id` 与 `--adgroup-id` 来自
|
|
898
|
-
|
|
899
|
-
**与 curl 等价的请求形态(示意):**
|
|
900
|
-
|
|
901
|
-
```http
|
|
902
|
-
DELETE {googleApi}/keywordmanagement/Keyword/{account}/batch
|
|
903
|
-
Content-Type: application/json
|
|
904
|
-
|
|
905
|
-
[{"adGroupId":"193360670606","id":"2474194779750"}]
|
|
906
|
-
```
|
|
945
|
+
> `--id` 与 `--adgroup-id` 来自 **`ad keywords --json`** 中的 **`id`**、**`adGroupId`**。
|
|
907
946
|
|
|
908
947
|
**示例:**
|
|
909
948
|
|
|
@@ -919,21 +958,25 @@ siluzan-tso ad keyword-delete -a 6326027735 --id 2464982882313 --adgroup-id 1955
|
|
|
919
958
|
|
|
920
959
|
## ad keyword-edit — 搜索关键词编辑
|
|
921
960
|
|
|
922
|
-
|
|
961
|
+
与网页一致:**先** **`siluzan-tso ad keywords … --json`** 取该关键词完整对象,**再**用本命令提交修改;未改字段随列表结果保留。
|
|
923
962
|
|
|
924
|
-
|
|
963
|
+
> **⚠️ 金额单位(与系列 / 组的金额字段不同!)**:关键词的 `maxCPC` 字段单位是 **「主币种元」**(直接是元,不是「分」),CLI 直接透传 **不做 ×100 转换**。这与 `ad campaign-edit --budget` / `ad adgroup-edit --max-cpc` 等"用户传元、CLI 内部 ×100"的命令**口径相反**。
|
|
964
|
+
>
|
|
965
|
+
> 验证依据:前端 `KeywordList.vue:266` 用 `filterSpend(maxCPC)` 直接展示原值,对应 `useFormatter.js:86` 的 `filterSpend` 内部不 ÷100(对比 `filterBudget` 显式 ÷100)。
|
|
966
|
+
|
|
967
|
+
### `ad keywords --json` 常见键名与 CLI 选项(常用)
|
|
925
968
|
|
|
926
|
-
|
|
|
969
|
+
| 列表 JSON 键名 | 说明 | CLI |
|
|
927
970
|
| ----------------------------- | ----------------------------------------- | ---------------------------- |
|
|
928
971
|
| `id` | 关键词资源 id | `--id` |
|
|
929
972
|
| `keywordText` | 关键词文案(数组,一般一项) | `--text` → `["..."]` |
|
|
930
973
|
| `matchTypeV2` | 匹配类型(网页用 Broad / Phrase / Exact) | `--match-type` |
|
|
931
974
|
| `matchType` | 另一套枚举(如 EXACT),列表里可能仍存在 | 一般随 list 结果保留,勿手改 |
|
|
932
|
-
| `maxCPC` |
|
|
975
|
+
| `maxCPC` | 最高每次点击费用,**主币种金额**(直接是元,不要 ×100) | `--max-cpc` |
|
|
933
976
|
| `finalURL` | 关键词级最终到达网址 | `--final-url` |
|
|
934
977
|
| `adGroupId` / `campaignId` 等 | 层级与统计字段 | 从列表保留 |
|
|
935
978
|
|
|
936
|
-
**注意:**
|
|
979
|
+
**注意:** 成功响应也可能是数组;**`id` 可能与请求不一致**。CLI 若检测到变化会打印提示,后续请用 **返回体中的新 `id`** 再查列表或再编辑。
|
|
937
980
|
|
|
938
981
|
**约束:** `--text`、`--match-type`、`--max-cpc`、`--final-url` 至少传一项。
|
|
939
982
|
|
|
@@ -947,27 +990,6 @@ siluzan-tso ad keyword-edit \
|
|
|
947
990
|
[--final-url <url>]
|
|
948
991
|
```
|
|
949
992
|
|
|
950
|
-
**与 curl 等价的请求形态(示意,勿写入真实 Token):**
|
|
951
|
-
|
|
952
|
-
```http
|
|
953
|
-
PUT {googleApi}/keywordmanagement/Keyword/{account}/batch
|
|
954
|
-
Content-Type: application/json
|
|
955
|
-
|
|
956
|
-
[
|
|
957
|
-
{
|
|
958
|
-
"id": "<keywordId>",
|
|
959
|
-
"keywordText": ["广告工具1"],
|
|
960
|
-
"matchType": "EXACT",
|
|
961
|
-
"matchTypeV2": "Broad",
|
|
962
|
-
"maxCPC": 0,
|
|
963
|
-
"finalURL": "https://example.com",
|
|
964
|
-
"adGroupId": "...",
|
|
965
|
-
"campaignId": "...",
|
|
966
|
-
"...": "其余字段来自 list 接口"
|
|
967
|
-
}
|
|
968
|
-
]
|
|
969
|
-
```
|
|
970
|
-
|
|
971
993
|
**示例:**
|
|
972
994
|
|
|
973
995
|
```bash
|
|
@@ -1179,13 +1201,13 @@ siluzan-tso list-accounts -m Google --json -k [mediaCustomerId]
|
|
|
1179
1201
|
siluzan-tso ad campaigns -a 6326027735 --json
|
|
1180
1202
|
# 假设 campaignId = campaign_001,campaignName = "品牌推广_春季"
|
|
1181
1203
|
|
|
1182
|
-
# 第四步:创建广告组(最高 CPC 1
|
|
1204
|
+
# 第四步:创建广告组(最高 CPC ¥1,主币种金额;CLI 内部 ×100 写入「分」)
|
|
1183
1205
|
siluzan-tso ad adgroup-create \
|
|
1184
1206
|
-a 6326027735 \
|
|
1185
1207
|
--campaign-id campaign_001 \
|
|
1186
1208
|
--campaign-name "品牌推广_春季" \
|
|
1187
1209
|
--name "核心词_跑步鞋" \
|
|
1188
|
-
--max-cpc
|
|
1210
|
+
--max-cpc 1
|
|
1189
1211
|
|
|
1190
1212
|
# 第五步:查询新建广告组 id
|
|
1191
1213
|
siluzan-tso ad groups -a 6326027735 --json
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 异常监控巡检:`siluzan-tso` CLI `--json` 键名与命令
|
|
2
|
+
|
|
3
|
+
> **主题索引**:[`hosted-automation-scenarios.md`](hosted-automation-scenarios.md)
|
|
4
|
+
> **编排责任**:定时、HTTP 探活、通知等在宿主。本页只列 **读数命令与常见 JSON 键名**。
|
|
5
|
+
> **统计日 / 时区**:与自控场景相同,见 [`hosted-automation-self-control.md`](hosted-automation-self-control.md)「统计日与今日」。
|
|
6
|
+
|
|
7
|
+
宿主做定时巡检时,**只以 `siluzan-tso … --json` 当次 stdout 的键名为准**。Google Ads API 文档里的资源名(如 `billing_setup`、`account_budget`、`amount_served_micros`)**与本 CLI 输出不是同一套命名**,不要当作本仓库 JSON 的键去解析。若某键缺失,**禁止猜测**:以实际输出为准,或换用 `references/account-analytics.md` 中的其它子命令。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. 余额枯竭 / 续航不足(多账户批扫)
|
|
12
|
+
|
|
13
|
+
**批扫(推荐)** — 命令:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
siluzan-tso balance-scan -m Google [--threshold-days <n>] [--min-balance <n>] [--json]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`--json` 时根结构为 **`{ ok, data: { items }, meta }`**(以实际输出为准)。宿主常用字段:
|
|
20
|
+
|
|
21
|
+
| 用途 | JSON 路径 / 字段名 |
|
|
22
|
+
|------|---------------------|
|
|
23
|
+
| 账户 | `data.items[].mediaCustomerId`、`data.items[].name`、`data.items[].advertiserName` |
|
|
24
|
+
| 余额(主币种金额,与平台余额接口一致) | **`data.items[].balance`**(由 `remainingAccountBudget` 计算而来) |
|
|
25
|
+
| 近 7 日估算日均消耗 | **`data.items[].dailySpend`** = 近 7 日总消耗 / 7(窗口为 **[T-7, T-1]**,即截至昨天的 7 个自然日,**不含当天**,避免拉到当天未结算数据) |
|
|
26
|
+
| 按余额÷日均估算的续航天数 | **`data.items[].remainingDays`** = `balance / dailySpend`(消耗过低 < `minDailySpend` 时为 `null`) |
|
|
27
|
+
| 建议充值额(按 `meta.thresholds.targetDaysForTopup` 目标) | **`data.items[].recommendedTopup`** |
|
|
28
|
+
| 命中原因(阈值逻辑) | **`data.items[].hitReason`**:`low-days` \| `low-balance` \| `both` |
|
|
29
|
+
| 币种 / 状态 / OAuth | `data.items[].currencyCode`、`data.items[].status`、`data.items[].invalidOAuthToken` |
|
|
30
|
+
| 本轮扫描元数据 | **`meta`**:`scannedAccounts`、`validAccounts`、`hitCount`、`thresholds`(含 `days`、`minBalance`、`minDailySpend`、`targetDaysForTopup`)、`generatedAt` 等 |
|
|
31
|
+
|
|
32
|
+
**单账户** — 命令:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
siluzan-tso balance -m Google --accounts <mediaCustomerId> --json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`items[]` 每行:**`mediaCustomerId`**、**`remainingAccountBudget`**、**`status`**、**`currencyCode`**、**`name`**(与 `references/accounts.md` 中 `balance` 说明一致)。
|
|
39
|
+
|
|
40
|
+
**账户总览(区间内的费用与日均,可与续航逻辑组合)** — 命令:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
siluzan-tso google-analysis overview -a <mediaCustomerId> --start <YYYY-MM-DD> --end <YYYY-MM-DD> --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
根对象常见字段:**`remainingAccountBudget`**、**`averageDailyCost`**、**`totalCost`**、**`activeDays`**、**`currencyCode`**、**`accountId`**;**`currentPeriod`** / **`previousPeriod`** 为对象块,内含 **`spend`**、`impressions`、`clicks`、`conversions` 等与 `references/account-analytics.md` 总览口径一致的指标(块内还可能出现 **`currencyCode`**)。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. 花费异动(按系列 × 日历小时)
|
|
51
|
+
|
|
52
|
+
命令:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
siluzan-tso google-analysis campaign-hour -a <mediaCustomerId> --start <YYYY-MM-DD> --end <YYYY-MM-DD> --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**根 JSON 为数组**(不是 `items` 包装)。每元素常见字段:
|
|
59
|
+
|
|
60
|
+
**`campaignId`**、**`campaignName`**、**`date`**、**`hour`**、**`spend`**、`impressions`、`clicks`、`conversions`。
|
|
61
|
+
|
|
62
|
+
宿主侧可做:同一 `campaignId` 在相邻小时或相邻日的 **`spend`** 对比、滑动均值、超阈值告警等(阈值与统计时区由宿主配置,见 [`hosted-automation-self-control.md`](hosted-automation-self-control.md)「统计日与今日」)。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 3. 落地页 URL 收集(HTTP 探活由宿主完成)
|
|
67
|
+
|
|
68
|
+
**仅拉 URL 列表(无日期参数)**:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
siluzan-tso google-analysis final-urls -a <mediaCustomerId> --json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
根为 **对象**:**键名**为网关返回的资源标识(以当次 JSON 为准),**值为字符串数组**(每个元素是一条最终到达网址)。CLI **不**代发 HTTP 请求判断 4xx/5xx;死链判定须在宿主对 URL 执行 HEAD/GET(注意频率与 robots/合规)。
|
|
75
|
+
|
|
76
|
+
**按创意行拉数**(可与拒审、启停共用一轮数据):
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
siluzan-tso ad list -a <mediaCustomerId> --start <YYYY-MM-DD> --end <YYYY-MM-DD> --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`items[]` 为网关原样字段集合;落地页相关键名以当次输出为准(类型说明里常见 **`finalurl`**;亦可用 **`google-analysis ads`** 列表,结构见 `references/google-ads.md` / `account-analytics.md`)。命中后暂停创意用 **`ad ad-status`**(见 `references/google-ads.md`),写后复核再次 `ad list --json` 看 **`statusV2`**。
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 4. 广告素材拒审
|
|
87
|
+
|
|
88
|
+
不依赖 `PolicyTopic` 等 API 资源名;直接读 CLI 拒审字段:**`policyApprovalStatusV2`**、**`approvalStatusDetails`**、**`statusV2`** 等。逐步说明见 **`references/google-ads.md`**「拒审与政策」;**`ad list`** 与 **`google-analysis ads`** 列表同源,任选其一做巡检。
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 5. 账户「封禁」与 Google 客户状态(暂不展开)
|
|
93
|
+
|
|
94
|
+
Google 客户级 **`SUSPENDED` / `CANCELED`** 与 **`list-accounts --json`** 中 **`status`** 的逐项对应关系**不在本页维护**;宿主若需该判定,请以内部运维约定或后续专门文档为准。
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# SOP:同组多创意 A/B — 停输家、保赢家(Ad)
|
|
2
|
+
|
|
3
|
+
> **索引**:[`hosted-automation-optimize-index.md`](hosted-automation-optimize-index.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 业务目标(宿主配置化)
|
|
8
|
+
|
|
9
|
+
在同一 **广告组** 内存在多条可比较的创意时,根据约定窗口内的 **转化价值效率**、**全部转化** 或宿主侧统计检验,将**明显劣势**的创意 **Paused**,保留优势创意继续投放。显著性水平、最小样本、冷却期由宿主配置。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 检查项(宿主每轮)
|
|
14
|
+
|
|
15
|
+
### 1. 拉创意列表
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
siluzan-tso ad list -a <mediaCustomerId> --start <YYYY-MM-DD> --end <YYYY-MM-DD> --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
(等价:`siluzan-tso google-analysis ads …`。)
|
|
22
|
+
|
|
23
|
+
### 2. 按组筛选、按创意聚合
|
|
24
|
+
|
|
25
|
+
- 对同一 **`adGroupId`** 下的行,先按创意 **`id`** 聚合(见索引「按日多行」):对 **`impressions`**、**`clicks`**、**`spend`**、**`conversions`**、**`allConversions`**、**`conversionsValue`** **求和**。
|
|
26
|
+
- **每次展现价值(聚合后)**:宿主计算
|
|
27
|
+
|
|
28
|
+
`cvpi = (Σ conversionsValue) / (Σ impressions)`,当分母为 0 时跳过该创意判定。
|
|
29
|
+
|
|
30
|
+
若单行上已有后端提供的 **`conversionsValuePerImpression`**,在未聚合前**勿直接跨日相加**;应在聚合后用上式或按业务约定只对单日行比较。
|
|
31
|
+
|
|
32
|
+
### 3. 参与判定的最小样本(示例)
|
|
33
|
+
|
|
34
|
+
- 聚合后 **`impressions`**(或 **`clicks`**)低于配置下限的创意**不参与**胜负判定。
|
|
35
|
+
- 同组内「活跃且达样本」的创意 **≥ 2** 条时才进入 A/B 决策。
|
|
36
|
+
|
|
37
|
+
### 4. 统计显著性
|
|
38
|
+
|
|
39
|
+
**p 值、贝叶斯后验、序贯检验等**须由宿主实现;CLI **不提供**检验函数。可用聚合后的 **`conversions`/`clicks`** 或 **`conversionsValue`/`impressions`** 等输入自定义检验。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 最终操作
|
|
44
|
+
|
|
45
|
+
对判定为 **Loser** 的创意:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
siluzan-tso ad ad-status -a <mediaCustomerId> --id <adId> --status Paused
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
(若需 `--start`/`--end` 见 `google-ads.md`。)
|
|
52
|
+
|
|
53
|
+
**不在此 SOP 内**:Google Ads 界面「将流量倾斜给赢家」的算法开关;宿主仅能 **停输家** 或结合人工/网页调整轮换策略。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 写后复核
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
siluzan-tso ad list -a <mediaCustomerId> --start <当日或下一窗> --end <…> --json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
确认 Loser 的 **`statusV2`** 为 **`Paused`**;Winner 仍为 **`ENABLED`**(或宿主期望状态)。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 通知(宿主)
|
|
68
|
+
|
|
69
|
+
建议 **P2**:含 `mediaCustomerId`、**`adGroupId`**、输/赢 **`id`**、聚合指标摘要与判定规则版本号,便于审计。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 宿主编排:自动优化(Google)— 文档索引
|
|
2
|
+
|
|
3
|
+
> **编排责任**:定时、阈值、多轮状态(如「连续 3 日未改善」)、统计检验、通知(P1/P2)由 **宿主** 实现。
|
|
4
|
+
> **本组文档**:说明如何用 `siluzan-tso` **拉检查项**、**执行写操作**、**写后复核**;每条 SOP 独立成文,避免单文件过长。
|
|
5
|
+
|
|
6
|
+
| 文档 | 场景 |
|
|
7
|
+
|------|------|
|
|
8
|
+
| [`hosted-automation-optimize-weak-downbid.md`](hosted-automation-optimize-weak-downbid.md) | 表现差:组/创意 **降价或暂停** |
|
|
9
|
+
| [`hosted-automation-optimize-scale.md`](hosted-automation-optimize-scale.md) | 高转化:**提预算 / 上调目标 CPA** 扩量 |
|
|
10
|
+
| [`hosted-automation-optimize-ab-winner.md`](hosted-automation-optimize-ab-winner.md) | 同组多创意:**A/B 决胜负、停输家** |
|
|
11
|
+
|
|
12
|
+
**必读交叉引用**:`SKILL.md`(金额与 `*Display` 硬规范)、`references/google-ads.md`(`ad campaign-edit` / `ad adgroup-edit` / `ad-status`)、`references/account-analytics.md`(日期与 `google-analysis`)、`references/tips.md`(`--json`)、[`hosted-automation-self-control.md`](hosted-automation-self-control.md)(统计日与时区约定)。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 通用约定(三条 SOP 共用)
|
|
17
|
+
|
|
18
|
+
### 1. 统计区间
|
|
19
|
+
|
|
20
|
+
`--start` / `--end` 为 **`YYYY-MM-DD`**,与宿主业务日一致;约定见 **`hosted-automation-self-control.md`**「统计日与今日」。
|
|
21
|
+
|
|
22
|
+
### 2. `ad list` / `ad groups` 与「按日多行」
|
|
23
|
+
|
|
24
|
+
`admanagement/v2/list`(`ad list`、`google-analysis ads`)在带日期区间时,底层 GAQL 含 **`segments.date`**,**同一创意 `id` 可出现多行(一日一行)**。做「过去 7 天总展现 / 总花费 / 总转化」时,宿主须对 **`items[]` 按广告 `id`(及需要时 `adGroupId`)聚合** 后再算比率或阈值,**禁止**把未聚合的多行直接当作多条独立创意误判。
|
|
25
|
+
|
|
26
|
+
### 3. JSON 键名以当次 `--json` 为准
|
|
27
|
+
|
|
28
|
+
下列键名为当前网关常见命名;若某键缺失,以实际 stdout 为准,勿猜测。
|
|
29
|
+
|
|
30
|
+
### 4. 写操作与复核
|
|
31
|
+
|
|
32
|
+
所有写入须遵守 **`references/google-ads.md`** 的确认与安全约定;写后**同区间或下一统计日**再拉一次读命令核对 `statusV2`、预算、`targetCpaAmount` 等。
|