siluzan-tso-cli 1.0.0-beta.40 → 1.0.0-beta.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 -1
- package/dist/index.js +166 -157
- package/dist/skill/SKILL.md +29 -13
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/aigc.md +18 -18
- package/dist/skill/references/google-ads-campaign-optimization.md +540 -0
- package/dist/skill/references/google-ads-compliance.md +311 -0
- package/dist/skill/references/google-ads-creative-optimization.md +458 -0
- package/dist/skill/references/google-ads-keyword-optimization.md +539 -0
- package/dist/skill/references/google-ads-keyword-strategy.md +435 -0
- package/dist/skill/references/google-ads-launch-plan-template.md +325 -0
- package/dist/skill/references/google-ads-test.md +2 -2
- package/dist/skill/references/google-ads.md +8 -8
- package/dist/skill/references/reporting.md +13 -13
- package/dist/skill/references/sensitive-industries.md +290 -0
- package/dist/skill/references/tips.md +3 -3
- package/dist/skill/references/workflows.md +26 -26
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
|
|
|
20
20
|
siluzan-tso init --force # 强制覆盖已存在文件
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
> **注意**:当前为测试版(1.0.0-beta.
|
|
23
|
+
> **注意**:当前为测试版(1.0.0-beta.42),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
24
24
|
|
|
25
25
|
| 助手 | 建议 `--ai` |
|
|
26
26
|
|------|-------------|
|
package/dist/index.js
CHANGED
|
@@ -4703,7 +4703,7 @@ async function runAiCreationPublish(opts) {
|
|
|
4703
4703
|
process.exit(1);
|
|
4704
4704
|
}
|
|
4705
4705
|
console.log(`
|
|
4706
|
-
\u2705 \u8349\u7A3F\u5DF2\u63D0\u4EA4\u53D1\u5E03\uFF0CGoogle \u5C06\u5728\u540E\u53F0\u5F02\u6B65\u6267\u884C\u521B\u5EFA\uFF0C\u53EF\u901A\u8FC7
|
|
4706
|
+
\u2705 \u8349\u7A3F\u5DF2\u63D0\u4EA4\u53D1\u5E03\uFF0CGoogle \u5C06\u5728\u540E\u53F0\u5F02\u6B65\u6267\u884C\u521B\u5EFA\uFF0C\u53EF\u901A\u8FC7 ad batch list \u67E5\u770B\u6700\u65B0\u72B6\u6001
|
|
4707
4707
|
`);
|
|
4708
4708
|
}
|
|
4709
4709
|
async function runAiCreationUpdate(opts) {
|
|
@@ -5303,10 +5303,10 @@ SLZ+Google \u8054\u5408\u5173\u952E\u8BCD\u63A8\u8350\uFF08\u5171 ${slzKeywords.
|
|
|
5303
5303
|
console.log("\n\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\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
|
|
5304
5304
|
if (allKws.length > 0 && adCopy) {
|
|
5305
5305
|
console.log("\u2705 \u6570\u636E\u5DF2\u5C31\u7EEA\uFF0C\u53EF\u76F4\u63A5\u8FD0\u884C\uFF1A");
|
|
5306
|
-
console.log(` siluzan-tso
|
|
5306
|
+
console.log(` siluzan-tso ad smart create -a ${opts.account} --url "${opts.url}" -w "${opts.words.join(",")}" --budget ${budget}`);
|
|
5307
5307
|
} else {
|
|
5308
5308
|
console.log("\u4E0B\u4E00\u6B65\uFF1A\u5C06\u4EE5\u4E0A\u6570\u636E\u4EA4\u7ED9 AI Agent \u751F\u6210\u5B8C\u6574\u5E7F\u544A\u65B9\u6848\uFF0C");
|
|
5309
|
-
console.log(" \u518D\u7528 `siluzan-tso
|
|
5309
|
+
console.log(" \u518D\u7528 `siluzan-tso ad smart create` \u6216 `ad campaign-create` \u7B49\u547D\u4EE4\u843D\u5730\u3002");
|
|
5310
5310
|
}
|
|
5311
5311
|
console.log("\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\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n");
|
|
5312
5312
|
}
|
|
@@ -5535,7 +5535,7 @@ async function runAigcCreate(opts) {
|
|
|
5535
5535
|
\u2705 \u8349\u7A3F\u5DF2\u4FDD\u5B58`);
|
|
5536
5536
|
console.log(` \u7CFB\u5217\u540D\u79F0\uFF1A${campaignName}`);
|
|
5537
5537
|
if (recordId) console.log(` \u8349\u7A3F ID\uFF1A${recordId}`);
|
|
5538
|
-
console.log(` \u53D1\u5E03\u8349\u7A3F\uFF1Asiluzan-tso
|
|
5538
|
+
console.log(` \u53D1\u5E03\u8349\u7A3F\uFF1Asiluzan-tso ad batch publish --id ${recordId}
|
|
5539
5539
|
`);
|
|
5540
5540
|
return;
|
|
5541
5541
|
}
|
|
@@ -5573,12 +5573,12 @@ async function runAigcCreate(opts) {
|
|
|
5573
5573
|
console.log();
|
|
5574
5574
|
if (!finalStatus) {
|
|
5575
5575
|
console.log("\u26A0\uFE0F \u7B49\u5F85\u8D85\u65F6\uFF0890s\uFF09\uFF0C\u4EFB\u52A1\u4ECD\u5728\u540E\u53F0\u8FD0\u884C");
|
|
5576
|
-
console.log(` \u67E5\u8BE2\u8FDB\u5EA6\uFF1Asiluzan-tso
|
|
5576
|
+
console.log(` \u67E5\u8BE2\u8FDB\u5EA6\uFF1Asiluzan-tso ad batch get --id ${recordId}`);
|
|
5577
5577
|
} else if (finalStatus.status === "Successfully") {
|
|
5578
5578
|
console.log(`\u2705 \u5E7F\u544A\u7CFB\u5217\u521B\u5EFA\u6210\u529F\uFF01`);
|
|
5579
5579
|
console.log(` \u7CFB\u5217\u540D\u79F0\uFF1A${campaignName}`);
|
|
5580
5580
|
console.log(` \u5173\u952E\u8BCD\uFF1A${mergedKeywords.length} \u4E2A \u5730\u533A\uFF1A${finalLocations.length} \u4E2A`);
|
|
5581
|
-
console.log(` \u67E5\u8BE2\u5217\u8868\uFF1Asiluzan-tso
|
|
5581
|
+
console.log(` \u67E5\u8BE2\u5217\u8868\uFF1Asiluzan-tso ad batch list`);
|
|
5582
5582
|
} else {
|
|
5583
5583
|
const label = statusLabels[finalStatus.status ?? ""] ?? finalStatus.status;
|
|
5584
5584
|
console.log(`\u274C \u521B\u5EFA${label}`);
|
|
@@ -5586,7 +5586,7 @@ async function runAigcCreate(opts) {
|
|
|
5586
5586
|
const firstError = String(finalStatus.reason).split("\n")[0]?.slice(0, 200);
|
|
5587
5587
|
console.log(` \u539F\u56E0\uFF1A${firstError}`);
|
|
5588
5588
|
}
|
|
5589
|
-
console.log(` \u8BE6\u60C5\uFF1Asiluzan-tso
|
|
5589
|
+
console.log(` \u8BE6\u60C5\uFF1Asiluzan-tso ad batch get --id ${recordId}`);
|
|
5590
5590
|
}
|
|
5591
5591
|
console.log();
|
|
5592
5592
|
}
|
|
@@ -6922,15 +6922,17 @@ async function runAdCampaignCreate(opts) {
|
|
|
6922
6922
|
}
|
|
6923
6923
|
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
6924
6924
|
const defaultEnd = "2037-12-30";
|
|
6925
|
+
const budgetBatch = Math.round(opts.budget * 100);
|
|
6926
|
+
const maxCpcBatch = String(Math.round(opts.maxCpc * 100));
|
|
6925
6927
|
const campaign = {
|
|
6926
|
-
Budget:
|
|
6928
|
+
Budget: budgetBatch,
|
|
6927
6929
|
Name: opts.name,
|
|
6928
6930
|
StatusV2: opts.status ?? "Enabled",
|
|
6929
6931
|
ChannelTypeV2: "SEARCH",
|
|
6930
6932
|
BiddingStrategyTypeV2: opts.biddingStrategy,
|
|
6931
6933
|
// Google API 不接受 0:不限出价上限时省略该字段,仅在明确指定正值时才传
|
|
6932
|
-
...opts.bidCeiling ? { TargetSpend_BidCeilingAmount: opts.bidCeiling } : {},
|
|
6933
|
-
...opts.targetCpa ? { TargetCpa_BidingAmount: opts.targetCpa } : {},
|
|
6934
|
+
...opts.bidCeiling ? { TargetSpend_BidCeilingAmount: Math.round(opts.bidCeiling * 100) } : {},
|
|
6935
|
+
...opts.targetCpa ? { TargetCpa_BidingAmount: Math.round(opts.targetCpa * 100) } : {},
|
|
6934
6936
|
...opts.targetRoas ? { TargetRoas: opts.targetRoas } : {},
|
|
6935
6937
|
TargetGoogleSearch: true,
|
|
6936
6938
|
TargetSearchNetwork: opts.targetSearchNetwork ?? true,
|
|
@@ -6967,10 +6969,7 @@ async function runAdCampaignCreate(opts) {
|
|
|
6967
6969
|
StatusV2: "Enabled",
|
|
6968
6970
|
TypeV2: "SEARCH_STANDARD",
|
|
6969
6971
|
RotationModeV2: "Unspecified",
|
|
6970
|
-
|
|
6971
|
-
// 而 CLI --max-cpc 接受的是微单位(1 USD = 1,000,000 micros)。
|
|
6972
|
-
// 需除以 10,000 做换算,以保持与 ad adgroup-create --max-cpc 的参数含义一致。
|
|
6973
|
-
MaxCPCAmount: String(Math.round(opts.maxCpc / 1e4)),
|
|
6972
|
+
MaxCPCAmount: maxCpcBatch,
|
|
6974
6973
|
AdsForBatchJob: buildAdsForBatchJob(opts),
|
|
6975
6974
|
KeywordsForBatchJob: buildKeywordsForBatchJob(opts)
|
|
6976
6975
|
}]
|
|
@@ -7012,7 +7011,7 @@ async function runAdCampaignCreate(opts) {
|
|
|
7012
7011
|
if (!hasAd) console.log(` \u26A0\uFE0F \u672A\u4F20\u5E7F\u544A\u521B\u610F\uFF0C\u8BF7\u5B8C\u6210\u540E\u6267\u884C\uFF1Asiluzan-tso ad ad-create -a ${opts.account} --adgroup-id <id> ...`);
|
|
7013
7012
|
if (taskId) {
|
|
7014
7013
|
console.log(` \u4EFB\u52A1 ID\uFF1A${String(taskId)}`);
|
|
7015
|
-
console.log(` \u67E5\u8BE2\u8FDB\u5EA6\uFF1Asiluzan-tso
|
|
7014
|
+
console.log(` \u67E5\u8BE2\u8FDB\u5EA6\uFF1Asiluzan-tso ad batch get --id ${String(taskId)}`);
|
|
7016
7015
|
console.log(` \u521B\u5EFA\u5B8C\u6210\u540E\uFF1Asiluzan-tso ad campaigns -a ${opts.account} # \u786E\u8BA4\u7CFB\u5217\u5DF2\u51FA\u73B0\uFF0C\u83B7\u53D6 campaign ID`);
|
|
7017
7016
|
}
|
|
7018
7017
|
console.log();
|
|
@@ -9845,7 +9844,7 @@ function getVersion() {
|
|
|
9845
9844
|
}
|
|
9846
9845
|
var program = new Command();
|
|
9847
9846
|
program.name("siluzan-tso").description(
|
|
9848
|
-
"Siluzan \u5E7F\u544A\u8D26\u6237\u7BA1\u7406\uFF1A\u8D26\u6237\u67E5\u8BE2\u3001\u4F59\u989D\u3001\u6295\u653E\u6570\u636E\u3001\u5F00\u6237\u7533\u8BF7\uFF08Google/TikTok/Yandex/Bing/Kwai\uFF09\u3001\n\u8D26\u53F7\u5206\u4EAB/\u89E3\u7ED1\u3001\u4F18\u5316\u62A5\u544A\u3001Google \u8D26\u6237\u5206\u6790\u7F51\u5173\uFF08google-analysis\uFF09\u3001\u5145\u503C\u8F6C\u8D26\u3001\u5F00\u7968\
|
|
9847
|
+
"Siluzan \u5E7F\u544A\u8D26\u6237\u7BA1\u7406\uFF1A\u8D26\u6237\u67E5\u8BE2\u3001\u4F59\u989D\u3001\u6295\u653E\u6570\u636E\u3001\u5F00\u6237\u7533\u8BF7\uFF08Google/TikTok/Yandex/Bing/Kwai\uFF09\u3001\n\u8D26\u53F7\u5206\u4EAB/\u89E3\u7ED1\u3001\u4F18\u5316\u62A5\u544A\u3001Google \u8D26\u6237\u5206\u6790\u7F51\u5173\uFF08google-analysis\uFF09\u3001\u5145\u503C\u8F6C\u8D26\u3001\u5F00\u7968\u3001\u667A\u80FD\u9884\u8B66\u3001Google \u5E7F\u544A\u7BA1\u7406\uFF08\u542B\u5F02\u6B65\u6279\u91CF\u4E0E AIGC\uFF09\u3002"
|
|
9849
9848
|
).version(getVersion());
|
|
9850
9849
|
program.hook("preAction", () => {
|
|
9851
9850
|
setSiluzanCliInvocation(redactCliArgvForSentry(process.argv));
|
|
@@ -10273,141 +10272,6 @@ invoiceInfoCmd.command("update <id>").description("\u66F4\u65B0\u53D1\u7968\u62A
|
|
|
10273
10272
|
invoiceInfoCmd.command("delete <id>").description("\u5220\u9664\u53D1\u7968\u62AC\u5934\uFF08id \u6765\u81EA invoice-info list\uFF09").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (id, opts) => {
|
|
10274
10273
|
await runInvoiceInfoDelete({ id, token: opts.token, verbose: opts.verbose });
|
|
10275
10274
|
});
|
|
10276
|
-
var aiCreationCmd = program.command("ai-creation").description("AI \u667A\u80FD\u6295\u653E\u8BB0\u5F55\uFF08Google\uFF09");
|
|
10277
|
-
aiCreationCmd.command("list").description("\u67E5\u8BE2 AI \u667A\u6295\u8BB0\u5F55\u5217\u8868").option("-s, --state <state>", "\u72B6\u6001\uFF1ACreating | Successfully | Failed | HasFailed | Unpublished").option("--customer-id <id>", "\u5BA2\u6237 ID").option("--customer-name <name>", "\u5BA2\u6237\u540D\u79F0").option("-k, --keyword <text>", "\u5173\u952E\u5B57\u641C\u7D22").option("--start <date>", "\u521B\u5EFA\u5F00\u59CB\u65E5\u671F YYYY-MM-DD").option("--end <date>", "\u521B\u5EFA\u7ED3\u675F\u65E5\u671F YYYY-MM-DD").option("-p, --page <n>", "\u9875\u7801", parseInt).option("--page-size <n>", "\u6BCF\u9875\u6570\u91CF", parseInt).option("-t, --token <token>", "Auth Token").option("--json", "JSON \u683C\u5F0F\u8F93\u51FA", false).option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10278
|
-
await runAiCreationList({
|
|
10279
|
-
token: opts.token,
|
|
10280
|
-
state: opts.state,
|
|
10281
|
-
customerId: opts.customerId,
|
|
10282
|
-
customerName: opts.customerName,
|
|
10283
|
-
keyword: opts.keyword,
|
|
10284
|
-
startDate: opts.start,
|
|
10285
|
-
endDate: opts.end,
|
|
10286
|
-
page: opts.page,
|
|
10287
|
-
pageSize: opts.pageSize,
|
|
10288
|
-
json: opts.json,
|
|
10289
|
-
verbose: opts.verbose
|
|
10290
|
-
});
|
|
10291
|
-
});
|
|
10292
|
-
aiCreationCmd.command("get").description(
|
|
10293
|
-
"\u83B7\u53D6\u5355\u6761 AI\u667A\u6295\u8BB0\u5F55/\u8349\u7A3F\u8BE6\u60C5\n\n \u7528\u6CD5\u793A\u4F8B\uFF1A\n # \u5148\u7528 list \u62FF\u5230\u8BB0\u5F55 ID\uFF0C\u518D\u67E5\u8BE6\u60C5\n siluzan-tso ai-creation list --json\n siluzan-tso ai-creation get --id <\u4ECE\u4E0A\u65B9 results[].id \u590D\u5236>"
|
|
10294
|
-
).requiredOption("--id <id>", "\u8BB0\u5F55 ID\uFF08\u5FC5\u586B\uFF0C\u6765\u81EA ai-creation list --json \u7684 results[].id\uFF09").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10295
|
-
await runAiCreationGet({ token: opts.token, id: opts.id, json: true, verbose: opts.verbose });
|
|
10296
|
-
});
|
|
10297
|
-
aiCreationCmd.command("publish").description("\u53D1\u5E03\u8349\u7A3F\uFF08Draft \u2192 \u63D0\u4EA4 Google \u5F02\u6B65\u521B\u5EFA\uFF09").requiredOption("--id <id>", "\u8349\u7A3F\u8BB0\u5F55 ID\uFF08draftStatus \u5FC5\u987B\u4E3A Draft\uFF09").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10298
|
-
await runAiCreationPublish({ token: opts.token, id: opts.id, verbose: opts.verbose });
|
|
10299
|
-
});
|
|
10300
|
-
aiCreationCmd.command("update").description("\u66F4\u65B0\u8349\u7A3F\u5B57\u6BB5\u540E\u4FDD\u5B58\uFF08--id \u5FC5\u4F20\uFF1B--budget / --url / --campaign-name \u81F3\u5C11\u4F20\u4E00\u4E2A\uFF09").requiredOption("--id <id>", "\u8349\u7A3F\u8BB0\u5F55 ID\uFF08\u5FC5\u4F20\uFF09").option("--budget <amount>", "\u65B0\u65E5\u9884\u7B97\uFF08\u8D26\u6237\u4E3B\u5E01\u79CD\u91D1\u989D\uFF0C\u5982 50 \u8868\u793A\u6BCF\u5929 50 USD/CNY\uFF09", parseFloat).option("--url <url>", "\u65B0\u63A8\u5E7F\u94FE\u63A5").option("--campaign-name <name>", "\u65B0\u5E7F\u544A\u7CFB\u5217\u540D\u79F0").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10301
|
-
await runAiCreationUpdate({
|
|
10302
|
-
token: opts.token,
|
|
10303
|
-
id: opts.id,
|
|
10304
|
-
budget: opts.budget,
|
|
10305
|
-
url: opts.url,
|
|
10306
|
-
campaignName: opts.campaignName,
|
|
10307
|
-
verbose: opts.verbose
|
|
10308
|
-
});
|
|
10309
|
-
});
|
|
10310
|
-
var aigcCmd = program.command("aigc").description("AIGC \u5E7F\u544A\u65B9\u6848\u8F85\u52A9\u5DE5\u5177\uFF08\u6570\u636E\u51C6\u5907 \u2192 AI \u89C4\u5212 \u2192 ad \u547D\u4EE4\u843D\u5730\uFF0C\u5168\u7A0B\u65E0\u9700\u6253\u5F00\u6D4F\u89C8\u5668\uFF09");
|
|
10311
|
-
aigcCmd.command("prepare").description(
|
|
10312
|
-
"\u6536\u96C6 Google AIGC \u5E7F\u544A\u65B9\u6848\u6240\u9700\u7684\u57FA\u7840\u6570\u636E\uFF08\u94FE\u63A5\u9A8C\u8BC1\u3001\u884C\u4E1A\u5339\u914D\u3001\u8BED\u8A00\u3001\u5173\u952E\u8BCD\u63A8\u8350\u3001\u5730\u533A\u9884\u7B97\u6BD4\u4F8B\uFF09\n\n \u5178\u578B\u7528\u6CD5\uFF1A\n 1. \u8FD0\u884C\u672C\u547D\u4EE4\u83B7\u53D6\u7ED3\u6784\u5316\u6570\u636E\n 2. \u5C06\u6570\u636E\u4EA4\u7ED9 AI Agent \u751F\u6210\u5B8C\u6574\u5E7F\u544A\u65B9\u6848\uFF08\u7CFB\u5217/\u7EC4/\u5173\u952E\u8BCD/\u5E7F\u544A\u8BED\uFF09\n 3. \u7528 `siluzan-tso ad` \u547D\u4EE4\u5C06\u65B9\u6848\u9010\u6B65\u521B\u5EFA\u5230 Google Ads \u8D26\u6237"
|
|
10313
|
-
).requiredOption(
|
|
10314
|
-
"-a, --account <id>",
|
|
10315
|
-
"Google \u5E7F\u544A\u8D26\u6237 mediaCustomerId\uFF08\u6765\u81EA list-accounts -m Google\uFF09"
|
|
10316
|
-
).requiredOption("--url <url>", "\u63A8\u5E7F\u94FE\u63A5\uFF08\u4EA7\u54C1\u5B98\u7F51\u6216\u843D\u5730\u9875\uFF0C\u5FC5\u987B\u53EF\u516C\u5F00\u8BBF\u95EE\uFF09").requiredOption(
|
|
10317
|
-
"-w, --words <keywords>",
|
|
10318
|
-
'\u4E3B\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u5EFA\u8BAE 1-5 \u4E2A\uFF08\u5982 "running shoes,sport shoes"\uFF09',
|
|
10319
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10320
|
-
).option(
|
|
10321
|
-
"--secondary-words <keywords>",
|
|
10322
|
-
"\u6B21\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u8865\u5145\u5173\u952E\u8BCD\u65B9\u5411\uFF09",
|
|
10323
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10324
|
-
).option("--budget <amount>", "\u53C2\u8003\u65E5\u9884\u7B97\uFF08\u6570\u5B57\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF0C\u9ED8\u8BA4 100\uFF09", parseFloat).option(
|
|
10325
|
-
"--location-geo-ids <ids>",
|
|
10326
|
-
"\u9884\u89C8/\u5BF9\u9F50\u7528\uFF1A\u4EC5\u6307\u5B9A\u8FD9\u4E9B Google geoId \u4E3A\u6295\u653E\u5730\u533A\uFF08\u4E0E create \u4E00\u81F4\uFF09",
|
|
10327
|
-
(v) => v.split(",").map((s) => parseInt(s.trim(), 10)).filter((n) => !Number.isNaN(n))
|
|
10328
|
-
).option(
|
|
10329
|
-
"--restrict-locations-to-budget",
|
|
10330
|
-
"\u5730\u533A\u4EC5\u7528\u884C\u4E1A\u9884\u7B97\u63A8\u8350\u5B50\u96C6\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u5730\u533A\u5168\u9009\u300D\u4E00\u81F4",
|
|
10331
|
-
false
|
|
10332
|
-
).option(
|
|
10333
|
-
"--restrict-languages-to-regions",
|
|
10334
|
-
"\u8BED\u8A00\u6309\u5730\u533A\u6620\u5C04\u4E0E\u8D26\u6237\u6C42\u4EA4\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u8BED\u8A00\u5168\u9009\u300D\u4E00\u81F4",
|
|
10335
|
-
false
|
|
10336
|
-
).option("-t, --token <token>", "Auth Token").option("--json", "\u8F93\u51FA\u539F\u59CB JSON\uFF08\u4F9B AI Agent \u7A0B\u5E8F\u5316\u4F7F\u7528\uFF09", false).option("--verbose", "\u663E\u793A\u6BCF\u6B65\u63A5\u53E3\u8C03\u7528\u8BE6\u60C5", false).action(async (opts) => {
|
|
10337
|
-
await runAigcPrepare({
|
|
10338
|
-
token: opts.token,
|
|
10339
|
-
account: opts.account,
|
|
10340
|
-
url: opts.url,
|
|
10341
|
-
words: opts.words,
|
|
10342
|
-
secondaryWords: opts.secondaryWords,
|
|
10343
|
-
budget: opts.budget,
|
|
10344
|
-
locationGeoIds: opts.locationGeoIds,
|
|
10345
|
-
restrictLocationsToBudget: opts.restrictLocationsToBudget,
|
|
10346
|
-
restrictLanguagesToRegions: opts.restrictLanguagesToRegions,
|
|
10347
|
-
json: opts.json,
|
|
10348
|
-
verbose: opts.verbose
|
|
10349
|
-
});
|
|
10350
|
-
});
|
|
10351
|
-
aigcCmd.command("create").description(
|
|
10352
|
-
'\u4E00\u6B65\u5B8C\u6210 AIGC \u667A\u80FD\u5E7F\u544A\u521B\u5EFA\uFF1A\u6570\u636E\u51C6\u5907 \u2192 \u5173\u952E\u8BCD\u63A8\u8350 \u2192 ChatGPT \u6587\u6848\u751F\u6210 \u2192 \u63D0\u4EA4 Google\n \u5BF9\u9F50\u524D\u7AEF[\u4E00\u952E\u751F\u6210\u667A\u80FD\u65B9\u6848]\u5B8C\u6574\u6D41\u7A0B\n\n \u5178\u578B\u7528\u6CD5\uFF1A\n siluzan-tso aigc create -a 6326027735 --url https://www.example.com -w "\u4EA7\u54C1\u8BCD1,\u4EA7\u54C1\u8BCD2" --budget 100\n siluzan-tso aigc create -a 6326027735 --url https://www.example.com -w "shoes" --draft # \u4EC5\u4FDD\u5B58\u8349\u7A3F'
|
|
10353
|
-
).requiredOption("-a, --account <id>", "Google \u5E7F\u544A\u8D26\u6237 mediaCustomerId").requiredOption("--url <url>", "\u63A8\u5E7F\u94FE\u63A5\uFF08\u9700\u53EF\u516C\u5F00\u8BBF\u95EE\uFF09").requiredOption(
|
|
10354
|
-
"-w, --words <keywords>",
|
|
10355
|
-
'\u4E3B\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5982 "\u51FA\u6D77\u8425\u9500,\u8C37\u6B4C\u5E7F\u544A"\uFF09',
|
|
10356
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10357
|
-
).option(
|
|
10358
|
-
"--secondary-words <keywords>",
|
|
10359
|
-
"\u6B21\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF09",
|
|
10360
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10361
|
-
).option("--budget <amount>", "\u65E5\u9884\u7B97\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF08\u9ED8\u8BA4 100\uFF09", parseFloat).option("--name <name>", "\u5E7F\u544A\u7CFB\u5217\u540D\u79F0\uFF08\u9ED8\u8BA4\u81EA\u52A8\u751F\u6210\uFF09").option("--adgroup-name <name>", "\u5E7F\u544A\u7EC4\u540D\u79F0\uFF08\u9ED8\u8BA4\u81EA\u52A8\u751F\u6210\uFF09").option(
|
|
10362
|
-
"--bidding <strategy>",
|
|
10363
|
-
"\u51FA\u4EF7\u7B56\u7565\uFF1AMANUAL_CPC | TARGET_SPEND\uFF08\u9ED8\u8BA4 MANUAL_CPC\uFF09",
|
|
10364
|
-
"MANUAL_CPC"
|
|
10365
|
-
).option("--max-cpc <amount>", "\u6700\u9AD8 CPC\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF08\u9ED8\u8BA4 1.0\uFF09", parseFloat).option(
|
|
10366
|
-
"--headlines <titles>",
|
|
10367
|
-
"\u624B\u52A8\u6307\u5B9A\u5E7F\u544A\u6807\u9898\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u81F3\u5C11 3 \u6761\uFF0C\u6BCF\u6761 \u2264 30 \u5B57\u7B26\uFF08\u4F18\u5148\u4E8E ChatGPT \u751F\u6210\uFF09",
|
|
10368
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10369
|
-
).option(
|
|
10370
|
-
"--descriptions <descs>",
|
|
10371
|
-
"\u624B\u52A8\u6307\u5B9A\u5E7F\u544A\u63CF\u8FF0\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u81F3\u5C11 2 \u6761\uFF0C\u6BCF\u6761 \u2264 90 \u5B57\u7B26\uFF08\u4F18\u5148\u4E8E ChatGPT \u751F\u6210\uFF09",
|
|
10372
|
-
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10373
|
-
).option(
|
|
10374
|
-
"--words-only-keywords",
|
|
10375
|
-
"\u5173\u952E\u8BCD\u4EC5\u4F7F\u7528\u4EA7\u54C1\u8BCD\uFF08-w / --secondary-words\uFF09\uFF0C\u4E0D\u62C9 SLZ \u4E0E\u5E73\u53F0\u63A8\u8350\u8BCD\uFF0C\u964D\u4F4E\u653F\u7B56\u8BEF\u4F24",
|
|
10376
|
-
false
|
|
10377
|
-
).option(
|
|
10378
|
-
"--location-geo-ids <ids>",
|
|
10379
|
-
"\u6295\u653E\u5730\u533A Google geoId\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5982 2840=\u7F8E\u56FD 2156=\u4E2D\u56FD\uFF09\uFF0C\u8986\u76D6\u9ED8\u8BA4/\u884C\u4E1A\u5730\u533A",
|
|
10380
|
-
(v) => v.split(",").map((s) => parseInt(s.trim(), 10)).filter((n) => !Number.isNaN(n))
|
|
10381
|
-
).option(
|
|
10382
|
-
"--restrict-locations-to-budget",
|
|
10383
|
-
"\u5730\u533A\u4EC5\u7528\u884C\u4E1A\u9884\u7B97\u63A8\u8350\u5B50\u96C6\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u5730\u533A\u5168\u9009\u300D\u4E00\u81F4\uFF08\u884C\u4E1A\u5730\u533A\u8868\u5168\u91CF\uFF09",
|
|
10384
|
-
false
|
|
10385
|
-
).option(
|
|
10386
|
-
"--restrict-languages-to-regions",
|
|
10387
|
-
"\u8BED\u8A00\u6309\u5730\u533A\u6620\u5C04\u4E0E\u8D26\u6237\u6C42\u4EA4\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u8BED\u8A00\u5168\u9009\u300D\u4E00\u81F4\uFF08\u8D26\u6237\u5168\u90E8\u8BED\u8A00\uFF09",
|
|
10388
|
-
false
|
|
10389
|
-
).option("--draft", "\u4EC5\u4FDD\u5B58\u8349\u7A3F\uFF0C\u4E0D\u76F4\u63A5\u53D1\u5E03\uFF08\u9ED8\u8BA4\u76F4\u63A5\u53D1\u5E03\uFF09", false).option("-t, --token <token>", "Auth Token").option("--verbose", "\u663E\u793A\u63A5\u53E3\u8C03\u7528\u8BE6\u60C5", false).action(async (opts) => {
|
|
10390
|
-
await runAigcCreate({
|
|
10391
|
-
token: opts.token,
|
|
10392
|
-
account: opts.account,
|
|
10393
|
-
url: opts.url,
|
|
10394
|
-
words: opts.words,
|
|
10395
|
-
secondaryWords: opts.secondaryWords,
|
|
10396
|
-
budget: opts.budget,
|
|
10397
|
-
name: opts.name,
|
|
10398
|
-
adgroupName: opts.adgroupName,
|
|
10399
|
-
bidding: opts.bidding,
|
|
10400
|
-
maxCpc: opts.maxCpc,
|
|
10401
|
-
headlines: opts.headlines,
|
|
10402
|
-
descriptions: opts.descriptions,
|
|
10403
|
-
draft: opts.draft,
|
|
10404
|
-
wordsOnlyKeywords: opts.wordsOnlyKeywords,
|
|
10405
|
-
locationGeoIds: opts.locationGeoIds,
|
|
10406
|
-
restrictLocationsToBudget: opts.restrictLocationsToBudget,
|
|
10407
|
-
restrictLanguagesToRegions: opts.restrictLanguagesToRegions,
|
|
10408
|
-
verbose: opts.verbose
|
|
10409
|
-
});
|
|
10410
|
-
});
|
|
10411
10275
|
var optimizeCmd = program.command("optimize").description("AI \u5E7F\u544A\u4F18\u5316\uFF08Google\uFF09");
|
|
10412
10276
|
optimizeCmd.command("list").description("\u67E5\u8BE2\u8D26\u6237\u7EA7\u4F18\u5316\u4E3B\u5217\u8868\uFF08\u5BF9\u5E94\u9875\u9762 /advertising/intelligentOptimization\uFF09").option("-a, --account <id>", "\u8D26\u6237 mediaCustomerId\uFF08\u7559\u7A7A\u67E5\u5168\u90E8\uFF09").option(
|
|
10413
10277
|
"--match-media-customer-id <id>",
|
|
@@ -10545,7 +10409,144 @@ program.command("clue").description("\u67E5\u8BE2\u5E7F\u544A\u7EBF\u7D22\u8868\
|
|
|
10545
10409
|
verbose: opts.verbose
|
|
10546
10410
|
});
|
|
10547
10411
|
});
|
|
10548
|
-
var adCmd = program.command("ad").description(
|
|
10412
|
+
var adCmd = program.command("ad").description(
|
|
10413
|
+
"Google \u5E7F\u544A\u7BA1\u7406\uFF08\u9700\u5148\u914D\u7F6E Google API \u5730\u5740\uFF1Asiluzan-tso config set --google-api <URL>\uFF09\n \u542B\uFF1A\u7CFB\u5217/\u7EC4/\u521B\u610F/\u5173\u952E\u8BCD\u3001\u5F02\u6B65\u6279\u91CF\u521B\u5EFA\u8BB0\u5F55\uFF08ad batch\uFF09\u3001AIGC \u667A\u80FD\u65B9\u6848\uFF08ad smart\uFF09"
|
|
10414
|
+
);
|
|
10415
|
+
var adBatchCmd = adCmd.command("batch").description("\u5F02\u6B65\u6279\u91CF\u521B\u5EFA\u4EFB\u52A1\u4E0E\u8349\u7A3F\uFF08\u67E5\u8BE2\u8BE6\u60C5\u3001\u53D1\u5E03\u3001\u66F4\u65B0\uFF1B\u4E0E ad campaign-create / ad smart create \u540C\u6E90\uFF09");
|
|
10416
|
+
adBatchCmd.command("list").description("\u67E5\u8BE2\u6279\u91CF\u521B\u5EFA / \u667A\u6295\u8BB0\u5F55\u5217\u8868").option("-s, --state <state>", "\u72B6\u6001\uFF1ACreating | Successfully | Failed | HasFailed | Unpublished").option("--customer-id <id>", "\u5BA2\u6237 ID").option("--customer-name <name>", "\u5BA2\u6237\u540D\u79F0").option("-k, --keyword <text>", "\u5173\u952E\u5B57\u641C\u7D22").option("--start <date>", "\u521B\u5EFA\u5F00\u59CB\u65E5\u671F YYYY-MM-DD").option("--end <date>", "\u521B\u5EFA\u7ED3\u675F\u65E5\u671F YYYY-MM-DD").option("-p, --page <n>", "\u9875\u7801", parseInt).option("--page-size <n>", "\u6BCF\u9875\u6570\u91CF", parseInt).option("-t, --token <token>", "Auth Token").option("--json", "JSON \u683C\u5F0F\u8F93\u51FA", false).option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10417
|
+
await runAiCreationList({
|
|
10418
|
+
token: opts.token,
|
|
10419
|
+
state: opts.state,
|
|
10420
|
+
customerId: opts.customerId,
|
|
10421
|
+
customerName: opts.customerName,
|
|
10422
|
+
keyword: opts.keyword,
|
|
10423
|
+
startDate: opts.start,
|
|
10424
|
+
endDate: opts.end,
|
|
10425
|
+
page: opts.page,
|
|
10426
|
+
pageSize: opts.pageSize,
|
|
10427
|
+
json: opts.json,
|
|
10428
|
+
verbose: opts.verbose
|
|
10429
|
+
});
|
|
10430
|
+
});
|
|
10431
|
+
adBatchCmd.command("get").description(
|
|
10432
|
+
"\u83B7\u53D6\u5355\u6761\u8BB0\u5F55/\u8349\u7A3F\u8BE6\u60C5\uFF08JSON\uFF09\n\n \u793A\u4F8B\uFF1A\n siluzan-tso ad batch list --json\n siluzan-tso ad batch get --id <results[].id>"
|
|
10433
|
+
).requiredOption("--id <id>", "\u8BB0\u5F55 ID\uFF08\u6765\u81EA ad batch list --json \u7684 results[].id\uFF09").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10434
|
+
await runAiCreationGet({ token: opts.token, id: opts.id, json: true, verbose: opts.verbose });
|
|
10435
|
+
});
|
|
10436
|
+
adBatchCmd.command("publish").description("\u53D1\u5E03\u8349\u7A3F\uFF08Draft \u2192 \u63D0\u4EA4 Google \u5F02\u6B65\u521B\u5EFA\uFF09").requiredOption("--id <id>", "\u8349\u7A3F\u8BB0\u5F55 ID\uFF08draftStatus \u5FC5\u987B\u4E3A Draft\uFF09").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10437
|
+
await runAiCreationPublish({ token: opts.token, id: opts.id, verbose: opts.verbose });
|
|
10438
|
+
});
|
|
10439
|
+
adBatchCmd.command("update").description("\u66F4\u65B0\u8349\u7A3F\u5B57\u6BB5\u540E\u4FDD\u5B58\uFF08--id \u5FC5\u4F20\uFF1B--budget / --url / --campaign-name \u81F3\u5C11\u4F20\u4E00\u4E2A\uFF09").requiredOption("--id <id>", "\u8349\u7A3F\u8BB0\u5F55 ID").option("--budget <amount>", "\u65B0\u65E5\u9884\u7B97\uFF08\u8D26\u6237\u4E3B\u5E01\u79CD\u91D1\u989D\uFF0C\u5982 50 \u8868\u793A\u6BCF\u5929 50 USD/CNY\uFF09", parseFloat).option("--url <url>", "\u65B0\u63A8\u5E7F\u94FE\u63A5").option("--campaign-name <name>", "\u65B0\u5E7F\u544A\u7CFB\u5217\u540D\u79F0").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10440
|
+
await runAiCreationUpdate({
|
|
10441
|
+
token: opts.token,
|
|
10442
|
+
id: opts.id,
|
|
10443
|
+
budget: opts.budget,
|
|
10444
|
+
url: opts.url,
|
|
10445
|
+
campaignName: opts.campaignName,
|
|
10446
|
+
verbose: opts.verbose
|
|
10447
|
+
});
|
|
10448
|
+
});
|
|
10449
|
+
var adSmartCmd = adCmd.command("smart").description("AIGC\uFF1A\u6570\u636E\u51C6\u5907\u4E0E\u4E00\u952E\u521B\u5EFA\uFF08\u5BF9\u9F50 Web\u300C\u4E00\u952E\u751F\u6210\u667A\u80FD\u65B9\u6848\u300D\uFF09");
|
|
10450
|
+
adSmartCmd.command("prepare").description(
|
|
10451
|
+
"\u6536\u96C6\u65B9\u6848\u6240\u9700\u6570\u636E\uFF08\u94FE\u63A5\u9A8C\u8BC1\u3001\u884C\u4E1A/\u8BED\u8A00\u3001\u5173\u952E\u8BCD\u63A8\u8350\u3001\u5730\u533A\u9884\u7B97\u7B49\uFF09\uFF0C\u53EF --json \u4F9B Agent \u4F7F\u7528\n \u843D\u5730\uFF1Aad smart create \u6216 ad campaign-create / adgroup-create \u7B49\u5206\u6B65\u547D\u4EE4"
|
|
10452
|
+
).requiredOption(
|
|
10453
|
+
"-a, --account <id>",
|
|
10454
|
+
"Google \u5E7F\u544A\u8D26\u6237 mediaCustomerId\uFF08\u6765\u81EA list-accounts -m Google\uFF09"
|
|
10455
|
+
).requiredOption("--url <url>", "\u63A8\u5E7F\u94FE\u63A5\uFF08\u4EA7\u54C1\u5B98\u7F51\u6216\u843D\u5730\u9875\uFF0C\u5FC5\u987B\u53EF\u516C\u5F00\u8BBF\u95EE\uFF09").requiredOption(
|
|
10456
|
+
"-w, --words <keywords>",
|
|
10457
|
+
'\u4E3B\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u5EFA\u8BAE 1-5 \u4E2A\uFF08\u5982 "running shoes,sport shoes"\uFF09',
|
|
10458
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10459
|
+
).option(
|
|
10460
|
+
"--secondary-words <keywords>",
|
|
10461
|
+
"\u6B21\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF09",
|
|
10462
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10463
|
+
).option("--budget <amount>", "\u53C2\u8003\u65E5\u9884\u7B97\uFF08\u6570\u5B57\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF0C\u9ED8\u8BA4 100\uFF09", parseFloat).option(
|
|
10464
|
+
"--location-geo-ids <ids>",
|
|
10465
|
+
"\u9884\u89C8\u7528\uFF1A\u4EC5\u6307\u5B9A\u8FD9\u4E9B Google geoId \u4E3A\u6295\u653E\u5730\u533A\uFF08\u4E0E smart create \u4E00\u81F4\uFF09",
|
|
10466
|
+
(v) => v.split(",").map((s) => parseInt(s.trim(), 10)).filter((n) => !Number.isNaN(n))
|
|
10467
|
+
).option(
|
|
10468
|
+
"--restrict-locations-to-budget",
|
|
10469
|
+
"\u5730\u533A\u4EC5\u7528\u884C\u4E1A\u9884\u7B97\u63A8\u8350\u5B50\u96C6\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u5730\u533A\u5168\u9009\u300D\u4E00\u81F4",
|
|
10470
|
+
false
|
|
10471
|
+
).option(
|
|
10472
|
+
"--restrict-languages-to-regions",
|
|
10473
|
+
"\u8BED\u8A00\u6309\u5730\u533A\u6620\u5C04\u4E0E\u8D26\u6237\u6C42\u4EA4\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u8BED\u8A00\u5168\u9009\u300D\u4E00\u81F4",
|
|
10474
|
+
false
|
|
10475
|
+
).option("-t, --token <token>", "Auth Token").option("--json", "\u8F93\u51FA\u539F\u59CB JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09", false).option("--verbose", "\u663E\u793A\u6BCF\u6B65\u63A5\u53E3\u8C03\u7528\u8BE6\u60C5", false).action(async (opts) => {
|
|
10476
|
+
await runAigcPrepare({
|
|
10477
|
+
token: opts.token,
|
|
10478
|
+
account: opts.account,
|
|
10479
|
+
url: opts.url,
|
|
10480
|
+
words: opts.words,
|
|
10481
|
+
secondaryWords: opts.secondaryWords,
|
|
10482
|
+
budget: opts.budget,
|
|
10483
|
+
locationGeoIds: opts.locationGeoIds,
|
|
10484
|
+
restrictLocationsToBudget: opts.restrictLocationsToBudget,
|
|
10485
|
+
restrictLanguagesToRegions: opts.restrictLanguagesToRegions,
|
|
10486
|
+
json: opts.json,
|
|
10487
|
+
verbose: opts.verbose
|
|
10488
|
+
});
|
|
10489
|
+
});
|
|
10490
|
+
adSmartCmd.command("create").description(
|
|
10491
|
+
'\u4E00\u952E\u521B\u5EFA\uFF1A\u6570\u636E\u51C6\u5907 \u2192 \u5173\u952E\u8BCD\u63A8\u8350 \u2192 ChatGPT \u6587\u6848 \u2192 \u63D0\u4EA4\u5F02\u6B65\u6279\u91CF\u521B\u5EFA\n\n \u793A\u4F8B\uFF1A\n siluzan-tso ad smart create -a 6326027735 --url https://www.example.com -w "\u8BCD1,\u8BCD2" --budget 100\n siluzan-tso ad smart create -a 6326027735 --url https://example.com -w "shoes" --draft'
|
|
10492
|
+
).requiredOption("-a, --account <id>", "Google \u5E7F\u544A\u8D26\u6237 mediaCustomerId").requiredOption("--url <url>", "\u63A8\u5E7F\u94FE\u63A5\uFF08\u9700\u53EF\u516C\u5F00\u8BBF\u95EE\uFF09").requiredOption(
|
|
10493
|
+
"-w, --words <keywords>",
|
|
10494
|
+
'\u4E3B\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5982 "\u51FA\u6D77\u8425\u9500,\u8C37\u6B4C\u5E7F\u544A"\uFF09',
|
|
10495
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10496
|
+
).option(
|
|
10497
|
+
"--secondary-words <keywords>",
|
|
10498
|
+
"\u6B21\u63A8\u4EA7\u54C1\u8BCD\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF09",
|
|
10499
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10500
|
+
).option("--budget <amount>", "\u65E5\u9884\u7B97\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF08\u9ED8\u8BA4 100\uFF09", parseFloat).option("--name <name>", "\u5E7F\u544A\u7CFB\u5217\u540D\u79F0\uFF08\u9ED8\u8BA4\u81EA\u52A8\u751F\u6210\uFF09").option("--adgroup-name <name>", "\u5E7F\u544A\u7EC4\u540D\u79F0\uFF08\u9ED8\u8BA4\u81EA\u52A8\u751F\u6210\uFF09").option(
|
|
10501
|
+
"--bidding <strategy>",
|
|
10502
|
+
"\u51FA\u4EF7\u7B56\u7565\uFF1AMANUAL_CPC | TARGET_SPEND\uFF08\u9ED8\u8BA4 MANUAL_CPC\uFF09",
|
|
10503
|
+
"MANUAL_CPC"
|
|
10504
|
+
).option("--max-cpc <amount>", "\u6700\u9AD8 CPC\uFF0C\u4E0E\u8D26\u6237\u8D27\u5E01\u4E00\u81F4\uFF08\u9ED8\u8BA4 1.0\uFF09", parseFloat).option(
|
|
10505
|
+
"--headlines <titles>",
|
|
10506
|
+
"\u624B\u52A8\u6307\u5B9A\u5E7F\u544A\u6807\u9898\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u81F3\u5C11 3 \u6761\uFF0C\u6BCF\u6761 \u2264 30 \u5B57\u7B26\uFF08\u4F18\u5148\u4E8E ChatGPT \u751F\u6210\uFF09",
|
|
10507
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10508
|
+
).option(
|
|
10509
|
+
"--descriptions <descs>",
|
|
10510
|
+
"\u624B\u52A8\u6307\u5B9A\u5E7F\u544A\u63CF\u8FF0\uFF0C\u9017\u53F7\u5206\u9694\uFF0C\u81F3\u5C11 2 \u6761\uFF0C\u6BCF\u6761 \u2264 90 \u5B57\u7B26\uFF08\u4F18\u5148\u4E8E ChatGPT \u751F\u6210\uFF09",
|
|
10511
|
+
(v) => v.split(",").map((s) => s.trim()).filter(Boolean)
|
|
10512
|
+
).option(
|
|
10513
|
+
"--words-only-keywords",
|
|
10514
|
+
"\u5173\u952E\u8BCD\u4EC5\u4F7F\u7528\u4EA7\u54C1\u8BCD\uFF08-w / --secondary-words\uFF09\uFF0C\u4E0D\u62C9 SLZ \u4E0E\u5E73\u53F0\u63A8\u8350\u8BCD\uFF0C\u964D\u4F4E\u653F\u7B56\u8BEF\u4F24",
|
|
10515
|
+
false
|
|
10516
|
+
).option(
|
|
10517
|
+
"--location-geo-ids <ids>",
|
|
10518
|
+
"\u6295\u653E\u5730\u533A Google geoId\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5982 2840=\u7F8E\u56FD 2156=\u4E2D\u56FD\uFF09\uFF0C\u8986\u76D6\u9ED8\u8BA4/\u884C\u4E1A\u5730\u533A",
|
|
10519
|
+
(v) => v.split(",").map((s) => parseInt(s.trim(), 10)).filter((n) => !Number.isNaN(n))
|
|
10520
|
+
).option(
|
|
10521
|
+
"--restrict-locations-to-budget",
|
|
10522
|
+
"\u5730\u533A\u4EC5\u7528\u884C\u4E1A\u9884\u7B97\u63A8\u8350\u5B50\u96C6\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u5730\u533A\u5168\u9009\u300D\u4E00\u81F4\uFF08\u884C\u4E1A\u5730\u533A\u8868\u5168\u91CF\uFF09",
|
|
10523
|
+
false
|
|
10524
|
+
).option(
|
|
10525
|
+
"--restrict-languages-to-regions",
|
|
10526
|
+
"\u8BED\u8A00\u6309\u5730\u533A\u6620\u5C04\u4E0E\u8D26\u6237\u6C42\u4EA4\uFF08\u65E7 CLI\uFF09\uFF1B\u9ED8\u8BA4\u4E0E Web\u300C\u8BED\u8A00\u5168\u9009\u300D\u4E00\u81F4\uFF08\u8D26\u6237\u5168\u90E8\u8BED\u8A00\uFF09",
|
|
10527
|
+
false
|
|
10528
|
+
).option("--draft", "\u4EC5\u4FDD\u5B58\u8349\u7A3F\uFF0C\u4E0D\u76F4\u63A5\u53D1\u5E03\uFF08\u9ED8\u8BA4\u76F4\u63A5\u53D1\u5E03\uFF09", false).option("-t, --token <token>", "Auth Token").option("--verbose", "\u663E\u793A\u63A5\u53E3\u8C03\u7528\u8BE6\u60C5", false).action(async (opts) => {
|
|
10529
|
+
await runAigcCreate({
|
|
10530
|
+
token: opts.token,
|
|
10531
|
+
account: opts.account,
|
|
10532
|
+
url: opts.url,
|
|
10533
|
+
words: opts.words,
|
|
10534
|
+
secondaryWords: opts.secondaryWords,
|
|
10535
|
+
budget: opts.budget,
|
|
10536
|
+
name: opts.name,
|
|
10537
|
+
adgroupName: opts.adgroupName,
|
|
10538
|
+
bidding: opts.bidding,
|
|
10539
|
+
maxCpc: opts.maxCpc,
|
|
10540
|
+
headlines: opts.headlines,
|
|
10541
|
+
descriptions: opts.descriptions,
|
|
10542
|
+
draft: opts.draft,
|
|
10543
|
+
wordsOnlyKeywords: opts.wordsOnlyKeywords,
|
|
10544
|
+
locationGeoIds: opts.locationGeoIds,
|
|
10545
|
+
restrictLocationsToBudget: opts.restrictLocationsToBudget,
|
|
10546
|
+
restrictLanguagesToRegions: opts.restrictLanguagesToRegions,
|
|
10547
|
+
verbose: opts.verbose
|
|
10548
|
+
});
|
|
10549
|
+
});
|
|
10549
10550
|
adCmd.command("campaigns").description("\u67E5\u8BE2\u5E7F\u544A\u7CFB\u5217\u5217\u8868\uFF08\u65E5\u671F\u9ED8\u8BA4\u8FD1 30 \u5929\uFF09").requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").option("--start <date>", "\u5F00\u59CB\u65E5\u671F YYYY-MM-DD\uFF08\u9ED8\u8BA4 30 \u5929\u524D\uFF09").option("--end <date>", "\u7ED3\u675F\u65E5\u671F YYYY-MM-DD\uFF08\u9ED8\u8BA4\u4ECA\u5929\uFF09").option("-t, --token <token>", "Auth Token").option("--json", "JSON \u683C\u5F0F\u8F93\u51FA", false).option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
|
|
10550
10551
|
await runAdCampaigns({
|
|
10551
10552
|
token: opts.token,
|
|
@@ -10731,8 +10732,12 @@ adCmd.command("keyword-negative-delete").description("\u5220\u9664\u5426\u5B9A\u
|
|
|
10731
10732
|
});
|
|
10732
10733
|
});
|
|
10733
10734
|
adCmd.command("campaign-create").description(
|
|
10734
|
-
'\u65B0\u5EFA\u641C\u7D22\u5E7F\u544A\u7CFB\u5217\uFF08\u542B\u7B2C\u4E00\u4E2A\u5E7F\u544A\u7EC4\uFF0C\u5F02\u6B65\u63D0\u4EA4\uFF1B\u5B8C\u6210\u540E\u7528
|
|
10735
|
-
).requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").requiredOption("--customer-name <name>", "\u8D26\u6237\u540D\u79F0\uFF08\u6765\u81EA list-accounts --json \u7684 mediaAccountName \u5B57\u6BB5\uFF09").requiredOption("--name <name>", "\u5E7F\u544A\u7CFB\u5217\u540D\u79F0").requiredOption(
|
|
10735
|
+
'\u65B0\u5EFA\u641C\u7D22\u5E7F\u544A\u7CFB\u5217\uFF08\u542B\u7B2C\u4E00\u4E2A\u5E7F\u544A\u7EC4\uFF0C\u5F02\u6B65\u63D0\u4EA4\uFF1B\u5B8C\u6210\u540E\u7528 ad batch get \u67E5\u770B\u7ED3\u679C\uFF09\n\n \u524D\u7F6E\u6B65\u9AA4\uFF1A\n 1. siluzan-tso ad geo search -a <accountId> -q "United States" # \u83B7\u53D6 locationId\n 2. \u586B\u5165 --location-ids\uFF0C\u521B\u5EFA\u5B8C\u6BD5\u540E\u7528 ad batch get --id <taskId> \u8DDF\u8FDB\u72B6\u6001'
|
|
10736
|
+
).requiredOption("-a, --account <id>", "Google \u8D26\u6237 mediaCustomerId").requiredOption("--customer-name <name>", "\u8D26\u6237\u540D\u79F0\uFF08\u6765\u81EA list-accounts --json \u7684 mediaAccountName \u5B57\u6BB5\uFF09").requiredOption("--name <name>", "\u5E7F\u544A\u7CFB\u5217\u540D\u79F0").requiredOption(
|
|
10737
|
+
"--budget <amount>",
|
|
10738
|
+
"\u65E5\u9884\u7B97\uFF1A\u8D26\u6237\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5982 100 = \u6BCF\u5929 100 USD/CNY\uFF1B\u4E0E Web / ad smart create \u4E00\u81F4\uFF0C\u5185\u90E8 \xD7100 \u5199\u5165\u63A5\u53E3\uFF09",
|
|
10739
|
+
parseFloat
|
|
10740
|
+
).requiredOption(
|
|
10736
10741
|
"--bidding <strategy>",
|
|
10737
10742
|
"\u51FA\u4EF7\u7B56\u7565\uFF1ATARGET_SPEND | MANUAL_CPC | TARGET_CPA | TARGET_ROAS"
|
|
10738
10743
|
).requiredOption(
|
|
@@ -10741,9 +10746,13 @@ adCmd.command("campaign-create").description(
|
|
|
10741
10746
|
(v) => v.split(",").map((s) => s.trim())
|
|
10742
10747
|
).requiredOption("--adgroup-name <name>", "\u7B2C\u4E00\u4E2A\u5E7F\u544A\u7EC4\u540D\u79F0").requiredOption(
|
|
10743
10748
|
"--max-cpc <amount>",
|
|
10744
|
-
"\u7B2C\u4E00\u4E2A\u5E7F\u544A\u7EC4\u6700\u9AD8 CPC\
|
|
10745
|
-
|
|
10746
|
-
).option(
|
|
10749
|
+
"\u7B2C\u4E00\u4E2A\u5E7F\u544A\u7EC4\u6700\u9AD8 CPC\uFF1A\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5982 1.5 = \u6BCF\u6B21\u70B9\u51FB 1.50\uFF1B\u4E0E Web / ad smart create \u4E00\u81F4\uFF0C\u5185\u90E8 \xD7100 \u5199\u5165 MaxCPCAmount\uFF09",
|
|
10750
|
+
parseFloat
|
|
10751
|
+
).option(
|
|
10752
|
+
"--bid-ceiling <amount>",
|
|
10753
|
+
"TARGET_SPEND \u51FA\u4EF7\u4E0A\u9650\uFF1A\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5185\u90E8 \xD7100\uFF1B0=\u4E0D\u9650\uFF1B\u9ED8\u8BA4 0\uFF09",
|
|
10754
|
+
parseFloat
|
|
10755
|
+
).option("--target-cpa <amount>", "TARGET_CPA \u76EE\u6807 CPA\uFF1A\u4E3B\u5E01\u79CD\u91D1\u989D\uFF08\u5185\u90E8 \xD7100\uFF09", parseFloat).option("--target-roas <n>", "TARGET_ROAS \u76EE\u6807 ROAS\uFF08\u5982 2.5\uFF1B\u6700\u5927 1000\uFF09", parseFloat).option("--search-network <bool>", "\u6295\u653E Google \u641C\u7D22\uFF1Atrue | false\uFF08\u9ED8\u8BA4 true\uFF09", (v) => v === "true").option("--content-network <bool>", "\u6295\u653E\u5C55\u793A\u7F51\u7EDC\uFF1Atrue | false\uFF08\u9ED8\u8BA4 false\uFF09", (v) => v === "true").option(
|
|
10747
10756
|
"--lang-ids <ids>",
|
|
10748
10757
|
"\u6295\u653E\u8BED\u8A00 ID\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u9ED8\u8BA4 1000=\u82F1\u8BED\uFF1B\u4E2D\u6587=1017\uFF09",
|
|
10749
10758
|
(v) => v.split(",").map((s) => s.trim())
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -11,8 +11,8 @@ description: >-
|
|
|
11
11
|
optimization reports (TSO steward), report email push, Meta/TikTok/Bing account analytics,
|
|
12
12
|
and Google analysis via the configured gateway; for written analytics/diagnosis reports from CLI data,
|
|
13
13
|
confirm report dimensions with the user first (except steward optimization reports); inter-account transfers;
|
|
14
|
-
invoices plus invoice billing profiles (invoice-info);
|
|
15
|
-
(list/get/publish/update) and AIGC
|
|
14
|
+
invoices plus invoice billing profiles (invoice-info); Google ad batch
|
|
15
|
+
records (list/get/publish/update) and ad smart AIGC prep/create; AI ad
|
|
16
16
|
optimization and intelligent forewarning; TikTok/Meta lead forms; full Google
|
|
17
17
|
Ads management including extensions, geo targeting, and search terms, plus
|
|
18
18
|
keyword suggestions (requires googleApiUrl); Google diagnostic link.
|
|
@@ -28,25 +28,31 @@ description: >-
|
|
|
28
28
|
---
|
|
29
29
|
## 使用指南
|
|
30
30
|
调用本skill前,必须使用-h查看命令行工具的说明
|
|
31
|
-
|
|
31
|
+
为了节省token, 尽量使用--json获取一条数据的数据结构后,再通过编写代码的方式对大量的数据进行操作,而不是直接获取大量的原始json这会造成巨量的token浪费!
|
|
32
32
|
## 参考文档导航
|
|
33
33
|
|
|
34
34
|
| 文档 | 内容 |
|
|
35
35
|
|------|------|
|
|
36
|
-
| `references/workflows.md
|
|
36
|
+
| `references/workflows.md`| **多命令组合流程**(优先读取) |
|
|
37
37
|
| `references/tips.md` | **`--json` + Node.js 精准查询技巧**(过滤 / 提取 / 多步串联) |
|
|
38
38
|
| `references/accounts.md` | 账户查询 / 余额 / 消耗 / 开户 / 账号管理 |
|
|
39
39
|
| `references/open-account-google-ui.md` | **Google 开户**:网页五步 + 两步表单与 CLI 对照(向导/时区列表) |
|
|
40
40
|
| `references/open-account-by-media.md` | **各媒体开户差异**:路由、所需资料、接口路径与 CLI 对照(Google/TikTok/Yandex/Bing/Kwai) |
|
|
41
41
|
| `references/google-ads.md` | Google 广告 CRUD(系列 / 组 / 创意 / 关键词) |
|
|
42
42
|
| `references/google-ads-test.md` | Google 广告业务矩阵与 Agent 测试 |
|
|
43
|
-
| `references/aigc.md` | AIGC
|
|
43
|
+
| `references/aigc.md` | AIGC 智能广告(`ad smart prepare` / `ad smart create`)及落地流程 |
|
|
44
44
|
| `references/reporting.md` | TSO steward **优化报告**、Google 网关分析、`google-analysis`、**Meta/TikTok/Bing TSO 分析**(`report meta-overview`、`report tiktok-*`、`report bing-*`)、AI 智投 / 优化 / 预警 / 线索 |
|
|
45
45
|
| `report-templates/` | 分析/诊断类报告纲要(`.md`)与样式参考;**生成前须确认维度**见本节「报告与维度」 |
|
|
46
46
|
| `references/finance.md` | 转账 / 发票(充值需网页) |
|
|
47
47
|
| `references/tso-home.md` | TSO 首页看板页面与 CLI 对照 |
|
|
48
48
|
| `references/setup.md` | 安装 / 登录 / 配置 / 环境切换 |
|
|
49
|
-
|
|
49
|
+
| `references/google-ads-compliance.md` | **Google 广告合规指南**:关键词 & 文案审核通过规则、编辑规范、禁止内容、虚假承诺处理、商标规则、多语言规则 |
|
|
50
|
+
| `references/sensitive-industries.md` | **敏感行业合规细则**:酒精 / 赌博 / 金融 / 加密 / 医疗 / 法律等 12 个行业的关键词生成规则与地区限制 |
|
|
51
|
+
| `references/google-ads-keyword-strategy.md` | **关键词策略与优化技巧**:匹配类型策略、分组结构、否定词技巧、出价意图分层、搜索词挖掘、竞品策略、PMax/AI Max 协同、信号污染防治 |
|
|
52
|
+
| `references/google-ads-keyword-optimization.md` | **关键词持续优化指南**:基于投放数据的迭代优化闭环——指标解读、决策框架(暂停/提价/降价/加否定)、优化节奏、转化归因、预算再分配、衰减检测、竞争响应、CRM 反馈 |
|
|
53
|
+
| `references/google-ads-creative-optimization.md` | **广告创意与素材优化**:RSA 六类主题法、Ad Strength 评分、文案 A/B 测试、创意疲劳管理、附加信息(Sitelink/Callout/Snippet/Image)优化、DKI/倒计时/IF 函数、落地页 CRO、PMax 创意策略、多语言管理 |
|
|
54
|
+
| `references/google-ads-campaign-optimization.md` | **广告系列结构与投放优化**:系列类型选择决策树、电商/线索/本地/SaaS 架构模板、出价策略校准与启动协议、地域/设备优化、转化追踪(Enhanced Conversions/离线导入/价值规则)、预算优化、网络设置、实验设计、账户健康诊断 |
|
|
55
|
+
| `references/google-ads-creation-plan.md` | **广告创建确认方案模板**(**创建前必读**):执行任何广告创建命令前,必须按此模板输出完整方案等待用户确认——系列配置、关键词列表、RSA 文案、附加信息、合规检查、执行计划;含等待确认话术和特殊场景(AIGC/关键词追加/草稿发布)处理规则 |
|
|
50
56
|
---
|
|
51
57
|
|
|
52
58
|
## 分析报告生成规则
|
|
@@ -84,7 +90,12 @@ description: >-
|
|
|
84
90
|
| AIGC 广告方案生成(全 CLI) | `references/workflows.md` 流程十三 |
|
|
85
91
|
| 网站诊断与落地页评估 | `references/workflows.md` 流程十四 |
|
|
86
92
|
| 账户管理(关闭/BM绑定/BC绑定/激活/邮箱) | `references/workflows.md` 流程十五 |
|
|
87
|
-
|
|
93
|
+
| 生成合规关键词/广告文案 | `references/google-ads-compliance.md` 全文 |
|
|
94
|
+
| 关键词策略与优化 | `references/google-ads-keyword-strategy.md` 全文 |
|
|
95
|
+
| 投放后持续优化 | `references/google-ads-keyword-optimization.md` 全文 |
|
|
96
|
+
| 创建/优化广告创意 | `references/google-ads-creative-optimization.md` 全文 |
|
|
97
|
+
| 设计系列架构/调优投放 | `references/google-ads-campaign-optimization.md` 全文 |
|
|
98
|
+
| **创建广告前输出确认方案** | `references/google-ads-launch-plan-template.md` 全文 |
|
|
88
99
|
---
|
|
89
100
|
|
|
90
101
|
## 常用命令速查
|
|
@@ -119,7 +130,7 @@ description: >-
|
|
|
119
130
|
| TikTok BC 绑定 | `siluzan-tso account bc-bind --customers <mediaCustomerId> --bc-ids <bcId>` |
|
|
120
131
|
| TikTok BC 解绑 | `siluzan-tso account bc-unbind --customers <mediaCustomerId> --bc-id <bcId>` |
|
|
121
132
|
| Google 账户激活(网页) | `{webUrl}/v3/foreign_trade/tso/manageAccounts` |
|
|
122
|
-
| AIGC 方案数据准备 | `siluzan-tso
|
|
133
|
+
| AIGC 方案数据准备 | `siluzan-tso ad smart prepare -a <accountId> --url <url> -w "词1,词2"`(详见 `references/aigc.md`) |
|
|
123
134
|
| 优化报告列表 | `siluzan-tso report list -m Google` |
|
|
124
135
|
| 优化报告推送 | 页 `/dataReport/optimizationReport`:`report push list|create|update|history|receive-emails|start|stop|delete`;记录页 `/dataReport/pushRecord` 对应 `push history --setting-id <entityId>`;详见 `references/reporting.md` |
|
|
125
136
|
| TikTok 账户分析(总览/系列/受众等) | `siluzan-tso report tiktok-overview -a <mediaCustomerId> [--json]`(另有 `tiktok-campaigns`、`tiktok-audience` 等,见 `report --help`) |
|
|
@@ -128,10 +139,10 @@ description: >-
|
|
|
128
139
|
| 媒体转账记录 | `siluzan-tso transfer list -m Google` |
|
|
129
140
|
| 提交账户间转账 | `siluzan-tso transfer create -m Google --out <转出ID> --in <转入ID> --amount <金额>` |
|
|
130
141
|
| 开票记录 | `siluzan-tso invoice list` |
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
142
|
+
| 异步批量 / 智投记录 | `siluzan-tso ad batch list` |
|
|
143
|
+
| 记录 / 草稿详情 | `siluzan-tso ad batch get --id <id>` |
|
|
144
|
+
| 发布草稿 | `siluzan-tso ad batch publish --id <id>` |
|
|
145
|
+
| 更新草稿 | `siluzan-tso ad batch update --id <id> --budget <n>` |
|
|
135
146
|
| AI 广告优化 | 托管中:`optimize list -a <id>`。已脱管:全量筛 `optimize list --match-media-customer-id <Google客户号> --json` 取批次 `id`,再 `optimize get` / `optimize children --parent-id`;系列列表 `optimize records`(勿依赖 `-a`);详见 `references/reporting.md` |
|
|
136
147
|
| Google 广告诊断链接 | `siluzan-tso diagnostic` |
|
|
137
148
|
| 线索表单(TikTok) | `siluzan-tso clue -m TikTok -a <advertiserId>` |
|
|
@@ -187,4 +198,9 @@ CLI 命令执行后可能在输出末尾出现以下两种标记,Agent 必须
|
|
|
187
198
|
- **优化报告**(`report list/create/push`):由平台生成,直接操作,不额外询问维度。
|
|
188
199
|
- **报告内容以 `*.md` 纲要为准**,`report-template*.html` 仅提供样式,内容优先级高于样式。
|
|
189
200
|
- **不确定时读文档**:遇到不熟悉的命令,先读对应 references 文件,不要猜参数。
|
|
190
|
-
|
|
201
|
+
- **关键词/文案合规**:执行 `ad keyword-create`、`ad ad-create`、`ad campaign-create`、`ad smart create` 前,先读 `references/google-ads-compliance.md` 中的生成前检查清单(第十一章);如行业属于 Tier 2/3(受限/高度管制),还须读 `references/sensitive-industries.md` 对应章节。
|
|
202
|
+
- **关键词策略优化**:生成关键词时,参考 `references/google-ads-keyword-strategy.md` 的匹配类型选择(第二章)、分组结构(第三章)和否定词策略(第四章);优化已有广告系列时,参考搜索词挖掘(第八章)和信号污染防治(第十五章)。
|
|
203
|
+
- **投放后持续优化**:有投放数据后,按 `references/google-ads-keyword-optimization.md` 的优化节奏(第五章)执行每周/每月任务;使用决策框架(第三章)判断关键词去留;用 `google-analysis` 系列命令拉取数据(第十三章)。
|
|
204
|
+
- **广告创意优化**:创建/编辑广告创意(`ad ad-create`/`ad-edit`)时,参考 `references/google-ads-creative-optimization.md` 的 RSA 六类主题法(第一章)和 Ad Strength 指南(第二章);管理附加信息时参考第五章;定期检查创意疲劳(第四章)。
|
|
205
|
+
- **系列架构与投放**:新建广告系列(`ad campaign-create`)时,参考 `references/google-ads-campaign-optimization.md` 的架构模板(第二章)和出价启动协议(第三章);调整地域/设备/预算时参考对应章节;定期用 `google-analysis gold-account` 检查账户健康。
|
|
206
|
+
- **广告创建前必须输出确认方案**:执行 `ad campaign-create`、`ad adgroup-create`、`ad ad-create`、`ad keyword-create`、`ad smart create`、`ad batch publish` 之前,必须先读 `references/google-ads-launch-plan-template.md`,按模板格式输出完整方案,明确等待用户回复「确认」后才能开始执行创建命令;未经用户确认不得提前调用任何写入类命令。
|
package/dist/skill/_meta.json
CHANGED