Files
gochat/docs/CHANNEL_INTEGRATION_PRIORITIES.md
T
2026-06-04 15:44:48 +08:00

295 lines
15 KiB
Markdown
Raw 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.
# 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注册,消息收发,附件支持 |
| **Email** | `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 controlOAuth 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对等 | 说明 |
|------|----------|-------------|--------------|------|
| **WhatsApp** | `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` | 模型是stubLINE Messaging API集成 |
| **API Channel** | `internal/model/channel/api.go.txt` stub | ❌ 无 | `Channel::Api` | 模型是stubREST 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路由** |
| Email | ✅ | ✅ | ✅(ActionMailbox) | ❌(不需要) | ✅ | ❌ | ❌ | ✅(IMAP/SMTP) | **15% — 缺handler路由和PushProvider** |
| Facebook | ✅ | ✅ | ✅ | ✅ | ❌(不需要) | ❌ | ❌ | ✅ | **20% — 缺handler路由和PushProvider** |
| Instagram | ✅ | ✅ | ✅(共享FB) | ✅(共享FB) | ❌(不需要) | ❌ | ❌ | ✅ | **20% — 同Facebook** |
| WhatsApp | ✅模型 | ❌ | ❌ | ✅(需实现) | ❌ | ❌ | ❌ | ❌ | **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(影响所有渠道)
InboxHandler45行)所有方法都是 placeholder/stub
- `List` → 返回空列表硬编码
- `Get` → 返回 placeholder
- `Create` → 返回 placeholder
- `Update` → 501 Not Implemented
- `Delete` → 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天):**
1. **InboxHandler 真实实现** (3天)
- `List`: 调用 InboxService.ListByAccount → 真实数据返回
- `Get`: 调用 InboxService.GetByID → 含 channel_config 详情
- `Create`: 调用 InboxService.Create → 含渠道类型分发(按 ChannelProvider.OnCreate
- `Update`: 调用 InboxService.Update → 含配置校验(按 ChannelProvider.ValidateConfig
- `Delete`: 调用 InboxService.Delete → 含 OnDestroy 生命周期回调
2. **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天):**
3. **渠道 OAuth 授权路由** (2天)
- `POST /api/v1/accounts/:id/facebook/authorization` → FB OAuthProvider.BuildAuthURL
- `POST /api/v1/accounts/:id/instagram/authorization` → IG OAuthProvider.BuildAuthURL
- `POST /api/v1/accounts/:id/whatsapp/authorization` → (未来 WhatsApp OAuth)
- OAuth callback route: `GET /api/v1/accounts/:id/:channel_type/callback` → ExchangeToken
4. **渠道配置 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)
### Phase 2: 核心渠道扩展(P110天)
> 目标: WhatsApp上线,坐席管理补全
**Week 3-4:**
5. **WhatsApp Provider 实现** (5天)
- 模型激活: `whatsapp.go` 已有,补全字段
- WhatsApp Cloud API: 消息收发、模板消息、状态回执
- OAuthProvider: 360dialog token 管理
- WebhookHandler: 状态回执 webhook
- 渠道配置路由
6. **Telegram PushProvider** (1天)
- `PushTypingOn`: 发送 typing indicator (chat action)
- `PushOnlineStatus`: 无直接 Telegram API → 通过 Bot 状态模拟
7. **Inbox Members 路由** (2天)
- `POST/GET/DELETE/PATCH /api/v1/accounts/:id/inbox_members`
- 坐席-Inbox 多对多绑定
8. **AgentBot Inbox 绑定** (2天)
- `AgentBotInbox` 模型 + Repository
- `POST/DELETE /api/v1/accounts/:id/agent_bots/:id/inboxes`
- 事件监听: conversation.created → agent bot 自动回复
### Phase 3: 扩展渠道(P213天)
> 目标: SMS/LINE/API Channel上线,覆盖更多客户渠道
9. **Twilio SMS Provider** (4天)
10. **LINE Provider** (4天)
11. **API Channel Provider** (2天)
12. **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 有 | ❌ 其他渠道缺 |