xmanrui/dsh-im
通过扫码或机器人凭据将IM机器人接入DeepSeek Harness(支持飞书、微信、钉钉、企业微信、QQ、Slack、Telegram、Discord和WhatsApp)。
项目介绍Project Overview
DSH-IM 是 DeepSeek Harness 插件,把聊天平台与 Harness 关联。它在一个设置页内集中管理九个内置渠道(微信、飞书、钉钉、企业微信、QQ、Slack、Telegram、Discord、WhatsApp)与 AI Office Connector,绑定机器人、工作区与 Agent Preset,跨渠道复用 Session 与图片识别,支持流式回复与进度提示。适用场景:在 IM 中调用本地 Harness Agent。注意事项:IM RPC 涉及多用户可见范围与 Session 元数据,仅面向可信用户开放。
DSH-IM is a DeepSeek Harness plugin that links chat platforms to a Harness Host. It provides a single settings page managing nine built-in channels (WeChat, Feishu, DingTalk, Work WeChat, QQ, Slack, Telegram, Discord, WhatsApp) plus an AI Office Connector, binding bots, workspaces, and Agent Presets while reusing Sessions and image recognition across channels, with streaming replies and progress indicators. Use it to drive a local Harness Agent from IM chats. Caveat: IM RPC exposes bot state and Session metadata to any message-sending user, so restrict access to trusted users.
请帮我了解并安装插件:【dsh-im】【https://github.com/xmanrui/dsh-im】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add -w @xmanrui/dsh-im
把 xmanrui/dsh-im 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
简介
通过扫码、App Manifest 或已有机器人凭据把 IM 机器人接入 DeepSeek Harness,并让本机 Harness 主动连接公网 AI Office。一个插件、一个设置入口,统一管理九种 IM 渠道和 AI Office Connector。每个 IM 渠道都支持接入多个机器人,各机器人的连接状态、工作区和会话绑定彼此独立。
Connect IM bots to DeepSeek Harness by scanning a QR code, using an App Manifest, or entering existing bot credentials, and let the local Harness connect outward to a public AI Office. One plugin and one settings entry manage nine multi-bot IM channels and the AI Office Connector.
界面

