Skip to content

IM即时通讯 PRD

文档信息

项目内容
产品名称PMForge - IM即时通讯
文档版本v2.0
创建日期2026-09-24
最后更新2026-09-24
文档状态评审中
优先级P1

一、功能概述

1.1 功能定位

IM即时通讯是 PMForge 平台的"内部微信"——让团队成员在不离开平台的前提下完成日常沟通。就像微信让你不用打电话就能发消息一样,IM模块让项目成员可以随时发起单聊或群聊、传输文件、@同事提醒,而管理者则可以通过后台进行消息审计、敏感词管控和活跃度分析。

通俗理解:把微信的聊天能力"搬"到项目管理平台里。用户在同一个界面里既能讨论工作,又能查看任务进度,不用在多个App之间来回切换。

1.2 目标用户与使用频率

用户类型使用场景使用频率
项目成员日常沟通、任务讨论、文件传输每日高频(日均30+次)
团队负责人创建群组、发布公告、团队协调每日中频(日均10+次)
系统管理员消息审计、敏感词管控、系统配置每周低频(按需操作)
运营人员活跃度分析、消息量监控每周低频(数据查看)

1.3 业务价值

价值维度具体收益衡量指标
沟通效率减少在多个App间切换的时间浪费消息响应时间缩短50%
协作闭环聊天与任务在同一平台,讨论完直接创建任务任务创建来源中IM占比>20%
内容合规敏感词实时过滤,降低违规风险敏感消息拦截率>99%
运营支撑活跃度数据为管理决策提供依据可追踪日活/月活趋势
知识沉淀群文件和聊天记录可追溯群文件下载率可统计

1.4 功能范围

功能分类后台管理端前台用户端使用频率
会话管理✅ 管理全部会话✅ 管理个人会话每日
消息收发✅ 审计消息✅ 收发消息每日高频
群组管理✅ 管理全部群组✅ 创建/管理群组每周
敏感词管理✅ 配置和监控按需
IM 配置✅ 全局参数配置极少
IM 统计✅ 数据分析每周
联系人/好友✅ 添加好友、黑名单按需
消息互动✅ 撤回/回复/@/转发每日高频
在线状态✅ 查看✅ 设置每日

二、用户场景

2.1 用户角色

角色描述核心诉求
普通用户项目团队成员消息实时到达、文件传输稳定、聊天记录不丢失
群主/管理员群组创建者或管理者管理群成员、发布公告、维护群秩序
系统管理员后台运维人员消息审计、敏感词管控、系统配置
运营人员数据分析人员IM活跃度统计、消息量趋势分析

2.2 使用场景

场景1:IM用户小王单聊沟通任务细节

  • 角色:项目成员小王
  • 背景:小王需要和同事小李确认一个任务的截止日期
  • 操作流程:打开IM → 在会话列表找到小李 → 发送文字消息"那个报告周五前能交吗?" → 小李实时收到并回复 → 小王发送一份参考文件(图片消息辅助说明)→ 沟通完毕
  • 验收标准
编号验收条件优先级
AC-1消息发送后对方200ms内收到(同区域网络)P0
AC-2图片消息支持点击放大预览,文件消息显示下载进度P0
AC-3断网后重连,离线消息在上线后3秒内补齐P0
AC-4消息状态正确显示:发送中→已发送→已送达→已读P1
AC-5会话列表自动更新最后一条消息预览和时间P0

场景2:团队负责人张经理创建项目群并发布通知

  • 角色:团队负责人张经理
  • 背景:新项目启动,需要拉一个项目讨论群
  • 操作流程:点击"创建群组" → 选择"PMForge V2项目组" → 勾选8名项目成员 → 填写群名称和描述 → 确认创建 → 在群内@所有人发布启动会通知 → 成员收到特殊提醒并回复确认
  • 验收标准
编号验收条件优先级
AC-1创建者自动成为群主,被选成员自动入群并收到通知P0
AC-2@所有人消息对所有群成员产生特殊提醒(声音+角标)P0
AC-3群成员列表实时更新,新成员入群后可以看到历史消息P1
AC-4群公告发布后推送通知给所有群成员P1
AC-5群文件上传后所有成员可下载,显示文件名/大小/上传者P1

场景3:项目成员小赵撤回错误消息

  • 角色:项目成员小赵
  • 背景:小赵在群内发送了一条包含错误数据的消息
  • 操作流程:发现消息有误 → 长按消息选择"撤回" → 消息被撤回 → 群内显示"小赵撤回了一条消息" → 小赵重新发送正确内容
  • 验收标准
编号验收条件优先级
AC-1发送后2分钟内(可配置)的消息可以撤回P0
AC-2撤回后所有群成员端显示"xxx撤回了一条消息"占位提示P0
AC-3超过撤回时限的消息,长按菜单不显示"撤回"选项P1
AC-4撤回操作对发送者自己也生效,本地消息同样替换为撤回提示P1
AC-5后台管理员可在消息管理中看到被撤回消息的原始内容P2

场景4:系统管理员进行消息审计

  • 角色:系统管理员
  • 背景:收到用户投诉有人在群内发送不当言论
  • 操作流程:登录后台 → 进入消息管理 → 按发送者ID+时间范围筛选 → 定位到目标消息 → 查看消息详情(含发送者/接收者/群组/内容) → 删除违规消息 → 消息在相关用户端同步消失
  • 验收标准
