siluzan-tso-cli 1.1.27-beta.2 → 1.1.27

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 报告模板引用以下 CDN:`cdn.tailwindcss.com`、`cdnjs.cloudflare.co
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.27-beta.2),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
54
 
56
55
  | 助手 | 建议 `--ai` |
57
56
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -3328,7 +3328,7 @@ var DEFAULT_API_BASE;
3328
3328
  var init_defaults = __esm({
3329
3329
  "src/config/defaults.ts"() {
3330
3330
  "use strict";
3331
- DEFAULT_API_BASE = "https://tso-api-ci.siluzan.com";
3331
+ DEFAULT_API_BASE = "https://tso-api.siluzan.com";
3332
3332
  }
3333
3333
  });
3334
3334
 
@@ -116848,7 +116848,7 @@ function register20(program2) {
116848
116848
  );
116849
116849
  addPmaxJsonOptions(
116850
116850
  adCmd.command("pmax-youtube-link").description(
116851
- "\u4E3A\u8D44\u4EA7\u7EC4\u94FE\u63A5\u6216\u66FF\u6362 YouTube \u89C6\u9891\uFF08POST .../youtube\uFF1B\u4F1A\u5148\u79FB\u9664\u5DF2\u6709 YOUTUBE_VIDEO \u518D\u6302\u65B0\u7247\uFF09\n --youtube\uFF1A\u5DF2\u6709 URL/ID\uFF1B--video-path\uFF1A\u672C\u5730\u6587\u4EF6\u7ECF PyAPI \u4E0A\u4F20\u540E\u94FE\u63A5"
116851
+ "\u4E3A\u8D44\u4EA7\u7EC4\u8FFD\u52A0\u5355\u6761 YouTube \u89C6\u9891\uFF08POST .../youtube\uFF1B\u9ED8\u8BA4\u4E0D\u66FF\u6362\u5DF2\u6709\u89C6\u9891\uFF0C\u6BCF\u8D44\u4EA7\u7EC4 \u226415 \u6761\uFF09\n --youtube\uFF1A\u5DF2\u6709 URL/ID\uFF1B--video-path\uFF1A\u672C\u5730\u6587\u4EF6\u7ECF PyAPI \u4E0A\u4F20\u540E\u94FE\u63A5\uFF1B\u6279\u91CF\u8FFD\u52A0\u7528 pmax-assets-update"
116852
116852
  ).requiredOption("-a, --account <id>", "Google \u5A92\u4F53\u5BA2\u6237 ID").requiredOption("--asset-group-id <id>", "\u8D44\u4EA7\u7EC4 ID").option("--campaign-id <id>", "\u6240\u5C5E\u6D3B\u52A8 ID\uFF08\u5EFA\u8BAE\u4F20\uFF09").option("--youtube <urlOrId>", "YouTube URL \u6216 11 \u4F4D\u89C6\u9891 ID\uFF08\u4E0E --video-path \u4E8C\u9009\u4E00\uFF09").option("--video-path <path>", "\u672C\u5730\u89C6\u9891\u8DEF\u5F84\uFF08PyAPI \u4E0A\u4F20\uFF1B\u4E0E --youtube \u4E8C\u9009\u4E00\uFF09").option("--video-title <title>", "PyAPI \u4E0A\u4F20\u6807\u9898\uFF08\u9ED8\u8BA4\u6587\u4EF6\u540D\uFF09").option("--video-description <text>", "PyAPI \u4E0A\u4F20\u63CF\u8FF0").option("--asset-name <name>", "\u8D44\u4EA7\u663E\u793A\u540D").option("--body-file <path>", "\u5B8C\u6574 JSON body\uFF08\u542B youtubeUrlOrId\uFF1B\u8986\u76D6 --youtube/--video-path\uFF09").option("-t, --token <token>", "Auth Token")
116853
116853
  ).action(
116854
116854
  async (opts) => {
@@ -122389,7 +122389,7 @@ var FACEBOOK_SECTIONS = [
122389
122389
  },
122390
122390
  {
122391
122391
  name: "platform",
122392
- description: "\u6295\u653E\u5E73\u53F0 PlatformSectionData\uFF08facebook / instagram \u7B49\uFF09",
122392
+ description: "\u6295\u653E\u5E73\u53F0\xD7\u7248\u4F4D PlatformSectionData\uFF08publisherPlatform + platformPosition\uFF1Bnetwork \u517C\u5BB9\u65E7\u7248\uFF09",
122393
122393
  segment: "PlatformSectionData"
122394
122394
  },
122395
122395
  {
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.27-beta.2",
4
- "publishedAt": 1780643679737
3
+ "version": "1.1.27",
4
+ "publishedAt": 1780883398332
5
5
  }
@@ -1,14 +1,45 @@
1
1
  {
2
- "_comment": "PUT .../asset-group/{assetGroupId}/assets;campaignId 必填",
2
+ "_comment": "PUT .../asset-group/{assetGroupId}/assets;campaignId 必填。YOUTUBE_VIDEO 默认追加(≤15/资产组);替换全部视频时设 replaceFieldTypes: [\"YOUTUBE_VIDEO\"]",
3
3
  "account": "6326027735",
4
4
  "campaignId": "12345678901",
5
5
  "assetGroupId": "98765432101",
6
6
  "assetsToLink": [
7
7
  {
8
- "fieldType": 2,
8
+ "fieldType": "HEADLINE",
9
9
  "text": "Extra headline from CLI"
10
10
  }
11
11
  ],
12
12
  "assetGroupAssetResourceNamesToRemove": [],
13
- "replaceFieldTypes": []
13
+ "replaceFieldTypes": [],
14
+ "_examples": {
15
+ "appendYoutubeVideos": {
16
+ "assetsToLink": [
17
+ {
18
+ "fieldType": "YOUTUBE_VIDEO",
19
+ "youtubeVideoId": "dQw4w9WgXcQ",
20
+ "assetName": "Promo1"
21
+ },
22
+ {
23
+ "fieldType": "YOUTUBE_VIDEO",
24
+ "youtubeVideoId": "https://youtu.be/jNQXAC9IVRw",
25
+ "assetName": "Promo2"
26
+ }
27
+ ]
28
+ },
29
+ "replaceAllYoutubeVideos": {
30
+ "replaceFieldTypes": ["YOUTUBE_VIDEO"],
31
+ "assetsToLink": [
32
+ {
33
+ "fieldType": "YOUTUBE_VIDEO",
34
+ "youtubeVideoId": "9bZkp7q19f0",
35
+ "assetName": "NewPromo"
36
+ }
37
+ ]
38
+ },
39
+ "unlinkYoutube": {
40
+ "assetGroupAssetResourceNamesToRemove": [
41
+ "customers/6326027735/assetGroupAssets/98765432101~7~12345"
42
+ ]
43
+ }
44
+ }
14
45
  }
@@ -62,7 +62,7 @@ siluzan-tso ad campaigns -a <accountId> --json-out ./snap
62
62
  | `biddingStrategyTypeV2` | string | | 默认 `MAXIMIZE_CONVERSIONS` |
63
63
  | `targetCpa_BidingAmount` | number | | `TARGET_CPA` 或带目标 CPA 的 `MAXIMIZE_CONVERSIONS` 时必填(**元**) |
64
64
  | `targetRoas` | number | | `TARGET_ROAS` 时必填(如 `2.5` = 250%) |
65
- | `videoPath` | string | | YOUTUBE_VIDEO(可选):本地视频 ≥10s;与 `youtubeUrlOrId` 二选一,创建时最多 1 |
65
+ | `videoPath` | string | | YOUTUBE_VIDEO(可选):本地视频 ≥10s;与 `youtubeUrlOrId` 二选一,创建时最多 1 条;更多视频创建后用 `pmax-youtube-link` / `pmax-assets-update` 追加 |
66
66
  | `videoTitle` | string | | PyAPI 上传标题(默认文件名) |
67
67
  | `videoDescription` | string | | PyAPI 上传描述(可选) |
68
68
  | `youtubeUrlOrId` | string | | 已有 YouTube URL 或 11 位 ID;`pmax-create` 后自动链接 |
@@ -271,7 +271,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
271
271
  | 状态 | 含义 | 下一步操作 |
272
272
  | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
273
273
  | `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
