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

602 lines
28 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 产品需求规格文档 (PRD)
> 版本:v1.0
> 产出日期:2026-05-25
> 产品定位:开源企业级多渠道客服平台,Chatwoot 的 Go 语言 1:1 重写
> 目标读者:产品经理、工程师、设计师、运维
---
## 1. 产品概述
### 1.1 产品定义
GoChat 是一个开源的企业级多渠道客服平台,旨在为企业提供统一的客户沟通管理能力。产品以 Chatwoot(Ruby/Rails 实现)为功能基准,使用 Go 语言进行 1:1 重写,目标是达到 Chatwoot v3.x 的完整功能覆盖,同时在性能、资源消耗和部署便捷性上显著优于原版。
### 1.2 目标用户
| 用户角色 | 使用场景 |
|---------|---------|
| 企业客服坐席 | 通过统一界面处理来自多渠道的客户消息 |
| 客服团队管理者 | 管理团队、分配对话、查看报表 |
| 企业管理员 | 配置账户、渠道、自动化规则、权限 |
| 客户/终端用户 | 通过网站 widget、社交媒体、邮件等渠道与企业沟通 |
| 开发者/集成方 | 通过 API/Webhook 与外部系统对接 |
### 1.3 核心价值主张
1. **多渠道统一收发** — 一个平台管理 Web Widget、Telegram、Facebook、Instagram、WhatsApp、Email 等所有渠道
2. **智能分配与自动化** — Round-Robin/负载均衡自动分配 + 事件驱动自动化规则
3. **AI 增强客服** — Captain AI 助手自动回复 + Copilot 辅助坐席(建议回复/摘要/翻译)
4. **知识库自助服务** — Help CenterPortal 让客户自助查找答案,减少客服负担
5. **完整 CRM** — 联系人管理、自定义属性、标签、笔记、公司
6. **实时协作** — WebSocket 实时推送、内部笔记、对话分配
7. **企业级安全** — JWT+RBAC+MFA+SAML+OAuth+CSRF+XSS防护+Rate Limiting
### 1.4 技术栈
| 层 | 技术 |
|----|------|
| 语言 | Go 1.24+ |
| Web框架 | Gin |
| ORM | GORM |
| 数据库 | PostgreSQL 16 (pgvector) |
| 缓存/队列 | Redis 7+ (Watermill Redis Streams) |
| WebSocket | gorilla/websocket |
| 配置 | Viper |
| 认证 | JWT + bcrypt + TOTP |
| DI | 手动构造函数注入 |
| 测试 | testify + SQLite/PG 双模式 |
---
## 2. 功能模块列表
### 模块编号对照
| 编号 | 模块名 | 英文名 | 优先级 |
|------|--------|--------|--------|
| M1 | 账户与用户管理 | Accounts & Users | P0 |
| M2 | Inbox与渠道管理 | Inboxes & Channels | P0 |
| M3 | 对话与消息 | Conversations & Messages | P0 |
| M4 | 联系人管理 | Contacts & CRM | P1 |
| M5 | 团队与分配 | Teams & Assignment | P1 |
| M6 | 自动化与模板 | Automation & Macros | P1 |
| M7 | 报表与CSAT | Reporting & CSAT | P2 |
| M8 | 通知与Webhook | Notifications & Webhooks | P1 |
| M9 | 知识库 | Knowledge Base / Help Center | P2 |
| M10 | Captain AI & Copilot | Captain & Copilot | P1 |
| M11 | 企业特性 | Enterprise Features | P3 |
| M12 | 平台与集成 | Platform & Integrations | P2 |
---
## 3. 各模块功能详述
### M1 — 账户与用户管理 (P0)
**目标**:多租户账户体系,支持一个用户关联多个账户,完善的权限管理。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 账户 CRUD | 创建/读取/更新/删除账户,含品牌信息自动拉取 | AccountBuilder | ⚠️ 仅Delete有真实实现,其余stub |
| 用户 CRUD | 用户注册/登录/信息修改/头像上传 | User model | ✅ 基本实现 |
| AccountUser 关联 | 用户-账户多对多关联,含角色(admin/agent | AccountUser | ✅ 实现 |
| 角色权限 (RBAC) | 自定义角色 + 精细权限策略 | CustomRole + Policy | ✅ Policy实现,CustomRole部分 |
| JWT 认证 | Access Token (15min) + Refresh Token (7d) | Devise+JWT | ✅ 完整 |
| MFA (TOTP) | 双因素认证启用/验证/禁用 | TOTP | ✅ 完整 |
| OAuth 社交登录 | Google/GitHub/Facebook OAuth | OAuth | ✅ 实现 |
| SAML SSO | 企业单点登录 | SAML | ⚠️ Enable实现,流程缺失 |
| 邮箱验证 | 注册确认邮件 + disposable domain 检测 | SignUpEmailValidation | ❌ 未实现 |
| 密码重置 | 忘记密码/重设密码流程 | PasswordReset | ✅ 实现 |
| 账户切换 | 已登录用户切换工作账户 | SwitchAccount | ✅ 实现 |
| 用户在线状态 | available/busy/offline 状态管理 | AgentAvailability | ❌ 未实现 |
### M2 — Inbox与渠道管理 (P0)
**目标**:多渠道统一收发,每个渠道一个 Inbox,支持渠道扩展插件机制。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| Inbox CRUD | 收件箱创建/列表/更新/删除 | InboxController | ❌ 全stub |
| InboxMember 管理 | 为 Inbox 添加/移除坐席 | InboxMemberController | ❌ 路由缺失 |
| ChannelProvider 注册 | 插件式渠道注册机制 | Channelable | ✅ Registry+Provider接口完整 |
| Web Widget | 嵌入式网站聊天 widget | Channel::WebWidget | ✅ 完整 |
| Telegram | Bot API 集成,webhook 消息收发 | Channel::Telegram | ✅ 完整 |
| Facebook Messenger | Graph API + Page 订阅 + OAuth | Channel::FacebookPage | ✅ 完整 |
| Instagram DM | 共享 Meta Graph API 基础设施 | Channel::Instagram | ✅ 完整(共享FB |
| Email (IMAP+SMTP) | 邮件收取与发送,线程关联 | Channel::Email | ✅ 完整 |
| WhatsApp | Meta Business API / 360dialog | Channel::WhatsApp | ⚠️ 仅模型,无Provider |
| Twilio SMS | Twilio API 集成 | Channel::TwilioSMS | ❌ 仅stub模型 |
| LINE | LINE Messaging API | Channel::Line | ❌ 仅stub模型 |
| Slack | Slack Events API | Channel::Slack | ❌ 完全缺失 |
| API Channel | REST API 接入 | Channel::Api | ❌ 仅stub模型 |
| 渠道 OAuth 授权 | Facebook/Instagram/WhatsApp OAuth 授权路由 | OAuth controllers | ❌ 路由完全缺失 |
| 渠道 Webhook 路由 | 各渠道独立 webhook endpoint | Channel webhooks | ⚠️ catch-all stub,未按渠道分发 |
| AgentBot 绑定 | Inbox 关联 AI Bot 自动回复 | AgentBotInbox | ❌ 缺失 |
| 工作时间配置 | Inbox 工作时间/离线消息设置 | WorkingHours | ❌ 未实现 |
| 欢迎语/品牌 | Inbox 独立欢迎语、品牌名、头像 | Inbox branding | ❌ 未实现 |
### M3 — 对话与消息 (P0)
**目标**:对话是核心交互实体,消息是多态(文本/图片/文件/系统事件)。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 对话 CRUD | 创建/获取/更新/列表对话 | ConversationController | ⚠️ 部分实现 |
| 对话状态流转 | open → resolved/pending/snoozed | Conversation status | ⚠️ 状态枚举有,流转逻辑缺 |
| 对话优先级 | low/medium/high/urgent | Conversation priority | ⚠️ 枚举有,设置逻辑缺 |
| 对话分配 | 手动/自动分配给坐席或团队 | AssignAgent/AssignTeam | ⚠️ 部分实现 |
| 对话标签 | 添加/移除对话标签 | Conversation labels | ❌ 未实现 |
| 对话 snooze | 延时唤醒对话 | SnoozeUntil | ❌ 未实现 |
| 消息 CRUD | 创建/获取/删除消息 | MessageController | ⚠️ 部分实现 |
| 消息类型 | incoming/outgoing/template/system/activity | Message types | ⚠️ 枚举有,多态处理缺 |
| 附件上传 | 图片/文件/音频/视频上传 | ActiveStorage | ⚠️ 上传安全有,消息关联缺 |
| 内部笔记 | 坐席间私有笔记 | Private notes | ❌ 未实现 |
| 来源指示 | 消息来源渠道标注 | Source attribution | ❌ 未实现 |
| 对话搜索 | 按标签/状态/坐席/团队筛选 | Conversation filter | ⚠️ 基本筛选有 |
| 批量操作 | 批量分配/关闭/标签 | BulkActions | ❌ 未实现 |
| 对话合并 | 合并重复对话 | Merge conversations | ❌ 未实现 |
| 消息转发 | 转发消息到其他对话/团队 | Message forwarding | ❌ 未实现 |
### M4 — 联系人管理 (P1)
**目标**:完整 CRM 体系,联系人全生命周期管理。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 联系人 CRUD | 创建/读取/更新/删除联系人 | ContactController | ✅ 实现 |
| 联系人搜索 | 全文搜索 + 自定义属性筛选 | Contact search | ⚠️ 基本搜索有 |
| 联系人合并 | 识别重复联系人并合并 | ContactMerge | ❌ 未实现 |
| ContactInbox | 联系人-收件箱关联,含 source_id | ContactInbox | ✅ 实现 |
| 自定义属性 | 自定义字段定义 + 联系人属性值 | CustomAttribute | ⚠️ 模型有,CRUD缺 |
| 自定义筛选器 | 保存的筛选条件 | CustomFilter | ❌ 未实现 |
| 笔记 (Note) | 联系人笔记添加/删除 | Note | ❌ 未实现 |
| 标签 (Label) | 联系人标签管理 | Label | ❌ 未实现 |
| 公司 (Company) | 联系人归属公司管理(企业版) | Company | ❌ 仅stub模型 |
| CSV 导入/导出 | 批量导入导出联系人 | Import/Export | ❌ 未实现 |
| IP 地址查询 | 自动查询联系人 IP 地理位置 | IpLookup | ❌ 未实现 |
| 联系人详情页 | 含对话历史+属性+笔记的详情视图 | Contact detail | ⚠️ API部分有 |
### M5 — 团队与分配 (P1)
**目标**:团队组织坐席,自动分配策略确保对话快速流转。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 团队 CRUD | 创建/更新/删除团队 | TeamController | ✅ 实现 |
| 团队成员管理 | 添加/移除团队成员 | TeamMember | ✅ 实现 |
| 允许自动分配 | 团队 allow_auto_assign 标志 | Team.allow_auto_assign | ✅ 实现 |
| 手动分配 | 坐席手动将对话分配给指定坐席/团队 | Manual assign | ⚠️ 部分实现 |
| Round-Robin 自动分配 | 轮询式均匀分配 | RoundRobin | ✅ 实现 |
| 负载均衡分配 | 按坐席容量分配(企业版) | AgentCapacityPolicy | ⚠️ 限流器有,完整策略缺 |
| 分配策略 V2 | 基于可用性+容量的智能分配 | AssignmentPolicyV2 | ❌ 未实现 |
| 坐席可用性 | available/busy/offline 状态切换 | AgentAvailability | ❌ 未实现 |
| 自动取消分配 | 对话解决后自动释放坐席 | Auto unassign | ❌ 未实现 |
### M6 — 自动化与模板 (P1)
**目标**:事件驱动的自动化规则减少重复操作,模板和宏提升回复效率。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 自动化规则 CRUD | 创建/更新/克隆/删除规则 | AutomationRuleController | ⚠️ 模型+service有 |
| 事件触发器 | conversation_created/updated/opened/resolved/message_created | event_name | ✅ 枚举定义 |
| 条件过滤器 | AND/OR 条件组合,属性+运算符+值 | ConditionsFilter | ✅ 实现 |
| 动作执行器 | 发消息/分配坐席/添加标签/更新优先级等 | ActionService | ✅ 实现 |
| AutomationRuleListener | 事件驱动规则执行 | Wisper listener | ❌ 未接入事件总线 |
| 宏操作 (Macro) | 坐席一键执行多动作序列 | Macro | ⚠️ service有 |
| 模板消息 (CannedResponse) | 预置消息模板快捷回复 | CannedResponse | ✅ 实现 |
| CSAT 调查自动化 | 对话解决后自动推送满意度调查 | CsatSurveyListener | ⚠️ service有 |
### M7 — 报表与CSAT (P2)
**目标**:量化客服效率,客户满意度追踪。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 报表指标 | 对话数/响应时间/解决率/坐席效率 | Report | ⚠️ 模型+Analytics有 |
| CSAT 调查 | 满意度评分收集与统计 | CsatSurveyResponse | ✅ 实现 |
| Dashboard 聚合 | 平均解决时间/对话分布等 | DashboardApp | ✅ 实现 |
| 实时报表 | 在线坐席数/活跃对话数 | LiveReport | ✅ 实现 |
| 时间范围筛选 | 按日期范围查询报表数据 | Report filter | ⚠️ 部分实现 |
| 导出报表 | CSV/PDF 导出报表数据 | Report export | ❌ 未实现 |
| 自定义报表 | 自定义报表维度和指标 | CustomReport | ❌ 未实现 |
### M8 — 通知与Webhook (P1)
**目标**:实时通知坐席,Webhook 对接外部系统。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| 应用内通知 | 新消息/分配/提及等通知 | Notification | ⚠️ 模型+handler有 |
| WebSocket 实时推送 | 前端实时更新 | ActionCable | ⚠️ 骨架有,未联动pubsub |
| Push 订阅 | 浏览器推送 + FCM | PushSubscription | ⚠️ handler有,推送未实现 |
| 邮件通知 | 通知邮件发送 | EmailNotification | ❌ 未实现 |
| 通知设置 | 用户自定义通知偏好 | NotificationSetting | ⚠️ 模型有 |
| Account Webhook | 账户级事件 HTTP 回调 | Webhook | ✅ CRUD实现 |
| Webhook 签名 | HMAC-SHA256 签名验证 | WebhookSigning | ✅ 完整 |
| 平台级 Webhook | 全平台事件通知 | PlatformWebhook | ⚠️ service有 |
| Webhook 投递 | 含重试+去重+超时 | WebhookDelivery | ❌ 未实现 |
| 通知去重/清理 | 重复通知合并+过期清理 | Dedup/cleanup | ❌ 未实现 |
| 通知 snooze | 延时提醒 | Snooze notification | ❌ 未实现 |
### M9 — 知识库 / Help Center (P2)
**目标**:自助服务门户,减少客服负担。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| Portal CRUD | 创建/更新/删除帮助中心门户 | Portal | ✅ 实现 |
| Category CRUD | 门户下的分类目录管理 | Category | ✅ 实现 |
| Article CRUD | 文章创建/更新/发布/删除 | Article | ✅ 实现 |
| 全文搜索 | PostgreSQL tsearch 全文检索 | PgSearch | ⚠️ service有 |
| Embedding 搜索 | pgvector 向量相似搜索 | pgvector | ⚠️ stub |
| 多语言 | 文章多语言版本管理 | Locale | ⚠️ 模型有 |
| AI 内容辅助 | Captain 辅助写作/润色 | CaptainHelp | ❌ 未实现 |
| 门户品牌 | 自定义门户外观/品牌 | Portal branding | ❌ 未实现 |
### M10 — Captain AI & Copilot (P1)
**目标**:AI 增强客服效率,自动回复 + 坐席辅助。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| Captain Assistant CRUD | AI 助手创建/配置/删除 | CaptainAssistant | ✅ 完整 |
| Captain 文档管理 | 助手知识文档 CRUD + 搜索 | CaptainDocument | ✅ 完整 |
| Captain 场景管理 | 助手场景配置 CRUD | CaptainScenario | ✅ 完整 |
| Captain 自定义工具 | 助手外部工具 CRUD | CaptainCustomTool | ✅ 完整 |
| Copilot 建议回复 | 基于上下文生成回复建议 | SuggestReplies | ✅ 实现 |
| Copilot 摘要 | 对话摘要生成 | Summarize | ✅ 实现 |
| Copilot 翻译 | 消息实时翻译 | Translate | ✅ 实现 |
| LLM Provider | OpenAI/Ollama/volcengine 多后端 | LLM adapter | ✅ 实现 |
### M11 — 企业特性 (P3)
**目标**:企业客户需要的高级功能。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| SLA 筡理 | 服务等级协议定义+追踪 | SlaPolicy | ❌ 仅stub模型 |
| 语音通话 | 语音通话集成 | Call | ❌ 仅stub模型 |
| 审计日志 | 操作审计追踪 | AuditLog | ❌ 仅stub模型 |
| 数据导入 | 批量数据迁移工具 | DataImport | ❌ 仅stub模型 |
| Access Token 管理 | API Token CRUD | AccessToken | ❌ 仅stub模型 |
| 邮件模板 | 自定义邮件模板 | EmailTemplate | ❌ 仅stub模型 |
| 坐席容量策略 | 按容量限制自动分配 | AgentCapacityPolicy | ⚠️ 限流器有 |
| 自定义角色 | 精细权限自定义 | CustomRole | ⚠️ 部分实现 |
| 多语言 UI | 界面国际化 | Locale | ⚠️ 模型有 |
### M12 — 平台与集成 (P2)
**目标**:平台管理和外部系统集成。
| 功能 | 描述 | Chatwoot对等 | 实现状态 |
|------|------|-------------|---------|
| Platform App CRUD | 平台级应用管理 | PlatformApp | ✅ 实现 |
| Platform App User | 平台级用户管理 | PlatformAppUser | ✅ 实现 |
| Hook/Integration | Integration Hook 管理(Slack/Discord等) | Hook | ⚠️ 模型有 |
| CRM 集成 | Salesforce/Hubspot 等 CRM 双向同步 | CRM Integration | ⚠️ service骨架有 |
| Dashboard App | 自定义仪表盘应用 | DashboardApp | ✅ 实现 |
| Webhook Subscription | Webhook 订阅 CRUD | WebhookSubscription | ✅ 实现 |
---
## 4. 优先级划分
### 4.1 P0 — 核心可用(MVP
**定义**:平台可上线提供基本客服服务的最小功能集。
| 功能项 | 当前状态 | 工作量预估 |
|--------|---------|-----------|
| Inbox CRUD(非stub | ❌ 全stub | 3天 |
| 对话 CRUD + 状态流转 | ⚠️ 部分 | 5天 |
| 消息 CRUD + 附件 | ⚠️ 部分 | 5天 |
| 渠道 Webhook 路由接入 | ⚠️ catch-all | 3天 |
| 事件总线接入(核心3个Listener | ❌ 无业务Listener | 5天 |
| WebSocket 实时推送联动 | ⚠️ 骨架 | 3天 |
| 对话分配/取消分配 | ⚠️ 部分 | 2天 |
| 渠道 OAuth 路由(FB/IG | ❌ 缺失 | 2天 |
| 账户 CRUD(非stub | ❌ stub | 2天 |
| **P0 合计** | — | **~30天** |
### 4.2 P1 — 功能补全
**定义**:达到 Chatwoot 核心功能的完整覆盖,可正式对外发布。
| 功能项 | 当前状态 | 工作量预估 |
|--------|---------|-----------|
| WhatsApp Provider 实现 | ⚠️ 仅模型 | 5天 |
| 对话标签/优先级/snooze | ⚠️ 枚举有 | 3天 |
| 联系人合并/搜索增强 | ⚠️ 部分 | 3天 |
| 联系人 Note/Label | ❌ | 2天 |
| 自动化规则 Listener 接入 | ⚠️ service有 | 3天 |
| 宏操作完整实现 | ⚠️ | 2天 |
| 通知创建+WebSocket推送 | ⚠️ | 3天 |
| Webhook 投递+重试 | ❌ | 3天 |
| 用户在线状态管理 | ❌ | 3天 |
| 批量对话操作 | ❌ | 2天 |
| 内部笔记 | ❌ | 2天 |
| Inbox 工作时间/欢迎语 | ❌ | 3天 |
| Swagger/OpenAPI 文档 | ❌ | 2天 |
| Database Migration 工具 | ⚠️ golang-migrate有 | 2天 |
| **P1 合计** | — | **~37天** |
### 4.3 P2 — 体验提升
**定义**:提升用户体验和运营效率。
| 功能项 | 当前状态 | 工作量预估 |
|--------|---------|-----------|
| 知识库搜索增强(pgvector | ⚠️ stub | 3天 |
| 报表导出 | ❌ | 2天 |
| Dashboard 自定义报表 | ❌ | 3天 |
| Twilio SMS/WhatsApp Provider | ❌ | 5天 |
| LINE Provider | ❌ | 3天 |
| 邮件通知 | ❌ | 2天 |
| 通知去重/清理 | ❌ | 2天 |
| Hook/Integration 完整实现 | ⚠️ | 3天 |
| CRM 集成完整实现 | ⚠️ 骨架 | 5天 |
| 联系人 CSV 导入导出 | ❌ | 2天 |
| 自定义筛选器 | ❌ | 2天 |
| **P2 合计** | — | **~33天** |
### 4.4 P3 — 运维保障与企业特性
**定义**:生产运维和企业高级功能。
| 功能项 | 当前状态 | 工作量预估 |
|--------|---------|-----------|
| Prometheus 指标导出 | ❌ | 2天 |
| Grafana Dashboard 模板 | ❌ | 1天 |
| OpenTelemetry 分布式追踪 | ❌ | 3天 |
| Kubernetes Helm Chart | ❌ | 3天 |
| JSON 结构化日志 | ⚠️ zap有 | 1天 |
| 健康检查增强 | ⚠️ | 1天 |
| SLA 管理 | ❌ stub | 3天 |
| 审计日志 | ❌ stub | 2天 |
| 数据导入工具 | ❌ stub | 3天 |
| 语音通话 | ❌ stub | 5天 |
| Slack Provider | ❌ | 5天 |
| API Channel Provider | ❌ stub | 3天 |
| **P3 合计** | — | **~35天** |
---
## 5. 里程碑定义
### MS1 — MVP 可上线 (P0完成)
**目标**:平台具备基本客服能力,坐席可登录、接入渠道、处理对话。
**验收标准**
1. 坐席可通过 Web 登录并切换账户
2. Inbox CRUD 可创建/配置/删除收件箱
3. 至少 Web Widget + Telegram 两个渠道可用(含 webhook 路由接入)
4. 对话创建/列表/更新/关闭完整可用
5. 消息发送/接收/附件上传完整可用
6. 对话自动分配(Round-Robin)可用
7. WebSocket 实时推送新消息/新对话
8. 核心事件总线运行(ConversationCreated → Notification → WebSocket推送)
9. Facebook/Instagram OAuth 授权流程可用
10. 全量 E2E 测试通过
**预计完成**P0 开始后 6 周
### MS2 — 功能完整 (P1完成)
**目标**:达到 Chatwoot 核心功能完整覆盖,可正式对外发布。
**验收标准**
1. WhatsApp 渠道可用
2. 对话标签/优先级/snooze/批量操作完整
3. 联系人管理(含合并/笔记/标签/搜索)完整
4. 自动化规则事件驱动执行可用
5. 宏操作可用
6. 通知系统完整(创建+推送+设置+邮件)
7. Webhook 投递含重试/签名可用
8. 坐席在线状态管理可用
9. 内部笔记可用
10. Inbox 工作时间/欢迎语配置可用
11. Swagger/OpenAPI 自动生成文档
12. API 覆盖率达到 Chatwoot 80%+
**预计完成**MS1 后 7 周
### MS3 — 体验增强 (P2完成)
**目标**:提升用户体验,扩展渠道和集成。
**验收标准**
1. Twilio SMS/WhatsApp 渠道可用
2. LINE 渠道可用
3. 知识库向量搜索可用
4. 报表导出+自定义报表可用
5. CRM 集成可用
6. 联系人 CSV 导入导出可用
7. API 覆盖率达到 Chatwoot 95%+
**预计完成**MS2 后 7 周
### MS4 — 生产就绪 (P3完成)
**目标**:运维可观测性 + 企业特性 + 生产部署。
**验收标准**
1. Prometheus/Grafana 监控面板可用
2. OpenTelemetry 追踪可用
3. Kubernetes Helm Chart 可一键部署
4. SLA 管理/审计日志可用
5. Slack/API Channel 渠道可用
6. CI/CD 完整流水线运行
7. 性能基准测试:单坐席 < 50ms 响应延迟,1000并发对话 < 5s
**预计完成**MS3 后 7 周
---
## 6. 关键架构决策
### 6.1 已确认的架构决策
| 决策 | 选择 | 理由 |
|------|------|------|
| 单体 vs 微服务 | 单体架构(多模块) | Chatwoot 本身是单体;Go 性能足够;渠道扩展通过插件接口 |
| DI 方式 | 手动构造函数注入 | Go 无自动 DI 容器,显式依赖更清晰 |
| 实时推送 | Redis Pub/Sub + WebSocket | 跨进程事件分发 + 前端实时更新 |
| 异步任务 | Goroutine + WorkerPool | Go 原生并发,无需 Sidekiq 类外部 Job 队列 |
| 事件分发 | Watermill + Redis Streams | 持久化消息队列,支持异步 Listener |
| DB 迁移 | GORM AutoMigrate → golang-migrate | 首版快速迭代,后续版本化迁移 |
| 多态关联 | 独立关联表 + JSON 字段 | GORM 对多态支持弱,独立表更清晰 |
| 配置管理 | Viperenv/file/DB叠加) | 多环境管理 + 热加载 |
| 认证体系 | JWT + bcrypt + TOTP + SAML + OAuth | 企业级多层认证 |
### 6.2 待确认的架构决策
| 决策 | 选项 | 建议 | 需确认时间 |
|------|------|------|-----------|
| DI 自动化 | Wire vs Dig vs 手动 | MS2后评估手动DI复杂度 | MS2 |
| 日志框架 | slog vs zap | zap(已集成) | P3 |
| 前端框架 | React vs Vue vs 无前端 | Chatwoot 用 VueGoChat 仅后端 | 产品决策 |
| WhatsApp 实现方式 | 360dialog API vs Baileys vs go-whatsapp | 360dialog API(官方合规) | P1开始前 |
| CRM 集成方式 | 内建 vs 外部微服务 | 内建(保持单体) | P2开始前 |
---
## 7. 非功能需求
### 7.1 性能要求
| 指标 | 目标值 | 测量方法 |
|------|--------|---------|
| API 响应延迟 (P99) | < 200ms | Prometheus histogram |
| WebSocket 消息推送延迟 | < 100ms | 客户端计时 |
| 单坐席消息处理吞吐 | > 100 msg/min | Benchmark |
| 1000 并发对话 | 系统稳定无 OOM | Load test |
| DB 查询 (Conversation list) | < 50ms | pg_stat_statements |
| 数据库连接池 | 100 连接 | PG 配置 |
### 7.2 安全要求
| 要求 | 当前状态 | 目标 |
|------|---------|------|
| JWT 安全 | ✅ HMAC-SHA256 | 生产级密钥管理 |
| SSRF 防护 | ✅ 白名单+私有IP检测 | 持续更新白名单 |
| Rate Limiting | ✅ IP+路径 | 增加账户级限流 |
| 文件上传安全 | ✅ MIME+大小+ZIP防护 | 持续更新MIME白名单 |
| XSS 防护 | ✅ bluemonday | 持续更新策略 |
| RBAC | ✅ Policy | CustomRole 完善 |
| MFA | ✅ TOTP | SAML 完善 |
| 数据加密 | ✅ AES-256 | PII字段加密存储 |
| SQL 注入防护 | ✅ 参数化查询 | 持续审计 |
| CSRF 防护 | ⚠️ 部分 | Gin CSRF middleware |
### 7.3 可用性要求
| 要求 | 目标 |
|------|------|
| 服务可用性 | 99.9% (全年停机 < 8.76h) |
| 故障恢复 | < 5min 自动重启 |
| 数据备份 | PG 每日全量 + WAL 实时 |
| 滚动升级 | 零停机升级(已在 docs 有方案) |
### 7.4 可观测性要求
| 要求 | 目标 | 状态 |
|------|------|------|
| Prometheus 指标 | 20+ 核心指标 | ❌ 待实现 |
| Grafana Dashboard | 5+ 预设面板 | ❌ 待实现 |
| OpenTelemetry 追踪 | 关链路100%覆盖 | ❌ 待实现 |
| 结构化日志 | zap JSON输出 | ⚠️ 已集成 |
| 健康检查 | /health/live + /health/ready | ⚠️ 部分实现 |
| 告警规则 | 10+ 核心告警 | ❌ 待实现 |
---
## 8. 当前实现状态总览
### 8.1 量化指标
| 指标 | 数值 | Chatwoot对等 | 覆盖率 |
|------|------|-------------|--------|
| Go 源码文件 | 299 | ~500+ | 60% |
| 测试文件 | 83 | — | — |
| 测试用例 | 141+ | — | — |
| API 路由 | 207 registrations | 327+ | 64% |
| 真实实现方法 | 56 | 150+ | 37% |
| Stub/Placeholder 方法 | 37+ | 0 | 需全部补实现 |
| 501 Not Implemented | 6 | 0 | 需全部补实现 |
| 域模型 | 58 active + ~30 stub | ~80 | 73% |
| 服务 | 38 | ~50 | 76% |
| 渠道 Provider | 5 (Widget/Telegram/Email/FB/IG) | 11 | 45% |
| 安全模块 | 14 | ~14 | 100% |
| 事件 Listener | 0 业务Listener | 9 async | 0% |
### 8.2 关键差距
1. **事件驱动链路断裂** — 核心事件总线(Watermill+Redis Streams)骨架有,但无任何业务Listener接入。Chatwoot 的 9 个 Async Listener 是功能运转的核心(自动化规则、通知、CSAT、报表、Webhook等),GoChat 全部缺失。
2. **Inbox 管理 API 全 stub** — 无论渠道实现多完整,坐席无法通过 API 创建/配置收件箱。
3. **渠道路由接入断裂** — Facebook/Telegram/Email 的 webhook_handler.go 已写好,但未被路由接入。OAuth 授权路由完全缺失。
4. **WebSocket 未联动 pubsub** — 前端实时推送的完整链路(事件 → pubsub → WebSocket → 客户端)未串联。
### 8.3 优势
1. **性能** — Go 原生并发,内存占用约 Chatwoot 的 1/10
2. **安全** — 14 个安全模块完整实现(JWT/MFA/OAuth/SAML/RBAC/XSS/SSRF/RateLimit等)
3. **AI 功能** — Captain + Copilot 完整实现,超过 Chatwoot 基础 AI 功能
4. **配置管理** — Viper 多环境热加载,优于 Chatwoot 的 ENV+InstallationConfig
5. **测试基础设施** — SQLite/PG 双模式测试 + E2E 套件 + 141+ 测试全通过
---
## 9. 风险与缓解
| 风险 | 严重度 | 缓解措施 |
|------|--------|---------|
| 事件总线接入工作量超预期 | 高 | P0 阶段先实现3个核心ListenerNotification/AutomationRule/ConversationStatus),其余逐步接入 |
| WhatsApp 360dialog API 变动 | 中 | 抽象 Provider 接口隔离 API 变动;备选 go-whatsapp meow 方案 |
| 前端缺失(GoChat 仅后端) | 高 | 明确 GoChat 是纯后端API平台;前端依赖 Chatwoot Vue 前端或独立前端项目 |
| SAML SSO 完整实现复杂 | 中 | P1 先完成 OAuth 社交登录;SAML 延到 P3 |
| 数据库迁移兼容性 | 低 | golang-migrate 已集成;保持 PG-only 生产策略 |
---
## 10. 附录
### 10.1 参考文档
| 文档 | 路径 |
|------|------|
| 项目架构设计 | docs/architecture/P2A-项目结构与模块划分.md |
| 数据库设计 | docs/architecture/P2B-数据库设计.md |
| 路由与API设计 | docs/architecture/P2C-路由与API设计.md |
| 渠道抽象层设计 | docs/architecture/P2D-渠道抽象层设计.md |
| 认证授权与实时通信 | docs/architecture/P2E-认证授权与实时通信.md |
| 阶段二规划 | docs/PHASE2_PLAN.md |
| 渠道集成优先级 | docs/CHANNEL_INTEGRATION_PRIORITIES.md |
| Chatwoot 功能对比 | docs/comparison/Gochat-vs-Chatwoot-Full-Comparison.md |
| 安全审计报告 | docs/SECURITY_AUDIT_REPORT.md |
| 性能基准报告 | docs/PERFORMANCE_BENCHMARK.md |
| API 覆盖报告 | docs/API_COVERAGE_REPORT.md |
| 模块需求文档(M1-M12) | docs/requirements/M{1-12}-*.md |
### 10.2 术语表
| 术语 | 定义 |
|------|------|
| Account | 多租户账户,一个企业/组织对应一个 Account |
| Inbox | 收件箱,一个对外沟通渠道入口,绑定一个 Channel |
| Channel | 渠道,Inbox 的底层通信渠道(WebWidget/Telegram/Facebook等) |
| Conversation | 对话,客户与团队之间的一次完整交互线程 |
| Contact | 联系人/客户,CRM 核心实体 |
| Agent | 坐席/客服人员 |
| Team | 团队,坐席的逻辑分组 |
| Captain | AI 自动回复助手 |
| Copilot | AI 坐席辅助工具 |
| Portal | Help Center 门户 |
| CSAT | Customer Satisfaction,客户满意度评分 |
| AutomationRule | 自动化规则,事件+条件+动作 |
| Macro | 宏操作,一键执行多动作 |
| CannedResponse | 模板消息,快捷回复 |
| Hook | Integration Hook,外部集成连接器 |