多渠道消息网关
Multi-Channel Message Gateway
统一管理多个消息平台的接入、路由和分发,解耦渠道层与业务逻辑
子问题
1.多平台协议适配
2.消息队列解耦
3.出站消息路由分发
4.渠道动态启停管理
5.跨线程事件循环桥接(飞书 SDK 线程回调→asyncio)
6.平台特定消息格式转换(Markdown→HTML/Card/纯文本)
7.OAuth2 Token 自动刷新与过期管理
8.SDK 可选依赖的延迟导入与优雅降级
各项目的解法1 solutions
Signals
横向对比
| 维度 | Nanobot |
|---|---|
| 渠道数量 | 8 个平台:Telegram/WhatsApp/Discord/Feishu/DingTalk/Email/Slack/QQ |
| 解耦机制 | MessageBus 双 asyncio.Queue(inbound + outbound) |
| 渠道接口 | BaseChannel ABC 统一 start/stop/send 三方法 |
| 配置驱动 | Pydantic ChannelsConfig 每渠道 enabled 开关 + 延迟导入容错 |
| 访问控制 | BaseChannel.is_allowed() 统一白名单,支持复合 ID |
| 消息去重 | 按渠道差异化:OrderedDict/deque/set 三种策略 |
| 出站路由 | ChannelManager 单协程轮询 outbound 队列按 channel 字段分发 |
最佳实践
1.用 MessageBus 异步队列解耦渠道与核心逻辑
2.用 BaseChannel ABC 模板方法统一权限检查和消息构造
3.延迟导入 + ImportError 捕获实现 SDK 可选依赖
4.按平台特性选择差异化去重策略(OrderedDict/deque/set)
5.出站路由用 wait_for(timeout=1.0) 避免无限阻塞保证可停机