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

15 KiB
Raw Blame History

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天):

  1. 渠道 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
  2. 渠道配置 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:

  1. WhatsApp Provider 实现 (5天)

    • 模型激活: whatsapp.go 已有,补全字段
    • WhatsApp Cloud API: 消息收发、模板消息、状态回执
    • OAuthProvider: 360dialog token 管理
    • WebhookHandler: 状态回执 webhook
    • 渠道配置路由
  2. Telegram PushProvider (1天)

    • PushTypingOn: 发送 typing indicator (chat action)
    • PushOnlineStatus: 无直接 Telegram API → 通过 Bot 状态模拟
  3. Inbox Members 路由 (2天)

    • POST/GET/DELETE/PATCH /api/v1/accounts/:id/inbox_members
    • 坐席-Inbox 多对多绑定
  4. 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上线,覆盖更多客户渠道

  1. Twilio SMS Provider (4天)
  2. LINE Provider (4天)
  3. API Channel Provider (2天)
  4. 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 有 其他渠道缺