编号验收条件优先级
AC-1支持按发送者、消息类型、时间范围、关键词多维度筛选P0
AC-2删除消息后,相关用户端同步更新显示P0
AC-3批量删除单次不超过100条,防止误操作P1
AC-4消息导出Excel包含完整字段:发送者、接收者、内容、时间、类型P1
AC-5消息列表按时间倒序,最新消息在最前P0

场景5:系统管理员配置敏感词库

  • 角色:系统管理员
  • 背景:需要上线一批新的敏感词防止违规内容
  • 操作流程:进入敏感词管理 → 选择"暴力"分组 → 批量导入Excel文件(500个新敏感词) → 设置匹配策略为"替换" → 用户在聊天中发送包含敏感词的消息 → 系统自动将敏感词替换为*** → 管理员查看拦截记录
  • 验收标准
编号验收条件优先级
AC-1批量导入支持Excel/TXT格式,单次不超过1000条P1
AC-2敏感词变更后实时生效,无需重启服务P0
AC-3三种匹配策略(拦截/替换/审核)按配置执行P0
AC-4同一分组内敏感词不可重复,导入时自动去重P1
AC-5支持精确匹配和模糊匹配两种模式P1

场景6:新成员添加好友并开始聊天

  • 角色:新加入的项目成员小陈
  • 背景:小陈刚加入公司,需要添加同事为好友方便沟通
  • 操作流程:进入联系人页面 → 搜索同事用户名"李明" → 发送好友申请(附验证消息"你好,我是新来的小陈") → 李明收到申请通知 → 李明接受申请 → 两人自动成为好友 → 小陈在会话列表看到李明 → 发起聊天
  • 验收标准
编号验收条件优先级
AC-1搜索支持用户名/昵称模糊匹配,结果3秒内返回P0
AC-2好友申请包含验证消息字段,对方可接受/拒绝P0
AC-3好友申请7天未处理自动过期P1
AC-4成为好友后自动创建会话,可直接发起聊天P0
AC-5拉黑后双方不可发消息、不可查看对方信息P1

三、功能需求

3.1 后台管理端

3.1.1 功能清单

功能优先级说明使用频率
会话管理P0查看/删除会话、查看会话详情按需
消息管理P0消息记录查看、搜索、删除按需
群组管理P0群组列表/创建/编辑/成员管理/解散每周
敏感词管理P1敏感词列表/分组/导入/导出每月
IM 配置P1消息类型/文件大小/在线状态配置极少
IM 统计P2消息量/活跃用户/群组统计每周

3.1.2 会话管理

页面结构:

会话管理

业务规则:

规则编号规则描述设计原因
R-01会话列表按最后消息时间倒序排列管理员优先关注活跃会话
R-02删除会话为逻辑删除,数据保留但前台不可见审计需要,防止数据丢失
R-03支持按会话类型(单聊/群聊)筛选群聊和单聊的管理策略不同
R-04会话详情展示双方用户昵称和头像方便管理员快速识别会话双方
R-05删除会话前需二次确认弹窗防止误删,删除操作不可逆(前台不可见)

接口设计:

接口名称请求方式接口路径说明
获取会话分页列表GET/admin-api/im/conversation/page分页查询会话列表
获取会话详情GET/admin-api/im/conversation/get获取单个会话详情
删除会话DELETE/admin-api/im/conversation/delete删除指定会话
导出会话列表GET/admin-api/im/conversation/export导出会话列表Excel

请求参数(分页查询):

参数名类型必填说明
userIdLong用户ID
targetTypeInteger会话类型(1-单聊 2-群聊)
statusInteger状态
createTimeDateTime[]创建时间范围
pageNoInteger页码
pageSizeInteger每页条数

3.1.3 消息管理

页面结构:

消息管理

业务规则:

规则编号规则描述设计原因
R-01消息列表按创建时间倒序排列最新消息优先展示
R-02支持按8种消息类型筛选不同类型消息管理策略不同
R-03关键词搜索支持模糊匹配消息内容快速定位特定消息
R-04删除消息后,相关用户端同步显示"消息已撤回"保证各端消息状态一致
R-05批量删除单次不超过100条防止误操作造成大量数据丢失
R-06消息记录保留时长可配置(默认永久)满足不同合规要求

接口设计:

接口名称请求方式接口路径说明
获取消息分页列表GET/admin-api/im/message/page分页查询消息列表
获取消息详情GET/admin-api/im/message/get获取单条消息详情
删除消息DELETE/admin-api/im/message/delete删除指定消息
批量删除消息DELETE/admin-api/im/message/batch-delete批量删除消息
导出消息记录GET/admin-api/im/message/export导出消息记录Excel

请求参数(分页查询):

参数名类型必填说明
senderIdLong发送者ID
typeInteger消息类型
contentString关键词搜索
groupIdLong群组ID
createTimeDateTime[]发送时间范围
pageNoInteger页码
pageSizeInteger每页条数

3.1.4 群组管理

页面结构:

群组管理

业务规则:

