siluzan-tso-cli 1.1.60-beta.3 → 1.1.60

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 CHANGED
@@ -43,7 +43,7 @@ HTML 报告模板外部资源:**ECharts** 统一使用 `https://staticpn.siluz
43
43
  在**用户的目标项目根目录**执行(根据用户使用的助手选择 `--ai`):
44
44
 
45
45
  ```bash
46
- npm install -g siluzan-tso-cli@beta
46
+ npm install -g siluzan-tso-cli
47
47
  siluzan-tso init --ai cursor # 写入 Cursor(默认)
48
48
  siluzan-tso init --ai cursor,claude # 同时写入多个平台
49
49
  siluzan-tso init --ai all # 写入所有支持的平台
@@ -51,7 +51,6 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
51
51
  siluzan-tso init --force # 强制覆盖已存在文件
52
52
  ```
53
53
 
54
- > **注意**:当前为测试版(1.1.60-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
54
 
56
55
  | 助手 | 建议 `--ai` |
57
56
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -4051,7 +4051,7 @@ var DEFAULT_API_BASE;
4051
4051
  var init_defaults = __esm({
4052
4052
  "src/config/defaults.ts"() {
4053
4053
  "use strict";
4054
- DEFAULT_API_BASE = "https://tso-api-ci.siluzan.com";
4054
+ DEFAULT_API_BASE = "https://tso-api.siluzan.com";
4055
4055
  }
4056
4056
  });
4057
4057
 
@@ -122720,6 +122720,16 @@ function pmaxAssetGroupReportUrl(googleApiUrl, accountId, query) {
122720
122720
  const qs = query.toString();
122721
122721
  return `${base}/reporting/media-account/${accountId}/pmax/asset-groups/reports${qs ? `?${qs}` : ""}`;
122722
122722
  }
122723
+ function pmaxAssetReportUrl(googleApiUrl, accountId, query) {
122724
+ const base = googleApiUrl.replace(/\/$/, "");
122725
+ const qs = query.toString();
122726
+ return `${base}/reporting/media-account/${accountId}/pmax/asset-groups/reports/assets${qs ? `?${qs}` : ""}`;
122727
+ }
122728
+ function pmaxChannelReportUrl(googleApiUrl, accountId, query) {
122729
+ const base = googleApiUrl.replace(/\/$/, "");
122730
+ const qs = query.toString();
122731
+ return `${base}/reporting/media-account/${accountId}/pmax/campaigns/reports/channels${qs ? `?${qs}` : ""}`;
122732
+ }
122723
122733
  function pmaxGeoReportUrl(googleApiUrl, accountId, query) {
122724
122734
  const base = googleApiUrl.replace(/\/$/, "");
122725
122735
  const qs = query.toString();
@@ -125376,6 +125386,80 @@ PMax \u8D44\u4EA7\u7EC4\u6548\u679C\u62A5\u8868\uFF08${query.get("startDate")} ~
125376
125386
  console.log(" \u5B8C\u6574\u6570\u636E\u8BF7\u4F7F\u7528 --json-out\n");
125377
125387
  });
125378
125388
  }
125389
+ async function runAdPmaxReportAssets(opts) {
125390
+ const accountId = requireAccountId(opts.account);
125391
+ const query = buildReportQuery(opts);
125392
+ await withGoogleApi(opts, async (config, googleApiUrl) => {
125393
+ const url = pmaxAssetReportUrl(googleApiUrl, accountId, query);
125394
+ let data;
125395
+ try {
125396
+ const raw = await pmaxApiFetch(url, config, {}, opts.verbose);
125397
+ data = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : { data: raw };
125398
+ } catch (err) {
125399
+ console.error(
125400
+ `
125401
+ \u274C \u83B7\u53D6 PMax \u7D20\u6750\u62A5\u8868\u5931\u8D25\uFF1A${err instanceof Error ? err.message : String(err)}
125402
+ `
125403
+ );
125404
+ process.exit(1);
125405
+ }
125406
+ if (await emitPmaxResult(
125407
+ { ...opts, account: accountId },
125408
+ `ad-pmax-report-assets-${accountId}`,
125409
+ "ad pmax-report-assets",
125410
+ data,
125411
+ accountId
125412
+ )) {
125413
+ return;
125414
+ }
125415
+ const assets = data["assets"];
125416
+ const n = Array.isArray(assets) ? assets.length : 0;
125417
+ console.log(
125418
+ `
125419
+ PMax \u7D20\u6750\u62A5\u8868\uFF08${query.get("startDate")} ~ ${query.get("endDate")}\uFF0C${n} \u6761\u7D20\u6750\uFF09
125420
+ `
125421
+ );
125422
+ console.log(" \u6BD4\u7387\u6309\u672C\u8868\u5408\u8BA1\u3002\u4E0E\u7D20\u6750\u7EC4\u82B1\u8D39/\u70B9\u51FB\u4E0D\u5FC5\u76F8\u7B49\u3002\u7D20\u6750\u70B9\u51FB\u53EF\u5927\u4E8E\u7CFB\u5217\u70B9\u51FB\u3002");
125423
+ console.log(" \u5B8C\u6574\u6570\u636E\u8BF7\u4F7F\u7528 --json-out\n");
125424
+ });
125425
+ }
125426
+ async function runAdPmaxReportChannels(opts) {
125427
+ const accountId = requireAccountId(opts.account);
125428
+ const query = buildReportQuery(opts);
125429
+ await withGoogleApi(opts, async (config, googleApiUrl) => {
125430
+ const url = pmaxChannelReportUrl(googleApiUrl, accountId, query);
125431
+ let data;
125432
+ try {
125433
+ const raw = await pmaxApiFetch(url, config, {}, opts.verbose);
125434
+ data = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : { data: raw };
125435
+ } catch (err) {
125436
+ console.error(
125437
+ `
125438
+ \u274C \u83B7\u53D6 PMax \u6E20\u9053\u62A5\u8868\u5931\u8D25\uFF1A${err instanceof Error ? err.message : String(err)}
125439
+ `
125440
+ );
125441
+ process.exit(1);
125442
+ }
125443
+ if (await emitPmaxResult(
125444
+ { ...opts, account: accountId },
125445
+ `ad-pmax-report-channels-${accountId}`,
125446
+ "ad pmax-report-channels",
125447
+ data,
125448
+ accountId
125449
+ )) {
125450
+ return;
125451
+ }
125452
+ const campaigns = data["campaigns"];
125453
+ const n = Array.isArray(campaigns) ? campaigns.length : 0;
125454
+ console.log(
125455
+ `
125456
+ PMax \u6E20\u9053\u62A5\u8868\uFF08${query.get("startDate")} ~ ${query.get("endDate")}\uFF0C${n} \u4E2A\u7CFB\u5217\uFF09
125457
+ `
125458
+ );
125459
+ console.log(" \u5408\u8BA1\u53EA\u542B\u5404\u7F51\u7EDC\u4E4B\u548C\u3002\u89C6\u9891\u3001\u5546\u54C1\u662F\u5BF9\u7167\uFF0C\u4E0D\u52A0\u5165\u5408\u8BA1\u3002");
125460
+ console.log(" \u5B8C\u6574\u6570\u636E\u8BF7\u4F7F\u7528 --json-out\n");
125461
+ });
125462
+ }
125379
125463
  async function runAdPmaxReportGeo(opts) {
125380
125464
  const accountId = requireAccountId(opts.account);
125381
125465
  const query = buildReportQuery(opts);
@@ -126239,7 +126323,7 @@ function register21(program2) {
126239
126323
  );
126240
126324
  addPmaxJsonOptions(
126241
126325
  adCmd.command("pmax-edit").description(
126242
- "\u66F4\u65B0 PMax \u6D3B\u52A8\uFF08PATCH\uFF1B\u52FF\u7528 ad campaign-edit\uFF09\n --patch-file \u89C1 assets/pmax-patch-campaign-template.json"
126326
+ "\u66F4\u65B0 PMax \u6D3B\u52A8\uFF08PATCH\uFF1B\u52FF\u7528 ad campaign-edit\uFF09\n --patch-file \u89C1 assets/pmax-patch-campaign-template.json\uFF1BassetAutomationSettings \u53EA\u6539\u63D0\u4EA4\u7684\u7C7B\u578B"
126243
126327
  ).requiredOption("-a, --account <id>", "Google \u5A92\u4F53\u5BA2\u6237 ID").requiredOption("--campaign-id <id>", "\u6D3B\u52A8 ID").option("--patch-file <path>", "PATCH JSON\uFF08budget/targetCpa \u586B\u5143\uFF09").option(
126244
126328
  "--status <status>",
126245
126329
  "2|3|4 \u6216 Enabled|Paused|Removed\uFF08Removed \u4E0D\u53EF\u6062\u590D\uFF0C\u987B\u7528\u6237\u540C\u610F\u540E\u52A0 --i-confirm\uFF09"
@@ -126325,7 +126409,7 @@ function register21(program2) {
126325
126409
  }
126326
126410
  );
126327
126411
  addPmaxJsonOptions(
126328
- adCmd.command("pmax-signals-set").description("\u5168\u91CF\u540C\u6B65\u8D44\u4EA7\u7EC4\u4FE1\u53F7\uFF08PUT .../signals\uFF1B\u6A21\u677F pmax-signals-template.json\uFF09").requiredOption("--config-file <path>", "JSON \u914D\u7F6E\u8DEF\u5F84").option("-t, --token <token>", "Auth Token")
126412
+ adCmd.command("pmax-signals-set").description("\u5168\u91CF\u540C\u6B65\u8D44\u4EA7\u7EC4\u4FE1\u53F7\uFF08PUT .../signals\uFF1B\u4E24\u7C7B\u90FD\u7A7A\u4E14\u7EC4\u91CC\u8FD8\u6709\u4FE1\u53F7\u4F1A 400\uFF09").requiredOption("--config-file <path>", "JSON \u914D\u7F6E\u8DEF\u5F84").option("-t, --token <token>", "Auth Token")
126329
126413
  ).action(
126330
126414
  async (opts) => {
126331
126415
  await runAdPmaxSignalsSet(opts);
@@ -126389,6 +126473,36 @@ function register21(program2) {
126389
126473
  });
126390
126474
  }
126391
126475
  );
126476
+ pmaxReportOpts(
126477
+ adCmd.command("pmax-report-assets").description("PMax \u5355\u7D20\u6750\u62A5\u8868\uFF08GET .../pmax/asset-groups/reports/assets\uFF09")
126478
+ ).action(
126479
+ async (opts) => {
126480
+ await runAdPmaxReportAssets({
126481
+ account: opts.account,
126482
+ startDate: opts.start,
126483
+ endDate: opts.end,
126484
+ campaignId: opts.campaignId,
126485
+ token: opts.token,
126486
+ jsonOut: opts.jsonOut,
126487
+ verbose: opts.verbose
126488
+ });
126489
+ }
126490
+ );
126491
+ pmaxReportOpts(
126492
+ adCmd.command("pmax-report-channels").description("PMax \u6E20\u9053\u62A5\u8868\uFF08GET .../pmax/campaigns/reports/channels\uFF09")
126493
+ ).action(
126494
+ async (opts) => {
126495
+ await runAdPmaxReportChannels({
126496
+ account: opts.account,
126497
+ startDate: opts.start,
126498
+ endDate: opts.end,
126499
+ campaignId: opts.campaignId,
126500
+ token: opts.token,
126501
+ jsonOut: opts.jsonOut,
126502
+ verbose: opts.verbose
126503
+ });
126504
+ }
126505
+ );
126392
126506
  pmaxReportOpts(
126393
126507
  adCmd.command("pmax-report-geo").description("PMax \u5730\u7406\u62A5\u8868 \u6D3B\u52A8\xD7\u56FD\u5BB6\uFF08GET .../pmax/campaigns/reports/geo\uFF09").option("--cost-greater <n>", "\u82B1\u8D39\u8FC7\u6EE4", (v) => parseFloat(v)).option("--click-greater <n>", "\u70B9\u51FB\u8FC7\u6EE4", (v) => parseFloat(v)).option("--conversions-greater <n>", "\u8F6C\u5316\u8FC7\u6EE4", (v) => parseFloat(v))
126394
126508
  ).action(
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.60-beta.3",
4
- "publishedAt": 1793173318795
3
+ "version": "1.1.60",
4
+ "publishedAt": 1793183498287
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "PATCH 活动;budget/targetCpa 填主币种元,CLI 自动 ×100",
2
+ "_comment": "PATCH 活动;budget/targetCpa 填主币种元,CLI 自动 ×100。assetAutomationSettings 只改提交的类型,例如 GENERATE_IMAGE_ENHANCEMENT / GENERATE_IMAGE_EXTRACTION(OPTED_IN 或 OPTED_OUT)。未提交不写,避免把默认增强关掉",
3
3
  "id": "12345678901",
4
4
  "budgetId": "111222333",
5
5
  "budget": 5.5,
@@ -170,7 +170,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
170
170
  | 状态 | 含义 | 下一步操作 |
171
171
  | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
172
172
  | `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
