siluzan-tso-cli 1.1.42-beta.5 → 1.1.42
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 -2
- package/dist/index.js +55 -69
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts-list.md +1 -1
- package/dist/skill/references/accounts/accounts-permissions.md +2 -2
- package/dist/skill/references/accounts/finance.md +1 -1
- package/dist/skill/references/accounts/open-account-by-media.md +4 -8
- package/dist/skill/references/accounts/open-account-google-ui.md +4 -7
- package/dist/skill/references/analytics/rag.md +1 -1
- package/dist/skill/references/analytics/reporting.md +5 -5
- package/dist/skill/references/core/setup.md +5 -5
- package/dist/skill/references/misc/tso-home.md +2 -2
- package/dist/skill/scripts/install.ps1 +3 -3
- package/dist/skill/scripts/install.sh +3 -3
- package/package.json +1 -1
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
|
|
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.42-beta.5),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
54
|
|
|
56
55
|
| 助手 | 建议 `--ai` |
|
|
57
56
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -4026,7 +4026,7 @@ var DEFAULT_API_BASE;
|
|
|
4026
4026
|
var init_defaults = __esm({
|
|
4027
4027
|
"src/config/defaults.ts"() {
|
|
4028
4028
|
"use strict";
|
|
4029
|
-
DEFAULT_API_BASE = "https://tso-api
|
|
4029
|
+
DEFAULT_API_BASE = "https://tso-api.siluzan.com";
|
|
4030
4030
|
}
|
|
4031
4031
|
});
|
|
4032
4032
|
|
|
@@ -124394,6 +124394,52 @@ function logAccountOpeningHistoryWebUrl(apiBaseUrl, mediaType) {
|
|
|
124394
124394
|
init_auth();
|
|
124395
124395
|
init_cli_json_snapshot();
|
|
124396
124396
|
init_cli_table();
|
|
124397
|
+
|
|
124398
|
+
// src/commands/open-account/google-open-account-body.ts
|
|
124399
|
+
function defaultGoogleTimezoneForCurrency(currency) {
|
|
124400
|
+
return currency.trim().toUpperCase() === "CNY" ? "Asia/Shanghai" : "Asia/Hong_Kong";
|
|
124401
|
+
}
|
|
124402
|
+
function buildGoogleMagIndustry(industry1, industry2) {
|
|
124403
|
+
return {
|
|
124404
|
+
level1: (industry1 ?? "").trim(),
|
|
124405
|
+
level2: (industry2 ?? "").trim()
|
|
124406
|
+
};
|
|
124407
|
+
}
|
|
124408
|
+
function buildGoogleCustomerIndustry(industry1, industry2) {
|
|
124409
|
+
const level1 = (industry1 ?? "").trim();
|
|
124410
|
+
const level2 = (industry2 ?? "").trim();
|
|
124411
|
+
if (!level1 && !level2) return "-";
|
|
124412
|
+
return `${level1}-${level2}`;
|
|
124413
|
+
}
|
|
124414
|
+
function resolveGoogleTimezoneForSubmit(currency, timezone) {
|
|
124415
|
+
const t = (timezone ?? "").trim();
|
|
124416
|
+
if (t) return t;
|
|
124417
|
+
return defaultGoogleTimezoneForCurrency(currency);
|
|
124418
|
+
}
|
|
124419
|
+
function buildGoogleAccountInfoItem(opts) {
|
|
124420
|
+
return {
|
|
124421
|
+
advertiser_info: {
|
|
124422
|
+
name: opts.accountName,
|
|
124423
|
+
currency: opts.currency,
|
|
124424
|
+
timezone: opts.timezone,
|
|
124425
|
+
accounttype: "Adwords",
|
|
124426
|
+
inviteduseremail: opts.inviteEmail,
|
|
124427
|
+
inviteduserrole: opts.inviteRole ?? "Standard"
|
|
124428
|
+
},
|
|
124429
|
+
customer_info: {
|
|
124430
|
+
company: opts.company.trim(),
|
|
124431
|
+
industry: buildGoogleCustomerIndustry(opts.industry1, opts.industry2)
|
|
124432
|
+
},
|
|
124433
|
+
qualification_info: {
|
|
124434
|
+
promotion_link: opts.promotionLink,
|
|
124435
|
+
promotion_type: opts.promotionType
|
|
124436
|
+
},
|
|
124437
|
+
auto_allot_mailbox: opts.autoAllotMailbox ?? false,
|
|
124438
|
+
counts: 1
|
|
124439
|
+
};
|
|
124440
|
+
}
|
|
124441
|
+
|
|
124442
|
+
// src/commands/open-account/groups.ts
|
|
124397
124443
|
async function runListAdvertiserGroups(opts) {
|
|
124398
124444
|
const config = loadConfig(opts.token);
|
|
124399
124445
|
let data;
|
|
@@ -124535,10 +124581,7 @@ async function resolveGoogleMediaAccountGroupId(config, opts) {
|
|
|
124535
124581
|
}
|
|
124536
124582
|
const company = opts.company.trim();
|
|
124537
124583
|
const promotionLink = normalizePromotionLinkForGoogle(opts.promotionLink);
|
|
124538
|
-
const industry =
|
|
124539
|
-
level1: (opts.industry1 ?? "").trim(),
|
|
124540
|
-
level2: (opts.industry2 ?? "").trim()
|
|
124541
|
-
};
|
|
124584
|
+
const industry = buildGoogleMagIndustry(opts.industry1, opts.industry2);
|
|
124542
124585
|
let profile;
|
|
124543
124586
|
try {
|
|
124544
124587
|
profile = await apiFetch2(
|
|
@@ -125182,46 +125225,6 @@ import * as readline2 from "readline/promises";
|
|
|
125182
125225
|
import { stdin as stdinStream, stdout as stdoutStream } from "process";
|
|
125183
125226
|
init_cli_json_snapshot();
|
|
125184
125227
|
init_cli_table();
|
|
125185
|
-
|
|
125186
|
-
// src/commands/open-account/google-open-account-body.ts
|
|
125187
|
-
function defaultGoogleTimezoneForCurrency(currency) {
|
|
125188
|
-
return currency.trim().toUpperCase() === "CNY" ? "Asia/Shanghai" : "Asia/Hong_Kong";
|
|
125189
|
-
}
|
|
125190
|
-
function buildGoogleCustomerIndustry(industry1, industry2) {
|
|
125191
|
-
const level1 = (industry1 ?? "").trim();
|
|
125192
|
-
const level2 = (industry2 ?? "").trim();
|
|
125193
|
-
if (!level1 && !level2) return "-";
|
|
125194
|
-
return `${level1}-${level2}`;
|
|
125195
|
-
}
|
|
125196
|
-
function resolveGoogleTimezoneForSubmit(currency, timezone) {
|
|
125197
|
-
const t = (timezone ?? "").trim();
|
|
125198
|
-
if (t) return t;
|
|
125199
|
-
return defaultGoogleTimezoneForCurrency(currency);
|
|
125200
|
-
}
|
|
125201
|
-
function buildGoogleAccountInfoItem(opts) {
|
|
125202
|
-
return {
|
|
125203
|
-
advertiser_info: {
|
|
125204
|
-
name: opts.accountName,
|
|
125205
|
-
currency: opts.currency,
|
|
125206
|
-
timezone: opts.timezone,
|
|
125207
|
-
accounttype: "Adwords",
|
|
125208
|
-
inviteduseremail: opts.inviteEmail,
|
|
125209
|
-
inviteduserrole: opts.inviteRole ?? "Standard"
|
|
125210
|
-
},
|
|
125211
|
-
customer_info: {
|
|
125212
|
-
company: opts.company.trim(),
|
|
125213
|
-
industry: buildGoogleCustomerIndustry(opts.industry1, opts.industry2)
|
|
125214
|
-
},
|
|
125215
|
-
qualification_info: {
|
|
125216
|
-
promotion_link: opts.promotionLink,
|
|
125217
|
-
promotion_type: opts.promotionType
|
|
125218
|
-
},
|
|
125219
|
-
auto_allot_mailbox: opts.autoAllotMailbox ?? false,
|
|
125220
|
-
counts: 1
|
|
125221
|
-
};
|
|
125222
|
-
}
|
|
125223
|
-
|
|
125224
|
-
// src/commands/open-account/google.ts
|
|
125225
125228
|
async function fetchGoogleTimezoneRows(config, verbose) {
|
|
125226
125229
|
const raw = await apiFetch2(
|
|
125227
125230
|
`${config.apiBaseUrl}/query/media-account/Google/TimeZoneInfo/ReadFile`,
|
|
@@ -125348,15 +125351,6 @@ async function runOpenAccountGoogleWizard(opts) {
|
|
|
125348
125351
|
let promotionType = "b2b";
|
|
125349
125352
|
if (typeAns === "2") promotionType = "b2c";
|
|
125350
125353
|
else if (typeAns === "3") promotionType = "app";
|
|
125351
|
-
console.log(
|
|
125352
|
-
"\n\u884C\u4E1A\uFF08\u7F51\u9875\u7EA7\u8054\uFF1B\u6587\u6848\u987B\u4E0E open-account google-industries \u4E00\u81F4\uFF0C\u52FF\u7528\u6570\u5B57 ID\uFF09"
|
|
125353
|
-
);
|
|
125354
|
-
const industry1 = await q("\u4E00\u7EA7\u884C\u4E1A\u6587\u6848\uFF1A");
|
|
125355
|
-
const industry2 = await q("\u4E8C\u7EA7\u884C\u4E1A\u6587\u6848\uFF1A");
|
|
125356
|
-
if (!industry1.trim() || !industry2.trim()) {
|
|
125357
|
-
console.error("\n\u274C \u4E00\u7EA7/\u4E8C\u7EA7\u884C\u4E1A\u4E0D\u80FD\u4E3A\u7A7A\uFF08\u4E0E\u7F51\u9875\u9F50\u5168\u8D44\u6599\u4E00\u81F4\uFF09\u3002\u53EF\u5148\u67E5 google-industries\u3002\n");
|
|
125358
|
-
process.exit(1);
|
|
125359
|
-
}
|
|
125360
125354
|
console.log(`
|
|
125361
125355
|
\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u3010\u7F51\u9875\u7B2C 2 \u6B65\u3011\u5E7F\u544A\u8D26\u6237\u8868\u683C \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
|
|
125362
125356
|
`);
|
|
@@ -125412,7 +125406,7 @@ async function runOpenAccountGoogleWizard(opts) {
|
|
|
125412
125406
|
\u516C\u53F8\u540D\uFF1A ${company}
|
|
125413
125407
|
\u63A8\u5E7F\u94FE\u63A5\uFF1A ${promotionLink}
|
|
125414
125408
|
\u63A8\u5E7F\u7C7B\u578B\uFF1A ${promotionType}
|
|
125415
|
-
\u884C\u4E1A\uFF1A
|
|
125409
|
+
\u884C\u4E1A\uFF1A -\uFF08\u4E0E\u7F51\u9875\u672A\u586B\u4E00\u81F4\uFF09
|
|
125416
125410
|
\u8D26\u6237\u540D\u79F0\uFF1A ${accountName}
|
|
125417
125411
|
\u5E01\u79CD / \u65F6\u533A\uFF1A ${currency} / ${timezone}
|
|
125418
125412
|
\u5F00\u6237\u6570\u91CF\uFF1A ${counts}
|
|
@@ -125428,8 +125422,6 @@ async function runOpenAccountGoogleWizard(opts) {
|
|
|
125428
125422
|
company,
|
|
125429
125423
|
promotionLink,
|
|
125430
125424
|
promotionType,
|
|
125431
|
-
industry1,
|
|
125432
|
-
industry2,
|
|
125433
125425
|
accountName,
|
|
125434
125426
|
currency,
|
|
125435
125427
|
timezone,
|
|
@@ -125451,14 +125443,8 @@ async function runOpenAccountGoogle(opts) {
|
|
|
125451
125443
|
console.error("\n\u274C --invite-email \u4E0D\u662F\u6709\u6548\u7684\u90AE\u7BB1\u683C\u5F0F\uFF08\u9700\u542B @ \u4E0E\u57DF\u540D\uFF09\u3002\n");
|
|
125452
125444
|
process.exit(1);
|
|
125453
125445
|
}
|
|
125454
|
-
const industry1 = opts.industry1.trim();
|
|
125455
|
-
const industry2 = opts.industry2.trim();
|
|
125456
|
-
if (!industry1 || !industry2) {
|
|
125457
|
-
console.error(
|
|
125458
|
-
"\n\u274C --industry1 / --industry2 \u5747\u4E3A\u5FC5\u586B\uFF08\u4E2D\u6587\u6587\u6848\uFF0C\u4E0E\u7F51\u9875\u884C\u4E1A\u7EA7\u8054\u4E00\u81F4\uFF09\u3002\n \u8BF7\u5148\u6267\u884C\uFF1Asiluzan-tso open-account google-industries\n"
|
|
125459
|
-
);
|
|
125460
|
-
process.exit(1);
|
|
125461
|
-
}
|
|
125446
|
+
const industry1 = (opts.industry1 ?? "").trim();
|
|
125447
|
+
const industry2 = (opts.industry2 ?? "").trim();
|
|
125462
125448
|
const timezone = resolveGoogleTimezoneForSubmit(opts.currency, opts.timezone);
|
|
125463
125449
|
try {
|
|
125464
125450
|
const tzRows = await fetchGoogleTimezoneRows(config, opts.verbose);
|
|
@@ -126164,12 +126150,12 @@ function register25(program2) {
|
|
|
126164
126150
|
).requiredOption("--invite-email <email>", "\u53D7\u9080\u7528\u6237\u90AE\u7BB1\uFF08\u8D26\u6237\u9080\u8BF7\u5C06\u53D1\u5230\u6B64\u90AE\u7BB1\uFF09").requiredOption("--company <name>", "\u516C\u53F8\u540D\u79F0\uFF08\u7528\u4E8E\u5339\u914D\u6216\u521B\u5EFA\u5E7F\u544A\u4E3B\u7EC4\uFF0C\u4E0E\u7F51\u9875\u7B2C\u4E00\u6B65\u4E00\u81F4\uFF09").requiredOption(
|
|
126165
126151
|
"--promotion-link <url>",
|
|
126166
126152
|
"\u63A8\u5E7F\u94FE\u63A5\uFF08\u516C\u53F8\u5B98\u7F51\u6216\u4EA7\u54C1\u9875\uFF1B\u53EF\u5199\u57DF\u540D\uFF0C\u4F1A\u81EA\u52A8\u8865 https://\uFF09"
|
|
126167
|
-
).requiredOption("--promotion-type <type>", "\u63A8\u5E7F\u7C7B\u578B\uFF1Ab2b | b2c | app").
|
|
126153
|
+
).requiredOption("--promotion-type <type>", "\u63A8\u5E7F\u7C7B\u578B\uFF1Ab2b | b2c | app").option(
|
|
126168
126154
|
"--industry1 <name>",
|
|
126169
|
-
"\u4E00\u7EA7\u884C\u4E1A\u4E2D\u6587\u6587\u6848\uFF08\
|
|
126170
|
-
).
|
|
126155
|
+
"\u4E00\u7EA7\u884C\u4E1A\u4E2D\u6587\u6587\u6848\uFF08\u53EF\u9009\uFF1B\u4E0D\u4F20\u5219 customer_info.industry \u4E3A -\uFF0C\u4E0E\u7F51\u9875\u4E00\u81F4\uFF09"
|
|
126156
|
+
).option(
|
|
126171
126157
|
"--industry2 <name>",
|
|
126172
|
-
"\u4E8C\u7EA7\u884C\u4E1A\u4E2D\u6587\u6587\u6848\uFF08\u4E0E
|
|
126158
|
+
"\u4E8C\u7EA7\u884C\u4E1A\u4E2D\u6587\u6587\u6848\uFF08\u53EF\u9009\uFF1B\u4E0E --industry1 \u6210\u5BF9\uFF1B\u7686\u7A7A\u65F6 industry \u4E3A -\uFF09"
|
|
126173
126159
|
).option("--invite-role <role>", "\u53D7\u9080\u7528\u6237\u89D2\u8272\uFF1AStandard | Admin\uFF08\u9ED8\u8BA4 Standard\uFF09", "Standard").option("--auto-mailbox", "\u81EA\u52A8\u5206\u914D\u90AE\u7BB1", false).option("--counts <n>", "\u672C\u6B21\u5F00\u6237\u6570\u91CF\uFF081-3\uFF0C\u9ED8\u8BA4 1\uFF09", parseInt).option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
|
|
126174
126160
|
async (opts) => {
|
|
126175
126161
|
await runOpenAccountGoogle({
|
package/dist/skill/_meta.json
CHANGED
|
@@ -167,7 +167,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
|
|
|
167
167
|
| 状态 | 含义 | 下一步操作 |
|
|
168
168
|
| ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
169
169
|
| `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
|
|
170
|
-
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www
|
|
170
|
+
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
|
|
171
171
|
| `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
|
|
172
172
|
|
|
173
173
|
---
|
|
@@ -486,7 +486,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
486
486
|
|
|
487
487
|
| 功能 | 媒体 | 网页路径 |
|
|
488
488
|
| --------------------------------------- | ------ | ------------------------------------------------- |
|
|
489
|
-
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www
|
|
489
|
+
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
|
|
490
490
|
|
|
491
491
|
**Agent 建议话术**:
|
|
492
492
|
|
|
@@ -495,5 +495,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
495
495
|
siluzan-tso config show # 查看 webUrl 字段
|
|
496
496
|
|
|
497
497
|
# 账户激活(Google)→ 引导至账户管理页
|
|
498
|
-
# https://www
|
|
498
|
+
# https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
|
|
499
499
|
```
|
|
@@ -127,7 +127,7 @@ siluzan-tso config show
|
|
|
127
127
|
|
|
128
128
|
### 充值页链接(按媒体 × 类型)
|
|
129
129
|
|
|
130
|
-
链接模式:`https://www
|
|
130
|
+
链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
|
|
131
131
|
|
|
132
132
|
| 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
|
|
133
133
|
| ------------------------- | --------------------- | ------------------------------------------- |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 各媒体开户
|
|
2
2
|
|
|
3
|
-
> 网页链接:`https://www
|
|
3
|
+
> 网页链接:`https://www.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
|
|
4
4
|
> 多命令串联见 `references/core/workflows.md` § 流程一。
|
|
5
5
|
|
|
6
6
|
|
|
@@ -62,8 +62,8 @@ CLI 参数仅供 Agent **内部**组命令使用(见下表第三列)。用
|
|
|
62
62
|
| 公司名称 | 用于匹配/创建广告主组 | `--company` |
|
|
63
63
|
| 推广链接 | 可只写域名,提交时会自动补 `https://` | `--promotion-link` |
|
|
64
64
|
| 推广类型 | `b2b`(企业对企业)/ `b2c`(企业对消费者)/ `app`(应用) | `--promotion-type` |
|
|
65
|
-
| 一级行业 |
|
|
66
|
-
| 二级行业 |
|
|
65
|
+
| 一级行业 | 可选;网页已隐藏;不传则 `customer_info.industry`=`-` | `--industry1` |
|
|
66
|
+
| 二级行业 | 可选;与一级成对;皆空时统一为 `-` | `--industry2` |
|
|
67
67
|
| 账户名称 | 广告账户显示名,建议 ≤22 字 | `--account-name` |
|
|
68
68
|
| 币种 | `USD`(美元)或 `CNY`(人民币) | `--currency` |
|
|
69
69
|
| 时区 | 时区 Code;可省略(USD→香港、CNY→上海);其它先查列表 | `--timezone`(可选) |
|
|
@@ -156,19 +156,15 @@ CLI 参数仅供 Agent **内部**组命令使用(见下表第三列)。用
|
|
|
156
156
|
| `Europe/London` | 伦敦 |
|
|
157
157
|
|
|
158
158
|
```bash
|
|
159
|
-
# 行业文案不确定时先查(传中文,勿用数字 ID)
|
|
160
|
-
siluzan-tso open-account google-industries --keyword 电商
|
|
161
|
-
|
|
162
159
|
siluzan-tso open-account google \
|
|
163
160
|
--company "Brand A Inc." \
|
|
164
161
|
--promotion-link "https://www.brand-a.com" \
|
|
165
162
|
--promotion-type b2c \
|
|
166
|
-
--industry1 "电子商务" \
|
|
167
|
-
--industry2 "综合电商" \
|
|
168
163
|
--account-name "品牌A美国推广账户" \
|
|
169
164
|
--currency USD \
|
|
170
165
|
--timezone "America/New_York" \
|
|
171
166
|
--invite-email "marketing@brand-a.com"
|
|
167
|
+
# 不传行业时与网页一致:customer_info.industry = "-"
|
|
172
168
|
|
|
173
169
|
siluzan-tso account-history -m Google
|
|
174
170
|
siluzan-tso list-accounts -m Google
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| 公司名称 | 用于匹配/创建广告主组 | `--company` |
|
|
23
23
|
| 推广网址 | 可只写域名,提交时会自动补协议 | `--promotion-link` |
|
|
24
24
|
| 推广类型 | 企业对企业(b2b)/ 企业对消费者(b2c)/ 应用(app) | `--promotion-type`:`b2b` \| `b2c` \| `app` |
|
|
25
|
-
| 一级 / 二级行业 |
|
|
25
|
+
| 一级 / 二级行业 | **可选**;网页自 2025-04-22 起已隐藏 Google 行业下拉(后端字典不稳) | `--industry1` / `--industry2`(可选);列表:`google-industries` |
|
|
26
26
|
| 账户名称 | 广告账户显示名 | `--account-name` |
|
|
27
27
|
| 币种 | CNY 或 USD | `--currency` |
|
|
28
28
|
| 时区 | 时区 Code;可省略走币种默认;勿用展示名 | `--timezone`(可选);列表:`google-timezones` |
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
**币种默认时区**:CNY → `Asia/Shanghai`;USD(或其它非 CNY)→ `Asia/Hong_Kong`。其它时区从 `google-timezones` 取 **Code** 列。
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
**行业(与网页一致,非必填)**:不传时 MAG `industry.level1/level2` 为空串,账户 **`customer_info.industry` 统一为 `"-"`**(与网页未填抓包一致)。若传齐一级/二级则拼 `level1-level2`。
|
|
35
35
|
|
|
36
36
|
提交时按公司名称自动查找/创建广告主组并拿 `magKey`,**无需**让用户填 magKey。
|
|
37
37
|
|
|
@@ -42,13 +42,10 @@
|
|
|
42
42
|
### 非交互(Agent / 脚本首选)
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
siluzan-tso open-account google-industries --keyword 电商
|
|
46
45
|
siluzan-tso open-account google \
|
|
47
46
|
--company "某某公司" \
|
|
48
47
|
--promotion-link "https://www.example.com" \
|
|
49
48
|
--promotion-type b2c \
|
|
50
|
-
--industry1 "电子商务" \
|
|
51
|
-
--industry2 "综合电商" \
|
|
52
49
|
--account-name "某某公司-美国投放" \
|
|
53
50
|
--currency USD \
|
|
54
51
|
--timezone "America/New_York" \
|
|
@@ -56,7 +53,7 @@ siluzan-tso open-account google \
|
|
|
56
53
|
--counts 1
|
|
57
54
|
```
|
|
58
55
|
|
|
59
|
-
常用时区:`Asia/Shanghai`、`Asia/Hong_Kong`、`America/New_York`、`America/Los_Angeles`、`Europe/London`。完整列表:`open-account google-timezones [--keyword <关键词>]
|
|
56
|
+
常用时区:`Asia/Shanghai`、`Asia/Hong_Kong`、`America/New_York`、`America/Los_Angeles`、`Europe/London`。完整列表:`open-account google-timezones [--keyword <关键词>]`。行业可选:`google-industries`(CI 上字典接口可能 500,与网页隐藏行业同源问题)。
|
|
60
57
|
|
|
61
58
|
### 交互向导(需真实 TTY;Agent 不可用)
|
|
62
59
|
|
|
@@ -68,7 +65,7 @@ siluzan-tso open-account google-wizard
|
|
|
68
65
|
|
|
69
66
|
```bash
|
|
70
67
|
siluzan-tso account-history -m Google
|
|
71
|
-
# 审核通过后:config show → https://www
|
|
68
|
+
# 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
|
|
72
69
|
```
|
|
73
70
|
|
|
74
71
|
---
|
|
@@ -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
|
|
194
|
-
| Google | 小时报(Hourly) | `https://www
|
|
195
|
-
| TikTok | 日报 | `https://www
|
|
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
|
|
208
|
+
# webUrl: https://www.siluzan.com
|
|
209
209
|
|
|
210
210
|
# 第三步:拼接链接(Google 日报)
|
|
211
|
-
# https://www
|
|
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
|
|
13
|
+
npm install -g siluzan-tso-cli
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
---
|
|
@@ -63,7 +63,7 @@ siluzan-tso config set --api-key <Key> # 或 config 直接写入
|
|
|
63
63
|
siluzan-tso config set --token <Token> # 备用:设置 JWT Token
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
API Key 获取入口:`https://www
|
|
66
|
+
API Key 获取入口:`https://www.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
69
|
# 第 1 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
|
|
@@ -126,9 +126,9 @@ siluzan-tso config show
|
|
|
126
126
|
|
|
127
127
|
```
|
|
128
128
|
构建环境 : production
|
|
129
|
-
apiBaseUrl : https://tso-api
|
|
130
|
-
googleApiUrl : https://googleapi
|
|
131
|
-
webUrl : https://www
|
|
129
|
+
apiBaseUrl : https://tso-api.siluzan.com
|
|
130
|
+
googleApiUrl : https://googleapi.mysiluzan.com
|
|
131
|
+
webUrl : https://www.siluzan.com
|
|
132
132
|
apiKey : abcd****1234
|
|
133
133
|
```
|
|
134
134
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
siluzan-tso config show # 取 webUrl
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
首页地址:`https://www
|
|
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
|
|
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.42
|
|
12
|
+
$PKG_VERSION = '1.1.42'
|
|
13
13
|
$CLI_BIN = 'siluzan-tso'
|
|
14
14
|
$SKILL_LABEL = 'Siluzan TSO'
|
|
15
|
-
$INSTALL_CMD = 'npm install -g siluzan-tso-cli
|
|
16
|
-
$WEB_BASE = 'https://www
|
|
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.42
|
|
12
|
+
readonly PKG_VERSION="1.1.42"
|
|
13
13
|
readonly CLI_BIN="siluzan-tso"
|
|
14
14
|
readonly SKILL_LABEL="Siluzan TSO"
|
|
15
|
-
readonly INSTALL_CMD="npm install -g siluzan-tso-cli
|
|
16
|
-
readonly WEB_BASE="https://www
|
|
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
|