dsh-dingtalk-self: DSH Plugin for Auto-Replying to Private Chats with Personal DingTalk Identity

前言

在 DeepSeek Harness(DSH)里做智能体,常见做法是单独开机器人账号或自建应用:对方看到的是「数字员工」,问题往往还要先转发给 agent。若你希望同事在钉钉私聊里问的是「你本人」,而答复又来自你绑定的 DSH 工作区(只读查资料),就需要一条以个人 OAuth 身份读私聊、再以本人账号发回的链路。下面介绍社区插件 dsh-dingtalk-self(维护者 MinEagle,GitHub 仓库 MinEagle/dsh-dingtalk-self),它在 SkillHub 目录中归类为「工作流」。

这是什么

dsh-dingtalk-self 是 DSH 插件「钉钉代答」:监听你指定的钉钉私聊联系人,把新消息投递到各自绑定的 DSH 工作区,由 agent 在工作区内查资料生成回复,最后通过 dws CLI 以你本人身份发出(--ai-tag=false,可选末尾标识行)。不需要机器人账号,也不把问题转发给 agent 再人工粘贴。

与普通钉钉机器人 / 自建应用插件的对比如下(资料原文表格):

机器人 / 自建应用插件 本插件
发送身份 机器人 你本人
读取范围 机器人被拉进的群 你的私聊
AI 角标 有 关闭
回复内容来源 插件自带 prompt 你绑定的 DSH 工作区
权限 插件的权限 工作区只读(仅可查看)

数据流概览:

对方私聊你
   ↓  dws chat message list --open-dingtalk-id   (以你身份读)
过滤 / 去重 / 合并
   ↓  投递到绑定的 DSH 工作区(仅可查看)
生成回复
   ↓  出站护栏(禁代码 / 禁路径 / 禁内网地址)
dws chat message send --ai-tag=false --idempotency-key
   ↓
对方看到「你」发的普通消息

插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证(package.json 中 license: MIT)。README 写明需 macOS,并完成 dws auth login;package.json 声明 DSH 兼容 >=0.2.1-rc.1 <0.3.0-0,Node ^22.19.0 || >=24.0.0。

核心功能

工作区绑定与联系人分组

设置页「监听分组」支持一个工作区挂多位联系人:每组一张卡,含工作区下拉与从钉钉通讯录搜索选中的成员(姓名 / openDingTalkId 只读)。每位联系人独立会话,上下文不串。生成时默认 agent.readOnly: true,子进程注入 DSH_PERMISSION_MODE=read-only,只在工作区查资料、不改文件。

三档运行模式与护栏

  • mode:draft 只出草稿;confirm 待人工确认;auto 允许真实发送(还需联系人级 autoReply 与总开关 enabled)。
  • 轮询间隔、每小时回复上限、两条最小间隔、回复字数上限、静默时段等可在设置页配置。
  • 出站护栏(guard.*)可禁代码、路径、内网地址等;默认回复格式为 Markdown,钉钉客户端渲染加粗、列表、小标题。
  • 可选 replyMarker(默认「(本条由助手代答)」)附在每条发出消息末尾;留空则不加。

模拟回答与待确认队列

「模拟回答」粘贴对方可能发来的消息,走真实生成通道但不发送,便于预览 1–3 分钟量级的查资料型回答。「待确认草稿」可逐条发送或丢弃;「最近草稿 / 最近审计」用于回看为何回复或未回复。

配图与附件(可选)

模型可输出结构化 [[render:table|...]] / bar / flow / steps 块,由宿主侧 Python + Pillow 渲染为 PNG 再发(需 render.enabled)。附件通过 [[attach:相对路径]] 引用工作区内允许类型的文件(默认关闭)。表格与代码围栏在钉钉 Markdown 中渲染不佳,提示词侧已约束模型避免输出。

安装与启用

前置条件

  1. 已安装 dws(dws --version 有输出)。
  2. 在本机终端完成个人 OAuth(勿在 Agent 沙箱执行,否则会因无法写 ~/.dws 而 EPERM):