274
- | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
274
+ | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
275
275
  | `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
276
276
 
277
277
  ---
@@ -824,7 +824,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
824
824
 
825
825
  | 功能 | 媒体 | 网页路径 |
826
826
  | --------------------------------------- | ------ | ---------------------------------------------- |
827
- | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
827
+ | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
828
828
 
829
829
  **Agent 建议话术**:
830
830
 
@@ -833,5 +833,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
833
833
  siluzan-tso config show # 查看 webUrl 字段
834
834
 
835
835
  # 账户激活(Google)→ 引导至账户管理页
836
- # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
836
+ # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
837
837
  ```
@@ -121,10 +121,10 @@ siluzan-tso config show
121
121
 
122
122
  | 媒体 | `mediaType` 参数 | 传统充值/现金充值链接 |
123
123
  | ---- | ---------------- | ------------ |
124
- | Google | `Google` | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google` |
125
- | TikTok | `TikTok` | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok` |
126
- | Meta / Facebook | `MetaAd` | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd` |
127
- | Microsoft / Bing | `MicrosoftAd` | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd` |
124
+ | Google | `Google` | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google` |
125
+ | TikTok | `TikTok` | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok` |
126
+ | Meta / Facebook | `MetaAd` | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd` |
127
+ | Microsoft / Bing | `MicrosoftAd` | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd` |
128
128
 