规则编号规则描述设计原因
R-01群名称不能为空,长度不超过50字符防止过长群名影响展示
R-02群最大成员数默认200,可配置上限500平衡使用体验和服务器性能
R-03解散群组前需二次确认,解散后群成员全部移除解散是不可逆操作,需防误操作
R-04群主不能直接退出群组,需先转让群主防止群组变成"无主群"
R-05管理员后台创建的群组需指定群主每个群必须有明确的管理责任人
R-06群组状态:正常/禁用,禁用后群成员无法发送消息支持临时冻结问题群组

接口设计:

接口名称请求方式接口路径说明
获取群组分页列表GET/admin-api/im/group/page分页查询群组列表
获取群组详情GET/admin-api/im/group/get获取单个群组详情
创建群组POST/admin-api/im/group/create创建新群组
更新群组PUT/admin-api/im/group/update更新群组信息
删除/解散群组DELETE/admin-api/im/group/delete解散群组
获取群成员列表GET/admin-api/im/group-member/list获取群组成员列表
添加群成员POST/admin-api/im/group-member/add添加群成员
移除群成员DELETE/admin-api/im/group-member/remove移除群成员
设置群管理员PUT/admin-api/im/group-member/set-admin设置/取消群管理员
转让群主PUT/admin-api/im/group-member/transfer-owner转让群主

请求参数(创建群组):

参数名类型必填说明
nameString群组名称
avatarString群组头像URL
descriptionString群组描述
ownerIdLong群主用户ID
maxMemberInteger最大成员数(默认200)
memberIdsLong[]初始成员ID列表

3.1.5 敏感词管理

页面结构:

敏感词管理

业务规则:

规则编号规则描述设计原因
R-01敏感词不能重复(同一分组内)避免重复配置,减少检测开销
R-02支持模糊匹配和精确匹配两种模式模糊匹配覆盖面广,精确匹配避免误伤
R-03匹配策略:拦截(不发送)、替换(用***替代)、审核(发送后审核)不同场景需要不同的处理力度
R-04批量导入支持 Excel 和 TXT 格式,单次不超过1000条大批量导入可能影响性能
R-05敏感词分组自定义,默认分组:政治、色情、暴力、广告方便按类别管理和统计
R-06敏感词变更实时生效,无需重启服务紧急情况下可快速响应

接口设计:

接口名称请求方式接口路径说明
获取敏感词分页列表GET/admin-api/im/sensitive-word/page分页查询敏感词
获取敏感词详情GET/admin-api/im/sensitive-word/get获取单个敏感词详情
创建敏感词POST/admin-api/im/sensitive-word/create新增敏感词
更新敏感词PUT/admin-api/im/sensitive-word/update更新敏感词
删除敏感词DELETE/admin-api/im/sensitive-word/delete删除敏感词
批量导入敏感词POST/admin-api/im/sensitive-word/import批量导入
导出敏感词GET/admin-api/im/sensitive-word/export导出敏感词
获取敏感词分组列表GET/admin-api/im/sensitive-word/group/list获取分组列表
创建敏感词分组POST/admin-api/im/sensitive-word/group/create创建分组
删除敏感词分组DELETE/admin-api/im/sensitive-word/group/delete删除分组

请求参数(批量导入):

参数名类型必填说明
fileMultipartFile上传文件(Excel/TXT)
groupIdLong分组ID
matchTypeInteger匹配方式(1-精确 2-模糊)

3.1.6 IM 配置

业务规则:

规则编号规则描述设计原因
R-01消息类型配置:可启用/禁用各类消息类型按需控制,如禁止语音消息节省存储
R-02文件上传大小限制:单聊默认20MB,群聊默认10MB群聊文件影响更多人,限制更严
R-03在线状态刷新间隔:默认30秒,可配置范围10-120秒间隔太短增加服务器压力
R-04消息撤回时限:默认2分钟,可配置范围1-15分钟平衡用户需求和消息一致性
R-05消息已读回执:可全局开启/关闭已读回执增加系统复杂度,按需开启
R-06群成员上限:可配置群组最大成员数不同企业规模不同
R-07好友验证:可配置添加好友是否需要验证内部团队可关闭验证简化流程
R-08配置变更后实时生效管理员调整后无需等待

接口设计:

接口名称请求方式接口路径说明
获取IM配置GET/admin-api/im/config/get获取IM配置信息
更新IM配置PUT/admin-api/im/config/update更新IM配置

请求参数(更新配置):

参数名类型必填说明
enableTextBoolean是否启用文字消息
enableImageBoolean是否启用图片消息
enableFileBoolean是否启用文件消息
enableVoiceBoolean是否启用语音消息
enableVideoBoolean是否启用视频消息
enableEmojiBoolean是否启用表情消息
enableLocationBoolean是否启用位置消息
enableCardBoolean是否启用名片消息
privateFileMaxSizeInteger单聊文件大小限制(MB)
groupFileMaxSizeInteger群聊文件大小限制(MB)
onlineStatusIntervalInteger在线状态刷新间隔(秒)
recallTimeLimitInteger消息撤回时限(分钟)
enableReadReceiptBoolean是否开启已读回执
groupMaxMemberInteger群组最大成员数
friendNeedVerifyBoolean添加好友是否需要验证

3.1.7 IM 统计

页面结构:

IM统计

业务规则:

