siluzan-tso-cli 1.1.14-beta.7 → 1.1.14-beta.8
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 +1 -1
- package/dist/index.js +27 -8
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/google-ads-rules/google-ads-campaign-optimization.md +3 -2
- package/dist/skill/references/google-ads.md +35 -21
- package/dist/skill/references/hosted-automation-optimize-scale.md +14 -5
- package/dist/skill/references/hosted-automation-self-control.md +11 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
|
|
|
51
51
|
siluzan-tso init --force # 强制覆盖已存在文件
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
> **注意**:当前为测试版(1.1.14-beta.
|
|
54
|
+
> **注意**:当前为测试版(1.1.14-beta.8),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -6936,6 +6936,12 @@ function toDisplayMoney(raw) {
|
|
|
6936
6936
|
if (!Number.isFinite(n)) return null;
|
|
6937
6937
|
return n / 100;
|
|
6938
6938
|
}
|
|
6939
|
+
function toCentAmount(displayValue) {
|
|
6940
|
+
if (!Number.isFinite(displayValue)) {
|
|
6941
|
+
throw new Error(`toCentAmount: \u8F93\u5165\u5FC5\u987B\u662F\u6709\u9650\u6570\u5B57\uFF0C\u6536\u5230 ${displayValue}`);
|
|
6942
|
+
}
|
|
6943
|
+
return Math.round(displayValue * 100);
|
|
6944
|
+
}
|
|
6939
6945
|
function adgroupListUrl(googleApiUrl, account, startDate, endDate) {
|
|
6940
6946
|
const params = new URLSearchParams();
|
|
6941
6947
|
params.set("startDate", toGoogleDate(startDate, -30));
|
|
@@ -8140,8 +8146,8 @@ async function runAdGroupEdit(opts) {
|
|
|
8140
8146
|
}
|
|
8141
8147
|
const body = { ...adgroup };
|
|
8142
8148
|
if (hasName) body["name"] = opts.name.trim();
|
|
8143
|
-
if (hasMax) body["maxCPCAmount"] =
|
|
8144
|
-
if (hasTcpa) body["targetCpaAmount"] =
|
|
8149
|
+
if (hasMax) body["maxCPCAmount"] = toCentAmount(opts.maxCPCAmount);
|
|
8150
|
+
if (hasTcpa) body["targetCpaAmount"] = toCentAmount(opts.targetCpaAmount);
|
|
8145
8151
|
const putUrl = `${googleApiUrl}/adgroupnmanagement/adgroup/${opts.account}/${opts.id}`;
|
|
8146
8152
|
try {
|
|
8147
8153
|
await apiFetch2(putUrl, config, { method: "PUT", body: JSON.stringify(body) }, opts.verbose);
|
|
@@ -8342,11 +8348,12 @@ async function runAdCampaignEdit(opts) {
|
|
|
8342
8348
|
}
|
|
8343
8349
|
const body = { ...campaign };
|
|
8344
8350
|
if (opts.name !== void 0) body["name"] = opts.name;
|
|
8345
|
-
if (opts.budget !== void 0) body["budget"] = opts.budget;
|
|
8351
|
+
if (opts.budget !== void 0) body["budget"] = toCentAmount(opts.budget);
|
|
8346
8352
|
if (opts.biddingStrategy !== void 0) body["biddingStrategyTypeV2"] = opts.biddingStrategy;
|
|
8347
8353
|
if (opts.targetSpendBidCeiling !== void 0)
|
|
8348
|
-
body["targetSpend_BidCeilingAmount"] = opts.targetSpendBidCeiling;
|
|
8349
|
-
if (opts.targetCpa !== void 0)
|
|
8354
|
+
body["targetSpend_BidCeilingAmount"] = toCentAmount(opts.targetSpendBidCeiling);
|
|
8355
|
+
if (opts.targetCpa !== void 0)
|
|
8356
|
+
body["targetCpa_BidingAmount"] = toCentAmount(opts.targetCpa);
|
|
8350
8357
|
if (opts.targetSearchNetwork !== void 0)
|
|
8351
8358
|
body["targetSearchNetwork"] = opts.targetSearchNetwork;
|
|
8352
8359
|
if (opts.targetContentNetwork !== void 0)
|
|
@@ -13388,7 +13395,19 @@ adCmd.command("campaign-create").description(
|
|
|
13388
13395
|
});
|
|
13389
13396
|
}
|
|
13390
13397
|
);
|
|
13391
|
-
adCmd.command("campaign-edit").description("\u7F16\u8F91\u5E7F\u544A\u7CFB\u5217\uFF08\u540D\u79F0/\u9884\u7B97/\u51FA\u4EF7\u7B56\u7565/\u6295\u653E\u7F51\u7EDC\uFF0C\u81F3\u5C11\u4F20\u4E00\u4E2A\u4FEE\u6539\u9879\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").requiredOption("--id <campaignId>", "\u5E7F\u544A\u7CFB\u5217 ID").option("--name <name>", "\u65B0\u540D\u79F0").option(
|
|
13398
|
+
adCmd.command("campaign-edit").description("\u7F16\u8F91\u5E7F\u544A\u7CFB\u5217\uFF08\u540D\u79F0/\u9884\u7B97/\u51FA\u4EF7\u7B56\u7565/\u6295\u653E\u7F51\u7EDC\uFF0C\u81F3\u5C11\u4F20\u4E00\u4E2A\u4FEE\u6539\u9879\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").requiredOption("--id <campaignId>", "\u5E7F\u544A\u7CFB\u5217 ID").option("--name <name>", "\u65B0\u540D\u79F0").option(
|
|
13399
|
+
"--budget <amount>",
|
|
13400
|
+
"\u65B0\u9884\u7B97\uFF0C\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5982 100 \u8868\u793A \xA5100\uFF1B\u652F\u6301\u5C0F\u6570\uFF1BCLI \u5185\u90E8\u81EA\u52A8 \xD7100 \u5199\u5165\u300C\u5206\u300D\u5B57\u6BB5\uFF09",
|
|
13401
|
+
parseFloat
|
|
13402
|
+
).option("--bidding <strategy>", "\u51FA\u4EF7\u7B56\u7565\uFF1ATARGET_SPEND | TARGET_CPA | TARGET_ROAS | MANUAL_CPC").option(
|
|
13403
|
+
"--bid-ceiling <amount>",
|
|
13404
|
+
"TARGET_SPEND \u51FA\u4EF7\u4E0A\u9650\uFF0C\u4E3B\u5E01\u79CD\u91D1\u989D\uFF080 = \u4E0D\u9650\uFF1BCLI \u5185\u90E8 \xD7100 \u5199\u5165\uFF09",
|
|
13405
|
+
parseFloat
|
|
13406
|
+
).option(
|
|
13407
|
+
"--target-cpa <amount>",
|
|
13408
|
+
"TARGET_CPA \u76EE\u6807 CPA\uFF0C\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08CLI \u5185\u90E8 \xD7100 \u5199\u5165\uFF09",
|
|
13409
|
+
parseFloat
|
|
13410
|
+
).option(
|
|
13392
13411
|
"--search-network <bool>",
|
|
13393
13412
|
"\u6295\u653E\u5230 Google \u641C\u7D22\uFF1Atrue | false",
|
|
13394
13413
|
(v) => v === "true"
|
|
@@ -13424,11 +13443,11 @@ adCmd.command("adgroup-rename").description("\u4FEE\u6539\u5E7F\u544A\u7EC4\u540
|
|
|
13424
13443
|
);
|
|
13425
13444
|
adCmd.command("adgroup-edit").description("\u7F16\u8F91\u5E7F\u544A\u7EC4\uFF08\u540D\u79F0\u3001\u6700\u9AD8 CPC\u3001\u7EC4\u7EA7\u76EE\u6807 CPA\uFF1B\u81F3\u5C11\u4F20\u4E00\u9879\uFF1B\u4E0E\u7F51\u5173 PUT \u4E00\u81F4\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").requiredOption("--id <adgroupId>", "\u5E7F\u544A\u7EC4 ID").option("--name <name>", "\u65B0\u540D\u79F0").option(
|
|
13426
13445
|
"--max-cpc <n>",
|
|
13427
|
-
"\u6700\u9AD8 CPC\uFF0C\
|
|
13446
|
+
"\u6700\u9AD8 CPC\uFF0C\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5982 1.5 \u8868\u793A \xA51.50\uFF1BCLI \u5185\u90E8 \xD7100 \u5199\u5165\u300C\u5206\u300D\u5B57\u6BB5\uFF09",
|
|
13428
13447
|
parseFloat
|
|
13429
13448
|
).option(
|
|
13430
13449
|
"--target-cpa <n>",
|
|
13431
|
-
"\u7EC4\u7EA7\u76EE\u6807 CPA\uFF0C\
|
|
13450
|
+
"\u7EC4\u7EA7\u76EE\u6807 CPA\uFF0C\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08CLI \u5185\u90E8 \xD7100 \u5199\u5165\u300C\u5206\u300D\u5B57\u6BB5\uFF09",
|
|
13432
13451
|
parseFloat
|
|
13433
13452
|
).option("--start <date>", "\u5217\u8868\u67E5\u8BE2\u8D77\u59CB\u65E5\u671F YYYY-MM-DD").option("--end <date>", "\u5217\u8868\u67E5\u8BE2\u7ED3\u675F\u65E5\u671F YYYY-MM-DD").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
|
|
13434
13453
|
async (opts) => {
|
package/dist/skill/_meta.json
CHANGED
|
@@ -511,10 +511,11 @@ siluzan-tso ad batch get --id <taskId>
|
|
|
511
511
|
siluzan-tso ad campaigns -a <CID> --json
|
|
512
512
|
|
|
513
513
|
# 切换到 Target CPA(数据充足后)
|
|
514
|
+
# --target-cpa 是「主币种金额」,CLI 内部自动 ×100 写入;50 = 50 USD(不是微单位 5000)
|
|
514
515
|
siluzan-tso ad campaign-edit -a <CID> --id <系列ID> \
|
|
515
|
-
--bidding TARGET_CPA --target-cpa
|
|
516
|
+
--bidding TARGET_CPA --target-cpa 50
|
|
516
517
|
|
|
517
|
-
# 切换到 Target ROAS
|
|
518
|
+
# 切换到 Target ROAS(ROAS 是比例,不是金额,无需 ×100)
|
|
518
519
|
siluzan-tso ad campaign-edit -a <CID> --id <系列ID> \
|
|
519
520
|
--bidding TARGET_ROAS --target-roas 3.0
|
|
520
521
|
```
|
|
@@ -258,32 +258,37 @@ siluzan-tso ad adgroup-status -a 6326027735 --id adgroup_001 --status Enabled
|
|
|
258
258
|
|
|
259
259
|
### 广告组编辑(名称 / 最高 CPC / 组级目标 CPA)
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
先用 **`ad groups … --json`** 查看当前的 **`maxCPCAmountDisplay`**、**`targetCpaAmountDisplay`**(主币种金额)等,再用本命令只改传入的字段。
|
|
262
262
|
|
|
263
263
|
```bash
|
|
264
264
|
siluzan-tso ad adgroup-edit \
|
|
265
265
|
-a <accountId> \
|
|
266
266
|
--id <adGroupId> \
|
|
267
267
|
[--name <新名称>] \
|
|
268
|
-
[--max-cpc
|
|
269
|
-
[--target-cpa
|
|
268
|
+
[--max-cpc <主币种金额>] \
|
|
269
|
+
[--target-cpa <主币种金额>] \
|
|
270
270
|
[--start <YYYY-MM-DD>] [--end <YYYY-MM-DD>]
|
|
271
271
|
```
|
|
272
272
|
|
|
273
|
+
> **金额单位(必读)**:所有金额参数均按 **主币种金额** 传入(如 `1.5` 表示 ¥1.50);CLI 内部 `Math.round(value × 100)` 写入后端「分」字段,与 `ad campaign-edit`、前端表单完全一致。**禁止** 按 Google micros(×1,000,000)填写。
|
|
274
|
+
|
|
273
275
|
| 选项 | 说明 |
|
|
274
276
|
|------|------|
|
|
275
|
-
| `--max-cpc` |
|
|
276
|
-
| `--target-cpa` |
|
|
277
|
+
| `--max-cpc` | 最高 CPC,主币种金额(与 `ad groups --json` 中 **`maxCPCAmountDisplay`** 对齐)。 |
|
|
278
|
+
| `--target-cpa` | 组级目标 CPA,主币种金额(与 `ad groups --json` 中 **`targetCpaAmountDisplay`** 对齐)。写入 **> 0** 才会更新。 |
|
|
277
279
|
| `--name` | 新名称(可选)。 |
|
|
278
280
|
|
|
279
281
|
**示例:**
|
|
280
282
|
|
|
281
283
|
```bash
|
|
282
|
-
# 先取 JSON
|
|
284
|
+
# 先取 JSON,读取 maxCPCAmountDisplay / targetCpaAmountDisplay(主币种金额)算新值后再写回
|
|
283
285
|
siluzan-tso ad groups -a 6326027735 --json
|
|
284
286
|
|
|
285
|
-
|
|
286
|
-
siluzan-tso ad adgroup-edit -a 6326027735 --id 195548094874 --
|
|
287
|
+
# 把最高 CPC 调整到 ¥2
|
|
288
|
+
siluzan-tso ad adgroup-edit -a 6326027735 --id 195548094874 --max-cpc 2
|
|
289
|
+
|
|
290
|
+
# 设置目标 CPA = ¥50,并改名
|
|
291
|
+
siluzan-tso ad adgroup-edit -a 6326027735 --id 195548094874 --target-cpa 50 --name "核心词_降价后"
|
|
287
292
|
```
|
|
288
293
|
|
|
289
294
|
---
|
|
@@ -618,11 +623,11 @@ siluzan-tso ad batch get --id <recordId>
|
|
|
618
623
|
siluzan-tso ad batch update --id <recordId> [选项]
|
|
619
624
|
```
|
|
620
625
|
|
|
621
|
-
| 选项 | 说明
|
|
622
|
-
| ------------------------ |
|
|
623
|
-
| `--budget <amount>` |
|
|
624
|
-
| `--url <url>` | 新推广链接
|
|
625
|
-
| `--campaign-name <name>` | 新广告系列名称
|
|
626
|
+
| 选项 | 说明 |
|
|
627
|
+
| ------------------------ | ------------------------------------------------------------------- |
|
|
628
|
+
| `--budget <amount>` | 新日预算,主币种金额(如 `85` 表示 ¥85;CLI 内部自动 ×100 写入「分」) |
|
|
629
|
+
| `--url <url>` | 新推广链接 |
|
|
630
|
+
| `--campaign-name <name>` | 新广告系列名称 |
|
|
626
631
|
|
|
627
632
|
### publish — 发布草稿
|
|
628
633
|
|
|
@@ -814,33 +819,42 @@ siluzan-tso ad campaign-edit \
|
|
|
814
819
|
-a <accountId> \
|
|
815
820
|
--id <campaignId> \
|
|
816
821
|
[--name <新名称>] \
|
|
817
|
-
[--budget
|
|
822
|
+
[--budget <主币种金额>] \
|
|
818
823
|
[--bidding <出价策略>] \
|
|
819
|
-
[--bid-ceiling
|
|
824
|
+
[--bid-ceiling <主币种金额>] \
|
|
825
|
+
[--target-cpa <主币种金额>] \
|
|
820
826
|
[--search-network true|false] \
|
|
821
827
|
[--content-network true|false]
|
|
822
828
|
```
|
|
823
829
|
|
|
830
|
+
> **金额单位(必读)**:所有金额参数均按 **主币种金额**(如 `100` 表示 ¥100,支持小数 `10.5`)传入;CLI 内部 `Math.round(value × 100)` 写入后端「分」字段,与前端表单、`ad campaign-create`、`ad batch update` 完全一致。**禁止** 按 Google micros(×1,000,000)口径填写,会被后端按「分」解读,导致金额放大 10000 倍。
|
|
831
|
+
|
|
824
832
|
| 选项 | 说明 |
|
|
825
833
|
| ------------------- | ------------------------------------------------------------------------- |
|
|
826
834
|
| `--name` | 新广告系列名称 |
|
|
827
|
-
| `--budget` |
|
|
835
|
+
| `--budget` | 新日预算,主币种金额(如 `100` = ¥100;`10.5` = ¥10.50) |
|
|
828
836
|
| `--bidding` | 出价策略:`TARGET_SPEND` \| `TARGET_CPA` \| `TARGET_ROAS` \| `MANUAL_CPC` |
|
|
829
|
-
| `--bid-ceiling` | `TARGET_SPEND`
|
|
830
|
-
| `--target-cpa` | `TARGET_CPA` 目标 CPA
|
|
837
|
+
| `--bid-ceiling` | `TARGET_SPEND` 出价上限,主币种金额(`0` = 不限) |
|
|
838
|
+
| `--target-cpa` | `TARGET_CPA` 目标 CPA,主币种金额 |
|
|
831
839
|
| `--search-network` | 投放 Google 搜索:`true` \| `false` |
|
|
832
840
|
| `--content-network` | 投放展示网络:`true` \| `false` |
|
|
833
841
|
|
|
834
842
|
**示例:**
|
|
835
843
|
|
|
836
844
|
```bash
|
|
837
|
-
#
|
|
845
|
+
# 修改名称和预算(日预算 ¥5000)
|
|
838
846
|
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 \
|
|
839
|
-
--name "搜索-春季促销-2026" --budget
|
|
847
|
+
--name "搜索-春季促销-2026" --budget 5000
|
|
848
|
+
|
|
849
|
+
# 在原预算基础上 +10 元(典型相对运算流程):
|
|
850
|
+
# 1) 先 GET 系列详情,读出 budgetDisplay(主币种)
|
|
851
|
+
# 2) 计算新值(主币种)= budgetDisplay + 10
|
|
852
|
+
# 3) 把新值(主币种)作为 --budget 传入;CLI 内部自动 ×100
|
|
853
|
+
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 --budget 10.01
|
|
840
854
|
|
|
841
855
|
# 切换出价策略为 TARGET_CPA,目标 CPA 2 USD
|
|
842
856
|
siluzan-tso ad campaign-edit -a 6326027735 --id 23509626948 \
|
|
843
|
-
--bidding TARGET_CPA --target-cpa
|
|
857
|
+
--bidding TARGET_CPA --target-cpa 2
|
|
844
858
|
```
|
|
845
859
|
|
|
846
860
|
---
|
|
@@ -52,25 +52,34 @@ siluzan-tso google-analysis campaign-hour -a <mediaCustomerId> --start <YYYY-MM-
|
|
|
52
52
|
|
|
53
53
|
## 最终操作
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
> **金额单位(关键)**:`ad campaign-edit` / `ad adgroup-edit` 所有金额参数均为 **主币种金额**(如 `100` 表示 ¥100,支持小数 `10.5`);CLI 内部自动 `Math.round(value × 100)` 写入「分」字段。详见 `references/google-ads.md`「ad campaign-edit」金额单位说明。
|
|
56
|
+
>
|
|
57
|
+
> **必须先用 `*Display` 字段取主币种当前值,加减后再传回**;不要把 `budget` / `targetCpaAmount` / `maxCPCAmount` 这些"分"字段当作主币种传给 CLI。
|
|
58
|
+
|
|
59
|
+
**提高系列日预算**(在原值基础上 +10 元的写法):
|
|
56
60
|
|
|
57
61
|
```bash
|
|
58
|
-
|
|
62
|
+
# 1) GET 取主币种当前值
|
|
63
|
+
CUR=$(siluzan-tso ad campaigns -a <mediaCustomerId> --json | node -e '...筛选 budgetDisplay')
|
|
64
|
+
# 2) 主币种 + 10
|
|
65
|
+
NEW=$(node -e "console.log((${CUR} + 10).toFixed(2))")
|
|
66
|
+
# 3) 主币种金额传回
|
|
67
|
+
siluzan-tso ad campaign-edit -a <mediaCustomerId> --id <campaignId> --budget ${NEW}
|
|
59
68
|
```
|
|
60
69
|
|
|
61
70
|
**上调系列目标 CPA**(若策略为 tCPA 等):
|
|
62
71
|
|
|
63
72
|
```bash
|
|
64
|
-
siluzan-tso ad campaign-edit -a <mediaCustomerId> --id <campaignId> --target-cpa
|
|
73
|
+
siluzan-tso ad campaign-edit -a <mediaCustomerId> --id <campaignId> --target-cpa <主币种金额>
|
|
65
74
|
```
|
|
66
75
|
|
|
67
76
|
若策略在**组级**调目标 CPA:
|
|
68
77
|
|
|
69
78
|
```bash
|
|
70
|
-
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --target-cpa
|
|
79
|
+
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --target-cpa <主币种金额>
|
|
71
80
|
```
|
|
72
81
|
|
|
73
|
-
写前务必先 **`ad campaigns --json` / `ad groups --json`**
|
|
82
|
+
写前务必先 **`ad campaigns --json` / `ad groups --json`** 取当前值,**读取 `*Display` 字段**(主币种)后按配置比例计算,再以主币种金额传回。
|
|
74
83
|
|
|
75
84
|
---
|
|
76
85
|
|
|
@@ -107,28 +107,32 @@ siluzan-tso ad campaign-status -a <mediaCustomerId> --id <campaignId> --status E
|
|
|
107
107
|
**系列(tCPA / 出价上限等)**:
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
|
|
110
|
+
# 所有金额参数均为「主币种金额」(如 50 表示 ¥50);CLI 内部自动 ×100 写入「分」字段
|
|
111
|
+
siluzan-tso ad campaign-edit -a <mediaCustomerId> --id <campaignId> --target-cpa <新值(主币种)>
|
|
111
112
|
# 或 eCPC / 最大化点击上限等:
|
|
112
|
-
# siluzan-tso ad campaign-edit ... --bid-ceiling
|
|
113
|
+
# siluzan-tso ad campaign-edit ... --bid-ceiling <主币种金额> --bidding TARGET_SPEND
|
|
113
114
|
```
|
|
114
115
|
|
|
115
|
-
参数与单位见 **`references/google-ads.md`**「ad campaign-edit
|
|
116
|
+
参数与单位见 **`references/google-ads.md`**「ad campaign-edit」金额单位说明。
|
|
116
117
|
|
|
117
118
|
**广告组**:
|
|
118
119
|
|
|
119
120
|
```bash
|
|
120
|
-
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --target-cpa
|
|
121
|
+
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --target-cpa <主币种金额>
|
|
121
122
|
# 或
|
|
122
|
-
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --max-cpc
|
|
123
|
+
siluzan-tso ad adgroup-edit -a <mediaCustomerId> --id <adGroupId> --max-cpc <主币种金额>
|
|
123
124
|
```
|
|
124
125
|
|
|
125
126
|
见 **`references/google-ads.md`**「广告组编辑」。
|
|
126
127
|
|
|
127
|
-
|
|
128
|
+
写前**必须**先 **`ad groups --json` / `ad campaigns --json`** 取当前值,**读取 `*Display` 字段**(主币种金额,如 `targetCpaAmountDisplay`、`maxCPCAmountDisplay`、`budgetDisplay`),在宿主内按主币种算新值(如下调 12%:`newDisplay = round((oldDisplay * 0.88) * 100) / 100`),再以主币种金额作为 `--target-cpa` / `--max-cpc` / `--budget` 传回。
|
|
129
|
+
**严禁** 把 `targetCpaAmount` / `maxCPCAmount` / `budget` 这些「分」字段直接当作主币种金额传给 CLI——会被再 ×100 一次,金额放大 100 倍。
|
|
128
130
|
|
|
129
131
|
### 写后复核
|
|
130
132
|
|
|
131
|
-
再次 **`ad campaigns --json`** 或 **`ad groups --json
|
|
133
|
+
再次 **`ad campaigns --json`** 或 **`ad groups --json`**:
|
|
134
|
+
- 优先比对 **`*Display` 字段**(主币种)与预期主币种金额一致;
|
|
135
|
+
- 整数字段 `targetCpa_BidingAmount` / `targetCpaAmount` / `maxCPCAmount` / `budget` 应等于 `主币种 × 100` 后的整数。
|
|
132
136
|
|
|
133
137
|
### CLI 能力摘要
|
|
134
138
|
|