DeepSeek Harness(DSH)采用插件化架构。开发者经常需要通过企业微信与智能体交互。现有的解决方案通常需要配置公网 URL、消息加解密或可信 IP 白名单。dsh-plugin-wecom-bot 专注于解决这些问题,通过建立长连接实现简单的消息路由。
核心功能¶
该插件通过企业微信「智能机器人」长连接收发消息,把发给机器人的文本当作任务下发给 DSH agent 执行,并把结果回传到企业微信。
主要能力包括:
- WebSocket 长连接模式:基于官方协议建立连接,支持流式回复。
- 零公网依赖:长连接由插件主动连出,不需要配置公网 URL、消息加解密或可信 IP 白名单。
- 会话模式:支持
per-user(每个成员一个会话)和per-message(每条消息新建 agent)两种模式。 - 工作区与会话管理:支持在聊天中切换工作目录、管理多个命名会话。
- 审批转发:将沙箱升级等权限操作请求转发到企业微信,通过回复指令完成审批。
- 协议兼容:通过
ws库处理 ALPN 握手问题,解决 Node.js 默认 WebSocket 客户端与企业微信网关的兼容性。
安装与启用¶
在插件源码目录执行以下命令。
- 安装依赖(插件依赖
ws库):
pnpm install
- 装进 web profile:
dsh plugin --profile web add .
安装完成后,重启 dsh web 生效。
配置¶
在启动 dsh web 前,设置环境变量即可启用。需要填写企业微信后台获取的 BotID 和 Secret。
export WECOM_BOT_ID="wwxxxxxxxxxxxxxx"
export WECOM_BOT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
dsh web
使用方法¶
启动与验证¶
启动后,日志应显示连接成功:
wecom-bot: connecting
wecom-bot: subscribed
wecom-bot: connected
在企业微信中私聊机器人发送指令,例如:
帮我总结一下这个目录下 README.md 的主要内容
工作区切换¶
在 per-user 模式下,可以切换 agent 的工作目录。每个企业微信成员独立记住自己的目录。
- 查看工作区:
#ws或查看工作区 - 切换工作区:
#ws <名称或路径> - 查看当前目录:
#cwd
示例:
#ws productv4-web
会话管理¶
在 per-user 模式下,支持创建和管理多个命名会话。
- 列出会话:
#sessions或会话列表 - 新建会话:
#new <名称> - 切换会话:
#use <名称> - 删除会话:
#rm <名称>
权限审批¶
当 agent 需要执行需要权限提升的操作(如沙箱升级)时,会发起审批。审批请求会转发到企业微信,直接在聊天中回复即可。
示例:
🔐 需要审批 #1
回复「同意 #1」批准,或「拒绝 #1」拒绝
支持的回复指令包括:
* 批准:同意、批准、允许、是、ok、y,可带编号 #1。
* 拒绝:拒绝、不同意、否、no、n,可带编号 #1。
配置项说明¶
| 配置键 | 默认值 | 说明 |
|---|---|---|
botId |
环境变量 WECOM_BOT_ID |
智能机器人 BotID |
botSecret |
环境变量 WECOM_BOT_SECRET |
智能机器人 Secret |
sessionMode |
per-user |
per-user 每个成员一个 agent 会话;per-message 每条消息新建 agent |
cwd |
进程 cwd | agent 的工作目录 |
maxReplyChars |
6000 |
最终回复最大字符数,超出截断 |
forwardAllApprovalsToWecom |
true |
是否将任何会话的审批请求都转发到企业微信处理 |
approvalTimeoutMs |
0 |
审批超时(毫秒),0=不超时 |
已知限制¶
- 长连接限制:同一机器人同时只允许一个长连接。另一处连上时,本连接会收到
disconnected_event并被断开。 - 消息频率:受企业微信限制,约 30 条/分钟。
- 文件支持:语音消息按转写文本处理;图片/文件消息暂不处理(会被忽略)。
- ALPN 握手:企业微信长连接网关要求 TLS ClientHello 携带 ALPN
http/1.1。本插件使用ws库解决了此问题,若使用其他客户端需注意此限制。 - 回复截断:最终回复超过
maxReplyChars会被截断。