📦 Aws Wechat Article Publish — 微信公众号文章发布

v1.0.0

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

0· 59·0 当前·0 累计
by @bbd145·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/1
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
可疑
medium confidence
该技能表现为一个合法的微信发布工具,但其元数据未充分声明实际需要的凭证和文件访问权限——安装前请审查密钥和仓库结构。
评估建议
该技能看起来是一个真实的微信发布助手,但需谨慎使用:1) 它期望仓库级 aws.env 文件包含 WECHAT_1_APPID / WECHAT_1_APPSECRET(可选 WECHAT_N_API_BASE),尽管注册表元数据未声明这些——请勿将真实凭证放入您不控制的仓库中。2) 脚本会读取和写入仓库文件(article.yaml、article.html、封面图片),并可能读取用户主目录配置(~/.aws-article/...)。请审查代码(已包含)并确认仅调用官方微信接口(api.weixin.qq.com)后再运行。3) 在隔离的工作区运行测试(或使用虚拟凭证);需手动安装所需 Python 包(PyYAML,可选 Pillow)。4) 如不希望自动网络发布,将 config.yaml 的 publish_method 设为 'none' 或避免运行 --publish 选项。5) 如需更高保障,请作者更新注册表元数据以声明所需环境变量和预期文件路径,使权限/凭证需求明确化。...
详细分析 ▾
用途与能力
技能名称/描述与包含的调用微信 API 和操作文章文件的 Python 脚本相匹配;然而注册表元数据未声明所需的环境变量或主要凭证,而代码和 SKILL.md 明确期望仓库级 aws.env 包含 WECHAT_<N>_APPID 和 WECHAT_<N>_APPSECRET 以及 .aws-article/config.yaml。这种不匹配(声称无需环境变量 vs 实际所需密钥)是一个不一致之处。
指令范围
SKILL.md 指示智能体从仓库根目录运行包含的脚本,并读取/写入仓库文件(article.yaml、article.html、封面图片、.aws-article/config.yaml、aws.env)。该范围与发布到微信一致。轻微的范围蔓延:article_init 可能读取主目录中的用户级文件(~/.aws-article/article.example.yaml),因此代码可能访问仓库之外的用户主目录配置。
安装机制
这是一个纯指令技能,包含捆绑脚本,无安装规范或外部下载。无网络安装 URL 或归档提取。它确实依赖 Python 和可选包(PyYAML、Pillow),SKILL.md/脚本中有提及但未提供自动安装程序。
凭证需求
代码需要微信凭证(aws.env 中的 WECHAT_N_APPID 和 WECHAT_N_APPSECRET)并读取 .aws-article/config.yaml,但技能元数据未列出所需的环境变量或主要凭证。skill.json 还请求文件系统、网络和 shell 权限——文件系统/网络对此任务是预期的,但未声明所需凭证是一个用户应该意识到的比例/信息差距。
持久化与权限
该技能未请求 always: true,仅可由用户调用。它会写回仓库中的 article.yaml 以标记 publish_completed(预期行为)。它不请求提升的平台级权限。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/4/1

- AWS 微信文章发布技能的首次发布。 - 支持通过 API 将文章发布到微信公众号(草稿或已发布),含发布前检查。 - 引导账号选择与配置验证,包括多账号支持与凭证检查。 - 通过 article.yaml(publish_completed: true/false)处理文章状态跟踪,实现工作流管理。 - 提供健壮的错误处理、目录结构指导和逐步用户交互流程。 - 包含用于发布、环境验证和账号管理的 CLI 脚本。

无害

安装命令

点击复制
官方npx clawhub@latest install aws-wechat-article-publish
镜像加速npx clawhub@latest install aws-wechat-article-publish --registry https://cn.longxiaskill.com

技能文档

通过微信公众号 API 将排版稿写入草稿箱或再提交发布(由 config.yamlpublish_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.yamlpublish_methoddraft / published / none
check-wechat-envconfig.yaml 槽位检查 aws.envWECHAT_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 等)仍要凭证。

多账号时如何选槽位

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

全局环境

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

作者名回退

full / create-draftarticle.yaml 无 author,回退 config.yamldefault_author

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

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

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

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

  • article.html 存在;
  • 文章目录存在封面图 cover.(png/jpg/jpeg/webp)
  • article.mdarticle.html 中均不含 placeholder
  • 发布命令成功并拿到回执(media_idpublish_id)。

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

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

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

  • 确定本篇目录:列出仓库下 drafts/ 中子目录;若多篇,请用户指定一篇或选「最新修改」的一篇再读该目录 article.yaml在未确认目录时假定路径。
  • 读取该目录 article.yaml 中的 publish_completed(YAML 布尔:true / false缺省按 false 处理)。
publish_completed智能体对用户说明(可略作口语化,勿改含义)
true告知:项目里本篇文档已按记录成功发布;问:您是否需要编写新文章? 若需要 → 转交 main / writing 从本篇准备或选题起走。
false 或缺省读取 article.yamltitle(若无则用目录名简述),说明:《{title}》尚未执行完成(发布流程未闭环);问:是否需要继续并完成发布?编写新文章? 若继续本篇 → 再核对 config.yamlpublish_methodcheck-screeningcheck-wechat-env 等。

工作流

发布进度:
  • [ ] 前置:配置检查(见本节「配置检查」)⛔
  • [ ] 第0步:若用户未给路径 → 选本篇目录 → 读 publish_completed → 按上表分流(true/false)
  • [ ] 第1步:读 config.yamldraft / published(及是否 full --publish
  • [ ] 第2步:读取 config.yamlwechat_accounts + wechat_N_name 向用户展示账号列表并询问目标槽位;随后跑 check-wechat-env 校验 aws.env 凭证 → wechat_publish_slot--account
  • [ ] 第3步:发布前检查(checklist + check-screening + check
  • [ ] 第4步:准备文章目录
  • [ ] 第5步:full(仅草稿或含发布,视上步)
  • [ ] 第6步:确认结果与用户说明
  • [ ] 第7步:成功后写回 article.yamlpublish_completed: true;按需归档

交互顺序(最小提问)

0) 未给路径时:先按上文 「用户仅说发布」 处理 publish_completed;用户选 继续本篇 后再做下列步骤。

1) 先看 config.yamlpublish_methoddraft = 默认只进草稿箱;publishedfull --publish = 再提交发布。

2) 多槽位:展示账号列表(来源:config.yamlwechat_accounts + wechat_N_name),请用户选槽位 → wechat_publish_slot--account

3) 缺微信字段:运行 check-wechat-env,补全 aws.env 后再发。

4) 发布失败(由脚本 stderr / 微信 errcode 判断): - 网络类(超时、连接失败、5xx):脚本已对单次请求 自动重试 1 次;仍失败 → 告知「网络不可用,请稍后重试或检查代理」。 - 凭证/配置类(如 token 失败带 errcode、缺字段)→ 提示 第几槽位、检查 APPID/SECRET、IP 白名单,用户改正后再执行 full / publish

5) 中间产物缺失(封面缺失 / 存在 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.htmlimgs/article.yaml(含 publish_completed 等)、.aws-article/config.yamlaws.env(微信槽位)发布到公众号草稿或提交发布;成功后由智能体将 publish_completed: true 写回 article.yamlpublish.py 不改此键)
数据来源ClawHub ↗ · 中文优化:龙虾技能库