173
- | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
173
+ | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
174
174
  | `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
175
175
 
176
176
  ---
@@ -490,7 +490,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
490
490
 
491
491
  | 功能 | 媒体 | 网页路径 |
492
492
  | --------------------------------------- | ------ | ------------------------------------------------- |
493
- | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
493
+ | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
494
494
 
495
495
  **Agent 建议话术**:
496
496
 
@@ -499,5 +499,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
499
499
  siluzan-tso config show # 查看 webUrl 字段
500
500
 
501
501
  # 账户激活(Google)→ 引导至账户管理页
502
- # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
502
+ # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
503
503
  ```
@@ -126,7 +126,7 @@ siluzan-tso config show
126
126
 
127
127
  ### 充值页链接(按媒体 × 类型)
128
128
 
129
- 链接模式:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
129
+ 链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
130
130
 
131
131
  | 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
132
132
  | ------------------------- | --------------------- | ------------------------------------------- |
@@ -1,6 +1,6 @@
1
1
  # 各媒体开户
2
2
 
3
- > 网页链接:`https://www-ci.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
3
+ > 网页链接:`https://www.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
4
4
  > 多命令串联见 `references/core/workflows.md` § 流程一。
5
5
 
6
6
  ## Contents
@@ -65,7 +65,7 @@ siluzan-tso open-account google-wizard
65
65
 
