dsh-wechat-push:把 HTML 正文投递到微信公众号草稿箱

前言

在 DeepSeek Harness(DSH)里跑 agent,常见产出是 Markdown 或 HTML 正文。若要把内容落到微信公众号,往往还要手动登录公众平台、粘贴排版、上传图片。另一条路是用「在微信里对话操控 DSH」的通道插件,侧重点在交互而不是「把已有 HTML 一次性写进草稿箱」。

下面介绍社区插件 dsh-wechat-push(维护者 tangzijie716):它面向 web profile,提供工具与 Web UI 按钮,把 HTML 正文与图片 直接投递到公众号 草稿箱。插件 不负责群发——草稿创建后仍需人在公众平台后台点击发送。

这是什么

dsh-wechat-push 是 DSH 的联网类插件(SkillHub 分类为联网工具)。一句话定位:把 HTML 正文与图片直接投递到微信公众号草稿箱(manifest 说明其投递能力拆自 dsh-wechat-mp 的投递半边)。

  • 仓库:tangzijie716/dsh-wechat-push
  • 许可证:MIT
  • SkillHub 目录页标注版本:v1.0.0,GitHub Stars:0
  • 与 dsh-wechat-html(Markdown → 微信可用 HTML)互相独立:本插件 不排版,直接接收 HTML 文本或文件;不装排版插件也能用。

核心功能

工具(Agent 可调用)

工具 作用
mp_upload_image 上传本地 jpg/png(小于 1MB),返回正文必须使用的 mmbiz.qpic.cn 地址
mp_create_draft 从 HTML 创建草稿;正文用 html_path 或 html 二选一
mp_list_drafts 只读列出最近草稿(新的在前),用于确认是否创建成功

mp_create_draft 支持标题、封面、正文图列表、可选作者/摘要/阅读原文链接等;封面必需。可一次调用带上封面路径与正文图路径,例如:

{
  "html_path": "./content/article.html",
  "title": "示例文章",
  "cover": {
    "path": "./content/cover.png"
  },
  "images": [
    { "token": "dsh-mp-image-0", "path": "./content/image-01.png" }
  ]
}

Web UI:「发公众号」按钮

每条助手回复后可点 发公众号,一次点击把该条回复排版(使用配置的模板)并放入草稿箱。按钮从 Markdown 起步,需要排版插件 dsh-wechat-html:已安装则走 ctx.get('wechatHtml') 渲染;未安装会明确提示缺什么。

按钮 没有地方选封面,须在 cordis.patch.yml 中配置 defaultCoverMediaId 或 defaultCover(见下文配置)。消息里的外链图片会保留,但结果可能警告被微信过滤。

凭据模型

插件 不读 环境变量、$DSH_HOME 或受管凭据库。每次调用须由调用方传入 凭据文件路径 credentials_path,文件内需要:

名字 含义
WECHAT_MP_APPID 公众号 AppID
WECHAT_MP_SECRET 公众号 AppSecret

支持 .env 的 NAME=value 或 .credentials.yaml 的 refs: 段。传路径而非明文密钥,是为避免密钥进入 DSH 工具参数与会话日志。

安装与启用

官方 README 给出的安装方式如下(需在 插件仓库根目录 执行;README 原文前提为已获得该目录源码):

dsh plugin --profile web add file:.

要求 Node.js ≥ 18。运行时由 DeepSeek Harness 提供 @deepseek-ai/dsh-tools 与 @deepseek-ai/dsh-typert-protocol 两个宿主依赖。

安装前请自行审阅 GitHub 仓库 源码与 MIT 许可证。插件在 当前 dsh 进程权限 下运行,可访问网络与本地文件;目录站点 SkillHub 与 DeepSeek / 幻方无官方从属关系,仅作社区索引。

典型用法

1、准备凭据文件

在公众平台 → 设置与开发 → 基本配置 获取 AppID、AppSecret(Secret 只显示一次)。将二者写入凭据文件,例如 D:\WeChat-Publishing\.env。

2、Agent 调用工具创建草稿

调用时始终带上 credentials_path,例如:

mp_create_draft(credentials_path="D:\WeChat-Publishing\.env", ...)
mp_upload_image(credentials_path="D:\WeChat-Publishing\.env", path="...")
mp_list_drafts(credentials_path="D:\WeChat-Publishing\.env", count=3)

若只有 HTML 字符串、没有文件,用 html 参数;若使用 html_path,提交后的正文会另存为 <html_path>.submitted.html(保存失败不会撤销已创建的草稿,但会返回警告)。

3、可选:Web UI 一键投递

在 profile 的 cordis.patch.yml 中为 wechat-push 配置默认封面后,可在对话界面使用 发公众号 按钮(需已安装 dsh-wechat-html 做排版)。

全部可选配置示例(不含凭据):

- id: wechat-push
  config:
    tokenCacheDir: ''
    baseUrl: https://api.weixin.qq.com
    defaultAuthor: ''
    defaultCover: './content/cover.png'
    defaultCoverMediaId: ''
    requireApproval: false

补丁层会 整块替换 该 id 的 config,需保留的键都要写全。

写操作默认 不弹审批;若需 fail closed 的审批缝,可设 requireApproval: true(开启后「发公众号」按钮也不会绕过,须改用受保护的 mp_create_draft)。

适用场景与注意

适合谁

  • 已在 DSH web profile 中生成或持有 微信可用 HTML,希望 agent 或按钮 写入草稿箱 再人工群发。
  • 需要与 dsh-wechat-html 搭配:Markdown 产出 → 排版 → 本插件投递。

务必知晓

  1. 权限与安全:安装即在本机以你的用户权限执行第三方代码;凭据只应放在你控制的文件中,通过 credentials_path 传入。
  2. 公众平台 IP 白名单:API 调用来源须在白名单内,否则 errcode 40164;家宽 IP 变化会导致此前可用配置失效。
  3. access_token 互斥:同一 AppID 同时只能有一个有效 token,其他 CMS/脚本会互相顶掉(errcode 45009 等);本插件会磁盘缓存并合并并发刷新,但无法控制外部系统。
  4. 账号能力:README 说明 未认证个人订阅号 可使用草稿箱与素材接口;不能 通过 API 群发,与本插件「只建草稿」一致。无权限时常见 48001。
  5. 图片限制:正文图走 media/uploadimg,仅 jpg/png 且 < 1MB;封面走永久 thumb 素材接口,由插件处理。

结尾

dsh-wechat-push 把 DSH 里的 HTML 产出与微信公众号草稿箱接上:工具侧适合 agent 流水线,Web UI 按钮适合单条回复快速入库;群发仍留在公众平台人工确认。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye