Files
2026-06-19 06:38:31 +00:00

207 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qihu-AIFlow 频道功能:自研方案 vs OneBot 融合论证报告
> **日期**:2026-06-09
> **项目**:Qihu-AIFlow 智能自动化PaaS平台
> **目标**:论证频道功能的最优实现路径,服务平台核心宗旨
---
## 一、背景与核心宗旨
### 平台频道功能的核心价值
让用户**无需自建 openclaw、hermes agent、qwenpaw 等个人AI助理平台**,通过绑定多个**个人微信/飞书/钉钉账号**实现移动端使用。
### 商业模式
- **普通用户**:绑定 1 个账号(免费)
- **订阅会员**:绑定多个账号
### 当前现状
- 已实现微信频道二维码绑定流程
- 已有 unified_webhook 端点、消息组件系统、平台适配器注册、MessageSession、Pipeline管道、Redis事件总线
- 已重构清理旧版 `_handle_*_webhook` 函数(约330行冗余代码),统一通过适配器模式工作
---
## 二、三种方案对比
### 方案A:继续自研方案(当前方向)
**架构**:基于已有的适配器模式 + Webhook 端点 + MessageSession,逐个实现各平台的适配器
**优点**:
- 完全可控,定制化程度最高
- 现有代码架构良好
- 平台登录态完全自主管理,可精确实现会员分级
- 无需额外部署依赖服务
**缺点**:
- 每个平台需自行开发适配器,**工作量大**
- 各平台API可能变化,需持续维护
- 微信个号接入存在被封风险
**开发估算**:13-21天
---
### 方案B:接入 OneBot 标准(推荐)
**架构**:部署 `onebots` 作为统一服务端,Qihu-AIFlow 通过 OneBot 标准协议通信
**优点**:
- **开箱即用**:已支持 QQ、微信、钉钉、飞书、企微、Telegram、Slack、Discord 等 10+ 平台
- **社区维护**:平台适配器由社区维护
- **标准协议**:OneBot 生态丰富
- **会员分级容易实现**:在 OneBot 适配器层做连接数控制
- **微信个号**:已有基于 openclaw/gewechat 的适配
**缺点**:
- 需要额外部署 Node.js 服务
- 依赖第三方项目
**开发估算**:4-6天
---
### 方案C:接入 AstrBot 生态(备选)
**架构**:部署 AstrBot 作为消息中间层
**缺点**:功能大量重叠,会员分级难以嵌入,耦合度高
---
## 三、对比矩阵
| 维度 | 自研方案 (A) | OneBot融合 (B) | AstrBot接入 (C) |
|------|:----------:|:-------------:|:--------------:|
| **开发周期** | 13-21天 | **4-6天** | 7-10天 |
| **平台覆盖** | 需逐个开发 | **10+平台** | 4-5个 |
| **微信个号** | 需自研适配 | **已有社区适配** | 已有适配 |
| **维护成本** | 高 | **低** | 中 |
| **会员分级** | 精确控制 | 适配器层控制 | 困难 |
| **定制化** | **最高** | 中 | 低 |
| **稳定性** | 自行保障 | **社区保障** | 社区保障 |
---
## 四、推荐路径:方案B(OneBot 融合)
### 推荐理由
1. **开发效率最高**:节省约70%开发时间
2. **平台覆盖最广**:10+平台开箱即用
3. **维护成本最低**:社区维护平台适配
4. **符合平台宗旨**:统一协议、多平台绑定、会员分级
### 实施步骤
```
Phase 1: OneBot 适配器(2-3天)
├── 部署 onebots 服务(Docker容器)
├── 编写 OneBotAdapter(继承已有适配器接口)
├── 配置 onebots 对接微信个号(扫码登录)
└── 测试微信消息收发
Phase 2: 会员分级集成(1天)
├── 在 OneBotAdapter 中实现连接数限制
├── 用户管理页面增加频道绑定管理
└── 数据库增加 user_channel_bindings 表
Phase 3: 多平台扩展(每个平台1-2天)
├── 钉钉适配(onebots 原生支持)
├── 飞书适配(onebots 原生支持)
└── Telegram/Slack等
```
### 架构图
```
┌─────────────────────────────────────────┐
│ Qihu-AIFlow Docker │
│ │
│ Adapter Registry │
│ ├── WeChatAdapter (自研,备选) │
│ ├── OneBotAdapter (主要) ◄──┐ │
│ └── ...其他适配器 │ │
│ │ │
│ MessageSession + Pipeline │ │
│ + Redis 事件总线(已有架构) │ │
└───────────────────────────────┘ │
▲ │
OneBot V11/V12 │
| │
┌───────────────────────────────────┘─────┤
│ onebots 服务 (Docker 独立容器) │
│ Node.js,负责协议转换 │
│ │
│ 平台适配器: │
│ ├── 微信个号 (openclaw/gewechat) │
│ ├── 钉钉 (开放平台API) │
│ ├── 飞书 (开放平台API) │
│ └── Telegram/Discord/Slack... │
└──────────────────────────────────────────┘
```
---
## 五、OneBot 适配器实现要点
### 消息格式转换(OneBot → MessageSession)
```python
class OneBotAdapter(BaseAdapter):
async def handle_onebot_message(self, payload: dict) -> MessageSession:
platform = payload.get("platform", "unknown")
platform_type = payload.get("message_type", "private")
platform_id = str(payload.get("user_id", ""))
return MessageSession(
platform=platform,
session_id=f"{platform}_{platform_id}",
message=payload.get("message", ""),
user_info={"platform_id": platform_id, "platform": platform},
)
async def send_message(self, session: MessageSession, reply: str):
return await self._call_onebot_api("send_msg", {
"message_type": session.msg_type or "private",
"user_id": int(session.user_info["platform_id"]),
"message": reply,
})
```
### 会员分级控制
```python
async def validate_connection(self, platform: str, user_id: str) -> bool:
user = await self.db.get_user_by_platform(platform, user_id)
if not user:
return False
binding_count = await self.db.count_user_bindings(user.id)
if binding_count >= 1 and not user.is_subscribed:
return False # 免费用户只能绑定1个平台
return True
```
---
## 六、后续建议
### 短期(1-2周)
1. 部署 onebots 服务(Docker 容器)
2. 实现 OneBotAdapter(2-3天)
3. 配置微信个号接入并测试
4. 会员分级控制
### 中期(3-4周)
1. 接入钉钉、飞书
2. 用户管理页增加频道绑定管理
3. 优化微信扫码流程
### 长期
1. 跟踪 onebots 社区更新
2. 考虑公开 OneBot 接口
---
*报告完*