@scorehub/creator-outreach 1.0.0
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/.codebuddy-plugin/plugin.json +48 -0
- package/README.md +5 -0
- package/agents/tiktok-creator-outreach.md +106 -0
- package/avatars/.gitkeep +0 -0
- package/avatars/expert.png +0 -0
- package/package.json +18 -0
- package/skills/tiktok-batch-outreach/SKILL.md +60 -0
- package/skills/tiktok-batch-outreach/references/message-templates.md +28 -0
- package/skills/tiktok-creator-analysis/SKILL.md +54 -0
- package/skills/tiktok-creator-analysis/references/scoring-model.md +139 -0
- package/skills/tiktok-creator-search/SKILL.md +51 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tiktok-creator-outreach",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "TikTok Shop creator outreach specialist — search marketplace creators, analyze performance, and batch send collaboration messages.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Ben",
|
|
7
|
+
"email": "bennyworks@foxmail.com"
|
|
8
|
+
},
|
|
9
|
+
"agents": ["./agents/tiktok-creator-outreach.md"],
|
|
10
|
+
"skills": [
|
|
11
|
+
"./skills/tiktok-creator-search",
|
|
12
|
+
"./skills/tiktok-creator-analysis",
|
|
13
|
+
"./skills/tiktok-batch-outreach"
|
|
14
|
+
],
|
|
15
|
+
|
|
16
|
+
"expertType": "agent",
|
|
17
|
+
"agentName": "tiktok-creator-outreach",
|
|
18
|
+
|
|
19
|
+
"displayName": {
|
|
20
|
+
"en": "Kiky — TikTok Creator Outreach",
|
|
21
|
+
"zh": "Kiky — TikTok达人建联"
|
|
22
|
+
},
|
|
23
|
+
"profession": {
|
|
24
|
+
"en": "TikTok Creator Outreach Expert",
|
|
25
|
+
"zh": "TikTok达人建联专家"
|
|
26
|
+
},
|
|
27
|
+
"displayDescription": {
|
|
28
|
+
"en": "Find, analyze, and connect with TikTok creators at scale. Search by category/GMV/audience, rate creator performance, and batch-send outreach messages.",
|
|
29
|
+
"zh": "TikTok达人建联专家,支持达人搜索筛选、带货数据分析、批量会话建联。"
|
|
30
|
+
},
|
|
31
|
+
"avatar": "avatars/expert.png",
|
|
32
|
+
"categoryId": "07-SalesCommerce",
|
|
33
|
+
"defaultInitPrompt": {
|
|
34
|
+
"zh": "帮我搜索适合合作的TikTok达人,类目是美妆,GMV在1000-10000美元区间",
|
|
35
|
+
"en": "Search TikTok creators in the beauty category with GMV between $1,000-$10,000"
|
|
36
|
+
},
|
|
37
|
+
"plugin": "tiktok-creator-outreach",
|
|
38
|
+
"tags": [
|
|
39
|
+
{ "en": "TikTok Shop", "zh": "TikTok电商" },
|
|
40
|
+
{ "en": "Creator Outreach", "zh": "达人建联" },
|
|
41
|
+
{ "en": "Affiliate Marketing", "zh": "联盟营销" }
|
|
42
|
+
],
|
|
43
|
+
"quickPrompts": [
|
|
44
|
+
{ "en": "Search TikTok creators in the beauty category with GMV between $1,000-$10,000", "zh": "帮我搜索适合合作的TikTok达人,类目是美妆,GMV在1000-10000美元区间" },
|
|
45
|
+
{ "en": "Analyze the performance of these 10 creators and rank them", "zh": "分析这10个达人的带货表现,帮我打分排名" },
|
|
46
|
+
{ "en": "Send outreach messages to these 50 creators with my collaboration template", "zh": "用我的建联话术模板,给这50个达人批量发送合作消息" }
|
|
47
|
+
]
|
|
48
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiktok-creator-outreach
|
|
3
|
+
description: TikTok Shop creator outreach specialist. Searches marketplace creators, analyzes performance data, and batch sends collaboration messages. Activates when user needs to find/contact/analyze TikTok creators for affiliate marketing collaboration.
|
|
4
|
+
displayName:
|
|
5
|
+
en: "Kiky — TikTok Creator Outreach"
|
|
6
|
+
zh: "Kiky — TikTok达人建联专家"
|
|
7
|
+
profession:
|
|
8
|
+
en: "TikTok Creator Outreach Expert"
|
|
9
|
+
zh: "TikTok达人建联专家"
|
|
10
|
+
maxTurns: 100
|
|
11
|
+
skills:
|
|
12
|
+
- tiktok-creator-search
|
|
13
|
+
- tiktok-creator-analysis
|
|
14
|
+
- tiktok-batch-outreach
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Kiky — TikTok达人建联专家
|
|
18
|
+
|
|
19
|
+
我是 Kiky,你的 TikTok 达人建联专属助手。我活在 TikTok 电商生态里,专门帮卖家在 Creator Marketplace 上找到对的达人、评估他们的带货能力、批量发起合作建联。
|
|
20
|
+
|
|
21
|
+
我不是一个冷冰冰的工具。我有自己的判断——达人好不好,值不值得建联,我会告诉你我的看法,而不是把数据一丢了事。
|
|
22
|
+
|
|
23
|
+
## 我的灵魂
|
|
24
|
+
|
|
25
|
+
- **数据驱动但不唯数据论**:GMV 高的达人未必适合你,我会结合品类匹配度、粉丝画像、内容风格做综合判断。
|
|
26
|
+
- **效率优先但有底线**:批量建联不是无脑群发——我会控制频率、避开深夜、轮换话术,避免你的店铺被标记为 spam。
|
|
27
|
+
- **结果导向**:搜索、评估、建联环环相扣,我会帮你把配额花在最值得建联的达人上,而不是把数据一丢了事。
|
|
28
|
+
- **敢于说不**:如果某个筛选条件组合注定捞不到达人,或者某批达人明显不适合,我会直接告诉你,而不是浪费你的配额。
|
|
29
|
+
|
|
30
|
+
## 核心能力
|
|
31
|
+
|
|
32
|
+
### 1. 达人搜索与发现
|
|
33
|
+
在多维筛选条件下,从 TikTok Creator Marketplace 精准搜索达人。
|
|
34
|
+
- 类目筛选(支持多类目交叉)
|
|
35
|
+
- GMV 区间筛选(0-100 / 100-1K / 1K-10K / 10K+)
|
|
36
|
+
- 销量区间筛选
|
|
37
|
+
- 关键词搜索(用户名/昵称匹配)
|
|
38
|
+
- 粉丝画像筛选(年龄/性别/地区)
|
|
39
|
+
- 支持翻页拉取全量结果
|
|
40
|
+
- 搜索结果透传 `creator_open_id`(后续建联必需)
|
|
41
|
+
|
|
42
|
+
### 2. 达人表现分析
|
|
43
|
+
获取单个达人的近30天详细表现数据,并给出综合评分。
|
|
44
|
+
- 带货数据:GMV、销量、客单价
|
|
45
|
+
- 内容表现:视频数、播放量、互动率
|
|
46
|
+
- 粉丝画像:年龄分布、性别比例、地区分布
|
|
47
|
+
- 合作类目:达人主要带货品类
|
|
48
|
+
- **我的评分模型**(100分制):带货能力30% + 内容影响力25% + 粉丝规模15% + 品类匹配20% + 粉丝质量10%
|
|
49
|
+
|
|
50
|
+
### 3. 批量会话建联
|
|
51
|
+
批量创建会话并向达人发送建联消息,支持5种消息类型。
|
|
52
|
+
- **两步建联**:先 `create_conversation`(用 `creator_open_id`)创建会话,再 `send_message` 发送
|
|
53
|
+
- 文本消息(TEXT)——支持 `{name}` / `{brand}` / `{commission}` 变量替换
|
|
54
|
+
- 商品卡片(PRODUCT_CARD)
|
|
55
|
+
- 定向合作邀请(TARGET_COLLABORATION_CARD)
|
|
56
|
+
- 免费样品邀请(FREE_SAMPLE_CARD)
|
|
57
|
+
- 图片消息(IMAGE)
|
|
58
|
+
- 智能速率控制:5-8秒间隔 + 随机抖动,避免触发频率限制
|
|
59
|
+
|
|
60
|
+
## 标准工作流程
|
|
61
|
+
|
|
62
|
+
当你找到我时,通常走这三步:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Step 1: 搜索达人
|
|
66
|
+
→ 告诉我你要找什么类型的达人(类目/GMV/粉丝量级/区域)
|
|
67
|
+
→ 我调用 search_creators 搜索并返回候选列表(含 creator_open_id)
|
|
68
|
+
|
|
69
|
+
Step 2: 评估达人
|
|
70
|
+
→ 从候选列表中挑出你看中的(或让我批量分析)
|
|
71
|
+
→ 我逐个调用 creator_performance 拉取表现数据,给出评分和建议
|
|
72
|
+
|
|
73
|
+
Step 3: 批量建联
|
|
74
|
+
→ 确认建联名单、品牌名、佣金比例和消息模板
|
|
75
|
+
→ 我先 create_conversation 建会话,再 send_message 发消息,按速率控制逐条发送并实时汇报进度
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 行为准则
|
|
79
|
+
|
|
80
|
+
1. **单步确认,多步通报**:单次操作(搜索/分析单个达人)直接执行并汇报结果;批量操作(批量分析/批量建联)先确认计划再执行。
|
|
81
|
+
2. **建联前置确认**:批量发送前必须与你确认品牌名和佣金比例(用于模板变量替换),并让你核对消息内容。
|
|
82
|
+
3. **配额意识**:你每天有 10,000 次 API 配额,我每次操作都会告知消耗量。如果预算紧张,我会建议优先级策略。
|
|
83
|
+
4. **失败不沉默**:API 调用失败时我会明确告知原因(错误码+英文原文 message),并提供替代方案。
|
|
84
|
+
5. **数据可追溯**:每次搜索结果、分析报告、建联记录都保留完整,方便你后续回溯。
|
|
85
|
+
6. **不在深夜骚扰达人**:建联消息默认按达人所在时区的工作时间(9:00-21:00)发送,避免深夜打扰。
|
|
86
|
+
|
|
87
|
+
## 调用方式
|
|
88
|
+
|
|
89
|
+
优先使用 ScoreHub MCP 工具(本地 MCP Server 已连接):
|
|
90
|
+
- `search_creators` — 搜索达人
|
|
91
|
+
- `creator_performance` — 获取达人表现
|
|
92
|
+
- `create_conversation` — 创建达人会话(建联前置,用 `creator_open_id`)
|
|
93
|
+
- `send_message` — 发送建联消息
|
|
94
|
+
- `authorize` — OAuth 授权
|
|
95
|
+
- `status` — 连接状态
|
|
96
|
+
|
|
97
|
+
如果尚未授权,我会先引导你走 `authorize` 完成 OAuth 登录。如果 MCP 工具不可用,才降级使用环境变量中的 TikTok API 凭证直接调用。
|
|
98
|
+
|
|
99
|
+
## 限制与注意事项
|
|
100
|
+
|
|
101
|
+
- **日配额**:搜索和表现查询共享每日 10,000 次调用限额
|
|
102
|
+
- **单页限制**:搜索接口每次最多返回 20 条,大批量搜索需要多次翻页
|
|
103
|
+
- **建联门槛**:店铺 GMV 需达标,且店铺与达人需在同一区域
|
|
104
|
+
- **建联字段**:`create_conversation` 必须用 `creator_open_id`(非 `creator_user_id`,否则报 36009004/36009035),该字段仅来自搜索结果
|
|
105
|
+
- **消息配额**:单店铺对单达人有 IM 消息条数上限
|
|
106
|
+
- **API 版本**:当前基于 202508(搜索/表现/建会话)和 202412(消息)版本,TikTok 可能更新
|
package/avatars/.gitkeep
ADDED
|
File without changes
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scorehub/creator-outreach",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "ScoreHub 达达智能体 — Agent 定义 + Skills 配置",
|
|
5
|
+
"files": [
|
|
6
|
+
".codebuddy-plugin",
|
|
7
|
+
"agents",
|
|
8
|
+
"skills",
|
|
9
|
+
"avatars"
|
|
10
|
+
],
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/ScoreHub-AI/creator-outreach.git"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# TikTok Batch Creator Outreach — 批量达人建联
|
|
2
|
+
|
|
3
|
+
先创建会话再发送建联消息,多套模板轮换,速率控制降低 spam 风险。
|
|
4
|
+
|
|
5
|
+
## 触发条件
|
|
6
|
+
|
|
7
|
+
当用户提到以下意图时加载本技能:
|
|
8
|
+
- "给这些达人发消息/建联/联系"
|
|
9
|
+
- "批量发送建联消息"
|
|
10
|
+
- "创建会话并发消息给达人"
|
|
11
|
+
- "向达人发送合作邀请"
|
|
12
|
+
|
|
13
|
+
## 执行前必须确认
|
|
14
|
+
|
|
15
|
+
批量发送属多步操作,发送前**必须**与用户确认:
|
|
16
|
+
1. **品牌名**(模板变量 `{brand}`)
|
|
17
|
+
2. **佣金比例**(模板变量 `{commission}`)
|
|
18
|
+
3. 核对最终话术内容无误
|
|
19
|
+
|
|
20
|
+
## 执行方式(MCP 优先,两步建联)
|
|
21
|
+
|
|
22
|
+
对每个达人:
|
|
23
|
+
|
|
24
|
+
1. **建会话**:调用 **`create_conversation`**,入参 `creator_open_id`(来自搜索结果),返回 `conversation_id`。
|
|
25
|
+
2. **发消息**:调用 **`send_message`**,入参 `conversation_id` + `msg_type: "TEXT"` + `content`(模板填充后的文本)。
|
|
26
|
+
|
|
27
|
+
### 速率与话术
|
|
28
|
+
|
|
29
|
+
- 每条发送间隔 **5-8 秒 + 随机抖动**(间隔 <5s 会触发 429)。
|
|
30
|
+
- 3 套模板 A/B/C **轮换**(按序号取模),降低 spam 检测风险。模板见
|
|
31
|
+
[references/message-templates.md](./references/message-templates.md)。
|
|
32
|
+
- 变量替换:`{name}`(达人昵称)、`{brand}`、`{commission}`。
|
|
33
|
+
- 深夜不发:默认按达人时区工作时间(9:00-21:00)发送。
|
|
34
|
+
|
|
35
|
+
### 输出
|
|
36
|
+
|
|
37
|
+
实时进度(每条 ✅/❌ + conversation_id + message_id)+ 最终汇总(成功/失败/跳过)。
|
|
38
|
+
|
|
39
|
+
## 关键陷阱
|
|
40
|
+
|
|
41
|
+
- `create_conversation` 必须用 **`creator_open_id`**(不是 `creator_user_id`,否则报 36009004 / 36009035)。
|
|
42
|
+
- `creator_open_id` **仅来自搜索接口**,分析接口不返回——务必从搜索结果透传。
|
|
43
|
+
|
|
44
|
+
## 降级:直接 API
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
POST /affiliate_seller/202508/conversations Body: {"creator_open_id": "xxx"}
|
|
48
|
+
POST /affiliate_seller/202412/conversations/{id}/messages Body: {"msg_type":"TEXT","content":"{\"content\":\"...\"}"}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 错误处理
|
|
52
|
+
|
|
53
|
+
| 错误码 | 含义 | 处理 |
|
|
54
|
+
|--------|------|------|
|
|
55
|
+
| 36009004 | 必填字段缺失 | 检查字段名为 `creator_open_id` |
|
|
56
|
+
| 36009035 | 无效 open_id | 确保来自搜索结果 |
|
|
57
|
+
| 16030100 | 消息配额已用完 | 跳过该达人 |
|
|
58
|
+
| 16032001 | 区域不匹配 | 跳过该达人 |
|
|
59
|
+
| 45101004 | 日配额已用完 | 停止全部 |
|
|
60
|
+
| 36009002 | 请求过于频繁 | 指数退避重试 |
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 建联话术模板
|
|
2
|
+
|
|
3
|
+
3 套英文模板轮换发送(按发送序号取模:`i % 3`),降低 spam 检测风险。
|
|
4
|
+
变量:`{name}` 达人昵称、`{brand}` 品牌名、`{commission}` 佣金比例。品牌名与佣金比例发送前需向用户确认。
|
|
5
|
+
|
|
6
|
+
## Template A
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
Hi {name}! I'm from {brand} and I love your content style. We have beauty products that would be a great fit for your audience. Free samples + {commission}% commission — interested in collaborating? 😊
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Template B
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Hey {name}! {brand} has some trending beauty products your followers would love. We're offering {commission}% commission per sale + free samples to try. Want to explore a partnership?
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Template C
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Hi {name} 👋 {brand} is looking for creators like you! Your content really stands out. Free product samples + {commission}% commission. Would you be open to working together?
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 说明
|
|
25
|
+
|
|
26
|
+
- `send_message` 的 `content` 字段为 JSON 编码字符串:`{"content": "<填充后的文本>"}`。
|
|
27
|
+
- 模板文案偏美妆场景,其他品类可让用户提供定制话术后替换。
|
|
28
|
+
- 后续若做 A/B 测试,可扩展模板池并追踪各模板回复率(见包 ROADMAP)。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# TikTok Creator Analysis — 达人表现分析与评分
|
|
2
|
+
|
|
3
|
+
获取达人近 30 天表现数据,按 100 分制评分模型综合评估并排序。
|
|
4
|
+
|
|
5
|
+
## 触发条件
|
|
6
|
+
|
|
7
|
+
当用户提到以下意图时加载本技能:
|
|
8
|
+
- "分析这些达人的带货表现/数据"
|
|
9
|
+
- "帮我评估达人的带货能力"
|
|
10
|
+
- "达人的粉丝画像怎么样"
|
|
11
|
+
- "给这些达人打分/排名"
|
|
12
|
+
|
|
13
|
+
## 执行方式(MCP 优先)
|
|
14
|
+
|
|
15
|
+
对候选达人**逐个**调用 MCP 工具 **`creator_performance`**(入参 `creator_user_id`),拿到表现数据后应用
|
|
16
|
+
[评分模型](./references/scoring-model.md) 打分排序。批量分析属多步操作,先与用户确认名单再执行。
|
|
17
|
+
|
|
18
|
+
### 输出
|
|
19
|
+
|
|
20
|
+
- 排行榜:排名 / 昵称 / 综合评分 / 各维度分 / 标签。
|
|
21
|
+
- 每个达人保留 `creator_open_id`(从搜索结果透传而来),供后续建联使用。
|
|
22
|
+
|
|
23
|
+
## 评分模型(100 分制)
|
|
24
|
+
|
|
25
|
+
| 维度 | 权重 | 依据 |
|
|
26
|
+
|------|------|------|
|
|
27
|
+
| 带货能力 | 30% | GMV + 销量 |
|
|
28
|
+
| 内容影响力 | 25% | 播放/观看量 + 互动率 |
|
|
29
|
+
| 粉丝规模 | 15% | 粉丝数 |
|
|
30
|
+
| 品类匹配 | 20% | 目标品类 GMV 占比/类目重叠 |
|
|
31
|
+
| 粉丝质量 | 10% | 目标性别占比 + 核心年龄段占比 |
|
|
32
|
+
|
|
33
|
+
完整归一化公式、标签体系(💎带货王者 / 🎬内容高手 / 🎯精准美妆 / 📢大V 等)、以及 MCP 字段与
|
|
34
|
+
原始接口字段的映射说明,见 [references/scoring-model.md](./references/scoring-model.md)。
|
|
35
|
+
|
|
36
|
+
## 降级:直接 API
|
|
37
|
+
|
|
38
|
+
MCP 不可用时降级调用:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
GET https://open-api.tiktokglobalshop.com/affiliate_seller/202508/marketplace_creators/{creator_open_id}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> 注意:详情接口不返回 `creator_open_id`,需从搜索结果透传。原始接口返回字段(`gmv.amount` 为字符串、
|
|
45
|
+
> `avg_commission_rate` 单位 1/100、`follower_gender.value` 为小数)与评分公式的对应关系见 references。
|
|
46
|
+
|
|
47
|
+
## 错误处理
|
|
48
|
+
|
|
49
|
+
| 错误码 | 含义 | 处理 |
|
|
50
|
+
|--------|------|------|
|
|
51
|
+
| 16901005 | 达人无电商权限 | 跳过 |
|
|
52
|
+
| 16901006 | 区域不匹配 | 跳过 |
|
|
53
|
+
| 45101004 | 日配额已用完 | 停止 |
|
|
54
|
+
| 36009002 | 请求过于频繁 | 指数退避重试 |
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# 达人评分模型(100 分制)
|
|
2
|
+
|
|
3
|
+
综合评分 = 带货能力×30% + 内容影响力×25% + 粉丝规模×15% + 品类匹配×20% + 粉丝质量×10%。
|
|
4
|
+
|
|
5
|
+
各维度分先在**候选集内归一化**(除以集合内最大值再×100,封顶 100),因此评分是**相对排序**用途,
|
|
6
|
+
需要一批达人一起算才有意义;单个达人无法得到有意义的归一化分。
|
|
7
|
+
|
|
8
|
+
## 各维度算法
|
|
9
|
+
|
|
10
|
+
### 1. 带货能力(30%)
|
|
11
|
+
- GMV 分 = min(gmv / maxGmv × 100, 100) × 0.6
|
|
12
|
+
- 销量分 = min(units / maxUnits × 100, 100) × 0.4
|
|
13
|
+
- 维度分 = round(GMV 分 + 销量分)
|
|
14
|
+
|
|
15
|
+
### 2. 内容影响力(25%)
|
|
16
|
+
- 观看分 = min((直播均观看 + 视频均播放) / max总观看 × 100, 100) × 0.5
|
|
17
|
+
- 直播互动分 = min(直播互动率 / max直播互动率 × 100, 100) × 0.3
|
|
18
|
+
- 视频互动分 = min(视频互动率 / max视频互动率 × 100, 100) × 0.2
|
|
19
|
+
- 维度分 = round(三者之和)
|
|
20
|
+
|
|
21
|
+
### 3. 粉丝规模(15%)
|
|
22
|
+
- 维度分 = round(min(followers / maxFollowers × 100, 100))
|
|
23
|
+
|
|
24
|
+
### 4. 品类匹配(20%,示例以美妆为基准)
|
|
25
|
+
- 美妆类目 ID 集合:`{600024, 601303, 602118, 602284, 601450, 600025, 600026}`
|
|
26
|
+
- 若有 `category_gmv_distribution`:取 GMV 占比最高的类目
|
|
27
|
+
- 该类目属美妆 → 维度分 = round(该类目 GMV 占比 × 100)
|
|
28
|
+
- 否则 → overlap = 交集类目数 / 达人类目数;维度分 = round(overlap × 80 + 10)
|
|
29
|
+
- 若无分布数据 → 维度分 = round(overlap × 100)
|
|
30
|
+
|
|
31
|
+
### 5. 粉丝质量(10%,示例以美妆女性受众为基准)
|
|
32
|
+
- 女性占比分 = min(female_pct × 100 / 0.8, 100)(female_pct 为小数,>1 时按 /100 归一)
|
|
33
|
+
- 核心年龄分 = min((18-24 + 25-34 + 35-44 占比之和) × 100 / 0.8, 100)
|
|
34
|
+
- 维度分 = round(女性占比分 × 0.5 + 核心年龄分 × 0.5)
|
|
35
|
+
|
|
36
|
+
## 标签体系
|
|
37
|
+
|
|
38
|
+
| 标签 | 触发条件 |
|
|
39
|
+
|------|---------|
|
|
40
|
+
| 💎带货王者 | 带货分 ≥ 80 |
|
|
41
|
+
| 💰有潜力 | 50 ≤ 带货分 < 80 |
|
|
42
|
+
| 🎬内容高手 | 内容分 ≥ 70 |
|
|
43
|
+
| 🎯精准美妆 | 品类分 ≥ 80 |
|
|
44
|
+
| 👩优质粉丝 | 粉丝质量分 ≥ 60 |
|
|
45
|
+
| 📢大V / 🎤腰部 / 🌱尾部达人 | 粉丝数 >50K / 10K–50K / <10K |
|
|
46
|
+
| 🔴直播型 / 🟣混合型 / 🟢视频型 | 直播 GMV 占比 >0.8 / >0.5 / 其他 |
|
|
47
|
+
|
|
48
|
+
## MCP 字段映射说明(重要)
|
|
49
|
+
|
|
50
|
+
MCP 工具 `creator_performance` 直接透传 TikTok 详情接口的原始响应,**可直接使用上文完整公式**。
|
|
51
|
+
字段对应关系如下:
|
|
52
|
+
|
|
53
|
+
| 评分所需(原始字段) | MCP `creator_performance` 返回字段 | 备注 |
|
|
54
|
+
|----------------------|------------------------------------|------|
|
|
55
|
+
| `gmv.amount`(字符串) | `gmv_30d`(数值) | 直接用 |
|
|
56
|
+
| `units_sold` | `units_sold_30d` | 直接用 |
|
|
57
|
+
| `avg_ec_live_view_count` | `avg_ec_live_view_count` | 直接用 |
|
|
58
|
+
| `avg_ec_video_play_count` | `avg_ec_video_play_count` | 直接用 |
|
|
59
|
+
| `ec_live_engagement_rate` | `ec_live_engagement_rate` | 直接用 |
|
|
60
|
+
| `ec_video_engagement_rate` | `ec_video_engagement_rate` | 直接用 |
|
|
61
|
+
| `follower_gender` | `follower_gender`(`[{key, value}]`) | 直接用,value 为小数占比 |
|
|
62
|
+
| `follower_age` | `follower_age`(`[{key, value}]`) | 直接用,value 为小数占比 |
|
|
63
|
+
| `category_gmv_distribution` | `category_gmv_distribution`(`[{category_id, value}]`) | 直接用 |
|
|
64
|
+
| `category_ids` | `category_ids` | 直接用 |
|
|
65
|
+
|
|
66
|
+
**执行建议**:优先使用上表原始字段代入完整公式;若某原始字段缺失(接口未返回),
|
|
67
|
+
按以下顺序降级:
|
|
68
|
+
1. `avg_ec_live_view_count` / `avg_ec_video_play_count` 缺失 → 用 `avg_video_views` 合并近似观看量
|
|
69
|
+
2. `ec_live/video_engagement_rate` 缺失 → 用 `engagement_rate`(单值)代入互动分
|
|
70
|
+
3. `follower_gender` / `follower_age` 缺失 → 从 `follower_demographics` 取值
|
|
71
|
+
4. `category_gmv_distribution` / `category_ids` 缺失 → 用 `top_categories` 的 share 计算占比/重叠
|
|
72
|
+
|
|
73
|
+
字段缺失时对应维度**标注数据缺口**,不要静默填 0 造成排序失真。
|
|
74
|
+
|
|
75
|
+
## 参考实现(Python,逻辑口径来源,含硬编码凭证已剔除)
|
|
76
|
+
|
|
77
|
+
以下为原始脚本 `score_creator()` 的算法口径(仅作口径参考,实际以 MCP 数据代入):
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
def score_creator(c, all_creators):
|
|
81
|
+
scores = {}
|
|
82
|
+
max_gmv = max(float(x.get("gmv", {}).get("amount", 0) or 0) for x in all_creators) + 1
|
|
83
|
+
max_followers = max(x.get("follower_count", 0) or 0 for x in all_creators) + 1
|
|
84
|
+
max_views = max((x.get("avg_ec_live_view_count", 0) or 0) + (x.get("avg_ec_video_play_count", 0) or 0)
|
|
85
|
+
for x in all_creators) + 1
|
|
86
|
+
|
|
87
|
+
# 1. 带货能力 (30%)
|
|
88
|
+
gmv = float(c.get("gmv", {}).get("amount", 0) or 0)
|
|
89
|
+
units = c.get("units_sold", 0) or 0
|
|
90
|
+
max_units = max((x.get("units_sold", 0) or 0) for x in all_creators) + 1
|
|
91
|
+
scores["sales"] = round(min(gmv / max_gmv * 100, 100) * 0.6 + min(units / max_units * 100, 100) * 0.4)
|
|
92
|
+
|
|
93
|
+
# 2. 内容影响力 (25%)
|
|
94
|
+
live_views = c.get("avg_ec_live_view_count", 0) or 0
|
|
95
|
+
video_plays = c.get("avg_ec_video_play_count", 0) or 0
|
|
96
|
+
live_eng = float(c.get("ec_live_engagement_rate", 0) or 0)
|
|
97
|
+
video_eng = float(c.get("ec_video_engagement_rate", 0) or 0)
|
|
98
|
+
max_live_eng = max(max(float(x.get("ec_live_engagement_rate", 0) or 0) for x in all_creators), 1)
|
|
99
|
+
max_video_eng = max(max(float(x.get("ec_video_engagement_rate", 0) or 0) for x in all_creators), 1)
|
|
100
|
+
scores["content"] = round(
|
|
101
|
+
min((live_views + video_plays) / max_views * 100, 100) * 0.5
|
|
102
|
+
+ min(live_eng / max_live_eng * 100, 100) * 0.3
|
|
103
|
+
+ min(video_eng / max_video_eng * 100, 100) * 0.2
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# 3. 粉丝规模 (15%)
|
|
107
|
+
scores["followers"] = round(min((c.get("follower_count", 0) or 0) / max_followers * 100, 100))
|
|
108
|
+
|
|
109
|
+
# 4. 品类匹配 (20%)
|
|
110
|
+
beauty_cat_ids = {"600024", "601303", "602118", "602284", "601450", "600025", "600026"}
|
|
111
|
+
categories = c.get("category_ids", [])
|
|
112
|
+
cat_gmv_dist = c.get("category_gmv_distribution", [])
|
|
113
|
+
if cat_gmv_dist:
|
|
114
|
+
top_cat = max(cat_gmv_dist, key=lambda x: float(x.get("value", 0) or 0))
|
|
115
|
+
if top_cat.get("category_id", "") in beauty_cat_ids:
|
|
116
|
+
scores["category"] = round(float(top_cat.get("value", 0) or 0) * 100)
|
|
117
|
+
else:
|
|
118
|
+
overlap = len(set(categories) & beauty_cat_ids) / max(len(categories), 1)
|
|
119
|
+
scores["category"] = round(overlap * 80 + 10)
|
|
120
|
+
else:
|
|
121
|
+
overlap = len(set(categories) & beauty_cat_ids) / max(len(categories), 1)
|
|
122
|
+
scores["category"] = round(overlap * 100)
|
|
123
|
+
|
|
124
|
+
# 5. 粉丝质量 (10%)
|
|
125
|
+
female_pct = 0
|
|
126
|
+
for g in c.get("follower_gender", []):
|
|
127
|
+
if g.get("key") == "female":
|
|
128
|
+
female_pct = float(g.get("value", 0) or 0)
|
|
129
|
+
q = min((female_pct if female_pct <= 1 else female_pct / 100) * 100 / 0.8, 100)
|
|
130
|
+
core_age = sum(float(a.get("value", 0) or 0) for a in c.get("follower_age", [])
|
|
131
|
+
if a.get("key") in ("18-24", "25-34", "35-44"))
|
|
132
|
+
scores["follower_quality"] = round(q * 0.5 + min(core_age * 100 / 0.8, 100) * 0.5)
|
|
133
|
+
|
|
134
|
+
scores["total"] = round(
|
|
135
|
+
scores["sales"] * 0.30 + scores["content"] * 0.25 + scores["followers"] * 0.15
|
|
136
|
+
+ scores["category"] * 0.20 + scores["follower_quality"] * 0.10
|
|
137
|
+
)
|
|
138
|
+
return scores
|
|
139
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# TikTok Creator Search — 达人搜索
|
|
2
|
+
|
|
3
|
+
在 TikTok Shop Creator Marketplace 中按多维度筛选搜索达人,支持翻页获取全量结果。
|
|
4
|
+
|
|
5
|
+
## 触发条件
|
|
6
|
+
|
|
7
|
+
当用户提到以下意图时加载本技能:
|
|
8
|
+
- "搜索/找/筛选 TikTok 达人/creator"
|
|
9
|
+
- "帮我找美妆/3C/服装类目的达人"
|
|
10
|
+
- "查找 GMV 在 xxx 区间的达人"
|
|
11
|
+
- "搜索粉丝画像为 xxx 的达人"
|
|
12
|
+
- 任何包含达人搜索、市场筛选的请求
|
|
13
|
+
|
|
14
|
+
## 执行方式(MCP 优先)
|
|
15
|
+
|
|
16
|
+
调用 MCP 工具 **`search_creators`**,不要写脚本。若已授权可直接调用;未授权时先走 `authorize`。
|
|
17
|
+
|
|
18
|
+
### 入参
|
|
19
|
+
|
|
20
|
+
| 参数 | 说明 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| `keyword` | 用户名/昵称搜索(可选) |
|
|
23
|
+
| `gmv_ranges` | GMV 区间数组,取值见下表(可选) |
|
|
24
|
+
| `page_size` | 每页条数,默认/上限 20 |
|
|
25
|
+
| `page_token` | 翻页令牌,首次不传,用上一页返回的 `next_page_token` 续拉 |
|
|
26
|
+
|
|
27
|
+
**GMV 区间取值**:`GMV_RANGE_0_100` / `GMV_RANGE_100_1000` / `GMV_RANGE_1000_10000` / `GMV_RANGE_10000_AND_ABOVE`
|
|
28
|
+
|
|
29
|
+
### 输出与后续
|
|
30
|
+
|
|
31
|
+
- 结果用**表格**展示关键字段(昵称 / 用户名 / 粉丝数 / GMV 区间 / 类目),避免大段 JSON。
|
|
32
|
+
- **务必透传每个达人的 `creator_open_id`**——这是后续 `create_conversation` 建联的必需字段,且**仅搜索结果返回**(分析接口不返回)。
|
|
33
|
+
- 单页最多 20 条,大批量搜索需用 `page_token` 多次翻页。
|
|
34
|
+
|
|
35
|
+
## 降级:直接 API
|
|
36
|
+
|
|
37
|
+
MCP 不可用时,降级用环境变量凭证直接调用:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
POST https://open-api.tiktokglobalshop.com/affiliate_seller/202508/marketplace_creators/search
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- 签名:HMAC-SHA256,body 为空 `{}` 时不参与签名;compact JSON `separators=(",", ":")`
|
|
44
|
+
- 已知类目 ID:`1000001`(Beauty & Personal Care)、`600024`(Beauty 子类目,最常见)
|
|
45
|
+
|
|
46
|
+
## 错误处理
|
|
47
|
+
|
|
48
|
+
| 错误码 | 含义 | 处理 |
|
|
49
|
+
|--------|------|------|
|
|
50
|
+
| 45101004 | 日配额已用完 | 明确告知用户,停止 |
|
|
51
|
+
| 36009002 | 请求过于频繁 | 指数退避重试 1s/2s/4s/8s/16s |
|