GB-Power-Market-JJ aws-wechat-article-publish

将文章发布到微信公众号(API 写入草稿箱或提交发布),含发布前检查。当用户提到「发布」「提交」「群发」「推送」「发出去」「上传到公众号」「发到公众号」「可以发了吗」「发布前检查」时使用。

install
source · Clone the upstream repo
git clone https://github.com/GeorgeDoors888/GB-Power-Market-JJ
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw-skills/skills/bbd145/aws-wechat-article-publish" ~/.claude/skills/georgedoors888-gb-power-market-jj-aws-wechat-article-publish && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw-skills/skills/bbd145/aws-wechat-article-publish" ~/.openclaw/skills/georgedoors888-gb-power-market-jj-aws-wechat-article-publish && rm -rf "$T"
manifest: openclaw-skills/skills/bbd145/aws-wechat-article-publish/SKILL.md
source content

发布

通过微信公众号 API 将排版稿写入草稿箱或再提交发布(由

config.yaml
publish_method
与命令行
--publish
控制)。

配置检查 ⛔

任何操作执行前,必须首次引导 执行其中的 「检测顺序」。检测通过后才能进行以下操作(或用户明确书面确认「本次不检查」):

脚本目录

Agent 执行:本 skill 的

{baseDir}
skills/aws-wechat-article-publish/
。发布子命令在
{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.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 / writing 从本篇准备或选题起走。
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`**)
- [ ] 第4步:准备文章目录
- [ ] 第5步:**`full`**(仅草稿或含发布,视上步)
- [ ] 第6步:确认结果与用户说明
- [ ] 第7步:成功后写回 **`article.yaml`** 的 **`publish_completed: true`**;按需归档

交互顺序(最小提问)

  1. 未给路径时:先按上文 「用户仅说发布」 处理
    publish_completed
    ;用户选 继续本篇 后再做下列步骤。
  2. 先看
    config.yaml
    publish_method
    draft
    = 默认只进草稿箱;
    published
    full --publish
    = 再提交发布。
  3. 多槽位:展示账号列表(来源:
    config.yaml
    wechat_accounts
    +
    wechat_N_name
    ),请用户选槽位 →
    wechat_publish_slot
    --account
  4. 缺微信字段:运行
    check-wechat-env
    ,补全
    aws.env
    后再发。
  5. 发布失败(由脚本 stderr / 微信 errcode 判断):
    • 网络类(超时、连接失败、5xx):脚本已对单次请求 自动重试 1 次;仍失败 → 告知「网络不可用,请稍后重试或检查代理」。
    • 凭证/配置类(如 token 失败带 errcode、缺字段)→ 提示 第几槽位、检查 APPID/SECRET、IP 白名单,用户改正后再执行
      full
      /
      publish
  6. 中间产物缺失(封面缺失 / 存在
    placeholder
    ):先补产物再发;若用户坚持先发草稿,必须明确告知“正文配图未完成”,且保持
    publish_completed: false

命令示例(仓库根)

python {baseDir}/scripts/publish.py check-screening
python {baseDir}/scripts/publish.py check-wechat-env
python {baseDir}/scripts/publish.py accounts
python {baseDir}/scripts/publish.py check
python {baseDir}/scripts/publish.py --account 1 full drafts/YYYYMMDD-标题slug/
python {baseDir}/scripts/getdraft.py published-fields

详见 references/usage.mdreferences/submit-guide.mdreferences/api-reference.md

过程文件

读取产出
article.html
imgs/
article.yaml
(含
publish_completed
等)、
.aws-article/config.yaml
aws.env
(微信槽位)
发布到公众号草稿或提交发布;成功后由智能体将
publish_completed: true
写回
article.yaml
publish.py
不改此键)