🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

IM 双向通道 shrekcg/dsh-im-channel

MCPv0.2.1
shrekcg75 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把 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 能力
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 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.com
    src/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.com
    src/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.com
    src/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
预览分享卡片长什么样 ↓shrekcg/dsh-im-channel
分享 · DeepSeek Harness Hub
shrekcg/dsh-im-channel

把 AI 助手接入飞书与 Telegram 等聊天平台

这是你的仓库?认领条目

回到顶部