66
66
  ```bash
67
67
  siluzan-tso account-history -m Google
68
- # 审核通过后:config show → https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
68
+ # 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
69
69
  ```
70
70
 
71
71
  ---
@@ -1,6 +1,6 @@
1
1
  # rag:知识库检索(TSO 广告投放辅助)
2
2
 
3
- 知识库管理页面在 https://www-ci.siluzan.com/knowledge-base/
3
+ 知识库管理页面在 https://www.siluzan.com/knowledge-base/
4
4
 
5
5
  为 **广告投放、账户分析、拓词、诊断报告** 等 TSO 业务提供**企业已入库**的产品、行业、客户背景事实依据。
6
6
 
@@ -190,9 +190,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
190
190
 
191
191
  | 媒体 | 报告类型 | URL 模板 |
192
192
  | ------ | ---------------- | ----------------------------------------------------------- |
193
- | Google | 日报(Daily) | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
194
- | Google | 小时报(Hourly) | `https://www-ci.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
195
- | TikTok | 日报 | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
193
+ | Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
194
+ | Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
195
+ | TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
196
 
197
197
  `entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
198
198
 
@@ -205,8 +205,8 @@ siluzan-tso report list -m Google --json-out ./snap
205
205
 
206
206
  # 第二步:查看 webUrl