129
129
  > Yandex、Kwai 当前没有传统充值/现金充值界面;用户询问这些媒体充值时,不要拼接充值页链接,应说明当前网页不提供对应充值入口,并建议联系丝路赞客服或业务负责人确认处理方式。
130
130
 
@@ -132,8 +132,8 @@ siluzan-tso config show
132
132
 
133
133
  | 媒体 | 批量充值链接 |
134
134
  | ---- | ------------ |
135
- | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google` |
136
- | TikTok | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok` |
135
+ | Google | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google` |
136
+ | TikTok | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok` |
137
137
 
138
138
  > Meta、Microsoft/Bing、Yandex、Kwai 当前不要引导到批量充值页。
139
139
 
@@ -141,10 +141,10 @@ siluzan-tso config show
141
141
 
142
142
  | 媒体 | 月结充值链接 |
143
143
  | ---- | ------------ |
144
- | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google` |
145
- | TikTok | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok` |
146
- | Meta / Facebook | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd` |
147
- | Microsoft / Bing | `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd` |
144
+ | Google | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google` |
145
+ | TikTok | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok` |
146
+ | Meta / Facebook | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd` |
147
+ | Microsoft / Bing | `https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd` |
148
148
 
149
149
  > Yandex、Kwai 当前不要引导到月结充值页。
150
150
 
@@ -155,17 +155,17 @@ siluzan-tso config show
155
155
  ```
156
156
  需要进行充值,请访问丝路赞平台对应页面完成操作:
157
157
 
158
- - Google 充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
159
- - TikTok 充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok
160
- - Meta 充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd
161
- - Microsoft/Bing 充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd
162
- - Google 批量充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google
163
- - TikTok 批量充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok
164
- - Google 月结充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google
165
- - TikTok 月结充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok
166
- - Meta 月结充值: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd
167
- - Microsoft/Bing 月结充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd
168
- - 丝路赞钱包: https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet
158
+ - Google 充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
159
+ - TikTok 充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok
160
+ - Meta 充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd
161
+ - Microsoft/Bing 充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd
162
+ - Google 批量充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google
163
+ - TikTok 批量充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok
164
+ - Google 月结充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google
165
+ - TikTok 月结充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok
166
+ - Meta 月结充值: https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd
167
+ - Microsoft/Bing 月结充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd
168
+ - 丝路赞钱包: https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet
169
169
 
170
170
  Yandex、Kwai 当前没有传统充值/现金充值和月结充值界面,需联系丝路赞客服或业务负责人确认处理方式。
171
171
  批量充值当前仅支持 Google 和 TikTok;Meta、Microsoft/Bing、Yandex、Kwai 不要引导到批量充值页。
@@ -174,17 +174,17 @@ Yandex、Kwai 当前没有传统充值/现金充值和月结充值界面,需
174
174
  **示例:**
175
175
 
176
176
  ```
