公众号图文流水线(都爆鸭)
把一篇已经写好的图文走一串确定性步骤,存进用户自己公众号的草稿箱,返回 mediaId。
正文归 dby-write(或用户自带);取数、爆款样本、封面套路归 dby-api;合规检测归 dby-banned-words。
🔴 终态纪律:用户只要成稿就不跑本包——本包会写进他自己的公众号后台,是真实副作用。
终态未明先问一句,别默认往下推。
只想存草稿、不要排版
正文已是公众号风格 HTML、无本地图也无本地封面时直接打 CLI,不必走 pipeline.mjs。
$SKILL_DIR = 本包目录(宿主加载本 SKILL.md 时给出的目录):
node "$SKILL_DIR/scripts/dby.mjs" wechat publish --appid <authorizerAppid> --title "标题" --html article.html --confirm
--confirm 前必须已有用户明确要发这一条的确认(见下面「防误发红线」);不带 --confirm
会停在 confirmation_required,退出码 6,什么都不发生。参数细节见 node "$SKILL_DIR/scripts/dby.mjs" wechat publish --help。
带本地图 / 本地封面时改用 scripts/preprocess-and-publish.mjs,见 references/draft-only.md。
流程声明:pipeline.json
10 步 SOP 与全部硬规则声明在 pipeline.json(steps[] + hardRules[])——它是人读的约定文档,
pipeline.mjs 不读取它,改流程要两边手工同步。「封面 / 配图」这一步由 agent 执行(本包不出图,见下节),其余步骤 pipeline.mjs 机械跑完。
本文只用步骤名不用序号;pipeline.mjs 日志里的「步骤 N」是脚本自己的机械步序,与 SOP 编号不对应。
→ 想逐步核对这 10 步分别做什么时读 references/sop.md,不需要就别读。
调用都爆鸭:本 Skill 用到的两条能力
只点名能力与详情端点;入参每次调用前现拉。
| operationKey | 详情端点 | 用在第几步 |
|---|---|---|
skill.wechat.render ⚠️专用 | GET /api/skills/wechat-render | 「md→HTML」(服务端排版那条路) |
skill.wechat.draftPublish ⚠️专用 | GET /api/skills/wechat-draft-publish | 「保存草稿」 |
生封面 / 生配图不在本包,出图能力当前暂时下架;未来是否恢复需重新评估,当前不承诺恢复时间。 本包只消费用户自备或 agent 用自己工具生成的本地文件,不调用已下架能力或旧包。
请求由 scripts/pipeline.mjs(及它调用的 preprocess-and-publish.mjs)代发;
绕开脚本自己拼请求时才读 dby-gateway/references/protocol.md(鉴权、密钥怎么拿、
先拉规格再拼参数、execution.target、信封格式)。
🔴 报错码是例外,走脚本一样要读:脚本原样抛错零解读,撞上就读该文件第 6 条
(429 按 IP 分桶,换 key、开新会话都没用,退避≤3 次且别加并发)。
🔴 两条专用路由的调用地址只在 target 里,从详情端点推不出来。
存草稿花钱、服务端排版渲染不花钱;现价从详情响应现拉现说,花钱的那步动手前先问用户。
→ 用户要的东西超出上面这两条时,读 dby-gateway/references/capability-index.md 选路、
读 routing-pitfalls.md 看已知的坑;正常流程里这两份都不必读。
写正文之前
- 🔴 正文不写标题,标题只走
--title——公众号总是拿草稿title渲大标题,正文里再写就显示两次;--html直发路径原样发出、没有去重,开头别放<h1>。--md路径兜了什么底见references/rendering.md。 - 正文不是走
dby-write写的 → 先拉写作规范,读references/writing-spec.md(dby-write第 1 步已经拉过这一份,别再拉一次)。 - 计费只在存草稿成功时发生,失败自动退回;具体扣多少以详情端点的实时点数字段为准,
别照文档里的数字替用户算钱。
402 INSUFFICIENT_CREDITS时提示用户到账户页查看余额与获取方式(点数只赠不卖),不要重试。 - 不写
--theme就是用你在排版工作室保存的默认排版;md→HTML 只走平台POST /api/wechat/render(免费),失败一律中止、绝不回退本机渲染器。 套哪套排版 / 老稿子重跑为什么长得不一样 /> [!NOTE]提示块 → 读references/rendering.md。
封面与配图(可选,本包不出图)
本包不出图。需要新图时交给 dby-image(2026-09 随服务端生图能力恢复而重建);
图片也可以来自用户自备或你自己 agent 的生图工具:
拿到本地文件路径后接回流水线——
封面走 --cover <路径>;配图以 <img src=本地路径> 手工判断放进 Markdown 源对应 h2 小节末尾,
入源后重跑渲染,配图才会获得主题图样式。上传与排布仍归本包(流水线原样保留每个 <img src>
并预上传本地图)。用户已说「推」且没提封面 / 配图时不主动张罗:只提示一次
「不传封面就走兜底封面」,然后直接跑。
CLI 用法
🔴 防误发红线(无论走哪个入口都成立):只存草稿、绝不群发——没有任何群发路径,流水线拒绝任何
--mass-send/--broadcast/群发 参数;需先绑号(先在 doubaoya.com 把公众号授权绑定,本技能替不了你绑);
用户只要成稿时别自作主张跑它。存完请用户去后台亲眼确认,群发的手永远在用户自己。
export DOUBAOYA_API_KEY="dyh_…" # 或放 ~/.doubaoya/key、Keychain(account-verify 会找)
node scripts/pipeline.mjs --md article.md --title "标题" # 渲染 → 传图 → 存草稿
node scripts/pipeline.mjs --md a.md --title "标题" --render-only # 只渲染,拿在线预览链接
node scripts/pipeline.mjs --md a.md --title "标题" --dry-run # 发布前彩排,什么都不发
本机有多条 key 对应不同账号时,账号校验会停下要 --account <账号>,按报错列出的账号补上重跑。
正文来自稿件面(用户在网页审稿页审过的稿)时带 --draft <稿件 id>(可选 --draft-version <n>,
省略 = 最新版)——存草稿箱成功后服务端会把稿件自动关联到这条发布记录;不带就是普通发布。
带了但那条稿件不属于你 → 422 VALIDATION_ERROR,发布不执行、不扣点。
🔴 跑完只认最终回报里的 mediaId——它是「已存入草稿箱」的唯一凭据,没有它就不当已存入。
存草稿失败 / 中途 Ctrl-C / 不确定草稿箱里有没有 → 读 references/recovery.md(重跑不幂等,会多存一份)。
→ 要指定账号 / 公众号 / 本地封面 / 摘要,或用 --html、--theme 的完整写法时读
references/cli.md,不需要就别读。
冷门分支:需要时才读,不需要就别读
| 用户在说 / 你要干的事 | 读哪份 |
|---|---|
| 只看排版(本机出稿看效果,不发) | 只读 references/rendering.md,其余都不读 |
哪个脚本干哪件事、想不走 pipeline.mjs 自己组合 | references/modules.md |
第一次用本包(还没有 config.json / 身份卡) | references/setup.md(config.json 属于你个人、别提交) |
把某个公众号的排版复刻成 theme.json | references/clone-theme.md(契约、校验器、现成主题怎么挑都在里面) |
前置条件
统一前置 Node ≥ 18,零外部依赖。本机渲染免密、无在线链接;平台渲染(--render-only)要密钥、有在线链接、不要绑号;
--dry-run 与存草稿要密钥且要绑号。
→ 逐层明细读 references/prerequisites.md,不需要就别读。
下一步(草稿存好之后)
草稿进箱即终点。还想往下走时:
| 用户接着想要什么 | 下一步 |
|---|---|
| 攒几天数据后看这个号的发文表现 / 做体检 | dby-api(打账号诊断能力 skill.wechat.accountAnalyzer) |
| 盯自己或竞品的发文节奏 | dby-api(打公众号发文列表端点) |
| 把已发布的文章拉正文归档 | dby-api |
| 用复盘信号挖下一轮选题 | dby-api(挖选题 / 追热点,也从这儿拉样本开写) |
| 说不清要到哪一步 | dby(公众号飞轮的逐跳导航) |
更新本技能
npx skills update dby-publish(全局安装的加 -g)。变更历史见 README.md。
- —2026-09-27feat(release)!: CLI 与 13 个 skill 共用一个版本号——release 工具、发布前检查与兼容视图派生(tasks 6.2 / 6.5)
- —2026-09-27fix(dby-theme,dby-publish,dby-rewrite,dby-deai): description 里与现行为不符的四处改成事实,少改字
- v6.0.02026-09-27feat(dby-publish,tools)!: 删除 account-verify 的第二套 key 发现,加单一 key 发现闸
- v7.0.02026-09-27feat(dby-publish,dby-theme,dby-image,dby-banned-words)!: skills 薄层化——只经 dby CLI 调用
- v5.1.02026-09-09feat(skills)!: 重建 dby-image —— 服务端生图能力恢复,请求改走共享请求层
- v4.1.02026-09-06feat(skills): 每包一份字节相同的 scripts/dby.mjs 引导壳 —— 实现只有一份,入口每包一份
- v4.1.02026-09-06docs(skills): SKILL.md 改成「何时跑哪条命令」,新增 compose.md 指导层与用户自造 skill 模板
- v4.1.02026-09-06docs(dby-publish): README 里的 Python 入口说明标注已退役
- v4.1.02026-09-06refactor(skills): write/charter/publish 三包的 HTTP 全部改走 dby-api 的请求层,退役两个 Python 入口
- v5.0.02026-09-06docs(skills): 路径改写 $SKILL_DIR、write.mjs/charter.mjs 标弃用、semver 收口
- v4.1.02026-09-02feat(dby-publish): pipeline.mjs 新增 --draft/--draft-version,透传稿件 id 给存草稿接口
- v4.0.52026-08-31test(skills): 三个「错了有后果」的包补两层判据
- v4.0.72026-08-31refactor(skills)!: 退役 dby-image —— 服务端生图能力因合规要求整体下架
- v4.0.82026-08-31fix(skills): 将出图能力标记为暂时下架
- v4.0.62026-08-31test(skills,tools): 首版基线复查 —— 三条判据缺陷按三层原则修掉
- v4.0.22026-08-27内部维护更新(本条无面向用户的变化说明)
- v4.0.02026-08-26feat(dby-publish)!: 出图与设计工作台整套下线 —— 与 dby-image 是同一条上游能力的两套实现
- v4.0.12026-08-26chore(license): MIT 换成 PolyForm Noncommercial 1.0.0,附 doubaoya 终端用户额外许可
- v2.5.12026-08-26fix(dby-publish): 终态纪律改成本地一句话,不再引用他包的路由判据文件
- v3.0.02026-08-26feat(dby-publish)!: 瘦身 69 → 51 个文件 —— 包内 14 个主题是服务端旧副本,留着只会让排版对不上
- v2.5.02026-08-25fix(dby-publish): 发布失败不再谎报「已存入草稿箱」,并补上失败后怎么办 —— 抓不到 mediaId 就报「结果待确认」+ 非零退出
- v2.4.22026-08-25chore(skills): 11 个 SKILL.md 加 changelog 字段,patch 递增;盖戳生成 index.json 与四份兼容视图
- v2.4.02026-08-24refactor(dby): 逐包领域调研后的规则更正与触发词补齐
- v2.4.12026-08-24fix(dby-publish): --theme 裸 id 交服务端解析——显式路径那半的主题双源没被消掉
- v2.2.12026-08-24fix(dby-scripts): 外部 agent 模拟测试暴露的四处脚本缺口
- v2.4.12026-08-24fix(dby-publish): 六张风格样图重出——旧的在教用户做英文封面,还带着乱码和商标
- v2.1.02026-08-24feat(dby-publish,dby-write): 加 --render-only —— 只想看排版效果不必先绑公众号
- v2.4.12026-08-24fix(dby-publish): 报错码被划进「绕开脚本才读」——走脚本的 agent 撞上 429 只会重试
- v2.2.12026-08-24refactor(dby): 11 个 SKILL.md 按写作手艺去废话——删解释/元叙述/历史叙事/跨包重复红线,两处 description 去流程复述
- v2.2.02026-08-24refactor(dby): 11 个 SKILL.md 主体压到 ≤6000 字符——冷门分支下沉 references/,协议改引用不再内联;违禁词入口统一指 dby-banned-words
更早 18 个版本见 GitHub
文件内容在 GitHub 查看。
- LICENSE1.1 KB
- README.md9.9 KB
- SKILL.md10.9 KB
- config.example.README.md3.9 KB
- config.example.json0.2 KB
- evals/cases.jsonl0.8 KB
- evals/triggers.jsonl1.0 KB
- pipeline.json5.0 KB
- profiles/README.md2.1 KB
- profiles/example-ip.json0.7 KB
- references/cli.md3.2 KB
- references/clone-theme.md6.9 KB
- references/draft-only.md2.0 KB
- references/modules.md1.9 KB
- references/prerequisites.md3.2 KB
- references/recovery.md2.8 KB
- references/rendering.md4.0 KB
- references/setup.md1.8 KB
- references/sop.md1.7 KB
- references/writing-spec.md2.7 KB
- scripts/account-verify.mjs17.3 KB
- scripts/archived-config-hint.selfcheck.mjs7.9 KB
- scripts/dby.mjs3.0 KB
- scripts/draft-limits.selfcheck.mjs1.5 KB
- scripts/extract-theme.mjs27.8 KB
- scripts/fetch-article.mjs13.7 KB
- scripts/import-theme.mjs30.0 KB
- scripts/lib/archived-config-hint.mjs8.4 KB
- scripts/lib/draft-limits.mjs1.9 KB
- scripts/lib/locate-dby.mjs1.4 KB
- scripts/pipeline.mjs44.8 KB
- scripts/preprocess-and-publish.mjs19.2 KB
- scripts/preprocess-and-publish.selfcheck.mjs2.2 KB
- scripts/render-wechat-html.mjs49.5 KB
- scripts/render-wechat-html.selfcheck.mjs2.4 KB
- scripts/selfcheck-remote-theme.mjs22.5 KB
- scripts/validate-theme.mjs20.2 KB
- scripts/validate-theme.selfcheck.mjs2.5 KB
- themes/benya-clean.json4.2 KB