规则编号规则描述设计原因
R-01统计数据每小时更新一次平衡数据实时性和系统性能
R-02消息量统计支持按消息类型拆分了解各类消息使用占比
R-03活跃用户定义:当日有发送消息行为的用户仅登录不算活跃,需有实际沟通行为
R-04统计时间范围最长支持90天过长范围查询性能差
R-05活跃用户排行榜展示前50名过多排名无实际管理意义
R-06支持统计数据导出为Excel方便制作汇报材料

接口设计:

接口名称请求方式接口路径说明
获取消息统计GET/admin-api/im/statistics/message获取消息量统计数据
获取活跃用户统计GET/admin-api/im/statistics/active-user获取活跃用户统计
获取活跃用户排行GET/admin-api/im/statistics/active-user/rank获取活跃用户排行
获取群组统计GET/admin-api/im/statistics/group获取群组统计数据
获取活跃群组排行GET/admin-api/im/statistics/group/rank获取活跃群组排行
获取概览数据GET/admin-api/im/statistics/overview获取IM统计概览
导出统计报表GET/admin-api/im/statistics/export导出统计报表Excel

请求参数(消息统计):

参数名类型必填说明
startTimeDate开始日期
endTimeDate结束日期
granularityString统计粒度(day/week/month)
messageTypeInteger消息类型筛选

3.2 前台用户端

3.2.1 功能清单

功能优先级说明使用频率
聊天界面P0单聊/群聊、消息收发、富媒体消息每日高频
会话列表P0最近会话、置顶、免打扰、未读角标每日高频
联系人P1好友列表、添加好友、好友申请、黑名单按需
群组P0创建群组、邀请入群、群公告、群文件每周
个人中心P2在线状态设置、消息通知设置极少

3.2.2 聊天界面

页面结构:

聊天界面

消息类型支持:

消息类型说明大小限制使用频率
文字纯文本消息,支持表情-极高
图片支持 JPG/PNG/GIF,支持缩略图预览20MB
文件支持任意格式文件传输20MB
语音支持 AMR/MP3 格式,最长60秒5MB
视频支持 MP4 格式,最长5分钟50MB
表情系统内置表情 + 自定义表情-
位置发送当前位置信息-极低
名片分享个人/群组名片-

消息互动功能:

功能操作方式说明使用频率
撤回长按消息 → 撤回2分钟内可撤回自己的消息
引用回复长按消息 → 引用 → 输入内容发送消息列表显示引用内容
@提醒输入框输入@弹出群成员列表选择
复制长按文字消息 → 复制复制文字内容到剪贴板
转发长按消息 → 转发选择转发给其他联系人/群组
删除长按消息 → 删除仅删除自己端的消息记录
收藏长按消息 → 收藏收藏到个人收藏夹

业务规则:

规则编号规则描述设计原因
R-01消息通过 WebSocket 实时推送,断线后自动重连保证消息实时性和连接稳定性
R-02离线消息在用户上线后批量推送用户不会错过任何消息
R-03消息已读状态:单聊显示已读/未读,群聊显示已读人数让发送者知道消息是否被阅读
R-04消息撤回:发送后2分钟内可撤回(可配置)给用户纠错机会,但时限不宜过长
R-05撤回后双方显示"xxx撤回了一条消息"保持双方消息视图一致
R-06消息引用回复:长按消息选择"引用回复",输入区域显示引用内容讨论多条话题时避免混乱
R-07@提醒:群聊中输入@可选择@成员,被@方收到特殊提醒确保重要信息被特定人注意到
R-08消息发送失败自动重试(最多3次)弱网环境下的容错机制
R-09敏感词检测:发送前客户端预检测,服务端二次检测双重保障,防止违规内容发出
R-10历史消息加载:每次加载20条,向上滚动加载更多避免一次性加载过多数据影响性能
R-11图片消息支持点击放大预览、左右切换方便查看图片细节
R-12文件消息显示文件名、大小、进度条,支持下载让用户了解传输状态

WebSocket 消息协议:

字段名类型说明
typeString消息类型(chat/read/recall/typing/online)
fromLong发送者ID
toLong接收者ID/群组ID
toTypeInteger目标类型(1-用户 2-群组)
contentObject消息内容(根据type不同结构不同)
timestampLong消息时间戳
msgIdString消息唯一ID

接口设计:

接口名称请求方式接口路径说明
获取历史消息GET/app-api/im/message/list获取与某用户/群组的历史消息
发送消息POST/app-api/im/message/send发送消息(REST备用)
撤回消息PUT/app-api/im/message/recall撤回指定消息
标记已读PUT/app-api/im/message/read标记消息为已读
上传文件POST/app-api/im/message/upload上传聊天文件
WebSocket连接WS/ws/im/chatWebSocket聊天连接
搜索消息GET/app-api/im/message/search搜索聊天消息

请求参数(获取历史消息):

参数名类型必填说明
targetIdLong目标ID(用户ID或群组ID)
targetTypeInteger目标类型(1-用户 2-群组)
lastMsgIdLong最后一条消息ID(用于分页加载)
countInteger加载条数(默认20)

请求参数(发送消息):

参数名类型必填说明
receiverIdLong接收者ID
receiverTypeInteger接收者类型(1-用户 2-群组)
contentString消息内容
typeInteger消息类型(1-文字 2-图片 3-文件 4-语音 5-视频 6-表情 7-位置 8-名片)
quoteMsgIdLong引用消息ID
atUserIdsLong[]@用户ID列表