207
207
  siluzan-tso config show
208
- # webUrl: https://www-ci.siluzan.com
208
+ # webUrl: https://www.siluzan.com
209
209
 
210
210
  # 第三步:拼接链接(Google 日报)
211
- # https://www-ci.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
211
+ # https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
212
212
  ```
@@ -10,7 +10,7 @@
10
10
  ## 安装 CLI
11
11
 
12
12
  ```bash
13
- npm install -g siluzan-tso-cli@beta
13
+ npm install -g siluzan-tso-cli
14
14
  ```
15
15
 
16
16
  ---
@@ -64,7 +64,7 @@ siluzan-tso config set --api-key <Key> # 或 config 直接写入
64
64
  siluzan-tso config set --token <Token> # 备用:设置 JWT Token
65
65
  ```
66
66
 
67
- API Key 获取入口:`https://www-ci.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
67
+ API Key 获取入口:`https://www.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
68
68
 
69
69
  ```bash
70
70
  # 第 1 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
@@ -127,9 +127,9 @@ siluzan-tso config show
127
127
 
128
128
  ```
129
129
  构建环境 : production
130
- apiBaseUrl : https://tso-api-ci.siluzan.com
131
- googleApiUrl : https://googleapi-ci.mysiluzan.com
132
- webUrl : https://www-ci.siluzan.com
130
+ apiBaseUrl : https://tso-api.siluzan.com
131
+ googleApiUrl : https://googleapi.mysiluzan.com
132
+ webUrl : https://www.siluzan.com
133
133
  apiKey : abcd****1234