177
- - Google 充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
178
- - TikTok 充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok
179
- - Meta 充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd
180
- - Microsoft/Bing 充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd
181
- - Google 批量充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google
182
- - TikTok 批量充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok
183
- - Google 月结充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google
184
- - TikTok 月结充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok
185
- - Meta 月结充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd
186
- - Microsoft/Bing 月结充值:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd
187
- - 丝路赞钱包:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet
177
+ - Google 充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
178
+ - TikTok 充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=TikTok
179
+ - Meta 充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MetaAd
180
+ - Microsoft/Bing 充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=MicrosoftAd
181
+ - Google 批量充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=Google
182
+ - TikTok 批量充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay_batch?mediaType=TikTok
183
+ - Google 月结充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=Google
184
+ - TikTok 月结充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=TikTok
185
+ - Meta 月结充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MetaAd
186
+ - Microsoft/Bing 月结充值:https://www.siluzan.com/v3/foreign_trade/tso/recharge/accountBillingQuota?mediaType=MicrosoftAd
187
+ - 丝路赞钱包:https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet
188
188
  ```
189
189
 
190
190
  ---
@@ -60,7 +60,7 @@ siluzan-tso open-account google-wizard
60
60
 
61
61
  ```bash
62
62
  siluzan-tso account-history -m Google
63
- # 审核通过后:config show → https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
63
+ # 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
64
64
  ```
65
65
 
66
66
  ---
@@ -280,6 +280,7 @@ siluzan-tso facebook-analysis -a <mediaCustomerId> --start YYYY-MM-DD --end YYYY
280
280
  | `-a, --account` | 数字 `mediaCustomerId` 或 `act_<数字>` |
281
281
  | `--json-out` | 必填;`report-manifest-<id>.json` + `<section>-<id>.json` |
282
282
  | `--sections` / `--exclude` | `overview` `ad-sets` `platform` `country` `audience` `creative` `material`;**别名**:`campaigns`→`ad-sets`,`geographic`→`country`,`devices`→`platform`,`ads`→`creative`,`materials`→`material` |
283
+ | `platform` 响应字段 | `networks[]` 含 `publisherPlatform`(投放平台)+ `platformPosition`(版位);`network` 与 `platformPosition` 同值,详见 `facebook-analysis-guide.md` |
283
284
  | `--limit` | 仅 `country`:按 spend 降序前 N 条 |
284
285
  | `--start` / `--end` | 同传或同省略;省略=近 7 天截至昨天 |
285
286
  | `--concurrency` | 默认 5,上限 16 |
@@ -12,7 +12,7 @@
12
12
  | 每日趋势 `daily-metrics` | ❌ 无接口 | — | 报告中注明「Meta 报告无按日 Section」 |
13
13
  | 月度汇总 `dimension-summary` | ⚠️ 用 `overview` 单周期汇总代替 | `overview` | 仅 currentPeriod 即全区间汇总 |
14
14
  | 系列 `campaigns` | ⚠️ 广告组 + 行上 `campaignName` | `ad-sets` | 无独立 Campaign Section;可按 `campaignName` 聚合撰写 |
15
- | 设备 `devices` | ⚠️ 投放平台 | `platform` | `facebook` / `instagram` / `audience_network` |
15
+ | 设备 `devices` | ⚠️ 投放平台 × 版位 | `platform` | `publisherPlatform`(facebook / instagram 等)+ `platformPosition`(feed / facebook_reels 等) |
16
16
  | 地域 `geographic` | ✅ 国家 | `country` | 可选 `--limit N` |
17
17
  | 关键词 `keywords` | ❌ 无 | — | 非搜索广告;章节写「不适用」 |
18
18
  | 受众 `audience` | ⚠️ 年龄×性别 | `audience` | 无兴趣/自定义受众列表 |
@@ -59,13 +59,33 @@
59
59
 
60
60
  ---
61
61
 
62
+ ## PlatformSectionData 字段(平台 / 版位)
63
+
64
+ 后端按 Meta `publisher_platform,platform_position` breakdown 拆分(2026-06 起)。`networks[]` 每行:
65
+
66
+ | 字段 | 含义 | 示例 |
67
+ | ---- | ---- | ---- |
68
+ | `publisherPlatform` | 投放平台(Meta `publisher_platform`) | `facebook`、`instagram`、`audience_network` |
69
+ | `platformPosition` | 版位(Meta `platform_position`) | `feed`、`facebook_reels`、`instagram_stories`、`instream_video` |
70
+ | `network` | 兼容旧前端,**等于 `platformPosition`** | 勿单独当作「平台」列使用 |
71
+
72
+ **撰写表格建议列**:投放平台 | 版位 | 展示 | 花费 | 结果 | 单次成效费用。
73
+
74
+ **汇总规则**:
75
+
76
+ - 按**平台**占比:对 `publisherPlatform` 聚合 `spend` / `results`。
77
+ - 按**版位**占比:对 `platformPosition` 聚合(跨平台合并同名版位时须注明)。
78
+ - 精细诊断:保留 `publisherPlatform` + `platformPosition` 组合行(如 `instagram` + `feed` vs `facebook` + `feed`)。
79
+
80
+ ---
81
+
62
82
  ## 各 Section 文件与章节要点
63
83
 
64
84
  | section | 落盘文件 | 根字段 | 报告章节要点 |
65
85
  | ------- | -------- | ------ | ------------ |
66
86
  | `overview` | `overview-<id>.json` | `currentPeriod`, `previousPeriod` | 环比表:消耗、展示、点击、CTR、CPC、转化、CPA、结果、单次成效、reach、frequency;注明 `resultType` / `attributionSetting` |
67
87
  | `ad-sets` | `ad-sets-<id>.json` | `adGroups[]` | Top 组 by spend;`spendPercentage`;按 `campaignName` 归并;高消耗低结果组 |
68
- | `platform` | `platform-<id>.json` | `networks[]` | 各版位 spend 占比与 `costPerResult`;预算倾斜建议 |
88
+ | `platform` | `platform-<id>.json` | `networks[]` | **两列维度**:`publisherPlatform`(投放平台)+ `platformPosition`(版位);`network` `platformPosition` 同值(兼容旧版)。同版位名可能跨平台出现(如 facebook/instagram 均有 `feed`),**禁止**仅用 `network` 当平台汇总 |
69
89
  | `country` | `country-<id>.json` | `countries[]` | Top 国家;`countryOrRegion` 为展示名 |
70
90
  | `audience` | `audience-<id>.json` | `audiences[]` | 年龄×性别矩阵;高/低效人群段 |
71
91
  | `creative` | `creative-<id>.json` | `creatives[]` | 按 `creativeType` 汇总;Top 创意表(adName、title、spend、results、costPerResult) |
@@ -93,7 +113,7 @@ siluzan-tso facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb
93
113
  结合已拉维度,至少覆盖:
94
114
 
95
115
  1. **预算**:高 `spendPercentage` 但 `costPerResult` 差的 Ad Set → 降预算/暂停。
96
- 2. **版位**:某 `network` CPA 明显差 减投或单独系列。
116
+ 2. **平台/版位**:按 `publisherPlatform` + `platformPosition` 定位高消耗低 `costPerResult` 组合(勿只读 `network`);可分别按平台或版位汇总后给减投建议。
97
117
  3. **地域**:高消耗国家转化差 → 收窄/geo 排除。
98
118
  4. **受众**:低效 age×gender → 收窄定向。
99
119
  5. **创意**:关停高消耗低 `results` 的 ad;复制 winner 的 `creativeType`/文案结构。
@@ -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
 
@@ -192,9 +192,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
192
192
 
193
193
  | 媒体 | 报告类型 | URL 模板 |
194
194
  | ------ | ---------------- | -------------------------------------------------------- |
195
- | Google | 日报(Daily) | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
- | Google | 小时报(Hourly) | `https://www-ci.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
197
- | TikTok | 日报 | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
195
+ | Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
+ | Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
197
+ | TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
198
198
 