3.2.3 会话列表

页面结构:

会话列表

业务规则:

规则编号规则描述设计原因
R-01会话按最后消息时间倒序排列最近沟通过的会话优先展示
R-02置顶会话始终显示在列表顶部重要会话不被淹没
R-03免打扰会话不弹出通知提醒,未读数仍以角标显示减少干扰但不遗漏
R-04未读消息角标:数字超过99显示"99+"界面简洁,避免数字过长
R-05删除会话仅从列表移除,不删除聊天记录防止误删聊天记录
R-06新消息自动更新会话列表排序保持列表时效性
R-07最多支持置顶20个会话置顶过多失去意义
R-08支持按会话名称搜索过滤快速定位目标会话

接口设计:

接口名称请求方式接口路径说明
获取会话列表GET/app-api/im/conversation/list获取当前用户会话列表
置顶会话PUT/app-api/im/conversation/top置顶/取消置顶会话
免打扰设置PUT/app-api/im/conversation/mute设置/取消免打扰
删除会话DELETE/app-api/im/conversation/delete从列表删除会话
标记已读PUT/app-api/im/conversation/read-all全部标记已读

请求参数(会话列表):

参数名类型必填说明
keywordString搜索关键词
onlyUnreadBoolean仅显示未读

3.2.4 联系人

页面结构:

联系人

业务规则:

规则编号规则描述设计原因
R-01好友列表按昵称首字母分组排序方便快速查找
R-02搜索支持用户名/昵称模糊匹配降低搜索门槛
R-03发送好友申请需填写验证消息(可选)让对方了解申请意图
R-04好友申请有效期7天,过期自动失效过期申请无意义,定期清理
R-05拉黑后双方不可发消息、不可查看对方动态保护用户免受骚扰
R-06同一好友申请不能重复发送避免重复打扰对方
R-07好友申请可配置是否需要验证(后台配置)内部团队可关闭验证简化流程
R-08好友上限可配置(默认2000人)防止滥用

接口设计:

接口名称请求方式接口路径说明
获取好友列表GET/app-api/im/friend/list获取好友列表
搜索用户GET/app-api/im/user/search搜索用户(添加好友用)
发送好友申请POST/app-api/im/friend-apply/send发送好友申请
获取好友申请列表GET/app-api/im/friend-apply/list获取收到的好友申请
处理好友申请PUT/app-api/im/friend-apply/handle接受/拒绝好友申请
删除好友DELETE/app-api/im/friend/delete删除好友
添加黑名单POST/app-api/im/blacklist/add拉黑用户
移除黑名单DELETE/app-api/im/blacklist/remove取消拉黑
获取黑名单列表GET/app-api/im/blacklist/list获取黑名单列表

请求参数(发送好友申请):

参数名类型必填说明
targetUserIdLong目标用户ID
remarkString验证消息

请求参数(处理好友申请):

参数名类型必填说明
applyIdLong申请ID
actionInteger操作(1-接受 2-拒绝)

3.2.5 群组

业务规则:

规则编号规则描述设计原因
R-01创建者自动成为群主明确群组责任人
R-02群主可设置管理员(最多10名)分担群主管理压力
R-03群公告仅群主和管理员可发布防止公告被滥用
R-04群文件所有成员可上传,仅群主/管理员可删除他人文件保护共享文件不被随意删除
R-05邀请入群:群成员均可邀请(可配置为仅管理员可邀请)平衡开放性和管控需求
R-06群成员上限:默认200人(后台可配置)控制群组规模保证体验
R-07群主退出需先转让群主防止群组变成"无主群"
R-08群公告发布后推送通知给所有群成员确保重要信息传达到位
R-09群文件保留期限:可配置(默认永久)平衡存储成本和使用需求

接口设计:

接口名称请求方式接口路径说明
创建群组POST/app-api/im/group/create创建群组
获取群组详情GET/app-api/im/group/get获取群组详情
更新群组信息PUT/app-api/im/group/update更新群组信息
解散群组DELETE/app-api/im/group/dismiss解散群组(仅群主)
获取群成员列表GET/app-api/im/group/member/list获取群成员列表
邀请成员入群POST/app-api/im/group/member/invite邀请成员入群
移除群成员DELETE/app-api/im/group/member/remove移除群成员
退出群组DELETE/app-api/im/group/member/quit退出群组
发布群公告POST/app-api/im/group/notice/publish发布群公告
获取群公告GET/app-api/im/group/notice/get获取群公告
上传群文件POST/app-api/im/group/file/upload上传群文件
获取群文件列表GET/app-api/im/group/file/list获取群文件列表
下载群文件GET/app-api/im/group/file/download下载群文件
删除群文件DELETE/app-api/im/group/file/delete删除群文件
转让群主PUT/app-api/im/group/transfer-owner转让群主

请求参数(创建群组):

参数名类型必填说明
nameString群组名称
avatarString群组头像
descriptionString群组描述
memberIdsLong[]初始成员ID列表

3.2.6 个人中心

业务规则:

规则编号规则描述设计原因
R-01在线状态:在线、忙碌、离开、隐身四种让对方了解自己的可用状态
R-02隐身状态对其他用户不可见用户想在线但不被打扰
R-03消息通知可设置为:全部通知、仅@我、免打扰不同场景需要不同通知策略
R-04通知内容可配置:显示消息内容/仅显示"你有新消息"保护隐私,避免通知泄露内容
R-05可设置通知声音开关会议等安静场景需要静音
R-06桌面通知需浏览器授权浏览器安全策略要求

接口设计:

接口名称请求方式接口路径说明
设置在线状态PUT/app-api/im/user/online-status设置在线状态
获取在线状态GET/app-api/im/user/online-status获取当前在线状态
获取通知设置GET/app-api/im/user/notify-setting获取消息通知设置
更新通知设置PUT/app-api/im/user/notify-setting更新消息通知设置

请求参数(设置在线状态):

参数名类型必填说明
statusInteger在线状态(1-在线 2-忙碌 3-离开 4-隐身)

四、非功能需求

4.1 性能要求

指标要求实现策略
WebSocket 消息延迟< 200ms(同区域)长连接保持 + 消息队列异步投递
消息发送吞吐量支持 10000 条/秒消息批量入库 + Redis缓冲
在线用户承载量单机 50000 并发连接Netty长连接 + 心跳检测
历史消息查询响应< 500ms分页加载 + 索引优化
会话列表加载响应< 300msRedis缓存最近会话 + 增量更新
文件上传速度不低于网络带宽的 70%分片上传 + CDN加速
WebSocket 断线重连< 5秒自动重连指数退避重连策略
离线消息推送用户上线后 3 秒内推送离线消息队列 + 批量推送

4.2 安全要求

要求说明实现方式
传输加密WebSocket 使用 WSS 协议TLS加密通道
消息内容安全敏感词实时检测和过滤DFA算法匹配敏感词库
身份验证WebSocket 连接需携带有效 TokenJWT Token校验
权限控制用户只能查看自己的消息和会话接口级+数据级权限校验
文件安全上传文件类型校验白名单校验文件扩展名和MIME
XSS防护消息内容 HTML 标签过滤和转义服务端过滤 + 前端渲染转义
消息防重放消息ID唯一性校验客户端生成UUID + 服务端幂等校验
频率限制单用户消息发送频率限制(默认100条/分钟)Redis滑动窗口限流
数据隔离多租户数据严格隔离tenant_id字段隔离

4.3 错误码定义

错误码说明用户提示
IM_MESSAGE_001消息发送频率超限"发送过于频繁,请稍后再试"
IM_MESSAGE_002消息内容包含敏感词"消息包含不当内容,请修改后重试"
IM_MESSAGE_003文件大小超过限制"文件大小超过限制,请压缩后重试"
IM_MESSAGE_004消息撤回超时"超过撤回时限,无法撤回"
IM_MESSAGE_005消息不存在或已删除"该消息不存在或已被删除"
IM_GROUP_001群成员数已达上限"群成员已满,无法加入"
IM_GROUP_002非群管理员无权限操作"仅群管理员可执行此操作"
IM_GROUP_003群主不可直接退出"请先转让群主后再退出"
IM_FRIEND_001已是好友关系"你们已经是好友了"
IM_FRIEND_002好友申请已发送"好友申请已发送,请等待对方处理"
IM_FRIEND_003好友申请已过期"该好友申请已过期"
IM_FRIEND_004好友数已达上限"好友数已达上限"
IM_BLACKLIST_001对方已拉黑你"无法发送消息,对方已将你拉黑"

4.4 兼容性要求

要求
PC浏览器Chrome 80+、Firefox 75+、Safari 13+、Edge 80+
移动端浏览器iOS Safari 12+、Android Chrome 80+
微信内置浏览器支持(WebSocket 兼容)
小程序微信基础库 2.0+(使用 WebSocket)
网络环境支持 4G/5G/WiFi,弱网环境自动降级

五、数据设计

5.1 数据表概览

表名说明核心字段
im_message消息表sender_id, receiver_id, content, type, status
im_conversation会话表user_id, target_id, target_type, unread_count
im_group群组表name, owner_id, max_member, status
im_group_member群成员表group_id, user_id, role, mute
im_friend好友关系表user_id, friend_id, status
im_friend_apply好友申请表from_user_id, to_user_id, status
im_sensitive_word敏感词表word, group_id, match_type, action
im_sensitive_word_group敏感词分组表name, description
im_group_file群文件表group_id, file_name, file_url
im_user_online用户在线状态表user_id, status, device_type
im_configIM配置表config_key, config_value

5.2 表关系图

IM表关系

5.3 缓存策略

缓存Key数据内容过期时间更新策略
im:online:用户在线状态5分钟心跳续期,离线删除
im:conversation:unread:用户未读消息数实时消息收发时更新
im:sensitive:words敏感词集合不过期敏感词变更时刷新
im:configIM全局配置不过期配置变更时刷新
im:group:members:群成员列表10分钟成员变动时删除

5.4 数据表结构

5.4.1 消息表(im_message)