dws auth login          # 扫码授权
dws auth status         # 应返回 "authenticated": true
  1. 有一个可绑定的 DSH 工作区(侧栏中的工作区,例如 my-workspace)。

安装插件

官方 README 示例为将本地克隆或下载的插件目录加入 profile(路径按你的实际目录修改;日常桌面版 profile 名为 desktop):

dsh plugin --profile desktop add ~/projects/dsh-dingtalk-self

然后重启 DSH App 并刷新页面,打开 设置 → 钉钉代答(侧栏 order=45)。

装好后建议检查(README 原文):

python3 -c "import json;d=json.load(open('$HOME/.dsh/profiles/desktop/package.json'));print('deps:', 'dsh-dingtalk-self' in d['dependencies'], 'bundles:', 'dsh-dingtalk-self' in d['dsh']['profile']['bundles'])"
cat ~/.dsh/data/dsh-dingtalk-self/boot.log   # 应有一行 version=0.2.0 ... schema=yes

若 dsh 不在 PATH,可使用 macOS 应用内全路径:/Applications/DeepSeek\ Harness.app/Contents/Resources/runtime/cli/bin/dsh。

卸载示例:

dsh plugin --profile web remove dsh-dingtalk-self

配置当前多落在 ~/.dsh/data/dsh-dingtalk-self/config.json(设置页「配置来源」会标明);宿主若提供可写 settings.update,插件会优先走 DSH 原生 settings。

典型用法

最小启用步骤

README 建议顺序:

  1. enabled=true(总开关,默认关)。
  2. 在「监听分组」增加联系人并选择绑定的 workspaceId。
  3. mode=draft,先只看草稿,确认内容与口吻后再改为 confirm 或 auto,并按需打开联系人级「允许真实发送」。

设置页 HTTP 契约

客户端通过插件注册的同源端点与宿主通信(节选):

GET  /dsh-dingtalk-self/api/state
POST /dsh-dingtalk-self/api/config     { patch }
POST /dsh-dingtalk-self/api/cycle              {}   // 立即检查一次
POST /dsh-dingtalk-self/api/test-reply         { message }   // 模拟回答,不发送
POST /dsh-dingtalk-self/api/contacts/search   { query }

「运行状态」区提供 dws 登录态、急停、立即检查一次、上次检查结果与一键自检(Node、状态目录、dws、个人身份登录、工作区、联系人绑定六项)。

回复格式示例

Markdown 模式下,agent 输出经 lib/core/format.js 归一化后由钉钉渲染。README 中同一接口问题的示例结构为:先一句结论,再用 ### 小标题与 - 列表分块(正文不含表格与代码围栏,以免钉钉渲染异常)。

适用场景与注意

适合:你已用 DSH 维护项目/知识工作区,同事常钉钉私聊问技术或流程问题,希望代答内容来自工作区只读检索,且对外显示为你本人消息而非机器人。

务必注意:

  • 插件依赖 dws 个人身份读私聊、发消息;权限边界是你账号能看到的私聊与 CLI 能力,不是企业管理员代管的机器人 scope。
  • 默认 enabled=false、mode=draft;生产环境建议先草稿 / 确认,并设置 limits.maxRepliesPerHour、quietHours 与出站护栏。
  • agent.timeoutSeconds 默认 240 秒;查资料型回答 README 说明通常需 1–2 分钟,不宜调过小。
  • 重装或改插件代码后需重启 DSH App 才会重新装配客户端半边(Host 侧改代码不会热重载)。
  • DeepSeek Harness 生态理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-dingtalk-self 把「钉钉私聊 → DSH 工作区只读 agent → 本人账号回复」收成一条可配置的 DSH 工作流插件:分组绑定联系人、草稿/确认/自动三档、模拟回答与审计,并可选 Markdown 排版与宿主侧表格/流程图渲染。进一步了解与 issue 请见 GitHub 仓库 与 SkillHub 插件页。

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

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

Xiaoye