199
199
  `entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
200
200
 
@@ -207,8 +207,8 @@ siluzan-tso report list -m Google --json-out ./snap
207
207
 
208
208
  # 第二步:查看 webUrl
209
209
  siluzan-tso config show
210
- # webUrl: https://www-ci.siluzan.com
210
+ # webUrl: https://www.siluzan.com
211
211
 
212
212
  # 第三步:拼接链接(Google 日报)
213
- # https://www-ci.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
213
+ # https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
214
214
  ```
@@ -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 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
@@ -129,9 +129,9 @@ siluzan-tso config show
129
129
 
130
130
  ```
131
131
  构建环境 : production
132
- apiBaseUrl : https://tso-api-ci.siluzan.com
133
- googleApiUrl : https://googleapi-ci.mysiluzan.com
134
- webUrl : https://www-ci.siluzan.com
132
+ apiBaseUrl : https://tso-api.siluzan.com
133
+ googleApiUrl : https://googleapi.mysiluzan.com
134
+ webUrl : https://www.siluzan.com
135
135
  apiKey : abcd****1234
136
136
  ```
137
137
 
@@ -53,7 +53,7 @@ siluzan-tso/ # 安装后目录名
53
53
 
54
54
  - 从 SKILL.md **只链接一层**(`references/foo.md`),避免 A→B→C 链式引用。
