207 lines
7.0 KiB
Markdown
207 lines
7.0 KiB
Markdown
# 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 接口
|
||
|
||
---
|
||
|
||
*报告完*
|