Skip to main content
ClaudeWave
Skill173 repo starsupdated yesterday

aws-wechat-article-publish

This Claude Code skill publishes WeChat Official Account articles via direct API connection, supporting draft submission or immediate mass distribution with integrated cover upload and pre-publish verification. Use it when ready to finalize article distribution through WeChat's official API, with the option to save to drafts first for review before public broadcast.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/aiworkskills/wechat-article-skills /tmp/aws-wechat-article-publish && cp -r /tmp/aws-wechat-article-publish/skills/aws-wechat-article-publish ~/.claude/skills/aws-wechat-article-publish
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# 发布

**公众号 API 直连发布** —— 图文入草稿箱或直接群发,素材上传、发布前检查一站式完成。

> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件(共 9 个 slug,入口 `aws-wechat-article-main`)。跨 skill 的相对引用依赖同一 `skills/` 目录,建议一并 `clawhub install` 全套。源码:<https://github.com/aiworkskills/wechat-article-skills>

## 能力披露(Capabilities)

本 skill 调 `publish.py` **直连微信公众号官方 API** 发布图文。**会把本篇 `article.html` 与 `imgs/*` 文件作为 POST body 上传到微信服务器。** 具体行为:

- **凭证读取**:`aws.env` 的 `WECHAT_{N}_APPID` / `WECHAT_{N}_APPSECRET`(多槽位支持 N≥1)
- **凭证外发**:`APPID` / `APPSECRET` 以 query string 形式发给 `api.weixin.qq.com/cgi-bin/token` 换 `access_token`;后续请求带 `access_token` query string。微信返回的 `access_token` 在进程内存短期缓存,**不落盘**
- **内容外发**:本篇封面、正文插图以 multipart upload 发给 `material/add_material`;`article.html` 正文与标题/摘要以 JSON POST 发给 `draft/add`、`freepublish/submit`
- **网络目标**:默认 `api.weixin.qq.com`;用户可在 `WECHAT_{N}_API_BASE` / `config.yaml.wechat_api_base` 自配反代
- **文件读**:仓库内 `.aws-article/config.yaml`、`aws.env`、本篇 `article.yaml`、`article.html`、`imgs/*`
- **文件写**:仅本篇 `article.yaml` 的状态字段(`media_id`、`publish_id`、`publish_completed`)
- **shell**:仅 `python3 {baseDir}/scripts/publish.py`、`getdraft.py`、`article_init.py`

**建议**:首次运行用 `publish_method: draft` 只入草稿箱确认效果,再切 `published` 真正群发。

## 配套 skill(informational)

本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的**发布环节**(入口 `aws-wechat-article-main`)。工作流中的若干步骤会读取同级 `../aws-wechat-article-main/references/*.md` 等共享文档(首次引导、articlescreening schema、env/config 示例等)。

- **套件完整装齐到同一 `skills/` 根目录**时,跨 skill 引用都能读到。
- **单独安装本 skill** 时,跨 skill 引用的步骤会在读取阶段遇到 `file not found`;但 `publish.py`、`getdraft.py`、`article_init.py` 这几个脚本本身可独立运行(只要 `aws.env` 与 `.aws-article/config.yaml` 就绪)。

完整 9 slug 清单见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。

通过微信公众号 API 将排版稿写入**草稿箱**或再**提交发布**(由 **`config.yaml`** 的 **`publish_method`** 与命令行 **`--publish`** 控制)。

## 配置检查 ⛔

任何操作执行前,**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作(或用户明确书面确认「本次不检查」):

## 脚本目录

**Agent 执行**:确定本 SKILL.md 所在目录为 `{baseDir}`。发布子命令在 **`{baseDir}/scripts/publish.py`**(项目根执行)。