55
55
  - 路径用正斜杠,不用 Windows 反斜杠。
56
- - 占位符 `https://www-ci.siluzan.com`、`https://tso-api-ci.siluzan.com`、`npm install -g siluzan-tso-cli@beta` 由构建脚本替换,文档中禁止硬编码环境 URL。
56
+ - 占位符 `https://www.siluzan.com`、`https://tso-api.siluzan.com`、`npm install -g siluzan-tso-cli` 由构建脚本替换,文档中禁止硬编码环境 URL。
57
57
 
58
58
  ---
59
59
 
@@ -70,7 +70,7 @@ siluzan-tso account-history -m Google
70
70
  siluzan-tso list-accounts -m Google
71
71
 
72
72
  # 第四步:充值激活(必须网页完成)
73
- # siluzan-tso config show 取 webUrl,打开:https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
73
+ # siluzan-tso config show 取 webUrl,打开:https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
74
74
  # 美元账户最低约 100 USD,人民币账户约 700 CNY
75
75
  ```
76
76
 
@@ -790,7 +790,7 @@ siluzan-tso balance -m Google -a <mediaCustomerId>
790
790
  siluzan-tso config show # 取 webUrl
791
791
 
792
792
  # 诊断入口(网页 AICreation 向导内嵌):
793
- # https://www-ci.siluzan.com/v3/foreign_trade/tso/advertising/AICreation
793
+ # https://www.siluzan.com/v3/foreign_trade/tso/advertising/AICreation
794
794
  # → 输入推广链接时,系统会自动触发网站诊断
795
795
  ```
796
796
 
@@ -851,7 +851,7 @@ siluzan-tso account bm-bind \
851
851
  --bm-id <businessManagerId>
852
852
 
853
853
  # 第三步:确认绑定状态(在网页确认)
854
- # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts → 找到对应账户查看 BM 状态
854
+ # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts → 找到对应账户查看 BM 状态
855
855
  ```
856
856
 
857
857
  ### 场景 C:TikTok BC 绑定 / 解绑
@@ -875,7 +875,7 @@ siluzan-tso account bc-unbind --customers <mediaCustomerId> --bc-id <bcId>
875
875
  siluzan-tso config show # 取 webUrl
876
876
 
877
877
  # 打开账户管理页:
878
- # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
878
+ # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
879
879
  # → 选中 Google 账户 → 点击「激活账户」→ 选择激活方式
880
880
  ```
881
881
 
@@ -48,7 +48,7 @@
48
48
 
49
49
  **图片**:配置 `imagePaths`(相对 JSON 文件目录)或 `marketingImageBase64` / `squareMarketingImageBase64` / `logoImageBase64`。`pmax-validate` 会自动校验图片尺寸(最小值 / 推荐值 / 宽高比 ±2% / 文件大小 ≤5120 KB)。如需将任意图片转为合规素材,用 `ad pmax-image-convert`(`marketing` / `square` / `logo` 三种格式,sharp 处理,居中裁切)。
50
50
 
51
- **视频**:`videoPath`(本地文件,经 `{googleApiUrl}/pyapi` 上传并轮询 `video_id` 后自动链接)与 `youtubeUrlOrId` **二选一**;或创建后 `ad pmax-youtube-link`。
51
+ **视频**:`videoPath`(本地文件,经 `{googleApiUrl}/pyapi` 上传并轮询 `video_id` 后自动链接)与 `youtubeUrlOrId` **二选一**(创建时最多 1 条);创建后追加更多视频用 `ad pmax-youtube-link`(单条)或 `ad pmax-assets-update`(批量,每资产组 ≤15 条)。
52
52
 
53
53
  **禁止**:对已创建的 PMax 系列使用 `ad campaign-edit`(旧 PUT 会 **400**)。
54
54
 
@@ -62,7 +62,7 @@
62
62
  | 改资产组 | `ad pmax-asset-group-edit` |
63
63
  | 删资产组 | `ad pmax-asset-group-edit --status REMOVED`(软删;网关无 DELETE 端点) |
64
64
  | 改资产 | `ad pmax-assets-update --config-file …` |
