统一接入 Telegram 与微信并鉴权分发消息
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wowyuarm/dsh-channel-gateway.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 39 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求src/adapters/http.ts:28
const agent = new EnvHttpProxyAgent() - 发起网络请求src/adapters/http.ts:30
undiciFetch(input as string | URL, {
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 归一消息契约
- 传输边界鉴权
为 DeepSeek Harness 提供频道网关:Telegram 和微信适配器把各服务商的流量归一成同一份消息契约,网关在传输边界完成鉴权,任意消费者按消息携带的路由作答。
README
由 DeepSeek 最新模型翻译生成dsh-channel-gateway
DeepSeek Harness 的 channel 网关插件:适配器把各聊天平台的消息归一成同一套消息契约,网关完成鉴权并分发一个 channel/inbound 事件,消费方用入站消息携带的 route 通过 ctx.channels.send 回复。
本包覆盖聊天接入的传输层:它固定消息契约,以及 provider 与消费方之间的接缝。
一条消息意味着什么、是否见过、下一步去哪,都由上层决定。
契约
五个面就是公开 API,保持小、稳、可版本化。逐字段含义见 docs/architecture.md。
| 面 | 形状 |
| 入站 | InboundMessage { channel, providerMessageId, actor, place, visibility, text, attachments?, timestamp, replyTo?, raw? } |
| 出站 | OutboundMessage { channel, route, text, attachments?, replyTo?, format? } |
| 传输 | Channel { name, capabilities, start(inbox), stop(), send(message), resolveAttachment?
展开完整文档(README 剩余 1 节)
dsh-channel-gateway
DeepSeek Harness 的 channel 网关插件:适配器把各聊天平台的消息归一成同一套消息契约,网关完成鉴权并分发一个 channel/inbound 事件,消费方用入站消息携带的 route 通过 ctx.channels.send 回复。
本包覆盖聊天接入的传输层:它固定消息契约,以及 provider 与消费方之间的接缝。
一条消息意味着什么、是否见过、下一步去哪,都由上层决定。
契约
五个面就是公开 API,保持小、稳、可版本化。逐字段含义见 docs/architecture.md。
| 面 | 形状 |
| 入站 | InboundMessage { channel, providerMessageId, actor, place, visibility, text, attachments?, timestamp, replyTo?, raw? } |
| 出站 | OutboundMessage { channel, route, text, attachments?, replyTo?, format? } |
| 传输 | Channel { name, capabilities, start(inbox), stop(), send(message), resolveAttachment? } |
| 网关 | ctx.channels.register(channel) · ctx.channels.send(message) · ctx.channels.resolveAttachment(channel, attachment) · 事件 channel/inbound |
| 鉴权 | ChannelAuth { authorize(request) },默认 allowlist |
契约中有三处是消费方需要、而 provider 给不出可用形态的:
- actor / place / visibility —— 谁说的、在哪、当着谁。
- providerMessageId —— provider 的稳定 id,供消费方去重与持久接受。
- place.route —— 由 channel 构造的 opaque 目的地:消费方存下见过的 route、作为 OutboundMessage.route 原样交回;适配器之上没有任何一层拼 provider 地址。
安装
本包是一个 DSH bundle,安装即插入 gateway service 行:
dsh plugin add @wowyuarm/dsh-channel-gateway --profile
适配器是可选行(各自需要凭据),由 profile 自己加:
- insert:
- id: channel-telegram
name: '@wowyuarm/dsh-channel-gateway/telegram'
config: { token: '' }
- id: channel-weixin
name: '@wowyuarm/dsh-channel-gateway/weixin'
config: { token: '' }
「谁可以说话」是 gateway 那一行的配置,不是适配器的:
- id: channel-gateway
config:
allow:
- telegram:123456789 # 某 channel 的某个 actor
- weixin:* # 某 channel 的所有 actor
- '' # 所有人
allow 为空即谁都不放行。
消费
import type { Context } from '@deepseek-ai/cordis'
import type {} from '@wowyuarm/dsh-channel-gateway'
export const name = 'my-ingress'
export const inject = ['channels']
export function apply(ctx: Context) {
ctx.on('channel/inbound', (message) => {
// 按 (message.channel, message.providerMessageId) 去重、持久接受、路由。
void handle(message)
})
}
适配器
| 适配器 | 传输 | 入口 | 说明 |
| Telegram | Bot API 长轮询(getUpdates) | @wowyuarm/dsh-channel-gateway/telegram | 文本与媒体。附件优先用本地字节(data)上传,否则用 provider ref 或 URL;resolveAttachment 通过下载取回入站附件的字节。format: 'markdown' 渲染为 Telegram HTML。config.token 缺省回落到 DSH_TELEGRAM_TOKEN。 |
| 微信 | iLink 长轮询(ilink/bot/getupdates) | @wowyuarm/dsh-channel-gateway/weixin | 文本与媒体。回复要带上入站消息的 context_token,微信侧约两分钟后过期,发送前会刷新已过期的 token。format: 'markdown' 渲染为清洗后的微信 Markdown。媒体的上传/下载按 iLink 参考协议实现,尚未在真实账号上验证。需要一个已获得的 token——扫码登录流程尚未实现。 |
两个适配器都尊重 HTTPS_PROXY/NO_PROXY(Node 自带 fetch 默认不读这两个变量)。
兼容性
DSH 的版本变化只可能经由本包 import 的两个已发布包传导到此处:@deepseek-ai/cordis (插件与 service API)和 @deepseek-ai/schemastery(行配置)。本包不 import 任何 @deepseek-ai/dsh- 包——一旦出现,npm run check:boundaries 直接让构建失败——所以宿主耦合就是这两个版本。
| 运行时 | cordis | schemastery | 验证方式 |
| DSH 0.1.5-rc.3(npm latest) | 4.0.2 | 3.18.2 | 0.1.0 发布时:npm run typecheck、npm test、npm run build |
| DSH 0.1.7-rc.1 · 0.1.7-rc.2(npm next) | 4.0.4 | 3.18.4 | 同上三项,外加在真实 profile 里装载该行 |
| 声明的 peer 下界 | 4.0.1 | 3.18.1 | 同上三项 |
devDependencies 钉住第二行,所以检出后的 typecheck/测试/构建跑的就是当前 DSH 实际装载的版本。
peer 区间保持 ^4.0.1 / ^3.18.1:下界容纳旧 DSH 线,上界容纳当前线,两者有交集,因此同一个已发布版本对两条线都能安装,而不会在 profile 里解析出第二份 cordis。
针对正在运行的 DSH 复验:
npm run build
cat > /tmp/channel-gateway.yml --patch /tmp/channel-gateway.yml --help
装载失败的行会在 stderr 报 N entry did not activate 并给出原因;干净运行不会打印这一行。
若要断言 service 接缝而不只是 import,可在 overlay 里再加一行声明 inject: ['channels'] 并从中读取 ctx.channels.send。
开发
npm install
npm run typecheck # tsc,strict
npm test # 边界守卫 + vitest
npm run build # 产出 lib/
src/ 只允许 import 自己的相对模块、Node 内置模块,以及 @deepseek-ai/cordis / @deepseek-ai/schemastery;适配器可额外使用 undici。npm run check:boundaries 强制这条线,避免中立层悄悄长出宿主依赖。
许可
MIT。Telegram 传输改编自 dsh-telegram-channel(MIT);微信协议形状参考 openclaw-weixin(MIT)与 nanobot(MIT)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wowyuarm/dsh-channel-gateway
统一接入 Telegram 与微信并鉴权分发消息
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化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