字段名类型必填说明
idBIGINT消息ID(主键)
sender_idBIGINT发送者ID
receiver_idBIGINT接收者ID(用户ID或群组ID)
receiver_typeTINYINT接收者类型(1-用户 2-群组)
group_idBIGINT群组ID(群聊时)
contentTEXT消息内容
typeTINYINT消息类型(1-文字 2-图片 3-文件 4-语音 5-视频 6-表情 7-位置 8-名片)
statusTINYINT消息状态(0-发送中 1-已发送 2-已送达 3-已读 4-已撤回)
quote_msg_idBIGINT引用消息ID
at_user_idsVARCHAR(500)@用户ID列表(逗号分隔)
file_urlVARCHAR(512)文件URL
file_nameVARCHAR(255)文件名
file_sizeBIGINT文件大小(字节)
extra_dataJSON扩展数据(位置坐标、名片信息等)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记(0-未删除 1-已删除)
tenant_idBIGINT租户ID

5.4.2 会话表(im_conversation)

字段名类型必填说明
idBIGINT会话ID(主键)
user_idBIGINT用户ID
target_idBIGINT目标ID(对方用户ID或群组ID)
target_typeTINYINT目标类型(1-用户 2-群组)
last_messageVARCHAR(255)最后一条消息预览
last_message_timeDATETIME最后消息时间
unread_countINT未读消息数(默认0)
topBIT是否置顶(0-否 1-是)
muteBIT是否免打扰(0-否 1-是)
statusTINYINT状态(0-正常 1-已删除)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.3 群组表(im_group)

字段名类型必填说明
idBIGINT群组ID(主键)
nameVARCHAR(50)群组名称
avatarVARCHAR(512)群组头像URL
descriptionVARCHAR(500)群组描述
owner_idBIGINT群主用户ID
max_memberINT最大成员数(默认200)
noticeTEXT群公告内容
invite_permissionTINYINT邀请权限(1-所有人 2-仅管理员)
statusTINYINT状态(0-正常 1-禁用)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.4 群成员表(im_group_member)

字段名类型必填说明
idBIGINT主键ID
group_idBIGINT群组ID
user_idBIGINT用户ID
roleTINYINT角色(0-普通成员 1-管理员 2-群主)
nicknameVARCHAR(50)群内昵称
muteBIT是否禁言(0-否 1-是)
join_timeDATETIME加入时间
join_typeTINYINT加入方式(1-创建 2-邀请 3-申请)
inviter_idBIGINT邀请人ID
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.5 好友关系表(im_friend)

字段名类型必填说明
idBIGINT主键ID
user_idBIGINT用户ID
friend_idBIGINT好友用户ID
remarkVARCHAR(50)好友备注
group_nameVARCHAR(50)好友分组名称
statusTINYINT状态(0-正常 1-已拉黑)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.6 好友申请表(im_friend_apply)

字段名类型必填说明
idBIGINT主键ID
from_user_idBIGINT申请人ID
to_user_idBIGINT被申请人ID
remarkVARCHAR(200)验证消息
statusTINYINT状态(0-待处理 1-已接受 2-已拒绝 3-已过期)
expire_timeDATETIME过期时间
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.7 敏感词表(im_sensitive_word)

字段名类型必填说明
idBIGINT主键ID
wordVARCHAR(100)敏感词内容
group_idBIGINT分组ID
match_typeTINYINT匹配方式(1-精确 2-模糊)
actionTINYINT处理动作(1-拦截 2-替换 3-审核)
statusTINYINT状态(0-启用 1-禁用)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.8 敏感词分组表(im_sensitive_word_group)

字段名类型必填说明
idBIGINT主键ID
nameVARCHAR(50)分组名称
descriptionVARCHAR(200)分组描述
sortINT排序值
statusTINYINT状态(0-启用 1-禁用)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.9 群文件表(im_group_file)

字段名类型必填说明
idBIGINT主键ID
group_idBIGINT群组ID
user_idBIGINT上传用户ID
file_nameVARCHAR(255)文件名
file_urlVARCHAR(512)文件URL
file_sizeBIGINT文件大小(字节)
file_typeVARCHAR(50)文件类型(MIME)
download_countINT下载次数(默认0)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.10 用户在线状态表(im_user_online)

字段名类型必填说明
idBIGINT主键ID
user_idBIGINT用户ID
statusTINYINT在线状态(1-在线 2-忙碌 3-离开 4-隐身)
device_typeVARCHAR(20)设备类型(PC/Mobile/Tablet)
login_timeDATETIME上线时间
last_active_timeDATETIME最后活跃时间
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.4.11 IM配置表(im_config)

字段名类型必填说明
idBIGINT主键ID
config_keyVARCHAR(100)配置键
config_valueVARCHAR(500)配置值
config_typeTINYINT配置类型(1-消息类型 2-文件限制 3-在线状态 4-功能开关)
descriptionVARCHAR(200)配置描述
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户ID

5.5 状态机

消息状态流转

消息状态机

好友申请状态流转

好友申请状态机


六、跨模块联动

6.1 联动关系总览

联动模块联动方向联动场景优先级
认证授权(01-01)IM ← 认证用户登录时建立WebSocket连接P0
角色权限(01-03)IM ← 权限后台管理功能受权限控制P0
用户管理(01-05)IM ← 用户搜索用户、好友列表依赖用户数据P0
消息通知(02-03)IM → 通知@提醒、好友申请推送桌面通知P1
文件存储(02-02)IM ← 存储聊天文件、群文件上传依赖存储服务P0
日志审计(01-08)IM → 日志管理操作记录审计日志P1