65
- | YouTube 链接/替换 | `ad pmax-youtube-link`(`--youtube` `--video-path`) |
65
+ | YouTube 追加 | `ad pmax-youtube-link`(单条 `--youtube` / `--video-path`);批量见 `ad pmax-assets-update` |
66
66
  | 信号 | `ad pmax-signals-get` / `ad pmax-signals-set`;受众下拉 `ad pmax-audiences` |
67
67
  | 图片库 | `ad pmax-image-upload` |
68
68
  | 报表 | `ad pmax-report-asset-groups` / `ad pmax-report-geo` |
@@ -23,7 +23,7 @@
23
23
  | `ad pmax-asset-group-create` | 新建资产组 |
24
24
  | `ad pmax-asset-group-edit` | 编辑资产组 |
25
25
  | `ad pmax-assets-update` | 更新资产 |
26
- | `ad pmax-youtube-link` | 关联/替换 YouTube(会移除资产组内已有视频再挂新片) |
26
+ | `ad pmax-youtube-link` | **追加**单条 YouTube 视频(不替换已有视频) |
27
27
  | `ad pmax-signals-get` / `ad pmax-signals-set` | 读/写信号(**全量** PUT) |
28
28
  | `ad pmax-audiences` | 受众列表 |
29
29
  | `ad pmax-image-upload` | 单张图片上传 |
@@ -38,13 +38,50 @@
38
38
  2. `ad pmax-validate` → 用户确认 → `ad pmax-create`:CLI **自动上传**三张图并写入 `*ImageAssetId`(Body 不含 Base64)。
39
39
  3. 可选预上传:`ad pmax-image-upload -a <id> --image-path ./x.png`,将返回 `id` 写入 JSON。
40
40
 
41
- ### 视频
41
+ ### 视频(YouTube)
42
+
43
+ **语义(与后端 `pmax-frontend-api.md` §5.3 / §5.4 一致)**:`YOUTUBE_VIDEO` 默认 **追加**,每个资产组最多 **15** 条;不可重复链接同一 `videoId`。仅当 `pmax-assets-update` 显式传 `replaceFieldTypes: ["YOUTUBE_VIDEO"]` 时才会先删后增(替换全部视频)。
44
+
45
+ | 场景 | 命令 / 接口 |
46
+ |------|-------------|
47
+ | 创建时挂 1 条 | `pmax-create` JSON:`videoPath` 或 `youtubeUrlOrId`(二选一,单次最多 1 条) |
48
+ | 追加 1 条 | `ad pmax-youtube-link` → `POST .../asset-group/{id}/youtube` |
49
+ | 批量追加多条 | `ad pmax-assets-update` → `PUT .../assets`,`assetsToLink` 中多条 `YOUTUBE_VIDEO` |
50
+ | 取消链接 | `ad pmax-assets-update`,`assetGroupAssetResourceNamesToRemove`(取自 `pmax-get` 的 `assets[].assetResourceName`) |
51
+ | 替换全部视频 | `ad pmax-assets-update`,`replaceFieldTypes: ["YOUTUBE_VIDEO"]` + 新的 `assetsToLink` |
52
+
53
+ **创建时自动链接**
42
54
 
43
55
  - **`videoPath`**:本地 `.mp4` 等;`pmax-create` 经 **GoogleAdsPyAPI** `POST {googleApiUrl}/pyapi/video/upload` 上传,轮询 `GET .../upload/status` 得 `video_id`,再 `POST .../asset-group/{id}/youtube` 链接(与 `youtubeUrlOrId` 二选一)。
44
56
  - **`youtubeUrlOrId`**:已有 YouTube URL 或 11 位 ID;创建成功后自动链接。