| 脚本 / 子命令 | 用途 |
|--------|------|
| **`article_init.py`** | 初始化或更新本篇 **`article.yaml`**(及可选 **`closing.md`**)。用于总览 **本篇准备**(建目录后)或 **发布前** 补全元数据。仓库根执行:`python {baseDir}/scripts/article_init.py <文章目录> [--title … --author … --digest …]` |
| **`getdraft.py`** | 独立于 `publish.py`:用于正式文章查询(`published-list` / `published-fields` / `publish-get` / `article-get`,对应 `freepublish/*`),可用于 `embeds.related_articles.manual` 为空时自动补全推荐链接。注意:`freepublish/*` 需要公众号具备对应接口权限。仓库根:`python {baseDir}/scripts/getdraft.py published-fields` |
| `check-screening` | 校验 **`config.yaml`** 的 **`publish_method`**(**`draft`** / **`published`** / **`none`**) |
| `check-wechat-env` | 按 **`config.yaml` 槽位**检查 `aws.env` 的 `WECHAT_N_APPID` / `WECHAT_N_APPSECRET` 是否已填(**调用 `publish.py` 前建议跑**) |
| `check` | 环境检查:`aws.env`、各槽位、依赖、可选探测 token |
| `accounts` | 列出 **`config.yaml`** 中各微信槽位名称,并标记 `aws.env` 凭证缺项 |
| `full` / `token` / … | 调微信 API(需 **`aws.env`** 微信凭证) |

## 凭证与 `publish_method` ⛔

### `publish_method`(以仓库 **`config.yaml`** 为准)

| 值 | 含义 | 行为 |
|----|------|------|
| **`draft`**(默认) | 只进公众号**草稿箱** | **`full`** 创建草稿后**不**调用 freepublish 提交发布。 |
| **`published`** | 草稿 + **提交发布** | **`full`** 创建草稿后继续提交发布(异步)。**`full --publish`** 可**单次强制**带发布,即使当前为 **`draft`**。 |
| **`none`** | 用户明确不填微信 | **`full`** **立即退出**,不调任何微信接口(**`--publish`** 也会被忽略)。其它子命令(`token` 等)仍要凭证。 |

### 多账号时如何选槽位

1. 运行 **`python {baseDir}/scripts/publish.py accounts`**,从 **`config.yaml` 的 `wechat_accounts` + `wechat_N_name`** 向用户展示列表(例如:`您有2个账号:1."xiaoming",2."xiaoz"`)必须询问用户选择哪个账号发布到草稿箱,然后根据用户选择发布到指定的账号。
2. 在 **`config.yaml`** 写 **`wechat_publish_slot: <整数>`**,**或**命令行 **`--account <序号或名称>`**(**CLI 优先**,见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md))。

### 全局环境

在仓库根具备 **`aws.env`**(微信密钥)与 **`config.yaml`**(微信槽位数量与名称)。写作/生图见 **`validate_env.py`**(微信未齐仍可先做内容)。**`publish_method: none`** 时 **`full`** 会跳过;**`draft`/`published`** 发布前建议 **`check-wechat-env`**。API 端点优先取 **`WECHAT_N_API_BASE`**,若槽位未配则回退 **`config.yaml.wechat_api_base`**(两者都空时使用官方)。

### 作者名回退

`full` / `create-draft` 若 **`article.yaml` 无 author**,回退 **`config.yaml`** 的 **`default_author`**。

### `publish_completed`(本篇是否已发布完成)

- 字段在**本篇** **`article.yaml`**。**`publish.py` 不读、不改**;由智能体维护。
- **`false`**:发布流程未闭环。
- **`true`**:已视为发布完成(草稿已确认 / 或 **`published`** 流程成功且运营确认)。

**本篇发布真正结束后**:将 **`publish_completed: true`** 写回 **`article.yaml`**。

**写回 `true` 的前置门禁(缺啥补啥)**:

1. `article.html` 存在;
2. 文章目录存在封面图 `cover.(png/jpg/jpeg/webp)`;
3. `article.md` 与 `article.html` 中均不含 `placeholder`;
4. 发布命令成功并拿到回执(`media_id` 或 `publish_id`)。

任一不满足:只可标记为“已提交草稿,未闭环”,**不得**写回 `publish_completed: true`。