6.2 详细联动设计

IM ↔ 认证授权(01-01)

联动场景触发条件联动行为数据流向
WebSocket鉴权用户建立WS连接验证JWT Token有效性IM → 认证
用户登出清理用户退出登录关闭WS连接、更新在线状态IM → 认证
Token续期Token即将过期WS连接携带新Token认证 → IM

IM ↔ 角色权限(01-03)

联动场景触发条件联动行为数据流向
后台功能权限访问后台IM管理页面校验im:conversation:list等权限标识IM ← 权限
消息审计权限管理员查看消息仅拥有im:message:list权限可查看IM ← 权限
敏感词管理权限管理员操作敏感词仅拥有im:sensitive-word:create等权限可操作IM ← 权限

IM ↔ 用户管理(01-05)

联动场景触发条件联动行为数据流向
用户搜索添加好友时搜索从用户管理模块获取用户列表IM → 用户
用户信息展示聊天界面显示头像昵称获取用户基本信息IM → 用户
用户禁用联动用户被禁用强制下线、关闭WS连接用户 → IM

IM ↔ 消息通知(02-03)

联动场景触发条件联动行为数据流向
@提醒通知群聊中被@推送桌面通知+站内通知IM → 通知
好友申请通知收到好友申请推送站内通知IM → 通知
群公告通知群公告发布推送通知给所有群成员IM → 通知

IM ↔ 文件存储(02-02)

联动场景触发条件联动行为数据流向
聊天文件上传发送图片/文件消息调用文件存储服务上传IM → 存储
群文件上传上传群文件调用文件存储服务上传IM → 存储
文件下载下载聊天文件通过存储服务获取下载链接IM → 存储

七、附录

7.1 名词解释

术语通俗理解在本模块中的含义
WebSocket像打电话一样的网络连接——接通后双方可以随时说话,不用每次重新拨号消息实时推送的底层技术,保持客户端和服务器的长连接
WSS加了密码锁的电话线,别人偷听不到加密的WebSocket连接,保障消息传输安全
单聊两个人私下打电话两个用户之间的一对一聊天
群聊在会议室里大家一起讨论三个及以上用户在群组内的聊天
会话微信里的聊天对话框用户与另一个用户或群组的聊天对话记录
已读回执微信里的"已读"标记消息接收方阅读后反馈给发送方的状态通知
消息撤回说错话后赶紧说"当我没说"发送者在一定时间内撤回已发送的消息
免打扰手机开了静音模式设置后不弹出消息通知提醒,但未读数仍记录
敏感词某些场合不能说的"禁语"系统预设的违规词汇,发送时会被拦截或替换
离线消息你关机时别人发的短信,开机后收到用户不在线时收到的消息,上线后批量推送
心跳检测像定期问"你还在吗?"保持联系客户端定期发送心跳包维持WebSocket连接不断开
DFA算法一种快速在一篇文章中找到违禁词的方法敏感词匹配算法,用于高效检测消息中的敏感词
群主微信群的创建者和管理者群组的最高权限管理者
置顶把重要聊天框固定在列表最上面将重要会话固定在会话列表顶部
@提醒在群里喊"小李,你来看一下"群聊中指定提醒某个成员
消息转发把收到的消息转给其他人看将消息转发给其他联系人或群组
好友申请加微信好友时发的验证请求请求添加某人为好友时发送的申请
黑名单把某人拉黑,再也联系不上拉黑某用户后双方不可发消息和查看对方信息
在线状态微信头像旁的小绿点显示用户当前是否在线及状态(在线/忙碌/离开/隐身)
群公告微信群里群主发的置顶通知群组中由群主/管理员发布的重要通知
群文件微信群里的共享文件柜群组中成员上传的共享文件

7.2 权限标识汇总

权限标识说明所属模块
im:conversation:list查看会话列表IM管理
im:conversation:query查询会话详情IM管理
im:conversation:delete删除会话IM管理
im:conversation:export导出会话IM管理
im:message:list查看消息列表IM管理
im:message:query查询消息详情IM管理
im:message:delete删除消息IM管理
im:message:export导出消息IM管理
im:group:list查看群组列表IM管理
im:group:create创建群组IM管理
im:group:update编辑群组IM管理
im:group:delete解散群组IM管理
im:group:member:list查看群成员IM管理
im:group:member:add添加群成员IM管理
im:group:member:remove移除群成员IM管理
im:sensitive-word:list查看敏感词列表IM管理
im:sensitive-word:create创建敏感词IM管理
im:sensitive-word:update编辑敏感词IM管理
im:sensitive-word:delete删除敏感词IM管理
im:sensitive-word:import导入敏感词IM管理
im:sensitive-word:export导出敏感词IM管理
im:config:get查看IM配置IM管理
im:config:update更新IM配置IM管理
im:statistics:view查看IM统计IM管理
im:statistics:export导出统计数据IM管理

7.3 变更记录

版本日期修改内容修改人
v1.02026-09-24初始版本PM Team
v2.02026-09-24增强版:补充业务场景验收标准、页面线框图、状态机、跨模块联动、名词解释PM Team

本文档为IM即时通讯模块PRD v2.0,如有问题请联系产品负责人。