45
- - **已创建系列换视频**:`ad pmax-youtube-link`(同一接口;后端先删旧 `YOUTUBE_VIDEO` 再链接新片):
46
- - `--youtube "<url或ID>"` 或 `--video-path ./new.mp4`(可选 `--video-title`)
47
- - 示例:`siluzan-tso ad pmax-youtube-link -a <id> --asset-group-id <agId> --campaign-id <cid> --video-path ./promo-v2.mp4`
57
+
58
+ **已创建系列追加视频**(`ad pmax-youtube-link`):
59
+
60
+ ```bash
61
+ # 已有 YouTube URL / ID
62
+ siluzan-tso ad pmax-youtube-link -a <id> --asset-group-id <agId> --campaign-id <cid> \
63
+ --youtube "https://www.youtube.com/watch?v=xxxxx"
64
+
65
+ # 本地视频(PyAPI 上传后追加)
66
+ siluzan-tso ad pmax-youtube-link -a <id> --asset-group-id <agId> --campaign-id <cid> \
67
+ --video-path ./promo-v2.mp4 --video-title "宣传视频 2"
68
+ ```
69
+
70
+ **批量追加**(`ad pmax-assets-update --config-file ./pmax-videos.json`):
71
+
72
+ ```json
73
+ {
74
+ "account": "6326027735",
75
+ "campaignId": "12345678901",
76
+ "assetGroupId": "98765432101",
77
+ "assetsToLink": [
78
+ { "fieldType": "YOUTUBE_VIDEO", "youtubeVideoId": "dQw4w9WgXcQ", "assetName": "Promo1" },
79
+ { "fieldType": "YOUTUBE_VIDEO", "youtubeVideoId": "https://youtu.be/jNQXAC9IVRw", "assetName": "Promo2" }
80
+ ]
81
+ }
82
+ ```
83
+
84
+ `youtubeVideoId` 接受 11 位 ID 或完整 URL。模板见 `assets/pmax-assets-update-template.json`。
48
85
 
49
86
  ---
50
87
 
@@ -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
 
@@ -47,6 +47,7 @@ siluzan-tso facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb
47
47
  ## 8. 平台、地域、受众
48
48
 
49
49
  - **CLI**:`platform`、`country`、`audience`
50
+ - `platform` → `networks[]`:用 **`publisherPlatform`**(投放平台)+ **`platformPosition`**(版位);`network` 仅等于 `platformPosition`(兼容旧版,勿当平台列)。
50
51
  - 全表或 Top 表;与 Google `devices` / `geographic` / `audience` 对应说明。
51
52
 
52
53
  ## 9. 创意(替代搜索词+搜索广告)
@@ -13,7 +13,7 @@
13
13
  | --- | --- | --- | --- | --- |
14
14
  | 1 | 执行摘要 | overview | `overview` | OverviewSectionData |
15
15
  | 2 | 投放结构(广告组 / 系列归并) | campaigns | `ad-sets`(别名 `campaigns`) | AdSetSectionData |
16
- | 3 | 投放平台分布 | devices(版位) | `platform`(别名 `devices`) | PlatformSectionData |
16
+ | 3 | 投放平台 × 版位分布 | devices(版位) | `platform`(别名 `devices`) | PlatformSectionData |
17
17
  | 4 | 国家/地区分布 | geographic | `country`(别名 `geographic`) | CountrySectionData |
18
18
  | 5 | 受众(年龄×性别) | audience(子集) | `audience` | AudienceSectionData |
19
19
  | 6 | 广告创意表现 | ads + materials(子集) | `creative`(别名 `ads`) | CreativeSectionData |
@@ -60,10 +60,13 @@ siluzan-tso facebook-analysis -a <mediaCustomerId> --start <s> --end <e> --json-
60
60
  - Top 5~10 广告组表;可按 `campaignName` 小计 spend 占比。
61
61
  - 指出:高消耗 + 高 `costPerResult` 或低 `results` 的组。
62
62
 
63
- ### 3. 投放平台
63
+ ### 3. 投放平台 × 版位
64
64
 
65
- - 数据源:`networks[]`;`network` + 效果指标。
66
- - 各平台花费占比;最佳/最差 `costPerResult` 平台。
65
+ - 数据源:`networks[]`。
66
+ - **必用字段**:`publisherPlatform`(投放平台,如 facebook / instagram)+ `platformPosition`(版位,如 feed / facebook_reels)。`network` 与 `platformPosition` 同值,仅兼容旧版,**勿**单独当「平台」列。
67
+ - 表格建议列:投放平台 | 版位 | 花费 | 花费占比 | 结果 | 单次成效费用。
68
+ - 先给 **按 `publisherPlatform` 汇总** 的花费占比;再列 Top 版位组合(含跨平台同名版位,如 instagram/feed 与 facebook/feed 须分行)。
69
+ - 指出:高花费 + 高 `costPerResult` 的平台或版位组合。
67
70
 
68
71
  ### 4. 国家/地区
69
72
 
@@ -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.27-beta.2'
12
+ $PKG_VERSION = '1.1.27'
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.27-beta.2"
12
+ readonly PKG_VERSION="1.1.27"
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.27-beta.2",
3
+ "version": "1.1.27",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",