Files
skills-lottery-picker/onebot_analysis.md
T
2026-06-19 06:38:31 +00:00

7.0 KiB
Raw Blame History

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)

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,
        })

会员分级控制

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 接口

报告完