134
134
  ```
135
135
 
@@ -84,18 +84,18 @@
84
84
  | 能力 | 命令 |
85
85
  | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
86
86
  | 详情 | `ad pmax-get -a <id> --campaign-id <cid>`(读 `_brandGuidelinesActive`) |
87
- | 改活动 | `ad pmax-edit`(`--patch-file` 或 `--status` / `--budget` + `--budget-id`;改 `Removed` 须用户同意 + `--i-confirm`) |
87
+ | 改活动 | `ad pmax-edit`(`--patch-file` 或 `--status` / `--budget` + `--budget-id`;`assetAutomationSettings` 只改提交类型,如图片增强/提取;改 `Removed` 须用户同意 + `--i-confirm`) |
88
88
  | 改 Campaign 品牌 | `ad pmax-brand-assets-edit`(BG 已开启) |
89
89
  | 启用 BG | `ad pmax-brand-guidelines-enable --config-file …`(存量活动) |
90
90
  | 新资产组 | `ad pmax-asset-group-create --config-file …`(BG 下自动省略品牌) |
91
91
  | 改资产组 | `ad pmax-asset-group-edit` |
92
- | 删资产组 | `ad pmax-asset-group-edit --status REMOVED`(软删;网关无 DELETE 端点) |
92
+ | 删资产组 | `ad pmax-asset-group-edit --status REMOVED`(软删;网关无 DELETE 端点。最后一组会 400,应暂停该组或系列) |
93
93
  | 改资产 | `ad pmax-assets-update --config-file …` |
94
94
  | YouTube 追加 | `ad pmax-youtube-link`(单条 `--youtube` / `--video-path`);批量见 `ad pmax-assets-update` |
95
95
  | 信号 | `ad pmax-signals-get` / `ad pmax-signals-set`;受众下拉 `ad pmax-audiences` |
96
96
  | 附加资产 | `ad extension pmax-types`;`callout` / `snippet` / `lead-form` / `whatsapp`(见 `pmax-api.md` § 附加资产) |
97
97
  | 图片库 | `ad pmax-image-upload` |
98
- | 报表 | `ad pmax-report-asset-groups` / `ad pmax-report-geo` |
98
+ | 报表 | `ad pmax-report-asset-groups` / `ad pmax-report-assets` / `ad pmax-report-geo` / `ad pmax-report-channels`(单素材与素材组不必相等;素材点击可大于系列点击;渠道合计只含各网络) |
99
99
  | 删活动 | 用户同意后 `ad campaign-delete -a <id> --id <campaignId> --i-confirm --commit "…"`(与 Search 共用;勿用 `ad campaign-edit`) |
100
100
 
101
101
  模板与 HTTP 对照:`references/google-ads/pmax-api.md`。
@@ -19,17 +19,17 @@
19
19
  | `ad pmax-create` | 创建系列(同步返回 `campaignId` 等;失败时把已建成编号写回 JSON 再跑) |
20
20
  | `ad pmax-channel-types` | 渠道类型列表 |
21
21
  | `ad pmax-get` | 系列详情(含 `brandAssets[]`;`--json-out` 附加 `_brandGuidelinesActive`、`_agentBrandHint`) |
22
- | `ad pmax-edit` | 编辑系列(预算/出价/状态;**不可**改 `brandGuidelinesEnabled`) |
22
+ | `ad pmax-edit` | 编辑系列(预算/出价/状态/`assetAutomationSettings`;**不可**改 `brandGuidelinesEnabled`)。图片增强/提取只改提交的类型,不进创建默认值 |
23
23
  | `ad pmax-brand-assets-edit` | BG 已开启时改 Campaign 级品牌(商家名/Logo/样式) |
24
24
  | `ad pmax-brand-guidelines-enable` | 存量活动启用 BG(不可关闭) |
25
25
  | `ad pmax-asset-group-create` | 新建资产组 |
26
26
  | `ad pmax-asset-group-edit` | 编辑资产组 |
27
27
  | `ad pmax-assets-update` | 更新资产 |
28
28
  | `ad pmax-youtube-link` | **追加**单条 YouTube 视频(不替换已有视频) |
29
- | `ad pmax-signals-get` / `ad pmax-signals-set` | 读/写信号(**全量** PUT) |
29
+ | `ad pmax-signals-get` / `ad pmax-signals-set` | 读/写信号(**全量** PUT。两类都空且组里还有信号会 400) |
30
30
  | `ad pmax-audiences` | 受众列表 |
31
31
  | `ad pmax-image-upload` | 单张图片上传 |
32
- | `ad pmax-report-asset-groups` / `ad pmax-report-geo` | 报表 |
32
+ | `ad pmax-report-asset-groups` / `ad pmax-report-assets` / `ad pmax-report-geo` / `ad pmax-report-channels` | 报表(素材组 / 单素材 / 地理 / 渠道)。单素材与素材组花费/点击不必相等;素材点击可大于系列点击。渠道表的 `total` 只等于各 `channels` 之和;`video` / `product` 是对照,不要再加进合计 |
33
33
  | `ad campaigns` | 列表(筛 `PERFORMANCE_MAX`) |
34
34
  | `ad extension pmax-types` | PMax 支持的附加资产类型与层级 |
35
35
  | `ad extension callout` / `snippet` / `lead-form` / `whatsapp` | 宣传信息 / 结构化摘要 / 潜在客户表单 / WhatsApp |
@@ -202,7 +202,7 @@ Google v21+ 新建 PMax **默认开启** BG:`businessName` / Logo 挂在 **Cam
202
202
  ## 删除
203
203
 
204
204
  - **系列**:用户同意后 `ad campaign-delete -a <id> --id <campaignId> --i-confirm --commit "…"`(`ad pmax-edit --status Removed` 同样须 `--i-confirm`)
205
- - **资产组**:`ad pmax-asset-group-edit --status REMOVED`
205
+ - **资产组**:`ad pmax-asset-group-edit --status REMOVED`(最后一组会 400,应暂停该组或系列)
206
206
  - **资产**:`ad pmax-assets-update` 的 `unlink`(见模板)
207
207
 
208
208
  ---
@@ -6,7 +6,7 @@
6
6
  siluzan-tso config show # 取 webUrl
7
7
  ```