## 用户仅说「发布」且未明确路径时 ⛔

在用户**未给出** `drafts/…` 路径、仅说「发布文章」「帮我发一下」等时:

1. **确定本篇目录**:列出仓库下 **`drafts/`** 中子目录;若**多篇**,请用户**指定一篇**或选「最新修改」的一篇再读该目录 **`article.yaml`**。**勿**在未确认目录时假定路径。
2. 读取该目录 **`article.yaml`** 中的 **`publish_completed`**(YAML 布尔:`true` / `false`;**缺省按 `false` 处理**)。

| `publish_completed` | 智能体对用户说明(可略作口语化,勿改含义) |
|---------------------|---------------------------------------------|
| **`true`** | 告知:**项目里本篇文档已按记录成功发布**;问:**您是否需要编写新文章?** 若需要 → 转交 [main](../aws-wechat-article-main/SKILL.md) / [writing](../aws-wechat-article-writing/SKILL.md) 从本篇准备或选题起走。 |
| **`false`** 或缺省 | 读取 **`article.yaml`** 的 **`title`**(若无则用目录名简述),说明:**《{title}》尚未执行完成(发布流程未闭环)**;问:**是否需要继续并完成发布?** 或 **编写新文章?** 若继续本篇 → 再核对 **`config.yaml`** 的 **`publish_method`**、**`check-screening`**、**`check-wechat-env`** 等。 |

## 工作流

```
发布进度:
- [ ] 前置:配置检查(见本节「配置检查」)⛔
- [ ] 第0步:若用户未给路径 → 选本篇目录 → 读 publish_completed → 按上表分流(true/false)
- [ ] 第1步:读 **`config.yaml`** → **`draft` / `published`**(及是否 **`full --publish`**)
- [ ] 第2步:读取 **`config.yaml`** 的 `wechat_accounts` + `wechat_N_name` 向用户展示账号列表并询问目标槽位;随后跑 **`check-wechat-env`** 校验 `aws.env` 凭证 → **`wechat_publish_slot` 或 `--account`**
- [ ] 第3步:发布前检查(checklist + **`check-screening`** + **`check`**)
aws-wechat-article-assetsSkill

公众号素材|业务资料库|预设包|.aws 预设包|主题包|品牌包|aiworkskills.cn — 用户业务资料库与预设包管理:业务资料按产品名组织在 `.aws-article/products/{产品名}/`(介绍 .md 直挂产品根 + 配图归 `images/` 子目录含同名说明 .md),AI 与用户对话产出业务介绍内容时引导用户保存;图片入库走 `product_image_ingest.py --product <产品名> --stem <中文名>`。导入 .aws ZIP 预设包(本地文件或 `https://aiworkskills.cn/**/*.aws` URL)合并主题/配色/字体配置到 `.aws-article/presets/`;`config.yaml` 仅本地不存在时从包内复制,已存在则 stdout 输出差异 JSON 不覆盖。面向内容运营、品牌团队、设计支持岗。触发词:「素材库入库」「stock images」「上传图到素材库」「.aws」「预设包」「导入预设」「主题包」「aiworkskills.cn 链接」「.aws 下载地址」。

aws-wechat-article-formattingSkill

公众号排版|Markdown 转 HTML|排版主题|段落样式 — 公众号一键排版工具,Markdown 文稿转微信后台可粘贴 HTML,多主题、多字号、段落样式切换,所见即所得。面向公众号编辑、独立作者、排版岗。触发词:「排版」「版式」「美化」「格式化」「字号」「段落样式」「换个排版主题」「换个版式」「转 HTML」「弄好看点」「调整格式」。换预设包/品牌包/整套主题配色请走 aws-wechat-article-assets;需要多环节串联(写+审+排+配图+发)请走 aws-wechat-article-main。

aws-wechat-article-imagesSkill

公众号封面|公众号配图|公众号插图|AI 生图 — 公众号 AI 封面与配图生成,按文章标题与内容自动匹配画风,一稿多方案,多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词:「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker;需要多环节串联(写+审+排+配图+发)请走 aws-wechat-article-main。

