@yixiaoermail/cli 3.1.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/README.md +25 -0
- package/bin/yxer.js +74 -0
- package/dist/yxer-darwin-amd64 +0 -0
- package/dist/yxer-darwin-arm64 +0 -0
- package/dist/yxer-linux-amd64 +0 -0
- package/dist/yxer-linux-arm64 +0 -0
- package/dist/yxer-windows-amd64.exe +0 -0
- package/dist/yxer-windows-arm64.exe +0 -0
- package/package.json +23 -0
- package/skills/yixiaoer/QUICKSTART.md +265 -0
- package/skills/yixiaoer/SKILL.md +70 -0
- package/skills/yixiaoer/assets/yixiaoer.png +0 -0
- package/skills/yixiaoer/plugin.json +21 -0
- package/skills/yixiaoer/references/cli/command-reference.md +212 -0
- package/skills/yixiaoer/references/cli/skill-install.md +65 -0
- package/skills/yixiaoer/references/cli-install-uninstall.md +196 -0
- package/skills/yixiaoer/references/domains/accounts-and-env.md +37 -0
- package/skills/yixiaoer/references/domains/draft-and-material.md +29 -0
- package/skills/yixiaoer/references/domains/install-and-sync.md +37 -0
- package/skills/yixiaoer/references/domains/publish.md +75 -0
- package/skills/yixiaoer/references/domains/troubleshooting.md +30 -0
- package/skills/yixiaoer/references/execution-standard.md +144 -0
- package/skills/yixiaoer/references/get-account-overviews.md +56 -0
- package/skills/yixiaoer/references/get-challenges.md +14 -0
- package/skills/yixiaoer/references/get-collections.md +34 -0
- package/skills/yixiaoer/references/get-content-overviews.md +59 -0
- package/skills/yixiaoer/references/get-friends.md +9 -0
- package/skills/yixiaoer/references/get-games.md +39 -0
- package/skills/yixiaoer/references/get-goods.md +42 -0
- package/skills/yixiaoer/references/get-groups.md +35 -0
- package/skills/yixiaoer/references/get-hot-events.md +14 -0
- package/skills/yixiaoer/references/get-locations.md +48 -0
- package/skills/yixiaoer/references/get-miniapps.md +38 -0
- package/skills/yixiaoer/references/get-music-categories.md +41 -0
- package/skills/yixiaoer/references/get-music.md +67 -0
- package/skills/yixiaoer/references/get-publish-activities.md +40 -0
- package/skills/yixiaoer/references/get-publish-categories.md +62 -0
- package/skills/yixiaoer/references/get-sync-apps.md +14 -0
- package/skills/yixiaoer/references/get-topics.md +13 -0
- package/skills/yixiaoer/references/go-live-process.md +168 -0
- package/skills/yixiaoer/references/keyword-reference.md +113 -0
- package/skills/yixiaoer/references/material-resource.md +89 -0
- package/skills/yixiaoer/references/platform-doc-maintenance.md +33 -0
- package/skills/yixiaoer/references/platform.md +61 -0
- package/skills/yixiaoer/references/platforms/article/acfun.md +90 -0
- package/skills/yixiaoer/references/platforms/article/aiqiyi.md +56 -0
- package/skills/yixiaoer/references/platforms/article/baijiahao.md +94 -0
- package/skills/yixiaoer/references/platforms/article/bilibili.md +88 -0
- package/skills/yixiaoer/references/platforms/article/chejiahao.md +81 -0
- package/skills/yixiaoer/references/platforms/article/csdn.md +86 -0
- package/skills/yixiaoer/references/platforms/article/dayuhao.md +78 -0
- package/skills/yixiaoer/references/platforms/article/douban.md +62 -0
- package/skills/yixiaoer/references/platforms/article/douyin.md +106 -0
- package/skills/yixiaoer/references/platforms/article/index.md +157 -0
- package/skills/yixiaoer/references/platforms/article/jianshu.md +58 -0
- package/skills/yixiaoer/references/platforms/article/kuaichuanhao.md +78 -0
- package/skills/yixiaoer/references/platforms/article/qiehao.md +78 -0
- package/skills/yixiaoer/references/platforms/article/souhuhao.md +75 -0
- package/skills/yixiaoer/references/platforms/article/toutiaohao.md +78 -0
- package/skills/yixiaoer/references/platforms/article/wangyihao.md +79 -0
- package/skills/yixiaoer/references/platforms/article/weixingongzhonghao.md +135 -0
- package/skills/yixiaoer/references/platforms/article/xinlangweibo.md +75 -0
- package/skills/yixiaoer/references/platforms/article/xueqiuhao.md +73 -0
- package/skills/yixiaoer/references/platforms/article/yichehao.md +92 -0
- package/skills/yixiaoer/references/platforms/article/yidianhao.md +76 -0
- package/skills/yixiaoer/references/platforms/article/zhihu.md +75 -0
- package/skills/yixiaoer/references/platforms/get-locations.md +5 -0
- package/skills/yixiaoer/references/platforms/imageText/baijiahao.md +91 -0
- package/skills/yixiaoer/references/platforms/imageText/douyin.md +111 -0
- package/skills/yixiaoer/references/platforms/imageText/index.md +116 -0
- package/skills/yixiaoer/references/platforms/imageText/kuaishou.md +106 -0
- package/skills/yixiaoer/references/platforms/imageText/shipinhao.md +125 -0
- package/skills/yixiaoer/references/platforms/imageText/toutiaohao.md +76 -0
- package/skills/yixiaoer/references/platforms/imageText/weixinshipinhao.md +7 -0
- package/skills/yixiaoer/references/platforms/imageText/xiaohongshu.md +88 -0
- package/skills/yixiaoer/references/platforms/imageText/xinlangweibo.md +77 -0
- package/skills/yixiaoer/references/platforms/imageText/zhihu.md +92 -0
- package/skills/yixiaoer/references/platforms/index.md +20 -0
- package/skills/yixiaoer/references/platforms/video/acfun.md +82 -0
- package/skills/yixiaoer/references/platforms/video/aiqiyi.md +89 -0
- package/skills/yixiaoer/references/platforms/video/baijiahao.md +89 -0
- package/skills/yixiaoer/references/platforms/video/bilibili-open.md +87 -0
- package/skills/yixiaoer/references/platforms/video/bilibili.md +80 -0
- package/skills/yixiaoer/references/platforms/video/chejiahao.md +63 -0
- package/skills/yixiaoer/references/platforms/video/dayuhao.md +89 -0
- package/skills/yixiaoer/references/platforms/video/dewu.md +80 -0
- package/skills/yixiaoer/references/platforms/video/douyin.md +143 -0
- package/skills/yixiaoer/references/platforms/video/duoduoshipin.md +64 -0
- package/skills/yixiaoer/references/platforms/video/fengwang.md +81 -0
- package/skills/yixiaoer/references/platforms/video/index.md +165 -0
- package/skills/yixiaoer/references/platforms/video/kuaishou-open.md +63 -0
- package/skills/yixiaoer/references/platforms/video/kuaishou.md +77 -0
- package/skills/yixiaoer/references/platforms/video/meipai.md +79 -0
- package/skills/yixiaoer/references/platforms/video/meiyou.md +59 -0
- package/skills/yixiaoer/references/platforms/video/pipixia.md +58 -0
- package/skills/yixiaoer/references/platforms/video/qiehao.md +91 -0
- package/skills/yixiaoer/references/platforms/video/shipinhao.md +95 -0
- package/skills/yixiaoer/references/platforms/video/souhuhao.md +91 -0
- package/skills/yixiaoer/references/platforms/video/souhushipin.md +64 -0
- package/skills/yixiaoer/references/platforms/video/tengxunshipin.md +63 -0
- package/skills/yixiaoer/references/platforms/video/toutiaohao.md +66 -0
- package/skills/yixiaoer/references/platforms/video/wangyihao.md +93 -0
- package/skills/yixiaoer/references/platforms/video/weishi.md +61 -0
- package/skills/yixiaoer/references/platforms/video/xiaohongshu.md +133 -0
- package/skills/yixiaoer/references/platforms/video/xiaohongshushop.md +92 -0
- package/skills/yixiaoer/references/platforms/video/xinlangweibo.md +79 -0
- package/skills/yixiaoer/references/platforms/video/yichehao.md +61 -0
- package/skills/yixiaoer/references/platforms/video/yidianhao.md +85 -0
- package/skills/yixiaoer/references/platforms/video/zhihu.md +85 -0
- package/skills/yixiaoer/references/proxy-management.md +68 -0
- package/skills/yixiaoer/references/query-accounts.md +85 -0
- package/skills/yixiaoer/references/save-draft.md +75 -0
- package/skills/yixiaoer/references/topic-tags.md +139 -0
- package/skills/yixiaoer/references/troubleshooting-guide.md +105 -0
- package/skills/yixiaoer/references/upload-resource.md +59 -0
- package/skills/yixiaoer/references/usage-workflow.md +209 -0
- package/skills/yixiaoer/references/workflows/account-selection.md +38 -0
- package/skills/yixiaoer/references/workflows/common-rules.md +259 -0
- package/skills/yixiaoer/references/workflows/draft-workflow.md +44 -0
- package/skills/yixiaoer/references/workflows/local-vs-cloud.md +50 -0
- package/skills/yixiaoer/references/workflows/material-workflow.md +43 -0
- package/skills/yixiaoer/references/workflows/payload-sourcing.md +70 -0
- package/skills/yixiaoer/references/workflows/publish-article.md +68 -0
- package/skills/yixiaoer/references/workflows/publish-imageText.md +64 -0
- package/skills/yixiaoer/references/workflows/publish-troubleshooting.md +50 -0
- package/skills/yixiaoer/references/workflows/publish-video.md +65 -0
- package/skills/yixiaoer/references/yixiaoer-shared.md +95 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# 话题标签格式规范
|
|
2
|
+
|
|
3
|
+
适用范围:发布 payload 中涉及 `topics`、`tags`、`challenge`,或 `description` / `desc` / `content` 中的 `<topic>` 标签时,必须先读取本文档。
|
|
4
|
+
|
|
5
|
+
## 目的
|
|
6
|
+
|
|
7
|
+
- 统一 Agent 对“话题/标签”字段的装配方式
|
|
8
|
+
- 明确“描述类字段/正文中的话题标签结构”和“字段中的话题对象结构”是两套规则
|
|
9
|
+
- 明确 CLI 不负责兜底修复 `description` / `desc` / `content` 中的标签结构;字段中的话题对象仍按各平台字段定义传入
|
|
10
|
+
|
|
11
|
+
## 总规则
|
|
12
|
+
|
|
13
|
+
- Agent 必须优先以目标平台 schema 和平台文档为准。
|
|
14
|
+
- 字段中的话题数据,如 `topics`、`tags`、`challenge`,必须按各平台 schema 和平台文档定义的字段结构传入。
|
|
15
|
+
- 只有当平台文档明确要求在 `description`、`desc` 或 `content` 中嵌入话题标签时,才使用 `<topic>` HTML。
|
|
16
|
+
- `description` / `desc` / `content` 中的 `<topic>` 规则,不适用于 `topics`、`tags`、`challenge` 等字段对象。
|
|
17
|
+
- CLI 内部兼容逻辑只用于历史 payload 兜底,不能作为 Agent 的标准装配方案。
|
|
18
|
+
|
|
19
|
+
## 字段类型对照
|
|
20
|
+
|
|
21
|
+
### 1. `topics`
|
|
22
|
+
|
|
23
|
+
用于平台显式支持结构化话题对象的场景,例如知乎文章、抖音文章、易车号文章等。
|
|
24
|
+
|
|
25
|
+
标准结构:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
[
|
|
29
|
+
{
|
|
30
|
+
"yixiaoerId": "topic_id",
|
|
31
|
+
"yixiaoerName": "话题名",
|
|
32
|
+
"raw": {}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
规则:
|
|
38
|
+
|
|
39
|
+
- 必须来自 `yxer query challenges`、`yxer query categories` 或平台文档明确指定的查询命令返回结果
|
|
40
|
+
- 必须保留完整 `raw`
|
|
41
|
+
- 不要只传名称字符串
|
|
42
|
+
|
|
43
|
+
### 2. `tags`
|
|
44
|
+
|
|
45
|
+
用于平台要求字符串数组的场景,例如 CSDN 文章、B 站文章、企鹅号文章等。
|
|
46
|
+
|
|
47
|
+
标准结构:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
["AI", "自动化发布"]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
规则:
|
|
54
|
+
|
|
55
|
+
- 以 schema 和平台文档定义的字段类型为准
|
|
56
|
+
- 不要写成单个逗号拼接字符串
|
|
57
|
+
- 不要混入 `#`,除非平台文档明确要求
|
|
58
|
+
|
|
59
|
+
### 3. `challenge`
|
|
60
|
+
|
|
61
|
+
用于平台只接受单个挑战/话题对象的场景,例如抖音视频。
|
|
62
|
+
|
|
63
|
+
标准结构:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"yixiaoerId": "challenge_id",
|
|
68
|
+
"yixiaoerName": "挑战名",
|
|
69
|
+
"raw": {}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
规则:
|
|
74
|
+
|
|
75
|
+
- 必须来自 `yxer query challenges <account_id> ...`
|
|
76
|
+
- 必须透传完整对象
|
|
77
|
+
- 不要把 `challenge` 和 `tags` / `topics` 混用
|
|
78
|
+
|
|
79
|
+
### 4. 描述类字段/正文中的 `<topic>` HTML
|
|
80
|
+
|
|
81
|
+
仅用于平台文档明确说明 `description`、`desc` 或 `content` 支持 `<topic>` 标签的场景,例如抖音图文。
|
|
82
|
+
|
|
83
|
+
标准结构:
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<p>正文描述</p><p><topic text="合拍">#合拍</topic><topic text="夏日">#夏日</topic></p>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
规则:
|
|
90
|
+
|
|
91
|
+
- Agent 必须直接写出最终 HTML
|
|
92
|
+
- `text` 属性应为不带 `#` 的标签文本
|
|
93
|
+
- 标签正文通常为 `#标签名`
|
|
94
|
+
- 不要把这种 HTML 结构误用于 `topics` / `challenge` / `tags` 字段
|
|
95
|
+
- 不要同时依赖 `tags` 再让 CLI 自动拼 `<topic>`
|
|
96
|
+
|
|
97
|
+
## 平台装配优先级
|
|
98
|
+
|
|
99
|
+
1. 先看 `yxer schema fields <platform> <type>`
|
|
100
|
+
2. 再看对应平台文档
|
|
101
|
+
3. 只有文档明确允许时,才在 `description` / `desc` / `content` 中写 `<topic>` HTML
|
|
102
|
+
4. 字段中的话题数据始终按字段类型本身传入,不使用 `<topic>` HTML
|
|
103
|
+
|
|
104
|
+
## 抖音相关规则
|
|
105
|
+
|
|
106
|
+
### 抖音视频
|
|
107
|
+
|
|
108
|
+
- 优先使用平台文档定义的结构化字段,如 `challenge`
|
|
109
|
+
- `description` 是普通描述字段;除非平台文档明确要求,否则不要把字段中的话题改写成 `<topic>` HTML
|
|
110
|
+
|
|
111
|
+
### 抖音图文
|
|
112
|
+
|
|
113
|
+
- 若文档要求 `description` 支持 `<topic>`,Agent 应直接传最终 HTML
|
|
114
|
+
- 这个规则只针对描述类字段本身,例如 `description`
|
|
115
|
+
- 不要把 `topics` / `challenge` 之类字段也按 `<topic>` HTML 处理
|
|
116
|
+
- 不要只传 `tags` 再期待 CLI 注入 `<topic>`
|
|
117
|
+
|
|
118
|
+
### 抖音文章
|
|
119
|
+
|
|
120
|
+
- 优先使用 `topics: Category[]`
|
|
121
|
+
- `topics` 按结构化字段传入,不按 `<topic>` HTML 规则处理
|
|
122
|
+
- 不要把文章话题只写在 `description` / `desc` / `content` 文本里
|
|
123
|
+
|
|
124
|
+
## 禁止行为
|
|
125
|
+
|
|
126
|
+
- 只给自然语言描述,例如 `"description": "今天聊聊 #AI #自动化"` 或 `"desc": "今天聊聊 #AI #自动化"`,却不按平台要求提供结构化字段或描述 HTML
|
|
127
|
+
- 把 `topics` 写成字符串数组
|
|
128
|
+
- 把 `tags` 写成对象数组
|
|
129
|
+
- 把 `topics` / `challenge` / `tags` 按 `<topic>` HTML 结构传入字段本身
|
|
130
|
+
- 省略查询结果里的 `raw`
|
|
131
|
+
- 依赖 CLI 在发布前自动修复标签结构
|
|
132
|
+
|
|
133
|
+
## 推荐执行方式
|
|
134
|
+
|
|
135
|
+
1. 先查 schema:`yxer schema fields <platform> <type>`
|
|
136
|
+
2. 再查平台文档确认字段类型
|
|
137
|
+
3. 如需动态话题对象,先执行 `yxer query challenges` / `yxer query categories`
|
|
138
|
+
4. 由 Agent 直接生成最终 payload
|
|
139
|
+
5. 用 `yxer validate` 验证,而不是依赖 CLI 重写标签结构
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# 🛡️ 蚁小二 Skill 避坑与故障排查手册 (Pitfall Avoidance Guide)
|
|
2
|
+
|
|
3
|
+
> **版本:** 1.0.2
|
|
4
|
+
> **最后更新:** 2026-04-10
|
|
5
|
+
> **适用范围:** 蚁小二 Universal 自动化技能调用者 (Skill v1.6.1+)
|
|
6
|
+
> **核心原则:** 规范优于补救,校验重于盲试。
|
|
7
|
+
|
|
8
|
+
本指南汇总了在调用蚁小二自动化能力过程中最常见的四大“坑点”及其解决方案。请在开发或配置过程中严格对照,以确保发布任务的高成功率。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 🚀 核心避坑清单 (Quick Fix Checklist)
|
|
13
|
+
|
|
14
|
+
### 1. 技能版本不支持该功能
|
|
15
|
+
**现象描述:** 调用某些动作(Action)或使用新增字段时,系统报错提示“该功能不支持”或参数校验失败。
|
|
16
|
+
|
|
17
|
+
> [!IMPORTANT]
|
|
18
|
+
> **解决方案:**
|
|
19
|
+
> * **确认版本:** 请检查 `skills/yixiaoer/SKILL.md` 中的版本号,确保蚁小二插件/技能版本为 **1.6.1** 或更高。
|
|
20
|
+
> * **升级建议:** 如果当前版本低于 1.6.1,请同步最新的 `yixiaoer-skill` 代码仓库并重读配置。
|
|
21
|
+
> * **自检:** 运行 `npx yixiaoer --version`(若适用)核实当前环境加载的实际物理代码版本。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### 2. 获取在线设备列表失败
|
|
26
|
+
**现象描述:** 在执行发布任务时,返回错误:“获取在线设备列表失败”。
|
|
27
|
+
|
|
28
|
+
> [!TIP]
|
|
29
|
+
> **排查与解决:**
|
|
30
|
+
> * **模式冲突:** 错误通常发生在选择了 **“本机发布模式 (publishChannel: 'local')”** 时。
|
|
31
|
+
> * **客户端检查:** 确保蚁小二客户端软件已在当前机器启动、登录,且处于 **“在线”** 状态。
|
|
32
|
+
> * **推荐方案:** 若无法保证客户端长期在线,请将发布参数中的 `publishChannel` 修改为 **`'cloud'` (云发布模式)**,通过蚁小二云端服务器直接分发,无需本地客户端参与。
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
### 3. 发布失败 · 表单错误
|
|
37
|
+
**现象描述:** 接口返回“发布失败”,并附带“表单错误”或“参数校验未通过”提示。
|
|
38
|
+
|
|
39
|
+
> [!WARNING]
|
|
40
|
+
> **核心规范:**
|
|
41
|
+
> * **严格核对 DTO:** Agent 在拼装 `publish` 的 Payload 时,必须**强制核对** `skills/yixiaoer/references/platforms/` 目录下对应的平台文档(如 `douyin.md`, `wechat.md`)。
|
|
42
|
+
> * **必填项校验:** 重点检查标题 (title)、分类 (categories)、标签 (tags)、封面 (cover) 是否按照平台要求完整传入。
|
|
43
|
+
> * **格式合规:** 确保类型正确,例如 `categories` 必须是数组 or 特定 ID 字符串,严禁随意填写。
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### 4. 图片上传失败 / 签名不匹配
|
|
48
|
+
**现象描述:** 使用 `upload-resource` 动作后,执行 PUT 上传时报错 `SignatureDoesNotMatch` 或上传后的资源无法显示。
|
|
49
|
+
|
|
50
|
+
> [!CAUTION]
|
|
51
|
+
> **关键细节:**
|
|
52
|
+
> * **ContentType 字节级对齐:** 在调用接口获取随机上传地址时,传入的 `contentType`(如 `image/png`)必须与你随后执行 PUT 请求时 Header 中的 `Content-Type` **完全一致**。
|
|
53
|
+
> * **报错诱因:** 哪怕是大小写差异或空格,都会导致云端签名计算失效,从而拒绝请求。
|
|
54
|
+
> * **最佳实践:** 预先确定文件 MIME 类型,在获取地址和执行上传两个步骤中透传同一个变量值。
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### 5. 云发布报错:账号代理不存在
|
|
59
|
+
**现象描述:** 使用 **云发布 (publishChannel: 'cloud')** 时,接口返回错误:“账号代理不存在”。
|
|
60
|
+
|
|
61
|
+
> [!IMPORTANT]
|
|
62
|
+
> **原因与对策:**
|
|
63
|
+
> * **原因:** 账号绑定的独立代理 (proxyId) 已被删除/过期,或该平台强制要求绑定代理才能进行云发布。
|
|
64
|
+
> * **方案 A (推荐):** 使用 `action: "proxy-areas"` 查询可用地区码,并使用 `action: "update-account"` 为账号设置 `kuaidailiArea`(内置代理)。
|
|
65
|
+
> * **方案 B:** 检查 `action: "proxies"` 列表,重新为账号绑定一个有效的 `proxyId`。
|
|
66
|
+
> * **方案 C:** 如果条件允许,切换回 `publishChannel: 'local'`(本机发布),此模式使用本地 IP,不依赖云端代理。
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 6. 发布任务状态异常 (Stuck or Abnormal Status)
|
|
71
|
+
**现象描述:** 任务提交后,状态长时间卡在 **“发布中”** 或 **“待发布”**,或者最终转为 **“发布失败”**。
|
|
72
|
+
|
|
73
|
+
> [!CAUTION]
|
|
74
|
+
> **深层原因与自检:**
|
|
75
|
+
> * **卡在“发布中 / 待发布”**:这通常意味着 Payload 虽然通过了初步的 API 校验,但其中的**业务逻辑或表单结构**不符合平台的底层规则。例如:标题含有非法字符、话题格式不严谨、或者动态字段(位置、音乐)透传的 `raw` 数据已过期。
|
|
76
|
+
> * **自检建议:** 请严格对比该平台的专属文档(如 `skills/yixiaoer/references/platforms/video/douyin.md`),检查表单是否按照文档规则填入。
|
|
77
|
+
> * **显示“发布失败”**:这绝大多数情况下是因为 **“必填字段缺失”**。
|
|
78
|
+
> * **自检建议:** 重点排查 `title` (标题)、`description` (描述)、`categories` (平台分类)、`cover` (封面) 等在文档中标记为“是”的核心字段是否填入。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 7. 草稿保存意图不明
|
|
83
|
+
**现象描述:** 用户提及“保存草稿”或“存草稿”,但 Agent 无法判断应存入“蚁小二内部”还是“目标平台”。
|
|
84
|
+
|
|
85
|
+
> [!IMPORTANT]
|
|
86
|
+
> **执行规则:**
|
|
87
|
+
> * **严禁默认:** Agent **严禁**在未确认的情况下默认选择其中一种,或自行猜测。
|
|
88
|
+
> * **强制询问:** 必须向用户询问:“您是希望存为**蚁小二草稿**(仅在蚁小二管理,不推送到平台)还是**平台草稿**(推送到抖音/小红书等平台的草稿箱)?”
|
|
89
|
+
> * **逻辑关联:** 确认后再选取对应的 `action` (save-draft) 或 `publish` (pubType: 0)。
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🛠️ 自诊工作流 (Self-Diagnosis Workflow)
|
|
94
|
+
|
|
95
|
+
当您遇到无法解决的意外报错时,请遵循以下 SOP 进行排查:
|
|
96
|
+
|
|
97
|
+
1. **版本审计**:当前 Skill 逻辑是否为最新?(`skills/yixiaoer/SKILL.md`)
|
|
98
|
+
2. **物理上传校验**:资源是否已经成功通过 `upload-resource` 获取 key?(禁止在发布接口直接传入外部 https:// 链接)
|
|
99
|
+
3. **模式匹配**:账号状态是否为 1 (有效)?发布通道是否与客户端状态匹配?
|
|
100
|
+
4. **架构对标**:你的 JSON 结构是否与 `skills/yixiaoer/references/execution-standard.md` 中定义的“分级检索逻辑”一致?
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
> [!NOTE]
|
|
105
|
+
> *“让专家做专业的事。如果您通过本指南仍无法定位问题,请在 [Issue 频道] 提交您的 JSON Payload 以供进一步审查。”*
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 上传资源 (Upload Resource)
|
|
2
|
+
|
|
3
|
+
将图片、视频或其它素材上传至蚁小二云端存储 (OSS),并获取用于发布的资源 Key。这是自动化发布的前置步骤。
|
|
4
|
+
|
|
5
|
+
## 触发场景 (Trigger)
|
|
6
|
+
- **意图辨析**:当用户提供原始 URL 或本地路径,并准备进行发布 (publish) 或存入素材库 (material) 之前,必须先将资源“物理上传”以获得系统可识别的 Key。
|
|
7
|
+
- **典型提示词**:
|
|
8
|
+
- “把这个视频传上去”
|
|
9
|
+
- “准备发布,上传封面图”
|
|
10
|
+
- “获取这个短剧资源的 Key”
|
|
11
|
+
|
|
12
|
+
> [!IMPORTANT]
|
|
13
|
+
> **素材库上传特殊说明**: 当用户明确要求“上传到素材库”时,这只是第一步 (`upload`),完成后**必须**紧接着执行第二步 (`material`) 登记入库,否则上传仅停留在临时 OSS 空间。
|
|
14
|
+
|
|
15
|
+
## 参数定义 (Parameters)
|
|
16
|
+
|
|
17
|
+
### 参数列表 (Payload Properties)
|
|
18
|
+
|
|
19
|
+
| 字段名 | 类型 | 是否必填 | 描述 |
|
|
20
|
+
| :--- | :--- | :--- | :--- |
|
|
21
|
+
| `action` | `string` | **是** | 固定值:`upload` |
|
|
22
|
+
| `url` | `string` | **是** | 资源的远程 URL 或本地绝对路径 |
|
|
23
|
+
| `bucket` | `string` | **否** | OSS 存储桶。默认 `cloud-publish`;若后续要调用素材库 `action: "material"`,必须使用 `material-library` |
|
|
24
|
+
| `contentType` | `string` | **是** | 资源的 MIME 类型 (如 `video/mp4`, `image/png`)。**严格要求**: 请求预签名 URL 时声明的 `contentType` 必须与执行 PUT 上传时 Header 中的 `Content-Type` **完全一致**。 |
|
|
25
|
+
| `size` | `number` | 否 | 资源大小 (字节)。 |
|
|
26
|
+
|
|
27
|
+
## 执行逻辑 (Logic Flow)
|
|
28
|
+
1. **源检测**:识别 URL 是远程地址还是本地物理路径。
|
|
29
|
+
2. **目标桶确认**:根据用户是否提到“素材库”决定 `bucket`(`cloud-publish` vs `material-library`)。
|
|
30
|
+
3. **类型嗅探**:尝试根据后缀名自动推断 `contentType`,若失败则提示用户或使用通用流类型。
|
|
31
|
+
4. **指令执行**:调用 `yxer upload <file_path_or_url> [--bucket cloud-publish|material-library]`。
|
|
32
|
+
5. **Key 提取**:获取返回的 `key`,并作为后续发布 Payload 的输入(如 `coverKey`, `video.key`)。
|
|
33
|
+
|
|
34
|
+
## 输出结果 (Output)
|
|
35
|
+
|
|
36
|
+
输出生成的资源标识,供发布脚本引用:
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"key": "cloud-publish/2026/03/26/66b2xxx/xxx.jpg",
|
|
40
|
+
"name": "xxx.jpg",
|
|
41
|
+
"bucket": "cloud-publish"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
**注意**: 在发布文章或视频时,请直接传入返回的 `key` 字符串作为封面或图片地址。
|
|
45
|
+
|
|
46
|
+
## 调用指令 (Command)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
yxer upload https://example.com/image.jpg --bucket cloud-publish
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
> [!IMPORTANT]
|
|
53
|
+
> **发布合规性提醒**:
|
|
54
|
+
> 所有的封面图、图文图片、视频文件均**严禁直接使用外部网络 URL**,必须通过本项目提供的上传接口进行处理并获取 `key` 后进行发布。不遵守此规范将直接导致任务失败。
|
|
55
|
+
|
|
56
|
+
> [!CAUTION]
|
|
57
|
+
> **ContentType 签名一致性**:
|
|
58
|
+
> 在上传资源时,必须确保获取上传地址所传入的 `contentType` 参数与 PUT 请求实际发送的 `Content-Type` Header **完全一致**。
|
|
59
|
+
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# yxer 使用流程文档
|
|
2
|
+
|
|
3
|
+
本文档面向实施、运营和使用同学,说明从首次安装到正式发布的标准使用流程。
|
|
4
|
+
|
|
5
|
+
## 1. 首次使用流程
|
|
6
|
+
|
|
7
|
+
### 步骤 1:安装 CLI
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
go build -o bin/yxer.exe .
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
或使用发布人员提供的 `yxer.exe`。
|
|
14
|
+
|
|
15
|
+
### 步骤 2:初始化配置
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
yxer config init --api-key <apiKey>
|
|
19
|
+
yxer doctor
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 步骤 3:安装 Skill
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
yxer skill sync
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 步骤 4:检查环境
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
yxer --version
|
|
32
|
+
yxer config get
|
|
33
|
+
yxer skill show
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 2. 日常发布标准流程
|
|
37
|
+
|
|
38
|
+
所有发布任务建议固定按以下顺序执行。
|
|
39
|
+
|
|
40
|
+
### 步骤 1:检查环境
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
yxer doctor
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 步骤 2:查询目标账号
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
yxer accounts list 抖音 --json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
确认目标账号可用,通常需要 `status=1`。
|
|
53
|
+
|
|
54
|
+
### 步骤 3:获取表单和 Schema
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
yxer prepare 抖音 video
|
|
58
|
+
yxer schema get 抖音 video
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
这一步用于确认必填字段、字段结构和枚举值。
|
|
62
|
+
|
|
63
|
+
### 步骤 4:上传资源
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
yxer upload --file .\video.mp4
|
|
67
|
+
yxer upload --file .\cover.jpg
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
说明:
|
|
71
|
+
|
|
72
|
+
- 图片、视频等资源必须先上传
|
|
73
|
+
- 不能直接在 payload 里手填外部 URL 冒充上传结果
|
|
74
|
+
|
|
75
|
+
### 步骤 5:查询复杂对象
|
|
76
|
+
|
|
77
|
+
按平台需要查询分类、位置、音乐、商品、合集或话题:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
yxer query categories <account_id> --type video
|
|
81
|
+
yxer query locations <account_id> --query 上海
|
|
82
|
+
yxer query music <account_id> --query 热门
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 步骤 6:填写 payload
|
|
86
|
+
|
|
87
|
+
标准结构示例:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"action": "publish",
|
|
92
|
+
"publishType": "video",
|
|
93
|
+
"platforms": ["抖音"],
|
|
94
|
+
"publishChannel": "cloud",
|
|
95
|
+
"publishArgs": {
|
|
96
|
+
"accountForms": [
|
|
97
|
+
{
|
|
98
|
+
"platformAccountId": "<platformAccountId>",
|
|
99
|
+
"contentPublishForm": {
|
|
100
|
+
"formType": "task"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 步骤 7:校验
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
yxer validate 抖音 video .\payload.json
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 步骤 8:预演发布
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
yxer publish video 抖音 .\payload.json --dry-run
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 步骤 9:正式发布
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
yxer publish video 抖音 .\payload.json
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 3. 本机发布流程
|
|
127
|
+
|
|
128
|
+
当用户明确要求本机发布、本地发布或客户端发布时,必须使用 `local` 通道。
|
|
129
|
+
|
|
130
|
+
### 步骤 1:配置 `clientId`
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
yxer config set-local-client-id <clientId>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 步骤 2:按本机模式校验
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
yxer validate 抖音 video .\payload.json --publish-channel local --client-id <clientId>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 步骤 3:本机模式预演
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
yxer publish video 抖音 .\payload.json --publish-channel local --client-id <clientId> --dry-run
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 步骤 4:本机正式发布
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
yxer publish video 抖音 .\payload.json --publish-channel local --client-id <clientId>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 4. AI Skill 使用流程
|
|
155
|
+
|
|
156
|
+
如果是 AI agent 调用本项目,推荐顺序如下:
|
|
157
|
+
|
|
158
|
+
1. 读取 `skills/yixiaoer/SKILL.md`
|
|
159
|
+
2. 读取 `references/workflows/common-rules.md`
|
|
160
|
+
3. 根据内容类型读取对应 workflow
|
|
161
|
+
4. 调用 `yxer doctor`
|
|
162
|
+
5. 调用 `yxer prepare` 和 `yxer schema get`
|
|
163
|
+
6. 生成 payload 后先 `validate`
|
|
164
|
+
7. 最后执行 `publish`
|
|
165
|
+
|
|
166
|
+
## 5. 常见故障处理
|
|
167
|
+
|
|
168
|
+
### `doctor` 提示 skill 未同步
|
|
169
|
+
|
|
170
|
+
执行:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
yxer skill sync
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 云发布失败,提示代理问题
|
|
177
|
+
|
|
178
|
+
处理建议:
|
|
179
|
+
|
|
180
|
+
- 检查账号代理配置
|
|
181
|
+
- 必要时改为本机发布
|
|
182
|
+
|
|
183
|
+
### 本机发布失败,提示客户端不在线
|
|
184
|
+
|
|
185
|
+
处理建议:
|
|
186
|
+
|
|
187
|
+
- 启动并登录蚁小二客户端
|
|
188
|
+
- 重新执行本机发布
|
|
189
|
+
|
|
190
|
+
### 校验失败
|
|
191
|
+
|
|
192
|
+
处理建议:
|
|
193
|
+
|
|
194
|
+
- 回到 `prepare` 和 `schema get` 重新核对字段
|
|
195
|
+
- 不要猜字段,不要手写未经确认的复杂对象
|
|
196
|
+
|
|
197
|
+
## 6. 最小可用命令集
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
yxer doctor
|
|
201
|
+
yxer config get
|
|
202
|
+
yxer accounts list
|
|
203
|
+
yxer prepare <platform> <type>
|
|
204
|
+
yxer schema get <platform> <type>
|
|
205
|
+
yxer upload --file <file>
|
|
206
|
+
yxer validate <platform> <type> <payload.json>
|
|
207
|
+
yxer publish <type> <platform> <payload.json> --dry-run
|
|
208
|
+
yxer publish <type> <platform> <payload.json>
|
|
209
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 账号选择工作流
|
|
2
|
+
|
|
3
|
+
> 适用范围:任何需要确定 `platform`、`platformAccountId` 或确认账号状态的任务,包括发布、草稿、素材、排查。
|
|
4
|
+
|
|
5
|
+
## 何时读取
|
|
6
|
+
|
|
7
|
+
- 用户只说“帮我发”但没给账号
|
|
8
|
+
- 用户给了平台,但没给账号名或账号 ID
|
|
9
|
+
- 用户给了多个候选账号,需要 Agent 选一个
|
|
10
|
+
- 用户要排查“为什么这个账号发不出去”
|
|
11
|
+
|
|
12
|
+
## 标准步骤
|
|
13
|
+
|
|
14
|
+
1. 先确定任务平台;平台不明确时,不进入 payload 阶段。
|
|
15
|
+
2. 执行 `yxer accounts list [platform] [--name 关键词] [--json]`。
|
|
16
|
+
3. 优先筛出 `status=1` 的账号。
|
|
17
|
+
4. 结合用户给的账号名、昵称关键词或已有 `platformAccountId` 定位目标账号。
|
|
18
|
+
5. 将选中的 `platformAccountId` 填入 `publishArgs.accountForms[].platformAccountId`。
|
|
19
|
+
|
|
20
|
+
## 选择规则
|
|
21
|
+
|
|
22
|
+
- 只有一个 `status=1` 的候选账号:自动选中,并明确告知用户。
|
|
23
|
+
- 有多个 `status=1` 候选账号:列出差异,让用户选择,不要擅自猜测。
|
|
24
|
+
- 没有 `status=1` 账号:停止后续执行,提示用户检查账号登录状态、Cookie 或客户端在线状态。
|
|
25
|
+
- 用户直接给了 `platformAccountId`:仍建议执行 `accounts list` 做存在性确认。
|
|
26
|
+
|
|
27
|
+
## 推荐命令
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
yxer accounts list 抖音 --json
|
|
31
|
+
yxer accounts list 小红书 --name 关键词 --status 1 --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 严禁行为
|
|
35
|
+
|
|
36
|
+
- 未确认账号有效就填写 `platformAccountId`
|
|
37
|
+
- 多个候选账号时默认取第一个
|
|
38
|
+
- 把账号昵称直接当成 `platformAccountId`
|