把 AI 助手接入飞书与 Telegram 等聊天平台
32.2/100
综合分
3
GitHub 星标
276
npm 周下载
—/5
用户评分
数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/shrekcg/dsh-im-channel.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 75 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-im-channel @ 0.2.1
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 06:42:38
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 69 处,展示前 56 条)
- 执行外部命令来自配置/变量src/plugin.js:25
const child = spawn(process.execPath, [bridgeEntry], { - 发起网络请求src/plugin.js:38
const probe = http.get({ host: '127.0.0.1', port: config?.statusPort || 8899, timeout: 800 }, (res) => { - 执行外部命令来自配置/变量src/tools/mcp-server.js:56
const child = spawn(LARK_CLI, args, { - 读取本地文件src/config.js:47
if (fs.existsSync(p)) { - 读取本地文件src/config.js:48
return JSON.parse(fs.readFileSync(p, 'utf8')); - 读取密钥环境变量src/config.js:60
appSecret: process.env.LARK_APP_SECRET || '', - 执行外部命令来自配置/变量src/session.js:61
const child = spawn(bin, args, { stdio: ['ignore', 'pipe', 'pipe'], detached: true, ...opts }); - 写入本地文件src/inbound/media.js:44
fs.mkdirSync(dir, { recursive: true }); - 读取本地文件src/inbound/media.js:59
if (fs.existsSync(finalPath)) fs.rmSync(finalPath); - 写入本地文件src/inbound/media.js:60
fs.renameSync(localPath, finalPath); - 读取本地文件src/inbound/media.js:135
if (fs.existsSync(path.join(dshHome, 'profiles', profile, 'node_modules', 'visionpower'))) { - 读取本地文件src/inbound/media.js:143
const settings = fs.readFileSync(path.join(dshHome, 'settings.yaml'), 'utf8'); - 读取本地文件src/commands/slash.js:57
if (!fs.existsSync(sessionsRoot)) return false; - 读取本地文件src/commands/slash.js:59
const entries = fs.readdirSync(sessionsRoot, { withFileTypes: true }); - 读取本地文件src/commands/slash.js:65
if (fs.existsSync(target)) { - 删除本地文件src/commands/slash.js:66
fs.rmSync(target, { recursive: true, force: true }); - 读取本地文件src/commands/slash.js:77
if (fs.existsSync(settingsPath)) { - 读取本地文件src/commands/slash.js:78
const src = fs.readFileSync(settingsPath, 'utf8'); - 读取本地文件src/commands/slash.js:89
if (!fs.existsSync(settingsPath)) return { ok: false, error: 'settings.yaml 不存在' }; - 写入本地文件src/commands/slash.js:93
fs.writeFileSync(settingsPath + '.bak', src); - 写入本地文件src/commands/slash.js:99
fs.writeFileSync(settingsPath, replaced); - 执行外部命令来自配置/变量src/commands/slash.js:217
const r = spawnSync(process.execPath, [path.join(__dirname, 'features.js')], { - 执行外部命令来自配置/变量src/commands/slash.js:226
const r = spawnSync(process.execPath, [path.join(__dirname, 'doctor.js')], { - 执行外部命令来自配置/变量src/core/scope-manager.js:47
const child = spawn(cmd, args, { - 读取密钥环境变量src/channel/dingtalk.js:25
this.appKey = config.dingtalkAppKey || process.env.DINGTALK_APP_KEY || ''; - 读取密钥环境变量src/channel/dingtalk.js:26
this.appSecret = config.dingtalkAppSecret || process.env.DINGTALK_APP_SECRET || ''; - 请求外部主机api.dingtalk.comsrc/channel/dingtalk.js:34
const r = await fetch('https://api.dingtalk.com/v1.0/oauth2/accessToken', { - 发起网络请求src/channel/dingtalk.js:34
const r = await fetch('https://api.dingtalk.com/v1.0/oauth2/accessToken', { - 请求外部主机api.dingtalk.comsrc/channel/dingtalk.js:86
const r = await fetch('https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend', { - 发起网络请求src/channel/dingtalk.js:86
const r = await fetch('https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend', { - 读取密钥环境变量src/channel/discord.js:24
this.token = config.discordBotToken || process.env.DISCORD_BOT_TOKEN || ''; - 发起网络请求src/channel/discord.js:29
const r = await fetch(`${API}${path}`, { - 读取密钥环境变量src/channel/slack.js:24
this.botToken = config.slackBotToken || process.env.SLACK_BOT_TOKEN || ''; - 读取密钥环境变量src/channel/slack.js:25
this.appToken = config.slackAppToken || process.env.SLACK_APP_TOKEN || ''; - 请求外部主机slack.comsrc/channel/slack.js:30
const r = await fetch(`https://slack.com/api/${method}`, { - 发起网络请求src/channel/slack.js:30
const r = await fetch(`https://slack.com/api/${method}`, { - 读取密钥环境变量src/channel/telegram.js:27
this.token = config.telegramBotToken || process.env.TELEGRAM_BOT_TOKEN || ''; - 发起网络请求src/channel/telegram.js:36
const r = await fetch(`${this.api}/${method}`, { - 执行外部命令来自配置/变量src/commands/doctor.js:45
const r = spawnSync(cmd, args, { - 读取本地文件src/commands/doctor.js:65
if (fs.existsSync(plistPath)) { - 读取本地文件src/commands/doctor.js:72
if (fs.existsSync(plistPath) && !process.env.LARK_APP_SECRET) { - 读取密钥环境变量src/commands/doctor.js:72
if (fs.existsSync(plistPath) && !process.env.LARK_APP_SECRET) { - 读取本地文件src/commands/doctor.js:73
const xml = fs.readFileSync(plistPath, 'utf8'); - 读取本地文件src/commands/doctor.js:102
report('lark-cli', fs.existsSync(larkCli), larkCli, 'npm install -g @larksuite/cli'); - 读取本地文件src/commands/doctor.js:103
report('dsh', fs.existsSync(dshBin), dshBin, '请确认 DSH 已安装'); - 读取本地文件src/commands/doctor.js:104
const sdkOk = fs.existsSync(path.join(BRIDGE_DIR, 'node_modules', '@larksuite', 'channel')); - 执行外部命令来自配置/变量src/commands/features.js:29
const r = spawnSync(cmd, args, { - 读取本地文件src/commands/features.js:45
const cfg = JSON.parse(fs.readFileSync(path.join(BRIDGE_DIR, 'config.json'), 'utf8')); - 读取本地文件src/commands/features.js:51
const xml = fs.readFileSync(path.join(os.homedir(), 'Library', 'LaunchAgents', 'com.dsh.lark-bridge.plist'), 'utf8'); - 读取本地文件src/commands/features.js:83
if (!fs.existsSync(dir)) continue; - 读取本地文件src/commands/features.js:85
for (const name of fs.readdirSync(dir)) { - 读取本地文件src/commands/features.js:96
if (!fs.existsSync(runner)) return false; - 读取本地文件src/commands/features.js:97
const src = fs.readFileSync(runner, 'utf8'); - 发起网络请求web-plugin/lib/client.js:80
const r = await fetch(STATUS_URL, { cache: "no-store" }); - 发起网络请求web-plugin/lib/client.js:145
react_jsx_runtime.jsx("button", { className: "lb-btn", onClick: () => { fetch("http://127.0.0.1:8899/api/check", { method: "POST" }).then(() => load() - 发起网络请求web-plugin/lib/client.js:146
react_jsx_runtime.jsx("button", { className: "lb-btn danger", onClick: () => { if (confirm("确定移除飞书接入? bridge 将停止。")) fetch("http://127.0.0.1:8899/api/
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:api.dingtalk.com、slack.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 接入飞书等聊天平台
- 持久会话
- 流式卡片
将 DeepSeek Harness 接入飞书等即时通讯平台,提供持久会话、流式卡片与 40 个飞书 MCP 工具。
README
由 DeepSeek 最新模型翻译生成DSH ↔ IM Channel
将 DeepSeek Harness 接入飞书、钉钉、Telegram、Slack、Discord、QQ 等 IM 渠道的统一通道
CI
License: MIT
Node
Tools
Market
English 中文
项目简介
DSH ↔ IM Channel 是一个把 DeepSeek Harness(DSH,AI Agent 运行时)接入多个 IM 渠道(飞书/钉钉/Telegram/Slack/Discord/QQ 等)的统一双向通道插件。它在飞书里为你的 AI 助手提供「原生应用」般的完整体验:
- 💬 持久对话:跨消息上下文记忆,话题隔离,群聊/私聊
- ⌨️ 真流式输出:边生成边显示,平滑打字机效果
- 🛠️ 40 个飞书对象工具:agent 可直接操作文档、表格、日历、任务、邮件等
- 🧩 可插拔插件形态:不侵入 DSH 核心,一键安装/卸载
对齐 OpenClaw 飞书官方插件 的能力与体验,但基于 DSH 生态构建。
✨ 功能特性
🌐 支持渠道
⚠️ 诚实标注:当前稳定可用的是飞书与 Telegram(完整收发)。钉钉/Slack/Discord 为实验性/半可用(见下方状态),QQ/微信/WhatsApp 未提供适配器(不在本版本范围)。
展开完整文档(README 剩余 1 节)
DSH ↔ IM Channel 将 DeepSeek Harness 接入飞书、钉钉、Telegram、Slack、Discord、QQ 等 IM 渠道的统一通道 CI License: MIT Node Tools Market English 中文 项目简介 DSH ↔ IM Channel 是一个把 DeepSeek Harness(DSH,AI Agent 运行时)接入多个 IM 渠道(飞书/钉钉/Telegram/Slack/Discord/QQ 等)的统一双向通道插件。它在飞书里为你的 AI 助手提供「原生应用」般的完整体验: - 💬 持久对话:跨消息上下文记忆,话题隔离,群聊/私聊 - ⌨️ 真流式输出:边生成边显示,平滑打字机效果 - 🛠️ 40 个飞书对象工具:agent 可直接操作文档、表格、日历、任务、邮件等 - 🧩 可插拔插件形态:不侵入 DSH 核心,一键安装/卸载 对齐 OpenClaw 飞书官方插件 的能力与体验,但基于 DSH 生态构建。 ✨ 功能特性 🌐 支持渠道 ⚠️ 诚实标注:当前稳定可用的是飞书与 Telegram(完整收发)。钉钉/Slack/Discord 为实验性/半可用(见下方状态),QQ/微信/WhatsApp 未提供适配器(不在本版本范围)。 | 渠道 | 状态 | 接入方式 | | 飞书 📘 | ✅ 完整支持(主力) | WebSocket 长连接(开放平台建应用) | | Telegram ✈️ | ✅ 完整支持 | BotFather 聊天内创建(最简单) | | Slack 🟣 | 🟡 半可用(接收需 @slack/socket-mode 依赖) | Socket Mode | | Discord 🎮 | 🟡 半可用(接收需 discord.js 依赖) | Gateway(bot token) | | 钉钉 📱 | 🟡 实验(Stream 接入未完整实现) | 需 @alicloud/dingtalk-stream | 在飞书里发 /channels 查看全部渠道及接入步骤,或 /channels add 获取引导。 💬 对话体验 | 特性 | 说明 | | 持久会话 | 跨消息上下文记忆(DSH agents.resume) | | 话题隔离 | 每个话题独立上下文,如从主线 fork | | 群聊支持 | 不 @ 也响应,或按群细粒度策略(白名单/仅@) | | 思考表情 | 收到消息显示 THINKING,回复后自动移除 | | 真流式输出 | 边生成边显示,平滑打字机(自适应节奏) | | 底部耗时 | 回复底部小字「已完成 · 耗时 xx」,对齐 OpenClaw | | @ 用户渲染 | 回复中可 @ 用户/所有人(原生 mention) | | Bot 互 @ | 支持 bot 间对话(可配置) | 📎 消息能力 | 特性 | 说明 | | 多媒体收发 | 图片/文件/音频/视频下载与发送 | | 合并转发 | 合并转发消息识别与展开 | | 表情反馈 | 👍/❤️ 等表情反馈给 agent | | 文档评论@ | 文档评论中 @ 机器人触发对话 | 🛠️ 飞书对象工具(MCP × 40) 通过 Model Context Protocol 暴露 40 个飞书工具,agent 以 mcp__feishu__ 原生调用: | 类别 | 工具 | | 消息 | send_message read_messages search_chats get_chat_members search_messages read_thread_messages | | 文档 | read_document create_document update_document doc_insert_media doc_list_comments | | 日历 | calendar_agenda create_calendar_event calendar_freebusy calendar_search_events calendar_add_attendee | | 任务 | get_my_tasks create_task task_create_subtask task_get_detail task_related task_add_comment | | 多维表格 | base_read_records base_create_table base_create_record base_create_field base_create_view | | 电子表格 | sheets_read | | Wiki | wiki_search wiki_list_spaces wiki_create_node | | 邮件 | mail_list mail_send | | 云盘 | drive_search drive_list_folder | | 妙记/审批/搜索 | minutes_search approval_list_todo search_docs | | 通讯录 | get_user_info | 🧩 平台能力 | 特性 | 说明 | | 多账号多机器人 | 一个进程管理多个飞书 bot,session 自动隔离 | | 可插拔插件 | 一键安装/卸载,不侵入 DSH 核心 | | 初始化向导 | npm run setup 6 步引导(应用/权限/授权/事件订阅) | | 诊断自修复 | npm run doctor 21 项检查 + --fix 自动修复 | | 功能清单 | npm run features 查看各能力配置状态 | | 权限管理 | 自动检测缺失权限,生成一键申请链接 | | CI | GitHub Actions 自动测试 + MCP 冒烟验证 | | 渠道状态页 | 内置 HTTP 状态页,实时查看飞书在线/账号/健康(http://127.0.0.1:8899)| | IM 机器人设置页 | DSH 设置页「插件」内新增 IM 机器人 tab,展示渠道状态(web-plugin/)| | 斜杠命令 | 飞书对话内直接使用 /new /compact /model /status 等命令 | ⌨️ 斜杠命令 在飞书对话中直接输入命令(不消耗 AI 调用,即时响应): | 命令 | 说明 | | /help | 显示所有可用命令 | | /new / /clear | 开启新对话(清空当前会话上下文) | | /compact | 压缩当前会话(减少上下文) | | /model [name] | 查看 / 切换模型(如 /model deepseek-v4-flash) | | /status / /state | 查看当前状态(模型/会话/工具/运行时长) | | /tools | 列出可用飞书工具(40 个) | | /features | 查看功能配置清单 | | /doctor | 运行诊断 | 📦 快速开始 前置依赖 | 依赖 | 说明 | | DSH | DeepSeek Harness 运行时 | | lark-cli | 飞书官方 CLI(工具执行后端) | | Node.js ≥ 18 | 运行环境 | 安装 1. 克隆 git clone https://github.com/shrekcg/dsh-im-channel.git cd dsh-im-channel 2. 安装依赖 npm install 3. 初始化向导 (创建应用/授权/事件订阅 一步步引导) npm run setup 4. 安装为插件 + 常驻服务 npm run install-bridge 5. 验证 npm run doctor # 诊断 (21 项) npm run features # 功能清单 详细配置见 docs/SETUP.md 与 docs/INSTALL.md。 🔧 配置 配置通过环境变量或 config.json(见 config.example.json): | 变量 | 默认 | 说明 | | LARK_APP_ID | — | 飞书应用 App ID | | LARK_APP_SECRET | — | 飞书应用密钥 | | REQUIRE_MENTION | false | 群聊是否要求 @ 才响应 | | ALLOW_BOTS | false | bot 互 @:false/true/mentions | | GROUP_POLICY | open | 群策略:open/allowlist/closed | | GROUP_ALLOW_FROM | — | 群白名单(逗号分隔 open_id) | | REACTION_NOTIFICATIONS | off | 表情反馈:off/own/all | | STREAM_THROTTLE_MS | 60 | 流式节流时间阈值 (ms) | | STREAM_THROTTLE_CHARS | 3 | 流式节流字符阈值 | | ALLOW_USER_WRITES | — | 允许 user 身份写操作(默认仅发消息用 bot) | | DSH_BIN / DSH_HOME | — | DSH 路径 | 🚀 使用 对话 - 私聊:直接在飞书单聊机器人 - 群聊:拉机器人进群,直接发消息(或 @,取决于配置) - 话题:在群消息上创建话题,获得独立上下文 飞书工具直接用自然语言告诉 agent: - 「帮我查一下今天的日程」 - 「创建一个文档,内容是……」 - 「给 XX 发一条消息」 - 「列一下我的待办任务」 管理命令 npm start # 启动 bridge 状态页: 打开 http://127.0.0.1:8899 (飞书在线状态/账号/健康) npm run setup # 初始化向导 npm run doctor # 诊断 (--fix 自动修复) npm run features # 功能配置清单 npm test # 运行测试 (65 用例) npm run install-bridge # 安装插件 + 常驻服务bash npm run uninstall-bridge # 卸载(可逆,不影响 DSH 核心) npm run mcp # 单独运行 MCP server 🏗️ 架构 ┌──────────────────────────────────────────────────┐ │ 飞书 / Lark │ │ 用户私聊 · 群聊 · 话题 · 表情 · 评论 · 卡片交互 │ └───────────────────────┬──────────────────────────┘ │ WebSocket 长连接 (SDK) ┌───────────────────────▼──────────────────────────┐ │ bridge (常驻进程) │ │ ┌─────────┐ ┌────────────┐ ┌─────────────────┐ │ │ │ channel │ │ inbound │ │ outbound │ │ │ │ (SDK) │ │ policy │ │ stream (真流式) │ │ │ │ │ │ media │ │ mention (@渲染) │ │ │ │ │ │ reaction │ │ footer (耗时) │ │ │ │ │ │ merge-fw │ │ │ │ │ └────┬────┘ └─────┬──────┘ └────────┬────────┘ │ │ └────────────┼─────────────────┘ │ └────────────────────┼─────────────────────────────┘ │ DSH headless (持久会话) ┌──────▼──────┐ │ agents.resume│ │ + MCP client │ └──────┬──────┘ │ mcp__feishu__ (40 工具) ┌──────▼──────┐ │ Feishu MCP │ │ server │ └──────┬──────┘ │ lark-cli ┌──────▼──────┐ │ 飞书 OpenAPI│ └─────────────┘ - 接收:@larksuite/channel SDK WebSocket 长连接(无需公网回调地址) - 会话:固定 session + DSH agents.resume(跨消息记忆) - 工具:40 个 MCP 工具,lark-cli 执行后端 详见 docs/ARCHITECTURE.md。 📁 项目结构 dsh-im-channel/ ├── src/ │ ├── index.js # 入口 (多账号消息流水线) │ ├── config.js # 配置管理 │ ├── channel.js # 飞书通道 (SDK + 流式) │ ├── session.js # 持久会话 + 互斥锁 │ ├── core/ │ │ ├── scope-manager.js # 权限管理 │ │ ├── adaptive.js # 流式自适应步长 │ │ └── pacing.js # 流式节奏控制 │ ├── inbound/ │ │ ├── policy.js # 群策略/bot/@ │ │ ├── media.js # 多媒体接收 │ │ ├── reaction.js # 表情反馈 │ │ ├── merge-forward.js # 合并转发 │ │ └── comment.js # 文档评论@ │ ├── outbound/ │ │ └── mention.js # @渲染 │ ├── tools/ │ │ └── mcp-server.js # 飞书 MCP server (40 工具) │ └── commands/ │ ├── doctor.js # 诊断自修复 (21 项) │ └── features.js # 功能配置清单 ├── dsh-lark-session/ # DSH 插件 (持久会话 runner) ├── scripts/ │ ├── install.js # 安装/卸载/状态 │ └── setup.js # 初始化向导 ├── tests/ # 65 个单元测试 └── docs/ # 文档 📚 文档 | 文档 | 说明 | | SETUP.md | 详细配置指南 | | INSTALL.md | 插件化安装指南 | | ARCHITECTURE.md | 架构设计 | | README.en.md | English README | 🧪 测试 bash npm test # 65 个单元测试 CI(GitHub Actions)自动运行:单元测试 + 语法检查 + MCP server 冒烟验证。 📄 License MIT 🙏 致谢 - DeepSeek Harness — Agent 运行时 - OpenClaw 及 飞书官方插件 - @larksuite/channel — 飞书 SDK - lark-cli — 飞书 CLI
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
shrekcg/dsh-im-channel
把 AI 助手接入飞书与 Telegram 等聊天平台
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7
这是你的仓库?认领条目