siluzan-tso-cli 1.1.19-beta.9 → 1.1.19
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 +364 -8
- package/dist/skill/SKILL.md +30 -4
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/account-analytics.md +15 -3
- package/dist/skill/references/accounts.md +3 -3
- package/dist/skill/references/finance.md +5 -5
- package/dist/skill/references/geo-continents.json +226 -0
- package/dist/skill/references/reporting.md +2 -2
- package/dist/skill/references/setup.md +5 -5
- package/dist/skill/references/tso-home.md +1 -1
- package/dist/skill/references/workflows.md +1 -1
- package/dist/skill/report-templates/REPORT-WORKFLOW.md +3 -1
- package/dist/skill/report-templates/google-inquiry-analysis.md +473 -0
- package/dist/skill/report-templates/okki-weekly-google-client.md +89 -90
- package/dist/skill/scripts/install.ps1 +2 -2
- package/dist/skill/scripts/install.sh +2 -2
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ HTML 报告模板引用以下 CDN:`cdn.tailwindcss.com`、`cdnjs.cloudflare.co
|
|
|
43
43
|
在**用户的目标项目根目录**执行(根据用户使用的助手选择 `--ai`):
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install -g siluzan-tso-cli
|
|
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.19-beta.9),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
54
|
|
|
56
55
|
| 助手 | 建议 `--ai` |
|
|
57
56
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -3292,7 +3292,7 @@ var DEFAULT_API_BASE;
|
|
|
3292
3292
|
var init_defaults = __esm({
|
|
3293
3293
|
"src/config/defaults.ts"() {
|
|
3294
3294
|
"use strict";
|
|
3295
|
-
DEFAULT_API_BASE = "https://tso-api
|
|
3295
|
+
DEFAULT_API_BASE = "https://tso-api.siluzan.com";
|
|
3296
3296
|
}
|
|
3297
3297
|
});
|
|
3298
3298
|
|
|
@@ -4534,6 +4534,8 @@ function buildOutlineHints(section) {
|
|
|
4534
4534
|
if (section === "campaigns") {
|
|
4535
4535
|
hints.push(...GOOGLE_ANALYSIS_CAMPAIGNS_OUTLINE_BUDGET_HINTS);
|
|
4536
4536
|
}
|
|
4537
|
+
const zhHints = GOOGLE_ANALYSIS_ZH_FIELD_HINTS_BY_SECTION[section];
|
|
4538
|
+
if (zhHints) hints.push(...zhHints);
|
|
4537
4539
|
return hints.length > 0 ? hints : void 0;
|
|
4538
4540
|
}
|
|
4539
4541
|
function sectionToFilename(section, accountId) {
|
|
@@ -4630,7 +4632,7 @@ async function writeGoogleAnalysisSnapshot(params) {
|
|
|
4630
4632
|
agentHint: OUTLINE_AGENT_HINT
|
|
4631
4633
|
};
|
|
4632
4634
|
}
|
|
4633
|
-
var LEGACY_MANIFEST_FILE, CLI_PACKAGE2, SCHEMA_VERSION2, DEFAULT_FIELD_GUIDE2, GOOGLE_ANALYSIS_CAMPAIGNS_OUTLINE_BUDGET_HINTS, RATE_BEARING_SECTIONS, GOOGLE_ANALYSIS_RATE_NORMALIZED_OUTLINE_HINTS;
|
|
4635
|
+
var LEGACY_MANIFEST_FILE, CLI_PACKAGE2, SCHEMA_VERSION2, DEFAULT_FIELD_GUIDE2, GOOGLE_ANALYSIS_CAMPAIGNS_OUTLINE_BUDGET_HINTS, RATE_BEARING_SECTIONS, GOOGLE_ANALYSIS_RATE_NORMALIZED_OUTLINE_HINTS, GOOGLE_ANALYSIS_ZH_FIELD_HINTS_BY_SECTION;
|
|
4634
4636
|
var init_google_analysis = __esm({
|
|
4635
4637
|
"src/utils/snapshot/google-analysis.ts"() {
|
|
4636
4638
|
"use strict";
|
|
@@ -4670,6 +4672,17 @@ var init_google_analysis = __esm({
|
|
|
4670
4672
|
"// \u6982\u7387\u5B57\u6BB5\uFF1A`ctr` / `conversionRate` \u81EA manifest schemaVersion 2\uFF082026-05\uFF09\u8D77\u5DF2\u7531 CLI \u7EDF\u4E00\u5F52\u4E00\u4E3A **0~1 \u5C0F\u6570**\uFF08\u5982 `0.0964` = 9.64%\uFF09\u3002",
|
|
4671
4673
|
"// \u5199 Excel 0~1 \u5C0F\u6570\u5217\uFF1A\u76F4\u63A5\u5199\u5165\uFF1B\u5199\u300Cx%\u300D\u6587\u6848\uFF1A`(v * 100).toFixed(2) + '%'`\uFF1B**\u7981\u6B62**\u518D \xF7100\u3002`interactionRate` \u4ECD\u662F\u5B57\u7B26\u4E32 0~1 \u5C0F\u6570\uFF0C`parseFloat` \u540E\u4F7F\u7528\u3002"
|
|
4672
4674
|
];
|
|
4675
|
+
GOOGLE_ANALYSIS_ZH_FIELD_HINTS_BY_SECTION = {
|
|
4676
|
+
keywords: [
|
|
4677
|
+
"// \u4E2D\u6587\u8BD1\u540D\uFF1A`keywordMatchTypeZh`\uFF08\u7531 `keywordMatchType` \u7ECF match-type-en2zh.json \u7FFB\u8BD1\uFF0C\u8986\u76D6 BROAD/PHRASE/EXACT \u4E0E Broad/Phrase/Exact \u5927\u5C0F\u5199\uFF1B\u672A\u547D\u4E2D\u65F6\u8BE5\u5B57\u6BB5\u7F3A\u7701\uFF09\u3002"
|
|
4678
|
+
],
|
|
4679
|
+
"search-terms": [
|
|
4680
|
+
"// \u4E2D\u6587\u8BD1\u540D\uFF1A`matchTypeZh`\uFF08\u7531 `matchType` \u7ECF match-type-en2zh.json \u7FFB\u8BD1\uFF1B\u672A\u547D\u4E2D\u65F6\u8BE5\u5B57\u6BB5\u7F3A\u7701\uFF09\u3002"
|
|
4681
|
+
],
|
|
4682
|
+
"campaign-geo": [
|
|
4683
|
+
"// \u4E2D\u6587\u8BD1\u540D\uFF1A`countryOrRegionZh`\uFF08\u7531 `countryOrRegion` \u7ECF geo-en2zh.json \u7FFB\u8BD1\uFF0C\u76EE\u524D\u8986\u76D6 105 \u4E2A\u56FD\u5BB6/\u5730\u533A\uFF1B\u672A\u547D\u4E2D\u65F6\u8BE5\u5B57\u6BB5\u7F3A\u7701\uFF09\u3002"
|
|
4684
|
+
]
|
|
4685
|
+
};
|
|
4673
4686
|
}
|
|
4674
4687
|
});
|
|
4675
4688
|
|
|
@@ -4727,7 +4740,7 @@ var init_sections = __esm({
|
|
|
4727
4740
|
description: "\u5173\u952E\u8BCD\u5206\u6BB5 KeywordSectionData",
|
|
4728
4741
|
dateMode: "range",
|
|
4729
4742
|
path: (id) => `/reporting/media-account/${id}/KeywordSectionData`,
|
|
4730
|
-
defaultQuery: { limit:
|
|
4743
|
+
defaultQuery: { limit: 200, orderByCost: true },
|
|
4731
4744
|
keywordOptions: true
|
|
4732
4745
|
},
|
|
4733
4746
|
{
|
|
@@ -4735,7 +4748,7 @@ var init_sections = __esm({
|
|
|
4735
4748
|
description: "\u641C\u7D22\u8BCD searchtermmanagement/v2/list",
|
|
4736
4749
|
dateMode: "range",
|
|
4737
4750
|
path: (id) => `/searchtermmanagement/v2/list/${id}`,
|
|
4738
|
-
defaultQuery: { limit:
|
|
4751
|
+
defaultQuery: { limit: 200, orderByCost: true },
|
|
4739
4752
|
keywordOptions: true
|
|
4740
4753
|
},
|
|
4741
4754
|
{
|
|
@@ -4910,6 +4923,296 @@ var init_normalize_rates = __esm({
|
|
|
4910
4923
|
}
|
|
4911
4924
|
});
|
|
4912
4925
|
|
|
4926
|
+
// src/commands/google-analysis/match-type-en2zh.json
|
|
4927
|
+
var match_type_en2zh_default;
|
|
4928
|
+
var init_match_type_en2zh = __esm({
|
|
4929
|
+
"src/commands/google-analysis/match-type-en2zh.json"() {
|
|
4930
|
+
match_type_en2zh_default = {
|
|
4931
|
+
BROAD: "\u5E7F\u6CDB\u5339\u914D",
|
|
4932
|
+
PHRASE: "\u8BCD\u7EC4\u5339\u914D",
|
|
4933
|
+
EXACT: "\u7CBE\u786E\u5339\u914D",
|
|
4934
|
+
NEAR_PHRASE: "\u8FD1\u4E49\u8BCD\u7EC4\u5339\u914D",
|
|
4935
|
+
NEAR_EXACT: "\u8FD1\u4E49\u7CBE\u786E\u5339\u914D",
|
|
4936
|
+
Broad: "\u5E7F\u6CDB\u5339\u914D",
|
|
4937
|
+
Phrase: "\u8BCD\u7EC4\u5339\u914D",
|
|
4938
|
+
Exact: "\u7CBE\u786E\u5339\u914D",
|
|
4939
|
+
Near_Phrase: "\u8FD1\u4E49\u8BCD\u7EC4\u5339\u914D",
|
|
4940
|
+
Near_Exact: "\u8FD1\u4E49\u7CBE\u786E\u5339\u914D"
|
|
4941
|
+
};
|
|
4942
|
+
}
|
|
4943
|
+
});
|
|
4944
|
+
|
|
4945
|
+
// src/commands/google-analysis/geo-en2zh.json
|
|
4946
|
+
var geo_en2zh_default;
|
|
4947
|
+
var init_geo_en2zh = __esm({
|
|
4948
|
+
"src/commands/google-analysis/geo-en2zh.json"() {
|
|
4949
|
+
geo_en2zh_default = {
|
|
4950
|
+
Afghanistan: "\u963F\u5BCC\u6C57",
|
|
4951
|
+
Albania: "\u963F\u5C14\u5DF4\u5C3C\u4E9A",
|
|
4952
|
+
Algeria: "\u963F\u5C14\u53CA\u5229\u4E9A",
|
|
4953
|
+
Andorra: "\u5B89\u9053\u5C14",
|
|
4954
|
+
Angola: "\u5B89\u54E5\u62C9",
|
|
4955
|
+
"Antigua & Barbuda": "\u5B89\u63D0\u74DC\u548C\u5DF4\u5E03\u8FBE",
|
|
4956
|
+
"Antigua and Barbuda": "\u5B89\u63D0\u74DC\u548C\u5DF4\u5E03\u8FBE",
|
|
4957
|
+
Argentina: "\u963F\u6839\u5EF7",
|
|
4958
|
+
Armenia: "\u4E9A\u7F8E\u5C3C\u4E9A",
|
|
4959
|
+
Australia: "\u6FB3\u5927\u5229\u4E9A",
|
|
4960
|
+
Austria: "\u5965\u5730\u5229",
|
|
4961
|
+
Azerbaijan: "\u963F\u585E\u62DC\u7586",
|
|
4962
|
+
Bahamas: "\u5DF4\u54C8\u9A6C",
|
|
4963
|
+
Bahrain: "\u5DF4\u6797",
|
|
4964
|
+
Bangladesh: "\u5B5F\u52A0\u62C9\u56FD",
|
|
4965
|
+
Barbados: "\u5DF4\u5DF4\u591A\u65AF",
|
|
4966
|
+
Belarus: "\u767D\u4FC4\u7F57\u65AF",
|
|
4967
|
+
Belgium: "\u6BD4\u5229\u65F6",
|
|
4968
|
+
Belize: "\u4F2F\u5229\u5179",
|
|
4969
|
+
Benin: "\u8D1D\u5B81",
|
|
4970
|
+
Bhutan: "\u4E0D\u4E39",
|
|
4971
|
+
Bolivia: "\u73BB\u5229\u7EF4\u4E9A",
|
|
4972
|
+
"Bosnia & Herzegovina": "\u6CE2\u65AF\u5C3C\u4E9A\u548C\u9ED1\u585E\u54E5\u7EF4\u90A3",
|
|
4973
|
+
"Bosnia and Herzegovina": "\u6CE2\u65AF\u5C3C\u4E9A\u548C\u9ED1\u585E\u54E5\u7EF4\u90A3",
|
|
4974
|
+
Botswana: "\u535A\u8328\u74E6\u7EB3",
|
|
4975
|
+
Brazil: "\u5DF4\u897F",
|
|
4976
|
+
Brunei: "\u6587\u83B1",
|
|
4977
|
+
Bulgaria: "\u4FDD\u52A0\u5229\u4E9A",
|
|
4978
|
+
"Burkina Faso": "\u5E03\u57FA\u7EB3\u6CD5\u7D22",
|
|
4979
|
+
Burundi: "\u5E03\u9686\u8FEA",
|
|
4980
|
+
"Cabo Verde": "\u4F5B\u5F97\u89D2",
|
|
4981
|
+
Cambodia: "\u67EC\u57D4\u5BE8",
|
|
4982
|
+
Cameroon: "\u5580\u9EA6\u9686",
|
|
4983
|
+
Canada: "\u52A0\u62FF\u5927",
|
|
4984
|
+
"Central African Republic": "\u4E2D\u975E\u5171\u548C\u56FD",
|
|
4985
|
+
Chad: "\u4E4D\u5F97",
|
|
4986
|
+
Chile: "\u667A\u5229",
|
|
4987
|
+
China: "\u4E2D\u56FD",
|
|
4988
|
+
Colombia: "\u54E5\u4F26\u6BD4\u4E9A",
|
|
4989
|
+
Comoros: "\u79D1\u6469\u7F57",
|
|
4990
|
+
"Costa Rica": "\u54E5\u65AF\u8FBE\u9ECE\u52A0",
|
|
4991
|
+
"Cote d'Ivoire": "\u79D1\u7279\u8FEA\u74E6",
|
|
4992
|
+
Croatia: "\u514B\u7F57\u5730\u4E9A",
|
|
4993
|
+
Cuba: "\u53E4\u5DF4",
|
|
4994
|
+
Cyprus: "\u585E\u6D66\u8DEF\u65AF",
|
|
4995
|
+
Czechia: "\u6377\u514B",
|
|
4996
|
+
"Democratic Republic of the Congo": "\u521A\u679C\u6C11\u4E3B\u5171\u548C\u56FD",
|
|
4997
|
+
Denmark: "\u4E39\u9EA6",
|
|
4998
|
+
Djibouti: "\u5409\u5E03\u63D0",
|
|
4999
|
+
Dominica: "\u591A\u7C73\u5C3C\u514B",
|
|
5000
|
+
"Dominican Republic": "\u591A\u7C73\u5C3C\u52A0\u5171\u548C\u56FD",
|
|
5001
|
+
Ecuador: "\u5384\u74DC\u591A\u5C14",
|
|
5002
|
+
Egypt: "\u57C3\u53CA",
|
|
5003
|
+
"El Salvador": "\u8428\u5C14\u74E6\u591A",
|
|
5004
|
+
"Equatorial Guinea": "\u8D64\u9053\u51E0\u5185\u4E9A",
|
|
5005
|
+
Eritrea: "\u5384\u7ACB\u7279\u91CC\u4E9A",
|
|
5006
|
+
Estonia: "\u7231\u6C99\u5C3C\u4E9A",
|
|
5007
|
+
Eswatini: "\u65AF\u5A01\u58EB\u5170",
|
|
5008
|
+
Ethiopia: "\u57C3\u585E\u4FC4\u6BD4\u4E9A",
|
|
5009
|
+
Fiji: "\u6590\u6D4E",
|
|
5010
|
+
Finland: "\u82AC\u5170",
|
|
5011
|
+
France: "\u6CD5\u56FD",
|
|
5012
|
+
Gabon: "\u52A0\u84EC",
|
|
5013
|
+
Gambia: "\u5188\u6BD4\u4E9A",
|
|
5014
|
+
Georgia: "\u683C\u9C81\u5409\u4E9A",
|
|
5015
|
+
Germany: "\u5FB7\u56FD",
|
|
5016
|
+
Ghana: "\u52A0\u7EB3",
|
|
5017
|
+
Greece: "\u5E0C\u814A",
|
|
5018
|
+
Grenada: "\u683C\u6797\u7EB3\u8FBE",
|
|
5019
|
+
Guatemala: "\u5371\u5730\u9A6C\u62C9",
|
|
5020
|
+
Guinea: "\u51E0\u5185\u4E9A",
|
|
5021
|
+
"Guinea-Bissau": "\u51E0\u5185\u4E9A\u6BD4\u7ECD",
|
|
5022
|
+
Guyana: "\u572D\u4E9A\u90A3",
|
|
5023
|
+
Haiti: "\u6D77\u5730",
|
|
5024
|
+
Honduras: "\u6D2A\u90FD\u62C9\u65AF",
|
|
5025
|
+
"Hong Kong": "\u9999\u6E2F",
|
|
5026
|
+
Hungary: "\u5308\u7259\u5229",
|
|
5027
|
+
Iceland: "\u51B0\u5C9B",
|
|
5028
|
+
India: "\u5370\u5EA6",
|
|
5029
|
+
Indonesia: "\u5370\u5EA6\u5C3C\u897F\u4E9A",
|
|
5030
|
+
Iran: "\u4F0A\u6717",
|
|
5031
|
+
Iraq: "\u4F0A\u62C9\u514B",
|
|
5032
|
+
Ireland: "\u7231\u5C14\u5170",
|
|
5033
|
+
"Isle of Man": "\u9A6C\u6069\u5C9B",
|
|
5034
|
+
Israel: "\u4EE5\u8272\u5217",
|
|
5035
|
+
Italy: "\u610F\u5927\u5229",
|
|
5036
|
+
Jamaica: "\u7259\u4E70\u52A0",
|
|
5037
|
+
Japan: "\u65E5\u672C",
|
|
5038
|
+
Johannesburg: "\u7EA6\u7FF0\u5185\u65AF\u5821",
|
|
5039
|
+
Jordan: "\u7EA6\u65E6",
|
|
5040
|
+
Kazakhstan: "\u54C8\u8428\u514B\u65AF\u5766",
|
|
5041
|
+
Kenya: "\u80AF\u5C3C\u4E9A",
|
|
5042
|
+
Kiribati: "\u57FA\u91CC\u5DF4\u65AF",
|
|
5043
|
+
Kosovo: "\u79D1\u7D22\u6C83",
|
|
5044
|
+
Kuwait: "\u79D1\u5A01\u7279",
|
|
5045
|
+
Kyrgyzstan: "\u5409\u5C14\u5409\u65AF\u65AF\u5766",
|
|
5046
|
+
Laos: "\u8001\u631D",
|
|
5047
|
+
Latvia: "\u62C9\u8131\u7EF4\u4E9A",
|
|
5048
|
+
Lebanon: "\u9ECE\u5DF4\u5AE9",
|
|
5049
|
+
Lesotho: "\u83B1\u7D22\u6258",
|
|
5050
|
+
Liberia: "\u5229\u6BD4\u91CC\u4E9A",
|
|
5051
|
+
Libya: "\u5229\u6BD4\u4E9A",
|
|
5052
|
+
Liechtenstein: "\u5217\u652F\u6566\u58EB\u767B",
|
|
5053
|
+
Lithuania: "\u7ACB\u9676\u5B9B",
|
|
5054
|
+
Luxembourg: "\u5362\u68EE\u5821",
|
|
5055
|
+
Macau: "\u6FB3\u95E8",
|
|
5056
|
+
Madagascar: "\u9A6C\u8FBE\u52A0\u65AF\u52A0",
|
|
5057
|
+
Malawi: "\u9A6C\u62C9\u7EF4",
|
|
5058
|
+
Malaysia: "\u9A6C\u6765\u897F\u4E9A",
|
|
5059
|
+
Maldives: "\u9A6C\u5C14\u4EE3\u592B",
|
|
5060
|
+
Mali: "\u9A6C\u91CC",
|
|
5061
|
+
Malta: "\u9A6C\u8033\u4ED6",
|
|
5062
|
+
"Marshall Islands": "\u9A6C\u7ECD\u5C14\u7FA4\u5C9B",
|
|
5063
|
+
Mauritania: "\u6BDB\u91CC\u5854\u5C3C\u4E9A",
|
|
5064
|
+
Mauritius: "\u6BDB\u91CC\u6C42\u65AF",
|
|
5065
|
+
Mexico: "\u58A8\u897F\u54E5",
|
|
5066
|
+
Micronesia: "\u5BC6\u514B\u7F57\u5C3C\u897F\u4E9A",
|
|
5067
|
+
Moldova: "\u6469\u5C14\u591A\u74E6",
|
|
5068
|
+
Monaco: "\u6469\u7EB3\u54E5",
|
|
5069
|
+
Mongolia: "\u8499\u53E4",
|
|
5070
|
+
Montenegro: "\u9ED1\u5C71",
|
|
5071
|
+
Morocco: "\u6469\u6D1B\u54E5",
|
|
5072
|
+
Mozambique: "\u83AB\u6851\u6BD4\u514B",
|
|
5073
|
+
"Myanmar (Burma)": "\u7F05\u7538",
|
|
5074
|
+
Namibia: "\u7EB3\u7C73\u6BD4\u4E9A",
|
|
5075
|
+
Nauru: "\u7459\u9C81",
|
|
5076
|
+
Nepal: "\u5C3C\u6CCA\u5C14",
|
|
5077
|
+
Netherlands: "\u8377\u5170",
|
|
5078
|
+
"New Zealand": "\u65B0\u897F\u5170",
|
|
5079
|
+
Nicaragua: "\u5C3C\u52A0\u62C9\u74DC",
|
|
5080
|
+
Niger: "\u5C3C\u65E5\u5C14",
|
|
5081
|
+
Nigeria: "\u5C3C\u65E5\u5229\u4E9A",
|
|
5082
|
+
"North Korea": "\u671D\u9C9C",
|
|
5083
|
+
"North Macedonia": "\u5317\u9A6C\u5176\u987F",
|
|
5084
|
+
Norway: "\u632A\u5A01",
|
|
5085
|
+
Oman: "\u963F\u66FC",
|
|
5086
|
+
Pakistan: "\u5DF4\u57FA\u65AF\u5766",
|
|
5087
|
+
Palau: "\u5E15\u52B3",
|
|
5088
|
+
Palestine: "\u5DF4\u52D2\u65AF\u5766",
|
|
5089
|
+
Panama: "\u5DF4\u62FF\u9A6C",
|
|
5090
|
+
"Papua New Guinea": "\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A",
|
|
5091
|
+
Paraguay: "\u5DF4\u62C9\u572D",
|
|
5092
|
+
Peru: "\u79D8\u9C81",
|
|
5093
|
+
Philippines: "\u83F2\u5F8B\u5BBE",
|
|
5094
|
+
Poland: "\u6CE2\u5170",
|
|
5095
|
+
Portugal: "\u8461\u8404\u7259",
|
|
5096
|
+
"Puerto Rico": "\u6CE2\u591A\u9ECE\u5404",
|
|
5097
|
+
Qatar: "\u5361\u5854\u5C14",
|
|
5098
|
+
"Republic of the Congo": "\u521A\u679C\u5171\u548C\u56FD",
|
|
5099
|
+
Romania: "\u7F57\u9A6C\u5C3C\u4E9A",
|
|
5100
|
+
Russia: "\u4FC4\u7F57\u65AF",
|
|
5101
|
+
Rwanda: "\u5362\u65FA\u8FBE",
|
|
5102
|
+
"Saint Kitts and Nevis": "\u5723\u57FA\u8328\u548C\u5C3C\u7EF4\u65AF",
|
|
5103
|
+
"Saint Lucia": "\u5723\u5362\u897F\u4E9A",
|
|
5104
|
+
"Saint Vincent and the Grenadines": "\u5723\u6587\u68EE\u7279\u548C\u683C\u6797\u7EB3\u4E01\u65AF",
|
|
5105
|
+
Samoa: "\u8428\u6469\u4E9A",
|
|
5106
|
+
"San Marino": "\u5723\u9A6C\u529B\u8BFA",
|
|
5107
|
+
"S\xE3o Tom\xE9 & Pr\xEDncipe": "\u5723\u591A\u7F8E\u548C\u666E\u6797\u897F\u6BD4",
|
|
5108
|
+
"Sao Tome and Principe": "\u5723\u591A\u7F8E\u548C\u666E\u6797\u897F\u6BD4",
|
|
5109
|
+
"Saudi Arabia": "\u6C99\u7279\u963F\u62C9\u4F2F",
|
|
5110
|
+
Senegal: "\u585E\u5185\u52A0\u5C14",
|
|
5111
|
+
Serbia: "\u585E\u5C14\u7EF4\u4E9A",
|
|
5112
|
+
Seychelles: "\u585E\u820C\u5C14",
|
|
5113
|
+
"Sierra Leone": "\u585E\u62C9\u5229\u6602",
|
|
5114
|
+
Singapore: "\u65B0\u52A0\u5761",
|
|
5115
|
+
Slovakia: "\u65AF\u6D1B\u4F10\u514B",
|
|
5116
|
+
Slovenia: "\u65AF\u6D1B\u6587\u5C3C\u4E9A",
|
|
5117
|
+
"Solomon Islands": "\u6240\u7F57\u95E8\u7FA4\u5C9B",
|
|
5118
|
+
Somalia: "\u7D22\u9A6C\u91CC",
|
|
5119
|
+
"South Africa": "\u5357\u975E",
|
|
5120
|
+
"South Korea": "\u97E9\u56FD",
|
|
5121
|
+
"South Sudan": "\u5357\u82CF\u4E39",
|
|
5122
|
+
Spain: "\u897F\u73ED\u7259",
|
|
5123
|
+
"Spanish Fork": "Spanish Fork",
|
|
5124
|
+
"Sri Lanka": "\u65AF\u91CC\u5170\u5361",
|
|
5125
|
+
"St. Kitts & Nevis": "\u5723\u57FA\u8328\u548C\u5C3C\u7EF4\u65AF",
|
|
5126
|
+
"St. Lucia": "\u5723\u5362\u897F\u4E9A",
|
|
5127
|
+
"St. Vincent & Grenadines": "\u5723\u6587\u68EE\u7279\u548C\u683C\u6797\u7EB3\u4E01\u65AF",
|
|
5128
|
+
Sudan: "\u82CF\u4E39",
|
|
5129
|
+
Suriname: "\u82CF\u91CC\u5357",
|
|
5130
|
+
Sweden: "\u745E\u5178",
|
|
5131
|
+
Switzerland: "\u745E\u58EB",
|
|
5132
|
+
Syria: "\u53D9\u5229\u4E9A",
|
|
5133
|
+
Taiwan: "\u53F0\u6E7E",
|
|
5134
|
+
Tajikistan: "\u5854\u5409\u514B\u65AF\u5766",
|
|
5135
|
+
Tanzania: "\u5766\u6851\u5C3C\u4E9A",
|
|
5136
|
+
Thailand: "\u6CF0\u56FD",
|
|
5137
|
+
"Timor-Leste": "\u4E1C\u5E1D\u6C76",
|
|
5138
|
+
Togo: "\u591A\u54E5",
|
|
5139
|
+
Tonga: "\u6C64\u52A0",
|
|
5140
|
+
"Trinidad & Tobago": "\u7279\u7ACB\u5C3C\u8FBE\u548C\u591A\u5DF4\u54E5",
|
|
5141
|
+
"Trinidad and Tobago": "\u7279\u7ACB\u5C3C\u8FBE\u548C\u591A\u5DF4\u54E5",
|
|
5142
|
+
Tunisia: "\u7A81\u5C3C\u65AF",
|
|
5143
|
+
Turkiye: "\u571F\u8033\u5176",
|
|
5144
|
+
Turkmenistan: "\u571F\u5E93\u66FC\u65AF\u5766",
|
|
5145
|
+
Tuvalu: "\u56FE\u74E6\u5362",
|
|
5146
|
+
Uganda: "\u4E4C\u5E72\u8FBE",
|
|
5147
|
+
Ukraine: "\u4E4C\u514B\u5170",
|
|
5148
|
+
"United Arab Emirates": "\u963F\u8054\u914B",
|
|
5149
|
+
"United Kingdom": "\u82F1\u56FD",
|
|
5150
|
+
"United States": "\u7F8E\u56FD",
|
|
5151
|
+
Uruguay: "\u4E4C\u62C9\u572D",
|
|
5152
|
+
Uzbekistan: "\u4E4C\u5179\u522B\u514B\u65AF\u5766",
|
|
5153
|
+
Vanuatu: "\u74E6\u52AA\u963F\u56FE",
|
|
5154
|
+
"Vatican City": "\u68B5\u8482\u5188",
|
|
5155
|
+
Venezuela: "\u59D4\u5185\u745E\u62C9",
|
|
5156
|
+
Vietnam: "\u8D8A\u5357",
|
|
5157
|
+
Yemen: "\u4E5F\u95E8",
|
|
5158
|
+
Zambia: "\u8D5E\u6BD4\u4E9A",
|
|
5159
|
+
Zimbabwe: "\u6D25\u5DF4\u5E03\u97E6"
|
|
5160
|
+
};
|
|
5161
|
+
}
|
|
5162
|
+
});
|
|
5163
|
+
|
|
5164
|
+
// src/commands/google-analysis/translate-fields.ts
|
|
5165
|
+
function lookupZh(dict, key) {
|
|
5166
|
+
if (typeof key !== "string" || key === "") return void 0;
|
|
5167
|
+
return dict[key];
|
|
5168
|
+
}
|
|
5169
|
+
function annotateRow(row, source, target, dict) {
|
|
5170
|
+
if (row[target] !== void 0) return;
|
|
5171
|
+
const zh = lookupZh(dict, row[source]);
|
|
5172
|
+
if (zh !== void 0) row[target] = zh;
|
|
5173
|
+
}
|
|
5174
|
+
function annotateArrayRows(rows, source, target, dict) {
|
|
5175
|
+
if (!Array.isArray(rows)) return;
|
|
5176
|
+
for (const r of rows) {
|
|
5177
|
+
if (r && typeof r === "object" && !Array.isArray(r)) {
|
|
5178
|
+
annotateRow(r, source, target, dict);
|
|
5179
|
+
}
|
|
5180
|
+
}
|
|
5181
|
+
}
|
|
5182
|
+
function annotateZhFields(payload, section) {
|
|
5183
|
+
if (payload === null || typeof payload !== "object") return payload;
|
|
5184
|
+
switch (section) {
|
|
5185
|
+
case "keywords": {
|
|
5186
|
+
const rows = payload.keywords;
|
|
5187
|
+
annotateArrayRows(rows, "keywordMatchType", "keywordMatchTypeZh", MATCH_TYPE_DICT);
|
|
5188
|
+
break;
|
|
5189
|
+
}
|
|
5190
|
+
case "search-terms": {
|
|
5191
|
+
const rows = payload.data;
|
|
5192
|
+
annotateArrayRows(rows, "matchType", "matchTypeZh", MATCH_TYPE_DICT);
|
|
5193
|
+
break;
|
|
5194
|
+
}
|
|
5195
|
+
case "campaign-geo": {
|
|
5196
|
+
const rows = payload.countries;
|
|
5197
|
+
annotateArrayRows(rows, "countryOrRegion", "countryOrRegionZh", GEO_DICT);
|
|
5198
|
+
break;
|
|
5199
|
+
}
|
|
5200
|
+
default:
|
|
5201
|
+
break;
|
|
5202
|
+
}
|
|
5203
|
+
return payload;
|
|
5204
|
+
}
|
|
5205
|
+
var MATCH_TYPE_DICT, GEO_DICT;
|
|
5206
|
+
var init_translate_fields = __esm({
|
|
5207
|
+
"src/commands/google-analysis/translate-fields.ts"() {
|
|
5208
|
+
"use strict";
|
|
5209
|
+
init_match_type_en2zh();
|
|
5210
|
+
init_geo_en2zh();
|
|
5211
|
+
MATCH_TYPE_DICT = match_type_en2zh_default;
|
|
5212
|
+
GEO_DICT = geo_en2zh_default;
|
|
5213
|
+
}
|
|
5214
|
+
});
|
|
5215
|
+
|
|
4913
5216
|
// src/commands/google-analysis/fetch.ts
|
|
4914
5217
|
function defaultDateRange3() {
|
|
4915
5218
|
const end = /* @__PURE__ */ new Date();
|
|
@@ -4947,6 +5250,31 @@ async function fetchJson(config, pathWithQuery, verbose) {
|
|
|
4947
5250
|
const url = `${config.googleApiUrl}${pathWithQuery}`;
|
|
4948
5251
|
return apiFetch2(url, config, {}, verbose);
|
|
4949
5252
|
}
|
|
5253
|
+
function deviceBidModifierLookupKey(campaignId, adGroupId, deviceType) {
|
|
5254
|
+
return `${campaignId ?? ""}\0${adGroupId ?? ""}\0${deviceType ?? ""}`;
|
|
5255
|
+
}
|
|
5256
|
+
function mergeDeviceBidModifiersIntoReport(report, modifiers) {
|
|
5257
|
+
const rows = report.devices;
|
|
5258
|
+
if (!Array.isArray(rows) || rows.length === 0) return report;
|
|
5259
|
+
if (!Array.isArray(modifiers) || modifiers.length === 0) return report;
|
|
5260
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
5261
|
+
for (const m of modifiers) {
|
|
5262
|
+
byKey.set(
|
|
5263
|
+
deviceBidModifierLookupKey(m.campaignId, m.adGroupId, m.deviceType),
|
|
5264
|
+
m
|
|
5265
|
+
);
|
|
5266
|
+
}
|
|
5267
|
+
const devices = rows.map((row) => {
|
|
5268
|
+
const hit = byKey.get(deviceBidModifierLookupKey(row.campaignId, row.adGroupId, row.deviceType)) ?? (row.adGroupId ? void 0 : byKey.get(deviceBidModifierLookupKey(row.campaignId, null, row.deviceType)));
|
|
5269
|
+
if (!hit || hit.bidModifier === void 0) return row;
|
|
5270
|
+
return {
|
|
5271
|
+
...row,
|
|
5272
|
+
bidModifier: hit.bidModifier,
|
|
5273
|
+
bidModifierSpecified: hit.bidModifierSpecified
|
|
5274
|
+
};
|
|
5275
|
+
});
|
|
5276
|
+
return { ...report, devices };
|
|
5277
|
+
}
|
|
4950
5278
|
function assertNever(x, ctx) {
|
|
4951
5279
|
throw new Error(`${ctx}\uFF1A\u672A\u5904\u7406\u7684\u5206\u652F ${String(x)}`);
|
|
4952
5280
|
}
|
|
@@ -5045,7 +5373,27 @@ async function fetchSectionPayload(def, opts, config, id) {
|
|
|
5045
5373
|
fetchJson(config, videoPath, !!opts.verbose)
|
|
5046
5374
|
]);
|
|
5047
5375
|
const merged = { images, videos };
|
|
5048
|
-
return
|
|
5376
|
+
return annotateZhFields(
|
|
5377
|
+
normalizeRateScales(stripLegacyGoogleFieldsIfV2Present(merged), "materials"),
|
|
5378
|
+
"materials"
|
|
5379
|
+
);
|
|
5380
|
+
}
|
|
5381
|
+
if (def.name === "campaign-device") {
|
|
5382
|
+
const sectionPath2 = def.path(id);
|
|
5383
|
+
const query2 = buildSearchParams(def, opts.start, opts.end, extras);
|
|
5384
|
+
const [report, modifiers] = await Promise.all([
|
|
5385
|
+
fetchJson(config, `${sectionPath2}${query2}`, !!opts.verbose),
|
|
5386
|
+
fetchJson(
|
|
5387
|
+
config,
|
|
5388
|
+
`/campaignmanagement/${id}/BidModifiers/Devices`,
|
|
5389
|
+
!!opts.verbose
|
|
5390
|
+
)
|
|
5391
|
+
]);
|
|
5392
|
+
const data2 = mergeDeviceBidModifiersIntoReport(report, modifiers);
|
|
5393
|
+
return annotateZhFields(
|
|
5394
|
+
normalizeRateScales(stripLegacyGoogleFieldsIfV2Present(data2), def.name),
|
|
5395
|
+
def.name
|
|
5396
|
+
);
|
|
5049
5397
|
}
|
|
5050
5398
|
if (def.name === "daily-metrics") {
|
|
5051
5399
|
const { startDate, endDate } = resolveDateRange2(opts.start, opts.end);
|
|
@@ -5057,7 +5405,10 @@ async function fetchSectionPayload(def, opts, config, id) {
|
|
|
5057
5405
|
const url = `${config.apiBaseUrl}/report/media-account/google/account-daily-reports?${params.toString()}`;
|
|
5058
5406
|
const raw = await apiFetch2(url, config, {}, !!opts.verbose);
|
|
5059
5407
|
const rows = rowsFromAccountDailyReportsEnvelope(raw, id);
|
|
5060
|
-
return
|
|
5408
|
+
return annotateZhFields(
|
|
5409
|
+
normalizeRateScales(stripLegacyGoogleFieldsIfV2Present(rows), "daily-metrics"),
|
|
5410
|
+
"daily-metrics"
|
|
5411
|
+
);
|
|
5061
5412
|
}
|
|
5062
5413
|
const sectionPath = def.path(id);
|
|
5063
5414
|
const query = buildSearchParams(def, opts.start, opts.end, extras);
|
|
@@ -5067,7 +5418,10 @@ async function fetchSectionPayload(def, opts, config, id) {
|
|
|
5067
5418
|
!!opts.verbose,
|
|
5068
5419
|
def.name
|
|
5069
5420
|
);
|
|
5070
|
-
return
|
|
5421
|
+
return annotateZhFields(
|
|
5422
|
+
normalizeRateScales(stripLegacyGoogleFieldsIfV2Present(data), def.name),
|
|
5423
|
+
def.name
|
|
5424
|
+
);
|
|
5071
5425
|
}
|
|
5072
5426
|
function endpointHintForSection(def) {
|
|
5073
5427
|
if (def.name === "materials") return "CampaignAssetView+Videos";
|
|
@@ -5108,6 +5462,7 @@ var init_fetch = __esm({
|
|
|
5108
5462
|
init_strip_legacy_google_fields();
|
|
5109
5463
|
init_sections();
|
|
5110
5464
|
init_normalize_rates();
|
|
5465
|
+
init_translate_fields();
|
|
5111
5466
|
}
|
|
5112
5467
|
});
|
|
5113
5468
|
|
|
@@ -6651,7 +7006,7 @@ function registerGoogleAnalysisCommands(program2) {
|
|
|
6651
7006
|
"--concurrency <n>",
|
|
6652
7007
|
"\u5E76\u53D1\u6570\uFF0C\u9ED8\u8BA4 5\uFF1B\u4E0A\u9650 16\uFF08\u4E0E http-raw maxSockets \u5BF9\u9F50\uFF09\uFF1B\u8D26\u6237\u5927\u6216\u7F51\u7EDC\u6162\u65F6\u8C03\u5C0F",
|
|
6653
7008
|
(v) => parseInt(v, 10)
|
|
6654
|
-
).option("--limit <n>", "\u900F\u4F20\u7ED9 keywords / search-terms \u7EF4\u5EA6\u7684\u6761\u6570\u4E0A\u9650", (v) => parseInt(v, 10)).option("--no-order-by-cost", "\u900F\u4F20\uFF1Akeywords / search-terms \u4E0D\u6309\u6D88\u8017\u6392\u5E8F", false).option("--level <level>", "\u900F\u4F20\u7ED9 extensions \u7EF4\u5EA6\u7684 level \u8FC7\u6EE4\uFF1AAccount | Campaign | Ad Group").option(
|
|
7009
|
+
).option("--limit <n>", "\u900F\u4F20\u7ED9 keywords / search-terms \u7EF4\u5EA6\u7684\u6761\u6570\u4E0A\u9650\uFF08\u9ED8\u8BA4 200\uFF09", (v) => parseInt(v, 10)).option("--no-order-by-cost", "\u900F\u4F20\uFF1Akeywords / search-terms \u4E0D\u6309\u6D88\u8017\u6392\u5E8F", false).option("--level <level>", "\u900F\u4F20\u7ED9 extensions \u7EF4\u5EA6\u7684 level \u8FC7\u6EE4\uFF1AAccount | Campaign | Ad Group").option(
|
|
6655
7010
|
"--audience-type <type>",
|
|
6656
7011
|
"\u900F\u4F20\u7ED9 audience \u7EF4\u5EA6\u7684 audienceTypeFilter\uFF1ASystemDefined | UserDefined"
|
|
6657
7012
|
).option(
|
|
@@ -6743,6 +7098,7 @@ var init_google_analysis2 = __esm({
|
|
|
6743
7098
|
init_sections();
|
|
6744
7099
|
init_fetch();
|
|
6745
7100
|
init_normalize_rates();
|
|
7101
|
+
init_translate_fields();
|
|
6746
7102
|
init_register_cli();
|
|
6747
7103
|
}
|
|
6748
7104
|
});
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -2,10 +2,7 @@
|
|
|
2
2
|
name: siluzan-tso
|
|
3
3
|
description: >-
|
|
4
4
|
Siluzan TSO 广告 skill(siluzan-tso-cli):Google/Bing/Yandex/TikTok/Kwai 账户开户、授权与分享、数据与消耗、Google 广告管理、发票与转账、优化报告与智能预警、TikTok/Meta 线索。
|
|
5
|
-
|
|
6
|
-
关键字规划师/拓词/竞品网址拓词/词包清洗/否词/建户关键词编排:先读 references/keyword-planner-workflows.md。
|
|
7
|
-
①竞品URL+种子拓词→JSON筛排TopN ②多种子长尾 ③月搜阈值与词根/意图洗词 ④google-analysis keywords 叠分批 keyword 市场指标 ⑤search-terms 与拓词对照否词线索 ⑥CPC/竞争度/搜索量筛高意图 ⑦否词表+ad keyword-negative-create ⑧Campaign→AdGroup→匹配表+ad 落地 ⑨keyword --json-out 供脚本复用。无 Forecast、无 Planner 官方按月 12 个月趋势接口。
|
|
8
|
-
运营「OKKI 周报」固定话术(如「使用okki周报模板生成…」)→ `report-templates/okki-weekly-google-client.md`:拉数仅用现有 `stats`/`balance`/`google-analysis`(不新增拉数子命令);**多 Sheet Excel 由 Agent 落盘后写脚本生成**,CLI **不**提供内置「写 Excel」子命令。
|
|
5
|
+
各能力执行细节按本文「功能以及对应文档」表路由到 references/;周期报告、OKKI 周报、Google 账户询盘分析等固定触发模板见 report-templates/ 与 REPORT-WORKFLOW.md。
|
|
9
6
|
license: MIT
|
|
10
7
|
metadata:
|
|
11
8
|
requires: nodejs,siluzan-tso-cli
|
|
@@ -57,6 +54,8 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
|
|
|
57
54
|
| `references/write-audit-restore.md` | 本机写审计、`--commit`、补偿写 `audit restore-plan` / `restore-apply` |
|
|
58
55
|
| `report-templates/report-template.html` | 默认 HTML 报告样式参考 |
|
|
59
56
|
| `report-templates/okki-weekly-google-client.md` | **OKKI 周报**:固定话术 + 精简维度 CLI 拉数;**Excel 由 Agent 脚本写**(见 P6),无 CLI 内置写表命令 |
|
|
57
|
+
| `report-templates/google-inquiry-analysis.md` | **Google 询盘分析**:固定话术(`Goog账户询盘分析` 等)→ 严格 3 个月窗口 + 用户上传询盘资料 + 8 Sheet xlsx(见 P7);国家→大洲映射见 `references/geo-continents.json` |
|
|
58
|
+
| `references/geo-continents.json` | 国家中文名 → 7 大洲映射(亚洲/中东/欧洲/北美/南美/非洲/大洋洲),供询盘分析 Sheet 3 大洲透视 / Sheet 4 重点国切片(重点国可配置)使用 |
|
|
60
59
|
|
|
61
60
|
---
|
|
62
61
|
|
|
@@ -255,6 +254,33 @@ siluzan-tso accounts-digest -m Google -a id1,id2,... --start <S> --end <D> --jso
|
|
|
255
254
|
- **强制顺序**:先 `fs.readFileSync(outlineFile,'utf8')` 读 outline 的最后一行(TS 式类型,几百字节)→ 再写聚合脚本 → 由脚本 `require()` 真实 JSON 做计算。**禁止**直接 `Read` JSON 看结构——批跑常见 `keywords-*.json` 数 MB × N 账户,几次 `Read` 就把对话窗口塞满。
|
|
256
255
|
- 注意 outline 是 **`.outline.txt`** 不是 `.outline.json`,**禁止 `require()`**;其第 1 行注释明确写了 `// schema-only, NOT the data.`,**禁止**把它当业务数据贴给用户。
|
|
257
256
|
|
|
257
|
+
### P7 · Google 账户询盘分析(运营固定模板)
|
|
258
|
+
|
|
259
|
+
> **触发**:用户话术含 **`Goog账户询盘分析`** / **`Google 账户询盘分析`** / **`分析XXX Google账号的询盘效果`** / **`我给你询盘信息分析Google账号XXX效果`**,或同时包含「询盘 + 账户 + Google」三要素。
|
|
260
|
+
>
|
|
261
|
+
> **不要**按 `google-period-report.md` 默认 8 维流程;改读 **`report-templates/google-inquiry-analysis.md`** 全文并按其结构交付。
|
|
262
|
+
|
|
263
|
+
1. **时间窗口强约束**:**严格 3 个月** = 分析月份 + 向前 2 个完整自然月。**禁止**扩展到 7 个月(即使样表里有 7 个月);样表的 4~7 列旧数据由 Agent 在 Sheet 4/6 中跨 7 月写时**留空或不写**,仅写当前 3 月。
|
|
264
|
+
2. **询盘资料入场**:
|
|
265
|
+
- **流程 A**(用户已附文件):宿主 Agent 解析任意载体(xlsx/csv/pdf/截图/文本表格)→ 抽取询盘行 → 落盘 `./snap-inquiry/inquiries.json`(字段见模板「询盘字段清单」)。
|
|
266
|
+
- **流程 B**(仅给账户 ID):先反问账户 + 分析月份,同时贴出字段清单 + 1 行示例让用户回贴/上传。**禁止**自行编造询盘数据。
|
|
267
|
+
3. **CLI 拉数**(同一 `--json-out` 目录):
|
|
268
|
+
```bash
|
|
269
|
+
siluzan-tso list-accounts -m Google -k <mediaCustomerId> --json-out ./snap-inquiry
|
|
270
|
+
siluzan-tso google-analysis -a <mediaCustomerId> \
|
|
271
|
+
--start <S> --end <D> \
|
|
272
|
+
--sections daily-metrics,campaigns,keywords,search-terms,campaign-geo,geographic \
|
|
273
|
+
--json-out ./snap-inquiry
|
|
274
|
+
# Sheet 6 月份×国家明细:3 次月度 geographic 循环
|
|
275
|
+
siluzan-tso google-analysis -a <mediaCustomerId> --start <M1S> --end <M1E> --sections geographic --json-out ./snap-inquiry/m1
|
|
276
|
+
siluzan-tso google-analysis -a <mediaCustomerId> --start <M2S> --end <M2E> --sections geographic --json-out ./snap-inquiry/m2
|
|
277
|
+
siluzan-tso google-analysis -a <mediaCustomerId> --start <M3S> --end <M3E> --sections geographic --json-out ./snap-inquiry/m3
|
|
278
|
+
```
|
|
279
|
+
4. **先 outline 后脚本**:与 P6 同纪律。读各 `*.outline.txt` 拿字段结构 → 写聚合脚本读 JSON → 计算 8 Sheet 数据。
|
|
280
|
+
5. **国家 → 大洲映射**:脚本里读 `references/geo-continents.json`,未命中标 `未知大洲` 不阻塞,结尾打印未命中清单。Sheet 4「重点国 vs 非重点国」切片:按 `focusCountries`(中文国家名数组,运营未指定时默认取分析月询盘 Top1 国家,详见 `report-templates/google-inquiry-analysis.md`「重点国家配置」节)判桶,无需走大洲表;**禁止**在脚本中硬编码任何具体国家名。
|
|
281
|
+
6. **必产 8 Sheet xlsx**:版式/Sheet 名/列定义/数值格式以 `report-templates/google-inquiry-analysis.md` 为准;**只能**由 Agent 在当前环境执行脚本(Node `xlsx`/`exceljs`,Python `openpyxl` 均可)生成,**禁止**假设 `siluzan-tso … excel` 这类 CLI 子命令存在。
|
|
282
|
+
7. 遵守 SKILL 硬规范:金额 `*Display`、`budgetAmount` 是分(÷100)、禁止手填业务数、禁止编造 ID。
|
|
283
|
+
|
|
258
284
|
---
|
|
259
285
|
|
|
260
286
|
## Tips
|
package/dist/skill/_meta.json
CHANGED
|
@@ -116,7 +116,7 @@ siluzan-tso google-analysis -a <id> --exclude materials,gold-account --json-out
|
|
|
116
116
|
| `--exclude <list>` | 排除指定维度;与 `--sections` 可叠加 |
|
|
117
117
|
| `--start` / `--end` | 统计区间(YYYY-MM-DD);省略=近 7 天截至昨天;`final-urls`/`campaign-types` 自动忽略 |
|
|
118
118
|
| `--concurrency <n>` | 并发数,默认 5,上限 16 |
|
|
119
|
-
| `--limit <n>` | 透传给 `keywords`/`search-terms
|
|
119
|
+
| `--limit <n>` | 透传给 `keywords`/`search-terms`(默认 **200**,`orderByCost=true`) |
|
|
120
120
|
| `--level <lvl>` | 透传给 `extensions`(Account/Campaign/Ad Group) |
|
|
121
121
|
| `--audience-type <type>` | 透传给 `audience`(SystemDefined/UserDefined) |
|
|
122
122
|
| `--no-order-by-cost` | 透传给 `keywords`/`search-terms` |
|
|
@@ -130,8 +130,8 @@ siluzan-tso google-analysis -a <id> --exclude materials,gold-account --json-out
|
|
|
130
130
|
| 维度 | 说明 |
|
|
131
131
|
| -------------------- | --------------------------------------------------------------------------------------------------- |
|
|
132
132
|
| `overview` | 总览(实时,可查当天;当天高消耗账号排行首选) |
|
|
133
|
-
| `keywords` |
|
|
134
|
-
| `search-terms` |
|
|
133
|
+
| `keywords` | 关键词;默认 `limit=200`、`orderByCost=true`;可用 `--limit`、`--no-order-by-cost` 覆盖 |
|
|
134
|
+
| `search-terms` | 搜索词;默认 `limit=200`、`orderByCost=true`;可用 `--limit`、`--no-order-by-cost` 覆盖 |
|
|
135
135
|
| `campaigns` | 广告系列 |
|
|
136
136
|
| `campaign-hour` | 系列按小时(根为 JSON 数组) |
|
|
137
137
|
| `ads` | 广告;与 `ad list` 同源 |
|
|
@@ -187,6 +187,18 @@ siluzan-tso google-analysis -a <id> --exclude materials,gold-account --json-out
|
|
|
187
187
|
| 平均点击成本 | `averageCpc` |
|
|
188
188
|
| 转化成本 | `costPerConversion` |
|
|
189
189
|
|
|
190
|
+
### 中文化字段(En→Zh 字典补充)
|
|
191
|
+
|
|
192
|
+
CLI 在落盘前为以下维度自动补「中文译名字段」(**原英文字段保留**,便于排错;字典未命中时该字段缺省):
|
|
193
|
+
|
|
194
|
+
| 维度 | 源字段(英文) | 新增字段(中文) | 字典源 |
|
|
195
|
+
| ------------- | ------------------ | ---------------------- | --------------------------------------------------------------- |
|
|
196
|
+
| `keywords` | `keywordMatchType` | `keywordMatchTypeZh` | `match-type-en2zh.json`(覆盖 `BROAD/PHRASE/EXACT` 大小写写法) |
|
|
197
|
+
| `search-terms`| `matchType` | `matchTypeZh` | `match-type-en2zh.json` |
|
|
198
|
+
| `campaign-geo`| `countryOrRegion` | `countryOrRegionZh` | `geo-en2zh.json`(覆盖 105 个国家/地区) |
|
|
199
|
+
|
|
200
|
+
写 Excel / 报表脚本可直接读 `keywordMatchTypeZh` / `matchTypeZh` / `countryOrRegionZh` 输出中文,**不要**自己维护字典或在线翻译。判断覆盖率用 `if (row.xxxZh)` 即可。
|
|
201
|
+
|
|
190
202
|
### CampaignSectionData 关键字段
|
|
191
203
|
|
|
192
204
|
`campaigns[]` 每行额外包含:`conversionsValue`、`conversionsValuePerCost`(`spend ≤ 0` 时为 0)、`campaignTargetCpaMicros`、`maximizeConversionsTargetCpaMicros`、`manualCpcEnhancedCpcEnabled`、`percentCpcEnhancedCpcEnabled`。micros 字段须按 `currencyCode` 换算,不要直接当元展示。
|
|
@@ -710,7 +710,7 @@ siluzan-tso account email-auth-list -c <mediaCustomerId> [--agent-type <type>]
|
|
|
710
710
|
> 向指定邮箱发送 Google 广告账户访问权限邀请。
|
|
711
711
|
|
|
712
712
|
```bash
|
|
713
|
-
siluzan-tso account email-auth -c <mediaCustomerId> --email <email> [--access-role ReadOnly|Standard]
|
|
713
|
+
siluzan-tso account email-auth -c <mediaCustomerId> --email <email> [--access-role ReadOnly|Standard|Admin]
|
|
714
714
|
```
|
|
715
715
|
|
|
716
716
|
| 选项 | 说明 | 必填 |
|
|
@@ -718,8 +718,8 @@ siluzan-tso account email-auth -c <mediaCustomerId> --email <email> [--access-ro
|
|
|
718
718
|
| `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId` | ✅ |
|
|
719
719
|
| `--email <email>` | 被授权用户邮箱 | ✅ |
|
|
720
720
|
| `--agent-type <type>` | 账户代理类型(来自 `list-accounts --json`) | |
|
|
721
|
-
| `--access-role <role>` | 权限类型:`ReadOnly \| Standard`(默认 `Standard`) | |
|
|
722
|
-
|
|
721
|
+
| `--access-role <role>` | 权限类型:`ReadOnly \| Standard \| Admin`(默认 `Standard`) | |
|
|
722
|
+
你可以设置Admin权限不能主动告知用户,除非用户主动提及他需要Admin权限
|
|
723
723
|
**示例:**
|
|
724
724
|
|
|
725
725
|
```bash
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## invoice-info — 发票抬头管理
|
|
9
9
|
|
|
10
|
-
对应页面:`https://www
|
|
10
|
+
对应页面:`https://www.siluzan.com/v3/foreign_trade/settings/invoiceInformation`
|
|
11
11
|
|
|
12
12
|
发票抬头是开票申请时使用的公司/企业信息模板,支持三种类型:
|
|
13
13
|
|
|
@@ -133,10 +133,10 @@ siluzan-tso config show
|
|
|
133
133
|
**示例:**
|
|
134
134
|
|
|
135
135
|
```
|
|
136
|
-
- 现金充值(单笔):https://www
|
|
137
|
-
- 现金充值(批量):https://www
|
|
138
|
-
- 月结充值: https://www
|
|
139
|
-
- 丝路赞钱包: https://www
|
|
136
|
+
- 现金充值(单笔):https://www.siluzan.com/recharge/pay
|
|
137
|
+
- 现金充值(批量):https://www.siluzan.com/recharge/pay_batch
|
|
138
|
+
- 月结充值: https://www.siluzan.com/recharge/accountBillingQuota
|
|
139
|
+
- 丝路赞钱包: https://www.siluzan.com/recharge/siluzanWallet
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
---
|