aws-wechat-article-mainSkill

公众号运营|微信公众号|公众号一条龙|公众号全流程|自媒体运营|wechat automation|content pipeline|AIGC workflow — 公众号一条龙运营总控入口,选题→写稿→审稿→排版→配图→发布串联 8 个子 skill,单条指令完成整篇图文从 0 到上架。面向公众号小编、自媒体、品牌内容。触发词分层:**一条龙流程**「一条龙」「完整流程」「从头做」「从 0 到发布」;**新做新发**「帮我写篇公众号文章」「做一篇公众号文章」「我想发一篇」「帮我发一篇」「再来一篇」;**选题起点**「今天写什么好」「有什么好写的」「找个话题」「爆款选题」「热点选题」「起个爆款标题」;**策划起点**「内容日历」「系列策划」「专栏规划」「连载」;**流程恢复**「接着上次那篇」「继续昨天的」「继续上次的」「接着之前的进度」;**显式模型新写**「用 GPT 写一篇」「用 DeepSeek 写一篇」「把提纲写成文章」。子 skill(topics/writing/review/formatting/images/publish/sticker/assets)单独触发仅限对**已有产物**的修改场景(如"改标题""润色这段""排版""审稿""加封面""发布");新做/策划/多环节串联一律走本入口。

aws-wechat-article-reviewSkill

公众号审稿|公众号校对|敏感词检测|内容合规 — 公众号发布前合规审查:敏感词扫描、错别字检测、政治合规、平台规范校验,一次性输出修改清单。面向公众号编辑、自媒体作者、合规岗。触发词:「审稿」「审核」「校对」「合规」「敏感词」「错别字」「稿子检查一下」「稿子帮我看看」「稿子写完了」「文章检查一下」「检查下有没有问题」「能不能发」「发布前检查」。需要多环节串联(写+审+排+配图+发)请走 aws-wechat-article-main。

aws-wechat-article-topicsSkill

公众号选题|爆款标题|热点追踪|系列策划 — 公众号 AI 选题与标题生成,覆盖热点调研、选题策划、起标题、写摘要、系列排期。面向自媒体编辑、内容运营。触发词(**单独触发仅限对已有标题/摘要的修改**):「改标题」「换个标题」「重起标题」「优化标题」「标题再想想」「换个标题试试」「改摘要」「重写摘要」「优化摘要」「摘要再优化下」。新做选题、起新标题、策划系列/内容日历、追热点都请走 aws-wechat-article-main;需要多环节串联(写+审+排+配图+发)也走 main。

aws-wechat-article-writingSkill

公众号写稿|长文写作|文章润色|改写续写 — 公众号长文 AI 写作,从话题或提纲生成完整初稿,支持改写、续写、润色、开头结尾优化,可调 DeepSeek / GPT / Claude 或由 Agent 代写。面向自媒体作者、公众号运营、品牌文案。触发词(**单独触发仅限对已有稿子的修改**):「改写」「润色」「续写」「续一段」「往下写」「接着这段写」「重写开头」「改结尾」「调整语气」「这段润色下」「把这段改活泼点」「优化用词」「用 GPT 重写」「用 DeepSeek 重写」。新写一篇请走 aws-wechat-article-main(main 内部会调用本 skill 生成初稿);需要多环节串联(写+审+排+配图+发)也走 main。

aws-wechat-stickerSkill

公众号贴图|九宫格|多图推送|图片消息|表情包 — 贴图与多图推送:从创意构思、AI 生图到公众号图片消息发布全流程,含九宫格自动排布、多图压缩、组图打包。面向公众号运营、自媒体、IP 账号。触发词:「贴图」「多图推送」「发组图」「图片消息」「九宫格」「做一组图」「图片帖子」「发几张图」「不写正文发图」「只发图不写字」。是文章内配图/封面请走 aws-wechat-article-images;需要多环节串联(写+审+排+配图+发)请走 aws-wechat-article-main。