先看效果。
我在 Slack 里跟 Agent 说"发布这篇",丢一个飞书链接过去:
几秒钟后,打开微信公众号后台:
文章已经躺在草稿箱里了。图片完整、格式正确、封面图也有了。 整个过程我只做了一件事:发了一条消息。 这背后是一个我刚写的命令行工具——feishu-wechat-cli。一条命令,飞书文档直接进微信公众号草稿箱。
它解决了什么问题
在飞书写完一篇文章,想发到公众号,你大概都经历过这套流程:
- 从飞书导出(或者手动复制粘贴)
- 图片全部断裂——飞书的图片链接微信不认,一张张下载下来
- 打开公众号后台,新建草稿,把文字粘进去
- 再一张张重新上传图片,插到对应位置
- 做封面图
- 预览、调格式、再预览 一篇 2000 字带 5 张图的文章,光搬运就要 20 分钟。 写文章本身已经够累了。搬运不应该再消耗我任何精力。
一条命令背后做了什么
feishu-wechat publish --feishu "https://my.feishu.cn/wiki/xxxxxxxx"
这条命令自动完成五件事:
- 从飞书抓取文档内容——支持 wiki 和 docx 两种格式,转成标准 Markdown
- 下载文章里的所有图片——飞书的图片是内部鉴权链接,外部无法直接访问,工具会全部下载到本地
- 把图片上传到微信素材库——微信公众号只认自己素材库里的图,工具逐张上传,拿到微信的 media_id
- 替换正文里的图片链接——把飞书图片 URL 全部换成微信素材库的链接
- 创建公众号草稿——调用微信公众号 API,把处理好的文章送进草稿箱 20 分钟的手动搬运,变成了一条命令、几秒钟。
三种用法
最常用:飞书文档直接发
feishu-wechat publish \
--feishu "https://my.feishu.cn/wiki/xxxxxxxx" \
--article-author "你的名字"
飞书文档 + 自动封面
加上 --auto-cover,工具会调用 AI 生图接口,根据文章标题自动生成一张封面图,一并上传:
feishu-wechat publish \
--feishu "https://my.feishu.cn/wiki/xxxxxxxx" \
--auto-cover
本地 Markdown 文件
如果你不用飞书,直接丢本地 Markdown 也行:
feishu-wechat publish -f ./article.md
怎么装
三步搞定。
第一步:装飞书官方 CLI
工具依赖飞书官方开源的 larksuite/cli 来抓取文档和下载图片[1]。
npm install -g @larksuite/cli
装完之后跑一次初始化,绑定你的飞书账号:
lark-cli config init --new
*这步不做的话,后面抓文档和下载图片都不会工作。*
第二步:装 feishu-wechat-cli
npm install -g @shing19/feishu-wechat-cli
验证一下:
feishu-wechat --help
第三步:配环境变量
在工作目录下新建一个 .env 文件:
WECHAT_APP_ID=你的公众号AppID
WECHAT_APP_SECRET=你的公众号AppSecret
AppID 和 AppSecret 在微信公众号后台 → 设置与开发 → 基本配置 里找。 如果你还想用自动封面功能,多加两行:
IMAGE_API_KEY=你的图片模型Key
IMAGE_BASE_URL=你的图片模型BaseURL
*还有一步容易忘:把当前机器的出口 IP 加到微信公众号后台的 IP 白名单里。不加的话,微信 API 会直接拒绝请求。*
为什么做成 CLI
因为 CLI 是 Agent 的原生接口。 网页工具需要模拟点击、填表单、等加载,Agent 用起来又慢又脆弱。CLI 天然就是为程序调用设计的——输入参数,返回结果,没有 UI 的摩擦。 你可以把它接进 CI/CD,飞书文档一更新就自动同步。可以写个脚本批量发布 10 篇。可以像我一样,让 Agent 在对话里直接调用。 网页工具做一个点一个,CLI 做一个跑一百个。
已知局限
几个你可能会遇到的情况:
- 自动封面依赖外部生图 API,高峰时段可能遇到限流,等一下重试就行
- 微信 IP 白名单是必须配的,不配就会被拒绝,这是微信的规矩
- 工具只读当前目录的
.env,换目录记得带上或者重新建一个
仓库开源在 GitHub,欢迎试用、提 issue[2]。 如果你也在飞书写内容、往公众号发——试一下,省下来的时间够你多写一篇文章。
[1] larksuite/cli:github.com/larksuite/c…
[2] feishu-wechat-cli:github.com/shing19/fei…