15 KiB
GoChat 渠道集成需求梳理与优先级排序
⚠️ 过时文档警告 — 本文档中的部分描述已过时(如 InboxHandler 为 stub、Webhook 路由不存在等),已基于 2026-05-25 的代码审查修正。
请以docs/requirements/M7-channel-integration-consolidated.md为权威参考,该文档反映了项目真实实现状态。
生成日期: 2026-05-24 任务: t_ffe7fa39 — 各渠道功能差距分析, 优先级排序, 实施计划
一、现状总览
1.1 已实现渠道(4个,可运行)
| 渠道 | 代码路径 | 行数 | 接口类型 | 实现状态 | 功能完整性 |
|---|---|---|---|---|---|
| Web Widget | internal/channel/provider/web_widget.go + provider/ |
~400 | ChannelProvider + PushProvider | ✅ 完整 | 前端嵌入式聊天,HMAC验证,Redis推送,打字指示器,在线状态 |
| Telegram | internal/channel/telegram/ (4文件) |
~1,450 | ChannelProvider | ✅ 完整 | Bot API集成,webhook注册,消息收发,附件支持 |
internal/channel/email/ (8文件) |
~1,754 | ChannelProvider + PollingProvider | ✅ 完整 | IMAP轮询收信,SMTP发信,MIME解析,线程关联 | |
| Facebook Messenger | internal/channel/facebook/ (9文件) |
~4,411 | ChannelProvider + OAuthProvider | ✅ 完整 | Graph API,Page订阅,消息收发,附件上传,回执,thread control,OAuth token交换 |
1.2 已实现但仅注册的渠道(1个)
| 渠道 | 代码路径 | 行数 | 接口类型 | 实现状态 | 说明 |
|---|---|---|---|---|---|
| Instagram DM | internal/channel/facebook/instagram_provider.go |
~838 | ChannelProvider + OAuthProvider | ✅ 完整 | 与Facebook共享Graph API基础设施,通过init()注册到registry |
1.3 已有模型定义但无 Provider 实现(5个)
| 渠道 | 模型文件 | Provider代码 | Chatwoot对等 | 说明 |
|---|---|---|---|---|
internal/model/channel/whatsapp.go ✅ |
❌ 无 | Channel::WhatsApp |
模型有(phone_number_id, access_token, business_id),缺360dialog API集成 | |
| Twilio SMS | internal/model/channel/twilio_sms.go.txt stub |
❌ 无 | Channel::TwilioSms |
模型是stub(.txt),需激活并实现 |
| SMS (generic) | internal/model/channel/sms.go.txt stub |
❌ 无 | Chatwoot无对等 | 模型是stub,通用SMS provider |
| LINE | internal/model/channel/line.go.txt stub |
❌ 无 | Channel::Line |
模型是stub,LINE Messaging API集成 |
| API Channel | internal/model/channel/api.go.txt stub |
❌ 无 | Channel::Api |
模型是stub,REST API通用接入 |
1.4 仅常量定义(无模型、无Provider)
| 渠道 | ChannelType常量 | 模型 | Provider | 说明 |
|---|---|---|---|---|
| Slack | ChannelSlack = "slack" |
❌ | ❌ | Chatwoot作为Integration而非Channel,但GoChat P2D设计将其归入ChannelType |
| TikTok | ❌ 无常量 | .txt stub有 |
❌ | Chatwoot Enterprise功能,暂缓 |
1.5 完全缺失的渠道(Chatwoot有但GoChat未设计)
| 渠道 | Chatwoot对等 | GoChat状态 | 说明 |
|---|---|---|---|
| Twitter/X DM | Channel::Twitter |
❌ 完全缺失 | Chatwoot曾支持但Twitter API变更后废弃,优先级极低 |
| Google Business Messages | 无(OAuth provider存在) | ❌ 缺失 | 需Google OAuth集成 |
| Microsoft Teams | 无(OAuth provider存在) | ❌ 缺失 | 需Microsoft OAuth集成 |
二、差距详细分析
2.1 渠道实现差距矩阵
| 渠道 | 模型 | Provider | Webhook | OAuth | Polling | Push | Handler路由 | 配置管理 | 总体差距 |
|---|---|---|---|---|---|---|---|---|---|
| Web Widget | ✅ | ✅ | ✅ | ❌(不需要) | ❌(不需要) | ✅ | ✅(4路由) | ✅ | 0% — 已完成 |
| Telegram | ✅ | ✅ | ✅ | ❌(不需要) | ❌(不需要) | ❌ | ✅(1 stub路由) | ✅ | 10% — 缺PushProvider和handler路由 |
| ✅ | ✅ | ✅(ActionMailbox) | ❌(不需要) | ✅ | ❌ | ❌ | ✅(IMAP/SMTP) | 15% — 缺handler路由和PushProvider | |
| ✅ | ✅ | ✅ | ✅ | ❌(不需要) | ❌ | ❌ | ✅ | 20% — 缺handler路由和PushProvider | |
| ✅ | ✅ | ✅(共享FB) | ✅(共享FB) | ❌(不需要) | ❌ | ❌ | ✅ | 20% — 同Facebook | |
| ✅模型 | ❌ | ❌ | ✅(需实现) | ❌ | ❌ | ❌ | ❌ | 85% — 仅模型存在 | |
| Twilio SMS | stub | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 95% — 仅stub模型 |
| Twilio WhatsApp | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 100% — 完全缺失 |
| LINE | stub | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 95% — 仅stub模型 |
| Slack | ❌ | ❌ | ❌ | ✅(需实现) | ❌ | ❌ | ❌ | ❌ | 100% — 完全缺失 |
| API Channel | stub | ❌ | ❌ | ❌(不需要) | ❌ | ❌ | ❌ | ❌ | 95% — 仅stub模型 |
| TikTok | stub | ❌ | ❌ | ✅(需实现) | ❌ | ❌ | ❌ | ❌ | 95% — 仅stub模型 |
2.2 跨渠道共性差距
🔴 Inbox Handler 全 Stub(影响所有渠道)
InboxHandler(45行)所有方法都是 placeholder/stub:
List→ 返回空列表硬编码Get→ 返回 placeholderCreate→ 返回 placeholderUpdate→ 501 Not ImplementedDelete→ 501 Not Implemented
这是所有渠道共享的入口问题 — 无论渠道多完整,用户都无法通过API管理Inbox。
🔴 渠道 OAuth 授权路由完全缺失
Chatwoot 有 7 条 OAuth 授权路由:
POST /api/v1/accounts/:id/instagram/authorization
POST /api/v1/accounts/:id/whatsapp/authorization
POST /api/v1/accounts/:id/tiktok/authorization
POST /api/v1/accounts/:id/twitter/authorization
POST /api/v1/accounts/:id/google/authorization
POST /api/v1/accounts/:id/microsoft/authorization
POST /api/v1/accounts/:id/notion/authorization
GoChat: 0 条路由 — Facebook/Instagram 的 OAuthProvider 代码完整,但无 API 入口让用户触发授权流程。
🔴 渠道特定配置路由缺失
Chatwoot 每个渠道都有独立的配置控制器(如 telegram_bots_controller, facebook_pages_controller),提供渠道特有的 CRUD 操作。GoChat 仅实现了 WebWidget 的 4 条配置路由,其余渠道全缺。
| Chatwoot控制器 | GoChat路由 | 缺失 |
|---|---|---|
telegram_bots_controller (create/update/destroy) |
❌ | 3 |
facebook_pages_controller (create/destroy) |
❌ | 2 |
whatsapp_controller (create/update) |
❌ | 2 |
email_channels_controller (create) |
❌ | 1 |
🟡 Webhook 路由仅有 Stub
当前 webhook 路由 webhookGroup.Any("/:channel_type/:identifier", webhookStub) 是一个通用 catch-all stub,没有按渠道分发到具体的 ChannelProvider webhook handler。Facebook/Telegram/Email 的 webhook_handler.go 已经写好,但未被路由接入。
🟡 Inbox Members 路由缺失
POST /api/v1/accounts/:id/inbox_members
GET /api/v1/accounts/:id/inbox_members/:inbox_id
DELETE /api/v1/accounts/:id/inbox_members (collection)
PATCH /api/v1/accounts/:id/inbox_members (collection)
影响渠道坐席分配管理。
🟡 渠道 AgentBot 绑定缺失
Chatwoot 有 AgentBotInbox 绑定机制,GoChat 完全缺失 — 无法给特定 Inbox 绑定自动回复 Bot。
三、优先级排序
3.1 评估维度
| 维度 | 权重 | 说明 |
|---|---|---|
| 用户需求紧迫度 | 40% | 市场需求、客户反馈、竞品对标 |
| 实现复杂度 | 25% | 开发工时、技术难度、外部依赖 |
| 阻塞影响范围 | 20% | 解决该差距后解锁的功能数量 |
| 商业价值 | 15% | 对用户增长、付费转化的贡献 |
3.2 优先级排序结果
🔴 P0 — 必做(生产就绪阻塞项)
| # | 项目 | 工时预估 | 说明 | 阻塞影响 |
|---|---|---|---|---|
| P0-1 | Inbox Handler 真实实现 | 3天 | 将全 stub 的 5 个方法改为真实 CRUD(含渠道创建流程) | 解锁所有渠道的 API 管理 |
| P0-2 | Webhook 路由接入 | 2天 | 将各渠道的 webhook_handler.go 接入 router,替换 stub | 解锁 FB/Telegram/Email 消息接收 |
| P0-3 | 渠道 OAuth 授权路由 | 2天 | 为 Facebook/Instagram/WhatsApp 添加 POST /authorization 路由 |
解锁 OAuth 渠道的配置入口 |
| P0-4 | 渠道配置 CRUD 路由 | 3天 | Telegram bots, Facebook pages, Email channels, WhatsApp 各渠道特有配置路由 | 解锁渠道配置管理 |
P0 合计: 10天
🟡 P1 — 重要(核心渠道补全)
| # | 项目 | 工时预估 | 说明 | 阻塞影响 |
|---|---|---|---|---|
| P1-1 | WhatsApp Provider 实现 | 5天 | 360dialog Cloud API 集成:模板消息、消息收发、状态回执、OAuth | 第二大客户沟通渠道 |
| P1-2 | Telegram PushProvider | 1天 | 补齐 typing indicator / online status 推送 | 增强用户体验 |
| P1-3 | Inbox Members 路由 | 2天 | 坐席-Inbox 绑定管理(4条路由) | 解锁坐席分配 |
| P1-4 | 渠道 AgentBot 绑定 | 2天 | AgentBotInbox 绑定 + 事件监听 | 解锁渠道自动回复 |
P1 合计: 10天
🔵 P2 — 可迭代(扩展渠道)
| # | 项目 | 工时预估 | 说明 | 阻塞影响 |
|---|---|---|---|---|
| P2-1 | Twilio SMS Provider | 4天 | Twilio API 集成 + 模型从stub激活 | 企业短信需求 |
| P2-2 | LINE Provider | 4天 | LINE Messaging API + 模型激活 | 亚洲市场需求 |
| P2-3 | API Channel Provider | 2天 | REST API 通用接入(最简实现) | 第三方系统接入 |
| P2-4 | Twilio WhatsApp Provider | 3天 | 基于 Twilio SMS 扩展 | WhatsApp 替代接入路径 |
P2 合计: 13天
⚪ P3 — 暂缓(低优先级/高风险)
| # | 项目 | 工时预估 | 说明 |
|---|---|---|---|
| P3-1 | Slack 集成 | 5天 | Chatwoot 作为 IntegrationHook 而非 Channel;需重新评估是否归入 channel 层 |
| P3-2 | TikTok 渠道 | 4天 | Enterprise 功能,OAuth复杂,API不稳定 |
| P3-3 | Twitter/X 渠道 | 3天 | Twitter API v2 DM 功能受限,Chatwoot 已废弃 |
| P3-4 | Google Business Messages | 5天 | 需 Google OAuth + Business Messages API |
| P3-5 | Microsoft Teams | 5天 | 需 Microsoft OAuth + Teams Bot Framework |
四、实施计划
Phase 1: 渠道基础设施修复(P0,10天)
目标: 让已有渠道(Facebook/Instagram/Telegram/Email/WebWidget)可通过API完整管理
Week 1 (5天):
-
InboxHandler 真实实现 (3天)
List: 调用 InboxService.ListByAccount → 真实数据返回Get: 调用 InboxService.GetByID → 含 channel_config 详情Create: 调用 InboxService.Create → 含渠道类型分发(按 ChannelProvider.OnCreate)Update: 调用 InboxService.Update → 含配置校验(按 ChannelProvider.ValidateConfig)Delete: 调用 InboxService.Delete → 含 OnDestroy 生命周期回调
-
Webhook 路由接入 (2天)
- 替换
webhookGroup.Any("/:channel_type/:identifier", webhookStub)为渠道分发逻辑 - Telegram:
POST /webhooks/telegram/{bot_token}→ telegram.WebhookHandler - Facebook:
GET+POST /webhooks/facebook/{page_id}→ facebook.WebhookHandler (GET用于验证) - Email: ActionMailbox 或 webhook → email.WebhookHandler
- 保留 fallback 通用路由给未实现的渠道
- 替换
Week 2 (5天):
-
渠道 OAuth 授权路由 (2天)
POST /api/v1/accounts/:id/facebook/authorization→ FB OAuthProvider.BuildAuthURLPOST /api/v1/accounts/:id/instagram/authorization→ IG OAuthProvider.BuildAuthURLPOST /api/v1/accounts/:id/whatsapp/authorization→ (未来 WhatsApp OAuth)- OAuth callback route:
GET /api/v1/accounts/:id/:channel_type/callback→ ExchangeToken
-
渠道配置 CRUD 路由 (3天)
- Telegram:
POST/PUT/DELETE /api/v1/accounts/:id/channels/telegram_bots - Facebook:
POST/DELETE /api/v1/accounts/:id/channels/facebook_pages - Email:
POST /api/v1/accounts/:id/channels/email(IMAP/SMTP配置) - WhatsApp:
POST/PUT /api/v1/accounts/:id/channels/whatsapp(配置placeholder)
- Telegram:
Phase 2: 核心渠道扩展(P1,10天)
目标: WhatsApp上线,坐席管理补全
Week 3-4:
-
WhatsApp Provider 实现 (5天)
- 模型激活:
whatsapp.go已有,补全字段 - WhatsApp Cloud API: 消息收发、模板消息、状态回执
- OAuthProvider: 360dialog token 管理
- WebhookHandler: 状态回执 webhook
- 渠道配置路由
- 模型激活:
-
Telegram PushProvider (1天)
PushTypingOn: 发送 typing indicator (chat action)PushOnlineStatus: 无直接 Telegram API → 通过 Bot 状态模拟
-
Inbox Members 路由 (2天)
POST/GET/DELETE/PATCH /api/v1/accounts/:id/inbox_members- 坐席-Inbox 多对多绑定
-
AgentBot Inbox 绑定 (2天)
AgentBotInbox模型 + RepositoryPOST/DELETE /api/v1/accounts/:id/agent_bots/:id/inboxes- 事件监听: conversation.created → agent bot 自动回复
Phase 3: 扩展渠道(P2,13天)
目标: SMS/LINE/API Channel上线,覆盖更多客户渠道
- Twilio SMS Provider (4天)
- LINE Provider (4天)
- API Channel Provider (2天)
- Twilio WhatsApp Provider (3天)
五、风险与依赖
| 风险 | 影响 | 缓解措施 |
|---|---|---|
| WhatsApp 360dialog API 申请门槛 | 延误 P1-1 | 先用 Meta Cloud API 实现替代路径 |
| Facebook Graph API 版本变更 | 影响 FB/IG 稳定性 | 使用稳定版 API (v18.0+),抽象版本依赖 |
| Twilio 费用门槛 | 延误 P2-1/P2-4 | 提供测试账号支持 |
| LINE 开发者注册需日本企业资质 | 延误 P2-2 | 评估是否用第三方 LINE Bot SDK 代理 |
| OAuth token 刷新机制未接入调度器 | 所有 OAuth 渠道风险 | P0-3 需同步实现 OAuthTokenRefresher 定时刷新 |
六、关键文件索引
| 功能 | GoChat文件 | 状态 |
|---|---|---|
| ChannelProvider 接口 | internal/channel/provider.go |
✅ 完整 |
| ChannelRegistry | internal/channel/registry.go |
✅ 完整(缺OAuth/Polling/Push子注册表) |
| WebWidget Provider | internal/channel/provider/web_widget.go |
✅ 完整 |
| Telegram Provider | internal/channel/provider/telegram.go + internal/channel/telegram/ |
✅ 完整 |
| Email Provider | internal/channel/provider/email.go + internal/channel/email/ |
✅ 完整 |
| Facebook Provider | internal/channel/facebook/provider.go |
✅ 完整 |
| Instagram Provider | internal/channel/facebook/instagram_provider.go |
✅ 完整 |
| WhatsApp 模型 | internal/model/channel/whatsapp.go |
✅ 仅模型 |
| Twilio SMS 模型 | internal/model/channel/twilio_sms.go.txt |
⚠️ Stub |
| LINE 模型 | internal/model/channel/line.go.txt |
⚠️ Stub |
| API Channel 模型 | internal/model/channel/api.go.txt |
⚠️ Stub |
| Inbox Handler | internal/handler/api/v1/inbox_handler.go |
❌ 全 stub |
| Webhook Handler | internal/channel/webhook.go |
✅ 但路由未接入 |
| OAuth Token Refresher | P2D 设计有, 代码缺失 | ❌ 缺实现 |
| 渠道配置路由 | 仅 WebWidget 有 | ❌ 其他渠道缺 |