8
8
 
9
- 首页地址:`https://www-ci.siluzan.com/v3/foreign_trade/tso/home`
9
+ 首页地址:`https://www.siluzan.com/v3/foreign_trade/tso/home`
10
10
 
11
11
  ---
12
12
 
@@ -25,7 +25,7 @@ siluzan-tso config show # 取 webUrl
25
25
 
26
26
  ## 推荐话术
27
27
 
28
- 1. **「和首页一样的总览」** → 打开 `https://www-ci.siluzan.com/v3/foreign_trade/tso/home`。
28
+ 1. **「和首页一样的总览」** → 打开 `https://www.siluzan.com/v3/foreign_trade/tso/home`。
29
29
  2. **「某个 Google 账户昨天花了多少」** → `list-accounts -m Google` + `stats -m Google -a <id>`。
30
30
  3. **「有待充值账户」** → 说明聚合数据在首页;CLI 可 `list-accounts` + `balance` 逐户排查,或引导充值页。
31
31
 
@@ -9,11 +9,11 @@ $ErrorActionPreference = 'Stop'
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  $PKG_NAME = 'siluzan-tso-cli'
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- $PKG_VERSION = '1.1.60-beta.3'
12
+ $PKG_VERSION = '1.1.60'
13
13
  $CLI_BIN = 'siluzan-tso'
14
14
  $SKILL_LABEL = 'Siluzan TSO'
15
- $INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
16
- $WEB_BASE = 'https://www-ci.siluzan.com'
15
+ $INSTALL_CMD = 'npm install -g siluzan-tso-cli'
16
+ $WEB_BASE = 'https://www.siluzan.com'
17
17
 
18
18
  # -- Constants ----------------------------------------------------------------
19
19
  $NODE_MAJOR_MIN = 18
@@ -9,11 +9,11 @@ set -euo pipefail
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  readonly PKG_NAME="siluzan-tso-cli"
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- readonly PKG_VERSION="1.1.60-beta.3"
12
+ readonly PKG_VERSION="1.1.60"
13
13
  readonly CLI_BIN="siluzan-tso"
14
14
  readonly SKILL_LABEL="Siluzan TSO"
15
- readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
16
- readonly WEB_BASE="https://www-ci.siluzan.com"
15
+ readonly INSTALL_CMD="npm install -g siluzan-tso-cli"
16
+ readonly WEB_BASE="https://www.siluzan.com"
17
17
 
18
18
  # -- Constants ----------------------------------------------------------------
19
19
  readonly NODE_MAJOR_MIN=18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.60-beta.3",
3
+ "version": "1.1.60",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",