siluzan-tso-cli 1.1.1-beta.1 → 1.1.1-beta.3
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 +9 -8
- package/dist/skill/SKILL.md +63 -48
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/assets/campaign-create-template.json +104 -0
- package/dist/skill/references/account-analytics.md +9 -3
- package/dist/skill/references/google-ads.md +39 -131
- package/dist/skill/references/setup.md +0 -1
- package/dist/skill/report-templates/README.md +0 -7
- package/package.json +1 -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.1.1-beta.
|
|
23
|
+
> **注意**:当前为测试版(1.1.1-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
24
24
|
|
|
25
25
|
| 助手 | 建议 `--ai` |
|
|
26
26
|
|------|-------------|
|
package/dist/index.js
CHANGED
|
@@ -4557,7 +4557,7 @@ async function runInvoiceInfoDelete(opts) {
|
|
|
4557
4557
|
|
|
4558
4558
|
// src/commands/ad.ts
|
|
4559
4559
|
import { randomUUID } from "crypto";
|
|
4560
|
-
import { readFileSync as readFileSync6 } from "fs";
|
|
4560
|
+
import { readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "fs";
|
|
4561
4561
|
async function findItemInList(listUrl, config, id, verbose) {
|
|
4562
4562
|
const res = await apiFetch2(listUrl, config, {}, verbose);
|
|
4563
4563
|
const item = (res.data ?? []).find((x) => x["id"] === id);
|
|
@@ -5202,6 +5202,7 @@ function buildAdsForBatchJob(opts) {
|
|
|
5202
5202
|
}
|
|
5203
5203
|
async function runAdCampaignCreate(opts) {
|
|
5204
5204
|
if (opts.configFile) {
|
|
5205
|
+
console.log("configFile", opts.configFile);
|
|
5205
5206
|
let fileConfig;
|
|
5206
5207
|
try {
|
|
5207
5208
|
fileConfig = JSON.parse(readFileSync6(opts.configFile, "utf8"));
|
|
@@ -5245,14 +5246,12 @@ async function runAdCampaignCreate(opts) {
|
|
|
5245
5246
|
targetSearchNetwork: fileConfig.targetSearchNetwork,
|
|
5246
5247
|
targetContentNetwork: fileConfig.targetContentNetwork
|
|
5247
5248
|
};
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
Object.entries(opts).filter(([, v]) => v !== void 0 && v !== "" && !(Array.isArray(v) && v.length === 0))
|
|
5252
|
-
),
|
|
5253
|
-
configFile: void 0
|
|
5254
|
-
};
|
|
5249
|
+
console.log("fromFile");
|
|
5250
|
+
console.log(JSON.stringify(fromFile, null, 2));
|
|
5251
|
+
opts = fromFile;
|
|
5255
5252
|
}
|
|
5253
|
+
console.log("opts");
|
|
5254
|
+
console.log(JSON.stringify(opts, null, 2));
|
|
5256
5255
|
const config = await ensureDataPermission(loadConfig(opts.token));
|
|
5257
5256
|
if (!config.apiBaseUrl) {
|
|
5258
5257
|
console.error("\n\u274C \u672A\u914D\u7F6E apiBaseUrl\uFF0C\u8BF7\u6267\u884C\uFF1Asiluzan-tso config set --api-base <URL>\n");
|
|
@@ -5332,6 +5331,8 @@ async function runAdCampaignCreate(opts) {
|
|
|
5332
5331
|
EndMinuteV2: 2
|
|
5333
5332
|
}))
|
|
5334
5333
|
};
|
|
5334
|
+
console.log();
|
|
5335
|
+
writeFileSync4(process.cwd() + "/campaign.json", JSON.stringify(campaign, null, 2));
|
|
5335
5336
|
const adGroupsForBatchJob = campaign.AdGroupsForBatchJob;
|
|
5336
5337
|
const keywordRecommendations = (adGroupsForBatchJob ?? []).filter((g) => typeof g.Name === "string" && g.Name.trim().length > 0).map((g) => ({
|
|
5337
5338
|
Key: g.Name,
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -1,33 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: siluzan-tso
|
|
3
|
-
description:
|
|
4
|
-
Use when the user works with Siluzan TSO (advertising ops): api-key to auth,
|
|
5
|
-
config, CLI/skill update and init; list accounts, balance, spend stats, and
|
|
6
|
-
open-account application history; open Google / TikTok / Yandex / BingV2 /
|
|
7
|
-
Kwai accounts (non-interactive CLI, interactive Google wizard, and
|
|
8
|
-
industry/timezone lookup helpers); account lifecycle (add OAuth, delink,
|
|
9
|
-
share/unshare, Google MCC bind/unbind, Meta BM bind, TikTok BC bind/unbind,
|
|
10
|
-
TikTok close, suspended-Google withdraw, Google email access invites);
|
|
11
|
-
optimization reports (TSO steward), report email push, Meta/TikTok/Bing account analytics,
|
|
12
|
-
and Google analysis via the configured gateway; for written analytics/diagnosis reports from CLI data,
|
|
13
|
-
confirm report dimensions with the user first (except steward optimization reports); inter-account transfers;
|
|
14
|
-
invoices plus invoice billing profiles (invoice-info); AI ad
|
|
15
|
-
optimization and intelligent forewarning; TikTok/Meta lead forms; full Google
|
|
16
|
-
Ads management including extensions, geo targeting, and search terms, plus
|
|
17
|
-
keyword suggestions (requires googleApiUrl); Google diagnostic link.
|
|
3
|
+
description: 当判断用户可能需要以下功能时可以使用siluzan-tso这个skillGoogle,Bing,Yandex,Tiktok,Kwai等广告账户的开户,账号数据分析共享/取消共享、Google MCC 绑定/解绑、Meta BM 绑定、TikTok BC 绑定/解绑TikTok 关闭、暂停 Google 账户撤回、Google 电子邮件访问邀请);优化报告(TSO 管理员)、报告电子邮件推送、Meta/TikTok/Bing 账户分析发票及发票结算配置文件(发票信息);优化和智能预警;TikTok/Meta潜在客户表单完整的Google广告管理,包括附加信息、地理位置定位和搜索词,以及关键词建议。Google广告账户详细的投放数据分析。
|
|
18
4
|
---
|
|
19
5
|
|
|
20
|
-
**写在前面**:在使用本skill输出的任何内容中,包括但不限于报告,计划,总结,严禁让用户执行本skill提供的命令行。(setup.md)中的命令除外
|
|
21
6
|
|
|
22
7
|
# Siluzan TSO Skill
|
|
23
|
-
本 Skill 只保留任务边界、文档路由与执行规则。具体业务细节、参数、模板、流程与示例均以下方 references 文档为准。遇到具体业务时,先读对应 references
|
|
8
|
+
本 Skill 只保留任务边界、文档路由与执行规则。具体业务细节、参数、模板、流程与示例均以下方 references 文档为准。遇到具体业务时,先读对应 references
|
|
24
9
|
|
|
10
|
+
## 功能以及对应文档
|
|
25
11
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
实现用户要求时,请先阅读对应功能文档:
|
|
30
|
-
| 文档 | 何时读取 |
|
|
12
|
+
本skill包含以下功能,实现用户要求时,请先阅读对应功能文档:
|
|
13
|
+
| 文档 | 功能 |
|
|
31
14
|
|------|------|
|
|
32
15
|
| `references/setup.md` | 安装、登录、配置、环境切换、更新 |
|
|
33
16
|
| `references/workflows.md` | 多步骤业务流程与跨命令串联场景 |
|
|
@@ -35,41 +18,55 @@ description: >-
|
|
|
35
18
|
| `references/accounts.md` | 账户列表、余额、消耗、开户记录、授权/解绑/分享/MCC/BC/BM/邮箱授权 |
|
|
36
19
|
| `references/open-account-by-media.md` | 各媒体开户、参数与资料要求 |
|
|
37
20
|
| `references/google-ads.md` | Google Ads 创建、修改、优化与管理主流程 |
|
|
38
|
-
| `references/
|
|
39
|
-
| `references/
|
|
40
|
-
| `references/google-ads-rules/google-ads-creative-optimization.md` | Google Ads 创意优化 |
|
|
41
|
-
| `references/google-ads-rules/google-ads-campaign-optimization.md` | Google Ads 广告系列结构与投放优化 |
|
|
42
|
-
| `references/google-ads-rules/google-ads-launch-plan-template.md` | Google Ads 创建前确认方案模板 |
|
|
43
|
-
| `references/google-ads-rules/google-ads-compliance.md` | Google Ads 合规规则 |
|
|
44
|
-
| `references/google-ads-rules/sensitive-industries.md` | 敏感行业投放限制与补充规则 |
|
|
45
|
-
| `references/reporting.md` | TSO 优化报告(Google/TikTok)的生成、推送与查看 |
|
|
46
|
-
| `references/account-analytics.md` | 多媒体账户分析数据拉取与分析/诊断报告模板 |
|
|
21
|
+
| `references/reporting.md` | Siluzan TSO 优化报告(Google/TikTok)的生成、推送与查看 |
|
|
22
|
+
| `references/account-analytics.md` | 广告平台账户分析数据拉取与分析/诊断报告模板 |
|
|
47
23
|
| `references/optimize.md` | AI 优化建议记录、详情与历史查询 |
|
|
48
24
|
| `references/clue.md` | TikTok / Meta 线索表单 |
|
|
49
25
|
| `references/forewarning.md` | 智能预警规则与通知 |
|
|
50
26
|
| `references/finance.md` | 转账、开票、发票抬头、充值网页引导 |
|
|
51
|
-
| `references/tso-home.md` | TSO 首页看板模块说明与 CLI 对照 |
|
|
52
27
|
| `report-templates/report-template.html` | 默认 HTML 报告样式参考 |
|
|
53
28
|
---
|
|
54
29
|
|
|
55
|
-
##
|
|
30
|
+
## Skill要如何使用
|
|
56
31
|
|
|
57
|
-
|
|
32
|
+
### 报告的生成
|
|
33
|
+
报告分为两种:
|
|
34
|
+
- (不推荐)由siluzan平台在你调用接口提交后直接异步生成的报告(调用对应命令后,会返回一条报告链接)(详情请读取:`references/reporting.md`)
|
|
35
|
+
- 这种报告你无法用它来做数据分析除非用户明确要求(Siluzan平台的优化报告)
|
|
36
|
+
- (推荐,默认生成这种报告)由你主动拉取数据,并按照skill给出的格式,输出给用户:详情请查看(`references/account-analytics.md`)
|
|
58
37
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
只支持google平台,除非用户提到 优化报告否则一般不走这个流程
|
|
65
|
-
|
|
66
|
-
### 一般报告做法(默认做法)
|
|
67
|
-
1. 询问用户需要生成哪些维度的报告,或直接生成默认报告:包含以下维度:执行摘要、每日投放趋势、月度汇总、广告系列表现、设备分布、地域分布、关键词表现、优化建议
|
|
68
|
-
2. 需输出 HTML 时:**默认**以 `report-templates/report-template.html` 为样式基准(适用于一切总结性、报告性、汇总性成稿);若场景更适合作正式件、深色、单页等,再从 `report-templates/report-template*.html` 中选或询问用户,并对照 `report-templates/README.md`
|
|
69
|
-
3. 输出成html后可以转成pdf方便用户查看
|
|
70
|
-
---
|
|
38
|
+
### 广告账户相关
|
|
39
|
+
- 广告账户开户请阅读: `references/open-account-by-media.md`
|
|
40
|
+
- 广告账户管理请阅读:`references/accounts.md`
|
|
41
|
+
- 广告账户分析请阅读:`references/account-analytics.md`
|
|
42
|
+
- Google广告的创建、修改、优化、查询广告详情等广告管理相关的功能:请阅读:`google-ads.md`
|
|
71
43
|
|
|
44
|
+
### 只调用接口,最终交付的内容不需要你输出的功能
|
|
45
|
+
- Google广告优化记录功能(`references/optimize.md`),这个也跟优化报告类似,你调用接口,Siluzan平台按照一定的优化逻辑自动执行,你只能查询到结果,不能控制优化流程 注意不要与`google-ads.md`中的优化流程混淆两个是互相独立的功能,`references/google-ads.md`中的优化功能更为强大,在实际的优化过程中,也推荐使用`references/google-ads.md`中提供的内容
|
|
46
|
+
- TikTok / Meta 线索表单请阅读:`references/clue.md`
|
|
47
|
+
- Siluzan平台提供的预警功能请阅读:`references/forewarning.md`
|
|
48
|
+
- 预警由Siluzan平台发送,当前仅支持微信推送,如果需要自定义的通知触达端,需要安装对应插件或skill+创建定时任务来完成
|
|
49
|
+
- 转账、开票、发票抬头、充值网页引导请阅读:`references/finance.md`
|
|
50
|
+
-
|
|
72
51
|
## AI 行为规范
|
|
52
|
+
### 如何更好的使用本skill执行任务
|
|
53
|
+
遵循计划,确认,执行,验证,推测用户下一步意图
|
|
54
|
+
1. 计划阶段:
|
|
55
|
+
- 根据功能以及对应文档读取对应references
|
|
56
|
+
- 根据references文件中的内容配合命令行工具提供的-h参数,来确认命令行的正确调用方式
|
|
57
|
+
- 不暴露cli执行细节的前提下,输出一份计划
|
|
58
|
+
2. 确认阶段:在不暴露执行命令行的前提下,与用户确认关键信息
|
|
59
|
+
3. 执行阶段:按计划执行
|
|
60
|
+
4. 验证阶段:
|
|
61
|
+
- 一般情况下,读取/写入的命令都是成对的。通过这两种命令的配合来进行结果验证
|
|
62
|
+
- 如果是异步任务,需要你轮询读取命令,每5s一次查看任务状态,直到确认所有异步任务都有一个结果
|
|
63
|
+
- 如果失败则可以查看失败具体原因,或者结合现有命令行使用其他方式进行重试,尽量让任务执行完成,而不是告诉用户任务失败就结束了。
|
|
64
|
+
5. 对话历史验证:
|
|
65
|
+
- 如果任务前面有计划,你需要确认每个步骤都已经按计划中的内容执行完毕
|
|
66
|
+
6. 推测用户下一步意图
|
|
67
|
+
- 结合命令行工具与references文件中的说明,对用户下一步的操作进行合理预测
|
|
68
|
+
|
|
69
|
+
### 硬规范
|
|
73
70
|
- **不确定时读文档**:遇到不熟悉的命令,先读对应 references 文件或使用-h查看命令帮助,不要猜参数。
|
|
74
71
|
- **先查账户再操作**:对具体账户做操作前,先通过 `list-accounts -m [mediaType] -k [mediaCustomerId]` 确认。特别是不确定是Google/Bing/TikTok这些媒体平台中的哪一个的时候
|
|
75
72
|
- **使用 --json 处理数据**:需对返回数据做计算或筛选时,加 `--json`,再用 `node -e` 过滤提取(见 `references/tips.md`)。
|
|
@@ -79,11 +76,29 @@ description: >-
|
|
|
79
76
|
- **具体业务的额外规范**:开户、优化、报告、Google 广告创建等场景的详细约束,请分别在执行前阅读对应的 `references/*.md` 文档。
|
|
80
77
|
- **完成写/修改/编辑/更新等操作后需要确认数据是否正确**
|
|
81
78
|
|
|
82
|
-
|
|
79
|
+
### 必须一定要遵守的规范,如不遵守,会导致skill无法使用
|
|
80
|
+
- 在使用本skill输出的任何内容中,包括但不限于报告,计划,总结,严禁让用户执行本skill提供的命令行。(setup.md)中的命令除外
|
|
81
|
+
- 使用skill时,你要检查skill文件版本是否与siluzan-tso cli版本一致,如不一致,优先更新siluzan-tso cli再通过cli命令或cli npm包中携带的skill来更新你当前的skill文件(详情请读取`references/setup.md`)
|
|
82
|
+
- 所有使用本skill获取的数据输出的报告,总结,分析性的内容,都需要通过skill中内置模板的格式来输出
|
|
83
|
+
|
|
84
|
+
## 一些tips
|
|
85
|
+
|
|
86
|
+
### 账户ID示例
|
|
83
87
|
用于快速确定用户发送账号的类型,xxx是脱敏处理,一般主要通过位数就能确定账号类型,无法确定再查list-account -m [mediatype] -k [id]
|
|
84
88
|
Google: 4545xxx137
|
|
85
89
|
Tiktok: 70083497xxx59820033
|
|
86
90
|
Meta(Facebook): 1716030xxx734076, 6843984xxx14909, 479423xxx752348
|
|
87
91
|
Bing: 138xxx763, 1882xxx80
|
|
88
92
|
Yandex: porg-uthxxxrk
|
|
89
|
-
Kwai: act_1716030xxx734076
|
|
93
|
+
Kwai: act_1716030xxx734076
|
|
94
|
+
|
|
95
|
+
### 容易出错http状态码
|
|
96
|
+
- 400 Bad Request
|
|
97
|
+
参数错误,请你查看对应功能reference或使用-h了解命令行如何使用
|
|
98
|
+
|
|
99
|
+
- 401 Unauthorized
|
|
100
|
+
注意是平台方返回的还是我们自己返回的401,通常,平台方(google,bing, yandex,tiktok,kwai)返回的需要用户重新授权
|
|
101
|
+
如果是我们自己的接口返回的,则可以让用户 重新打开命令行执行 `siluzan-tso login`(详情请读取`references/setup.md`)
|
|
102
|
+
|
|
103
|
+
- 500
|
|
104
|
+
大概率是服务可能正在部署或升级,可以让用户提交给Silizan相关人员
|
package/dist/skill/_meta.json
CHANGED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"account": "6326027735",
|
|
3
|
+
"customerName": "账户显示名称(来自 list-accounts --json 的 mediaAccountName)",
|
|
4
|
+
"name": "搜索-品牌词-2026",
|
|
5
|
+
"budget": 100,
|
|
6
|
+
"bidding": "TARGET_SPEND",
|
|
7
|
+
"bidCeiling": 1.5,
|
|
8
|
+
"locationIds": ["2840", "2826", "2036"],
|
|
9
|
+
"languageIds": ["1000", "1017"],
|
|
10
|
+
"startDate": "2026-04-01",
|
|
11
|
+
"endDate": "2027-04-01",
|
|
12
|
+
"url": "https://www.example.com",
|
|
13
|
+
"status": "Enabled",
|
|
14
|
+
"adgroupName": "核心词_品牌词",
|
|
15
|
+
"maxCpc": 1.5,
|
|
16
|
+
"matchType": "BROAD",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"brand keyword 1",
|
|
19
|
+
"brand keyword 2",
|
|
20
|
+
"brand keyword 3"
|
|
21
|
+
],
|
|
22
|
+
"headlines": [
|
|
23
|
+
"Brand Name: Quality Products",
|
|
24
|
+
"Trusted For Over 20 Years",
|
|
25
|
+
"Global Reach, Local Impact",
|
|
26
|
+
"Contact Us Today",
|
|
27
|
+
"Request A Free Quote Now"
|
|
28
|
+
],
|
|
29
|
+
"descriptions": [
|
|
30
|
+
"Top-quality products with certified standards. Contact us today!",
|
|
31
|
+
"Trusted by global partners. Request a free quote now!"
|
|
32
|
+
],
|
|
33
|
+
"finalUrl": "https://www.example.com/products",
|
|
34
|
+
"path1": "products",
|
|
35
|
+
"path2": "2026",
|
|
36
|
+
"productWords": ["brand", "product"],
|
|
37
|
+
"negativeKeywords": [
|
|
38
|
+
"free", "cheap", "wikipedia", "pdf", "ebay", "amazon"
|
|
39
|
+
],
|
|
40
|
+
"extensions": [
|
|
41
|
+
{
|
|
42
|
+
"level": "Campaign",
|
|
43
|
+
"typeV2": "CALL",
|
|
44
|
+
"AssetFieldType": "CALL",
|
|
45
|
+
"Properties": { "ContryCode": "CN", "PhoneNumber": "+86 400-XXX-XXXX" }
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"level": "Campaign",
|
|
49
|
+
"typeV2": "SITELINK",
|
|
50
|
+
"AssetFieldType": "SITELINK",
|
|
51
|
+
"properties": {
|
|
52
|
+
"DestinationUrl": "https://www.example.com/about",
|
|
53
|
+
"Text": "About Us",
|
|
54
|
+
"Line2": "Learn about our story",
|
|
55
|
+
"Line3": "Explore our mission"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"level": "Campaign",
|
|
60
|
+
"typeV2": "STRUCTURED_SNIPPET",
|
|
61
|
+
"AssetFieldType": "STRUCTURED_SNIPPET",
|
|
62
|
+
"StructuredSnippetHeaderValue": {
|
|
63
|
+
"key": "Services",
|
|
64
|
+
"value": ["Quality Certified", "Global Shipping", "24/7 Support"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"extraAdGroups": [
|
|
69
|
+
{
|
|
70
|
+
"MaxCPCAmount": 150,
|
|
71
|
+
"Name": "通用词_行业词",
|
|
72
|
+
"StatusV2": "Enabled",
|
|
73
|
+
"TypeV2": "SEARCH_STANDARD",
|
|
74
|
+
"RotationModeV2": "Unspecified",
|
|
75
|
+
"KeywordsForBatchJob": [
|
|
76
|
+
{
|
|
77
|
+
"KeywordText": ["industry keyword 1", "industry keyword 2"],
|
|
78
|
+
"MatchTypeV2": "BROAD",
|
|
79
|
+
"Finalurl": "https://www.example.com"
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"AdsForBatchJob": [
|
|
83
|
+
{
|
|
84
|
+
"AdTitle": null,
|
|
85
|
+
"DestinationUrl": "https://www.example.com",
|
|
86
|
+
"Finalurl": "https://www.example.com",
|
|
87
|
+
"Path1": "", "Path2": "",
|
|
88
|
+
"TypeV2": "RESPONSIVE_SEARCH_AD",
|
|
89
|
+
"headlinePart1": "Industry Leading Products",
|
|
90
|
+
"headlinePart2": "Certified Quality Standards",
|
|
91
|
+
"headlinePart3": "Get A Free Quote Today",
|
|
92
|
+
"AddtionalHeadlines": [
|
|
93
|
+
"Trusted By Global Partners",
|
|
94
|
+
"20+ Years Of Experience",
|
|
95
|
+
"Contact Us Now"
|
|
96
|
+
],
|
|
97
|
+
"adDescription": "Top-quality industry products with global shipping. Contact us today!",
|
|
98
|
+
"adDescription2": "Certified standards and reliable delivery. Request a quote now!"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"draft": false
|
|
104
|
+
}
|
|
@@ -7,12 +7,18 @@
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
## 默认做法
|
|
11
|
+
1. 询问用户需要生成哪些维度的报告,或直接生成默认报告:包含以下维度:执行摘要、每日投放趋势、月度汇总、广告系列表现、设备分布、地域分布、关键词表现、优化建议
|
|
12
|
+
2. 确定报告需要如何分析请查看(`report-templates/README.md`)
|
|
13
|
+
3. 根据默认模板:`report-templates/report-template.html` 为样式基准来生成html 然后将html转为pdf交付
|
|
14
|
+
4. 输出 HTML 时:**默认**以 `report-templates/report-template.html` 为样式基准(适用于一切总结性、报告性、汇总性成稿);若场景更适合作正式件、深色、单页等,再从 `report-templates/report-template*.html` 中选或询问用户,并对照 `report-templates/README.md`
|
|
15
|
+
5. 注意最终交付的是用html生成的PDF
|
|
16
|
+
6. 使用浏览器或能够打开html/pdf的插件帮用户打开报告
|
|
13
17
|
|
|
14
18
|
用于按账户维度拉取 Google Ads 报表、结构类数据。
|
|
15
19
|
|
|
20
|
+
## Google 账户分析数据接口
|
|
21
|
+
|
|
16
22
|
### 指标字段对照
|
|
17
23
|
|
|
18
24
|
多条报表行的原始体里,消耗类指标常用下列字段名(调用方若要做统一展示,可按此对照;**以实际响应为准**):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
> 所属 skill:`siluzan-tso`。
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 新建广告系列的流程
|
|
6
6
|
|
|
7
7
|
> **强制流程总览(AI 必须严格遵守)**
|
|
8
8
|
> 1)先完整阅读所有规则文档 → 2)向用户补齐关键信息提问 → 3)在规则约束下设计广告计划 → 4)按模板输出方案并获得用户「明确确认」 → 5)**仅在已确认的前提下**执行任何结构性改动。
|
|
@@ -51,13 +51,26 @@
|
|
|
51
51
|
|
|
52
52
|
> **AI Agent 额外要求**:即使用户强烈要求「不用看方案、直接创建」,也必须先按上述模板输出一次完整 Markdown 投放方案,并在对话中列出**已参考的规则文档列表**(`google-ads.md` 与 `references/google-ads-rules/` 目录下的文件),让用户有机会发现问题后再执行,防止误投和配置错误。
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
## 修改
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
- 对用户提出的修改内容进行评估与拓展评估标准基于(references/googles-ads-rules/*.md)中的对应的文件来确认
|
|
57
|
+
- 确认修改方案按照
|
|
58
|
+
- 读取`references/google-ads-rules/google-ads-launch-plan-template.md` 中关于计划模板的描述,节选用户需要修改的部分来按格式输出给用户确认
|
|
59
|
+
- 使用对应命令来进行修改
|
|
60
|
+
- 使用ad -h 来查询有哪些修改命令
|
|
61
|
+
- 使用对应的获取命令进行校验
|
|
62
|
+
|
|
63
|
+
## 新增
|
|
64
|
+
|
|
65
|
+
参考修改的流程,将修改的命令改为新增
|
|
66
|
+
|
|
67
|
+
## 优化
|
|
68
|
+
|
|
69
|
+
参考修改的流程,优化的部分需要有新旧对照的表格,其他与修改流程一致
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## 下面是相关命令的示例,参考就行
|
|
61
74
|
|
|
62
75
|
**ID 来源说明:**
|
|
63
76
|
|
|
@@ -622,112 +635,7 @@ siluzan-tso keyword -k "running shoes" --json
|
|
|
622
635
|
|
|
623
636
|
**JSON 配置文件完整 Schema:**
|
|
624
637
|
|
|
625
|
-
|
|
626
|
-
{
|
|
627
|
-
"account": "6326027735",
|
|
628
|
-
"customerName": "账户显示名称(来自 list-accounts --json 的 mediaAccountName)",
|
|
629
|
-
"name": "搜索-品牌词-2026",
|
|
630
|
-
"budget": 100,
|
|
631
|
-
"bidding": "TARGET_SPEND",
|
|
632
|
-
"bidCeiling": 1.5,
|
|
633
|
-
"locationIds": ["2840", "2826", "2036"],
|
|
634
|
-
"languageIds": ["1000", "1017"],
|
|
635
|
-
"startDate": "2026-04-01",
|
|
636
|
-
"endDate": "2027-04-01",
|
|
637
|
-
"url": "https://www.example.com",
|
|
638
|
-
"status": "Enabled",
|
|
639
|
-
"adgroupName": "核心词_品牌词",
|
|
640
|
-
"maxCpc": 1.5,
|
|
641
|
-
"matchType": "BROAD",
|
|
642
|
-
"keywords": [
|
|
643
|
-
"brand keyword 1",
|
|
644
|
-
"brand keyword 2",
|
|
645
|
-
"brand keyword 3"
|
|
646
|
-
],
|
|
647
|
-
"headlines": [
|
|
648
|
-
"Brand Name: Quality Products",
|
|
649
|
-
"Trusted For Over 20 Years",
|
|
650
|
-
"Global Reach, Local Impact",
|
|
651
|
-
"Contact Us Today",
|
|
652
|
-
"Request A Free Quote Now"
|
|
653
|
-
],
|
|
654
|
-
"descriptions": [
|
|
655
|
-
"Top-quality products with certified standards. Contact us today!",
|
|
656
|
-
"Trusted by global partners. Request a free quote now!"
|
|
657
|
-
],
|
|
658
|
-
"finalUrl": "https://www.example.com/products",
|
|
659
|
-
"path1": "products",
|
|
660
|
-
"path2": "2026",
|
|
661
|
-
"productWords": ["brand", "product"],
|
|
662
|
-
"negativeKeywords": [
|
|
663
|
-
"free", "cheap", "wikipedia", "pdf", "ebay", "amazon"
|
|
664
|
-
],
|
|
665
|
-
"extensions": [
|
|
666
|
-
{
|
|
667
|
-
"level": "Campaign",
|
|
668
|
-
"typeV2": "CALL",
|
|
669
|
-
"AssetFieldType": "CALL",
|
|
670
|
-
"Properties": { "ContryCode": "CN", "PhoneNumber": "+86 400-XXX-XXXX" }
|
|
671
|
-
},
|
|
672
|
-
{
|
|
673
|
-
"level": "Campaign",
|
|
674
|
-
"typeV2": "SITELINK",
|
|
675
|
-
"AssetFieldType": "SITELINK",
|
|
676
|
-
"properties": {
|
|
677
|
-
"DestinationUrl": "https://www.example.com/about",
|
|
678
|
-
"Text": "About Us",
|
|
679
|
-
"Line2": "Learn about our story",
|
|
680
|
-
"Line3": "Explore our mission"
|
|
681
|
-
}
|
|
682
|
-
},
|
|
683
|
-
{
|
|
684
|
-
"level": "Campaign",
|
|
685
|
-
"typeV2": "STRUCTURED_SNIPPET",
|
|
686
|
-
"AssetFieldType": "STRUCTURED_SNIPPET",
|
|
687
|
-
"StructuredSnippetHeaderValue": {
|
|
688
|
-
"key": "Services",
|
|
689
|
-
"value": ["Quality Certified", "Global Shipping", "24/7 Support"]
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
],
|
|
693
|
-
"extraAdGroups": [
|
|
694
|
-
{
|
|
695
|
-
"MaxCPCAmount": 150,
|
|
696
|
-
"Name": "通用词_行业词",
|
|
697
|
-
"StatusV2": "Enabled",
|
|
698
|
-
"TypeV2": "SEARCH_STANDARD",
|
|
699
|
-
"RotationModeV2": "Unspecified",
|
|
700
|
-
"KeywordsForBatchJob": [
|
|
701
|
-
{
|
|
702
|
-
"KeywordText": ["industry keyword 1", "industry keyword 2"],
|
|
703
|
-
"MatchTypeV2": "BROAD",
|
|
704
|
-
"Finalurl": "https://www.example.com"
|
|
705
|
-
}
|
|
706
|
-
],
|
|
707
|
-
"AdsForBatchJob": [
|
|
708
|
-
{
|
|
709
|
-
"AdTitle": null,
|
|
710
|
-
"DestinationUrl": "https://www.example.com",
|
|
711
|
-
"Finalurl": "https://www.example.com",
|
|
712
|
-
"Path1": "", "Path2": "",
|
|
713
|
-
"TypeV2": "RESPONSIVE_SEARCH_AD",
|
|
714
|
-
"headlinePart1": "Industry Leading Products",
|
|
715
|
-
"headlinePart2": "Certified Quality Standards",
|
|
716
|
-
"headlinePart3": "Get A Free Quote Today",
|
|
717
|
-
"AddtionalHeadlines": [
|
|
718
|
-
"Trusted By Global Partners",
|
|
719
|
-
"20+ Years Of Experience",
|
|
720
|
-
"Contact Us Now"
|
|
721
|
-
],
|
|
722
|
-
"adDescription": "Top-quality industry products with global shipping. Contact us today!",
|
|
723
|
-
"adDescription2": "Certified standards and reliable delivery. Request a quote now!"
|
|
724
|
-
}
|
|
725
|
-
]
|
|
726
|
-
}
|
|
727
|
-
],
|
|
728
|
-
"draft": false
|
|
729
|
-
}
|
|
730
|
-
```
|
|
638
|
+
请阅读:`assets/campaign-create-template.json`
|
|
731
639
|
|
|
732
640
|
**JSON文件 字段说明:**
|
|
733
641
|
|
|
@@ -741,24 +649,24 @@ siluzan-tso keyword -k "running shoes" --json
|
|
|
741
649
|
| `locationIds` | ✅ | string[] | 地理位置 ID 数组(`ad geo search` 获取) |
|
|
742
650
|
| `adgroupName` | ✅ | string | 第一个广告组名称 |
|
|
743
651
|
| `maxCpc` | ✅ | number | 第一个广告组最高 CPC,主币种展示金额(1.5 = 1.50 USD,内部 ×100) |
|
|
744
|
-
| `bidCeiling` |
|
|
745
|
-
| `targetCpa` |
|
|
746
|
-
| `targetRoas` |
|
|
747
|
-
| `languageIds` |
|
|
748
|
-
| `startDate` / `endDate` |
|
|
749
|
-
| `url` |
|
|
750
|
-
| `status` |
|
|
751
|
-
| `matchType` |
|
|
752
|
-
| `keywords` |
|
|
753
|
-
| `headlines` |
|
|
754
|
-
| `descriptions` |
|
|
755
|
-
| `finalUrl` |
|
|
756
|
-
| `path1` / `path2` |
|
|
757
|
-
| `productWords` |
|
|
758
|
-
| `negativeKeywords`
|
|
759
|
-
| `extensions` |
|
|
760
|
-
| `extraAdGroups` |
|
|
761
|
-
| `draft` |
|
|
652
|
+
| `bidCeiling` | ✅ | number | TARGET_SPEND 出价上限(主币种,内部 ×100) |
|
|
653
|
+
| `targetCpa` | ✅ | number | TARGET_CPA 目标 CPA(主币种,内部 ×100) |
|
|
654
|
+
| `targetRoas` | ✅| number | TARGET_ROAS 目标 ROAS(如 2.5) |
|
|
655
|
+
| `languageIds` | ✅ | string[] | 语言 ID 数组(默认 `["1000"]` = 英语,中文 = `"1017"`) |
|
|
656
|
+
| `startDate` / `endDate` | ✅ | string | 日期 YYYY-MM-DD(默认:今天 / 2037-12-30) |
|
|
657
|
+
| `url` | ✅ | string | 落地页 URL |
|
|
658
|
+
| `status` | ✅| string | `Enabled` \| `Paused`(默认 Enabled) |
|
|
659
|
+
| `matchType` | ✅ | string | 默认匹配类型:`BROAD` \| `PHRASE` \| `EXACT` |
|
|
660
|
+
| `keywords` | ✅ | string[] | 第一个广告组关键词 |
|
|
661
|
+
| `headlines` | ✅ | string[] | 标题数组,至少 3 条,推荐 15 条,每条 ≤ 30 字符,**元素内允许含逗号** |
|
|
662
|
+
| `descriptions` | ✅| string[] | 描述数组,至少 2 条,推荐 4 条,每条 ≤ 90 字符 |
|
|
663
|
+
| `finalUrl` | ✅| string | 广告落地页 |
|
|
664
|
+
| `path1` / `path2` | ✅ | string | 展示 URL 路径(各 ≤ 15 字符) |
|
|
665
|
+
| `productWords` | ✅ | string[] | 推广产品词(用于 AI 关键词推荐) |
|
|
666
|
+
| `negativeKeywords` |✅ | string[] | 否定关键词数组(默认 BROAD 匹配) |
|
|
667
|
+
| `extensions` | ✅ | array | 广告附加功能(CALL / SITELINK / STRUCTURED_SNIPPET),见 Schema |
|
|
668
|
+
| `extraAdGroups` | ✅ | array | 额外广告组,追加到 AdGroupsForBatchJob,见 Schema |
|
|
669
|
+
| `draft` | ✅ | boolean | `true` = 仅保存草稿(需后续 `ad batch publish` 发布) |
|
|
762
670
|
|
|
763
671
|
---
|
|
764
672
|
|
|
@@ -40,13 +40,6 @@
|
|
|
40
40
|
|
|
41
41
|
## 生成报告的规则
|
|
42
42
|
|
|
43
|
-
### 优化报告 vs 分析报告
|
|
44
|
-
|
|
45
|
-
| 类型 | 典型操作 | 是否询问维度 |
|
|
46
|
-
|------|---------|-------------|
|
|
47
|
-
| **优化报告**(TSO steward) | `report list` / `report create` / `report push` | 不需要 |
|
|
48
|
-
| **分析报告**(CLI 拉数 + Agent 撰写) | `google-analysis *`、`report tiktok-*`、`report bing-*` 等 | 是 |
|
|
49
|
-
|
|
50
43
|
### 分析报告的维度确认
|
|
51
44
|
|
|
52
45
|
生成**分析报告**时:
|