当前内置渠道
| 渠道 | 接入方式 | 消息与回复 |
|---|---|---|
| 飞书 | 扫码创建机器人,或使用 App ID + App Secret 手动绑定 | 长连接接收消息;通过飞书流式卡片显示思考、工具进度和回答 |
| 微信 | 使用微信扫码绑定机器人 | 腾讯 iLink 长轮询收发消息;等待 Harness 回答时显示“正在输入”,最终回复按 1,800 字符分段发送 |
| 钉钉 | 扫码创建机器人,或使用 Client ID + Client Secret 手动绑定 | 钉钉 Stream 长连接;通过 AI Card 流式显示回答 |
| 企业微信 | 使用企业微信 App 扫码创建智能机器人,或使用 Bot ID + Secret 手动绑定 | 官方 WebSocket 长连接;原生显示“正在思考中”、工具执行进度和流式回答 |
| 使用手机 QQ 扫码创建机器人,或使用 AppID + AppSecret 手动绑定 | WebSocket 长连接;私聊显示“正在输入”并以单条 Markdown 回复,群聊被 @ 后只发送最终答案 | |
| Slack | 使用预置 App Manifest 创建应用,再填写 Bot Token(xoxb-)和 App Token(xapp-) |
Socket Mode 长连接;私聊直接回复,频道被 @ 后响应,优先使用官方流式消息 API |
| Telegram | 使用 @BotFather 生成的 Bot Token | Bot API 长轮询;默认私聊直接响应、群聊被提及或回复时响应,也可为每个机器人独立启用私聊白名单安全模式;私聊通过 Rich Message Draft 流式预览并持久化最终富消息,群聊和 Topic 原位完成占位消息,平台不支持时回退为普通文字 |
| Discord | 使用 Developer Portal 生成的 Bot Token | Gateway v10 长连接;私信直接回复;服务器文字/公告频道首次 @ 后创建原生 Thread,后续在线程中无需重复 @,并通过编辑消息流式显示回答 |
| 使用手机 WhatsApp 扫码关联设备 | WhatsApp Web 长连接;默认仅响应账号自聊,也可切换到指定联系人或开放响应模式;显示已读和“正在输入”,再发送最终回答 |
其他 IM 平台可继续按同一渠道适配器结构接入。
九个内置渠道均支持把 JPEG、PNG、WebP 图片,以及以图片文件方式发送的 GIF,连同可选文字说明发送给 Harness;单张图片上限为 5 MB,单条消息中的图片总大小上限为 20 MB。飞书下载用户消息中的图片或文件需要租户权限 im:message:readonly,确认页将其显示为“获取单聊、群组消息”;飞书目前没有为该下载接口提供仅限图片的更窄权限。扫码新建的应用会默认申请;已有或手动绑定的应用可私聊机器人执行 /repair,或在「IM机器人」设置页点击“补全权限”,扫码增量补全该权限、上传机器人图片或文件所需的 im:resource,以及卡片回调。
结果文件与图片回传
九个内置渠道均已实现把 Harness 可读取的文件作为渠道原生附件回传。已有文件和当前任务新生成的文件都可以直接发送;该能力对所有已连接机器人默认可用,无需开关或机器人白名单,原有文字、图片、流式回复、命令和会话行为保持不变。
模型调用文件回传工具后,插件把指定文件交给当前渠道的原生接口。图片会优先以原生图片消息呈现;渠道不支持或明确拒绝图片发送时自动回退为文件附件,发送结果不确定时不会补发文件造成重复消息。插件不额外设置文件来源、创建时间、工作区边界、扩展名、内容、数量、大小或有效期规则;文件只需真实存在且可读取。渠道平台仍可能依据自身权限、配额、文件能力或账号等级拒绝发送,插件会按平台返回结果提示。
| 渠道 | 平台要求 |
|---|---|
| 微信 | 当前绑定协议和会话需支持原生文件消息,实际可发送范围以微信接口返回为准。 |
| 飞书 | 飞书文件上传接口要求文件非空且不超过平台 30 MB;应用需有租户权限 im:resource(“读取与上传图片或文件资源”)。内置扫码流程新建应用时默认申请该权限;已有或手动绑定的应用可通过“补全权限”或私聊 /repair 增量补全并完成飞书要求的审批。飞书开发者后台当前没有单独的 im:resource:upload 权限。 |
| 钉钉 | 应用需开通 qyapi_base,机器人需具备文件消息能力;实际格式和大小以当前 OAPI 与机器人能力返回为准。 |
| 企业微信 | 应用需具备素材上传和文件消息能力,实际可发送范围以企业微信接口返回为准。 |
| 机器人需具备文件消息能力,并受 QQ 当日文件上传配额约束;额度耗尽时会明确提示稍后重试。 | |
| Slack | Bot Token 需有 files:read、files:write 和 reactions:write;实际文件大小上限由 Workspace 当前策略决定。已有 App 新增或变更 Scope 后,必须重新授权/安装 App 并重新连接机器人。 |
| Telegram | 机器人必须能在当前聊天发送文档,实际可发送范围以 Bot API 返回为准。 |
| Discord | Developer Portal 的 Bot 设置中需启用 Message Content Intent;机器人需有 Send Messages、Create Public Threads、Send Messages in Threads 和 Read Message History 权限;发送结果文件还需 Attach Files。实际附件额度由当前账号与服务器能力决定。 |
| 当前绑定会话需支持 Document Message,实际可发送范围以 WhatsApp/Baileys 返回为准。 |
AI Office Connector
「AI Office」页让本机 Harness 主动连接公网 Office,本机无需公网 IP、端口转发或 WebSocket 服务。Device Token 只写入 Harness 凭据存储;普通配置文件仅保存设备 ID、Office Origin、工作区 alias 和 Instruction Preset alias。Office 只能选择 alias,不会收到本机绝对路径。
当前协议版本为 office-harness.v1。连接器使用 POST /api/harness/connector/heartbeat 完成鉴权和能力握手,再以 GET /api/harness/connector/stream 建立 SSE 下行;设置页会从 Office Base URL 自动展示全部固定 Hook,并在断线后按退避策略自动重连。
Office 的 job.available 会触发本机拉取任务、校验 Workspace/Preset alias、领取 90 秒租约并每 30 秒续租。连接器创建独立 Harness Session,把状态、工具名和增量文字安全回传 Office,终态只允许写入一次。Harness 发起的工具审批或补充问题会进入 Office 人工面板;批准、拒绝或文字答案再经 SSE 回到原 Session,断线时由租约与 Heartbeat 恢复。
Heartbeat 成功响应必须是 JSON:{"ok":true,"protocolVersion":"office-harness.v1"}。这使「连接测试通过」代表命中了兼容的 Office Connector,而不只是某个碰巧返回 200 的网址。
安装
推荐从 npm 安装已发布的稳定版本:
dsh plugin --profile web add -w @xmanrui/dsh-im
重启 dsh web、刷新浏览器,然后打开「设置 → IM机器人」。IM机器人使用 order: 21,尽量排在一级设置菜单的「Agent 预设」之后;插件页面不再保留旧入口。从旧版升级不会改变已有机器人、凭据、工作区、Agent Preset 或会话绑定。
如需试用尚未发布到 npm 的最新代码,可以改用 GitHub 源安装器:
npx -y github:xmanrui/dsh-im install
GitHub 源安装会直接拉取并构建 Git 依赖;pnpm 10 及以上版本可能要求先在 profile 的 pnpm-workspace.yaml 中允许该依赖执行构建脚本。普通用户建议优先使用 npm 稳定版。
安装后,在对应渠道页面按照内置引导完成扫码或凭据配置。所有 Secret 和 Token 只提交给本机 Harness Host,并写入受保护的凭据存储;状态接口和机器人列表不会回传这些凭据。
如果本机必须通过正向代理访问飞书,请在启动 dsh web 前把 HTTPS_PROXY 设置为包含协议的 HTTP 代理 URL(例如 http://proxy:8080;也支持小写 https_proxy,并兼容使用 HTTP_PROXY 作为回退),修改后重启 Host。飞书注册和凭据验证会复用 SDK 的代理感知 HTTP 客户端,消息长连接会显式通过这个代理建立 WebSocket;长连接目前不读取 ALL_PROXY 或 NO_PROXY。
如果本机无法直连 Telegram Bot API,请使用 Node.js 22.21 或更高版本,并在启动 dsh web 前启用 Node 的环境变量代理支持:
NODE_USE_ENV_PROXY=1 \
HTTPS_PROXY=http://proxy:8080 \
HTTP_PROXY=http://proxy:8080 \
NO_PROXY=localhost,127.0.0.1 \
dsh web
代理地址按本机网络环境填写;修改代理后需要重启 Host。绑定 Telegram Bot Token 时,如果页面提示无法访问 Bot API,请优先检查代理地址、Node.js 版本和 NO_PROXY 配置。
| 默认行为 | 说明 |
|---|---|
| 机器人工作区 | 每个机器人独立保存工作区。新机器人默认使用 Host 当时的工作目录;之后可在机器人卡片中修改。 |
| Agent Preset | 每个机器人可在设置页卡片中选择 Agent Preset。未选择时跟随 Host 的 agent-presets.default;渠道级 config.agentPreset 只作为该渠道之后新接入机器人的默认值。切换不会修改或清空已有会话;若当前聊天已有会话,需先发送 /new,再发送一条普通消息,才会按新选择创建会话。 |
每个 Telegram 机器人都可以在自己的卡片中切换访问模式。旧机器人和新接入机器人均默认使用兼容模式:私聊直接响应,群聊仅在提及机器人或回复机器人消息时响应。只有主动切换到**安全模式(私聊白名单)**后,机器人才会忽略全部群聊,并只接受该机器人白名单中的数字 User ID。白名单每行一个 ID、按机器人独立保存;切回兼容模式时会保留但不使用,再切回安全模式即可继续使用。安全模式的空白名单会拒绝该机器人的所有入站消息。
每个 WhatsApp 机器人也有独立的访问模式。旧机器人升级后和新接入机器人都默认使用仅自己模式,只响应已绑定账号的自聊消息。指定联系人模式额外接受白名单电话号码的私聊并忽略群聊;号码需包含国家或地区代码,每行一个,可带开头的 +。开放响应模式响应所有私聊、已绑定账号自己发出的群聊消息,以及其他群成员对该账号的提及或回复;因此也可以把“仅自己”的群当作独立会话使用。切换模式会保留白名单;指定联系人模式的空白名单等同于仅自己模式。未授权消息会被静默忽略。
机器人命令
| 命令 | 作用 |
|---|---|
/help |
显示机器人支持的命令和用法。 |
/new |
解除当前聊天的会话绑定,让下一条普通消息开启全新 Harness 会话。 |
/status |
检查当前机器人与 DeepSeek Harness 的连接状态。 |
/version |
查看当前运行的 dsh-im 插件版本。 |
/models |
按序号列出当前配置的全部可用模型。 |
/model |
查看当前聊天绑定会话正在使用的模型和推理等级。 |
/model <序号或 Provider/模型ID> [推理等级ID] |
切换当前会话模型,并可同时指定目标模型支持的推理等级。 |
/reasoninglist、/reasonings |
等价命令;列出当前模型支持的推理等级。 |
/reasoning |
查看当前会话的模型和推理等级。 |
/reasoning <序号或等级ID> |
切换当前模型的推理等级。 |
/reasoning --default |
恢复当前模型的默认推理等级。 |
/presetlist |
按序号列出 Host 当前可用的 Agent Preset,并标记 Host 默认项和当前机器人的选择。 |
/preset |
查看当前机器人的新会话 Agent Preset 设置。 |
/preset <序号或 Preset ID> |
设置当前机器人的 Agent Preset;纯数字 ID 使用 /preset id:<ID>。 |
/preset --default |
清除当前机器人的显式选择,让后续新 Session 跟随 Host 默认。 |
/stop |
立即停止当前聊天正在运行的任务,并保留尚未开始的排队消息。 |
/steer <补充指令> |
把补充指令立即加入当前聊天正在运行的任务。 |
/batch |
在私聊中开启批量输入,最多收集 10 条纯文字消息。 |
/send |
将已收集的消息按原顺序作为一次输入提交。 |
/cancel |
取消批量输入并丢弃已收集的消息。 |
/repair |
在飞书私聊中增量修复卡片回调,并补全读取及上传消息图片或文件所需的权限。 |
/compact |
立即压缩当前聊天绑定会话的较早上下文。 |
/workspace <工作区绝对路径> |
切换当前机器人的 Harness 工作区。 |
/workspacelist |
列出当前 Harness Host 上仍然存在的工作区绝对路径。 |
/sessionlist [工作区序号或绝对路径] |
列出指定工作区登记的所有会话 ID 和标题;省略参数时使用当前工作区。 |
/session <Session ID> |
将当前聊天绑定到指定的已有 Harness 会话。 |
| 交互式提问 | 回复选项序号、选项文字或自定义文字;多选时用逗号分隔。 |
| 远程审批 | 回复 批准 / 拒绝 / 同意 / 不同意 / yes / no。 |
示例:先发送 /models,再发送 /model 2 切换到列表中的第 2 个模型;先发送 /reasoninglist,再发送 /reasoning 2 切换到当前模型的第 2 个推理等级;先发送 /presetlist,再发送 /preset 2 为当前机器人选择第 2 个 Agent Preset。其他命令示例:/help、/new、/status、/version、/model deepseek-official/deepseek-v4-pro max、/reasoning --default、/preset marketing-jeep、/preset --default、/steer 只检查配置文件、/stop、/compact、/workspace /Users/alice/projects/my-app、/sessionlist 2、/sessionlist /Users/alice/projects/my-app 或 /session session-id
Slack 桌面端若未注册同名的原生 Slash Command,会拦截直接以 / 开头的消息。此时请加一个前导空格发送,例如 /presetlist 或 /preset 2;插件命令层会去除首尾空白,执行效果与无空格命令相同。
命令说明
/help不需要参数,也不会创建会话;它会返回当前机器人支持的完整命令列表。/status不需要参数,也不会向模型发送消息或改变会话绑定;它用于确认当前机器人能够连接 DeepSeek Harness。/version不需要参数,也不会访问 Harness、创建会话或调用模型;它返回当前运行的 dsh-im 插件版本。/new只解除当前聊天在 dsh-im 中保存的会话绑定,不会删除、清空或归档旧 Session。下一条普通消息会在当前工作区创建并绑定一个新 Session。任务正在运行或等待问题、审批时,应先完成交互或使用/stop,再使用/new。/models不需要参数,也不会创建会话。它为 Harness 当前配置的全部可用模型分配序号,同时显示可稳定复制的Provider/模型ID;某个 Provider 查询失败时,其他 Provider 的结果仍会显示。/model不带参数时查看当前会话的模型和推理等级;带参数时接受/models列出的序号或精确完整模型 ID,并可追加目标模型元数据公布的精确推理等级 ID,例如/model 2 max。省略推理等级时,由 Harness 解析目标模型的当前默认值。聊天尚无会话时,有效的切换命令会创建并绑定一个空白会话,但不会触发模型回复。/reasoninglist和/reasonings完全等价,按当前模型的元数据列出可选推理等级并标记当前值和默认值。/reasoning查看当前值;/reasoning <序号或等级ID>接受列表序号或元数据中的精确 ID;/reasoning --default让 Harness 重新采用当前模型的默认推理等级。所有/reasoning...命令都要求当前聊天已有 Session,不会自行创建 Session 或触发模型回复。- 正在运行任务或等待审批、问题回答时不能修改模型或推理等级;请等待完成,或先使用
/stop。修改从下一次模型请求起生效,并沿用 Harness 的默认保存语义:Harness 会尝试把已接受的模型和推理等级保存为以后新会话的默认选择,已有其他会话不受影响。含图片的会话无法切换到不支持图片输入的模型。 /presetlist不需要参数,也不会创建会话。它每次都读取 Host 当前可用的 Agent Preset,显示名称、稳定 ID、Host 默认项和当前机器人的选择;已删除或损坏的当前选择会保留并标记为“已不可用”,不会被自动清除。列表只公开安全的名称和 ID,不公开 Preset 路径、错误或其他 Host 内部字段。/preset不带参数时查看当前机器人的“新会话设置”,不是查看或修改当前 Session。带参数时接受最近一次/presetlist在当前聊天中显示的序号或完整 ID;纯数字 ID 使用/preset id:<ID>。选择序号时会先按该次列表解析 ID,再用 Host 最新目录复验,目录已经变化时会要求重新列出。/preset --default清除当前机器人的显式覆盖值,让以后新建的 Session 在创建时跟随 Host 当前默认;显式选择一个恰好等于 Host 默认的 ID 则会固定该 ID。目录暂时不可读时仍可恢复为跟随 Host 默认。- Agent Preset 修改是机器人级配置,会影响该机器人所有聊天以后创建的新 Session,但不会修改、停止、解绑或重建已有 Session,也不会自动执行
/new。若当前聊天已有会话,继续发送消息仍使用原 Session;发送/new后的下一条普通消息才会按新设置创建 Session。任务正在运行或等待交互时也可查询或修改 Preset,因为命令不会触碰当前 Session。 /stop和/steer只控制当前聊天自己发起的运行任务,即使多个聊天绑定同一个 Session,也不会有意控制其他聊天的任务。/stop不删除会话或历史,并保留尚未开始的排队消息;重复发送是安全的。/steer只接受文字,可包含多行;它不会创建新会话或第二个任务。没有运行任务时请直接发送普通消息;等待审批或问题回答时请先处理交互,或使用/stop。/batch、/send和/cancel仅在与机器人的私聊中可用。发送/batch后,接下来的纯文字消息会暂存,最多 10 条;第 10 条仍会收录并提示提交,之后的消息不会收录,也不会自动提交。发送/send后,机器人会按原顺序将整批内容作为一次输入处理;发送/cancel会直接丢弃当前批次。图片、文件和其他命令不会被收录。机器人重启会丢失尚未提交的批次。未进入批量输入模式时,普通聊天流程不变。- 飞书
/repair仅在私聊中可用,并与其他命令一样只服从当前飞书机器人的渠道访问策略;插件不另行区分管理员和普通用户。它最多增量补全card.action.trigger、im:message:readonly和im:resource,确认页只显示当前应用缺少的项。授权页必须由在飞书开放平台中有权访问目标应用的账号打开。普通/repair会启动修复;若旧任务仍在等待授权,会先作废旧的一次性链接再生成新链接。发送/repair qr获取当前链接的二维码,/repair status查询当前任务,/repair verify重新查询验证状态,/repair cancel取消任务;这四个补充命令均不会另起授权。平台已接受更新、正在等待测试按钮回调时,不会并发启动第二次修复。 /compact只作用于当前聊天已经绑定的 Harness 会话,不会把命令发送给模型。当前聊天尚未创建会话、会话正在生成回复或没有可压缩历史时,机器人会直接返回对应状态。- 只接受已经存在的绝对目录;路径无效时机器人会返回具体提示和正确用法。
/workspacelist不需要参数。它合并 Harness 全局登记项与当前机器人的路径;当前路径仍存在且可安全显示时会排在首位并标记为“当前”。结果可直接复制到/workspace命令。/sessionlist的数字参数按命令执行时与/workspacelist相同的最新顺序解析;也可使用绝对路径直接指定工作区。结果会回显最终选中的路径。/sessionlist会列出该工作区登记的所有会话。已归档会话会标记为“已归档”;空白会话和子代理会话在它们归属该工作区时也会列出;没有标题的会话显示为“暂无标题”。结果中的 ID 可直接用于/session Session ID。/session只接受一个由/sessionlist获得的 Session ID。它不会新建会话或立即向模型发送消息;绑定成功后,当前聊天的后续消息会继续该会话。普通归档会话可以绑定但不会自动取消归档,子代理会话不能绑定。/session会自动定位会话唯一所属的工作区。同工作区绑定只替换当前聊天的映射;跨工作区绑定会切换该机器人的工作区、清除该机器人所有聊天的旧会话映射,再绑定当前聊天,因此会影响该机器人的其他聊天。已经开始生成的回复仍可完成。- 工作区切换和会话绑定只会清除或替换 dsh-im 的聊天映射,不会删除、清空或归档任何旧 Session 内容;旧 Session 仍可再次列出和绑定。
- 任何通过当前渠道访问策略的用户都可以执行这些命令,不另行区分管理员和普通用户。Telegram 兼容模式遵循原有私聊及群聊提及/回复规则;安全模式只允许当前机器人白名单中的私聊用户执行。WhatsApp 仅自己模式只接受自聊,指定联系人模式接受自聊和白名单私聊,开放响应模式接受所有私聊、已绑定账号自己发出的群聊消息,以及其他群成员的提及或回复。
- Agent Preset 名称和 ID 来自同一个 Harness Host,且任何有命令权限的用户都能修改该机器人所有聊天未来新 Session 的 Preset;请只向可信用户开放
/presetlist和/preset。 - 工作区列表来自 Harness Host 的全局登记信息,可能包含其他机器人、其他渠道或非 IM 项目的本机绝对路径。请将机器人可见范围限制给可信用户。
- 会话列表同样来自该全局 Harness Host;会话 ID 和标题可能属于其他机器人、其他渠道或非 IM 项目,并可能包含敏感元数据。开放命令前请确保所有可见用户都可信。
- 任何能执行
/session的用户都能接续所选会话,并通过后续消息写入会话或触发其可用工具。请只向可信用户开放机器人及其会话列表。 - 切换成功后只清除当前机器人的旧 Harness 会话映射,不影响其他机器人。
- 新工作区对后续消息生效;已经开始生成的回复会继续完成。
其它功能
- 图片识别:九个内置渠道都可以把 JPEG、PNG、WebP,以及以图片文件方式发送的 GIF 交给 Harness;图片可以附带文字说明。单张图片上限为 5 MB,单条消息中的图片总大小上限为 20 MB。
- 在机器人卡片切换工作区:设置页中的每张机器人卡片都会显示当前 Harness 工作区。可以直接填写已有目录的绝对路径,也可以打开目录选择器。切换只清除该机器人的旧聊天映射,不会删除、清空或归档旧 Session;已经开始的回复可以继续完成,后续消息使用新工作区。
- 在机器人卡片选择 Agent Preset:设置页中的每张机器人卡片都可以选择 Host 已有的 Agent Preset,或跟随 Host 默认。切换只作用于该机器人,并且只影响之后新建的会话;已有会话和正在生成的回复不受影响。
- 检查连接并发送测试消息:机器人在线时,点击卡片上的「检查连接」会检查平台连接,并向该机器人最近记录的私聊发送一条“DeepSeek Harness 连接测试成功”消息;WhatsApp 会发送到账号自聊。测试消息不会创建 Harness Session,也不会调用模型。机器人必须至少收到过一条私聊才能记住测试目标,否则页面会提示尚无可用的测试会话。
- 重试连接和移除接入:机器人离线时,卡片上的操作会变为「重试连接」;不再使用时可以点击「移除接入」。这些操作都只作用于所选机器人,不影响其他机器人或渠道。
- 多机器人独立管理:同一渠道可以接入多个机器人。每个机器人分别保存凭据、连接状态、工作区、Agent Preset 和聊天会话映射,卡片上的工作区、Preset、连接检查、重试和移除操作互不影响。
- 流式回复和进度提示:插件会按各平台能力显示正在思考、工具执行和逐步生成的回答;不支持原生流式接口的平台会通过编辑消息、卡片更新或最终消息完成回复。
设计
- Harness 一级设置菜单中只注册一个「IM机器人」设置页,其中包含九个 IM 渠道和一个 AI Office Connector;
- 九个渠道及 Office Connector 的 Host、客户端与运行时源码都在本仓库维护,不依赖外部独立插件;
- 设置页跟随 DeepSeek Harness 的语言选择,在中文和 English 之间即时切换;机器人发出的聊天消息跟随 Host 的
language配置(默认中文;设为en即为英文),中文始终为兜底,未收录的文案原样输出; - 左侧使用 Logo 切换微信、飞书、钉钉、企业微信、QQ、Slack、Telegram、Discord、WhatsApp 和 AI Office,不使用启用/停用开关;
- 九个 IM 渠道保持独立的 RPC、凭据、连接监督和会话映射;Office Connector 另行维护设备凭据、Job 租约、审批等待与并发上限;
- 浏览器只获得二维码、Manifest、脱敏状态,以及用户为当前 Telegram 或 WhatsApp 机器人主动保存的访问模式和白名单标识;手动输入的 Secret 或 Token 仅单向提交给本机 Host,任何 RPC 响应都不会返回 App Secret、
bot_token、钉钉client_secret、企业微信 Secret、QQapp_secret、Slack Bot/App Token、Telegram/Discord Bot Token、WhatsApp 关联设备密钥、AI Office Device Token,或从平台消息中观察到的其他原始用户标识。
本地开发
npm install
npm run check
node bin/dsh-im.mjs install --source .
npm run check 运行单元测试、构建 Host/Client 产物,并验证发布包不包含凭据或独立渠道设置页注册。
IM 管理 RPC 默认仅接受回环浏览器。如果 Web profile 在受信任的局域网内对外提供服务,可在该 profile 的 cordis.patch.yml 中显式开放给 Connection 已信任的 Host authority:
- id: xmanrui-dsh-im
config:
rpcAuthority: trusted-host
trusted-host 只复用 Harness 的 Host/Origin 防护,不是用户认证。启用后,能访问该局域网地址的人也能查看机器人状态、扫码或提交应用凭据、重连和删除机器人;只应在可信网络中使用。
聊天消息语言
机器人发出的聊天消息默认使用中文。要切换为英文,在插件配置中设置 language: en(也接受 en-US、english),或设置环境变量 DSH_IM_LANGUAGE=en:
- id: xmanrui-dsh-im
config:
language: en
未设置时保持中文;中文始终是兜底语言,任何未收录到英文词典的文案都会原样以中文输出,因此该功能不会改变现有中文用户的行为。
联系方式
欢迎通过邮箱、微信或小红书联系我。
| 邮箱 | 微信 | 小红书 |
|---|---|---|
| longmanr307@gmail.com |
|
|


nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill