单聊 · 群聊 · 离线消息 · 已读回执
面向小程序、App、网站的多租户即时通讯中台。业务方申请 appKey/appSecret 即可接入: Java 17 + Spring Boot 3.3 企业级后端,REST 三套 API + WebSocket 实时通道, 消息加密落库、租户物理隔离、限流配额与用量统计开箱即用。
消息中台自建的普遍困局,置森用一套中台全部解决
协议设计、长连接网关、消息存储、多端适配……自研 IM 动辄数人年投入,中小团队难以负担。
弱网重发、消息去重、离线补拉,任何一环出错都是用户客诉与数据事故,修复成本极高。
小程序、App、Web 的长连接实现各异,业务还要自建账号打通与消息推送体系,维护碎片化。
接入方滥用打爆服务、聊天内容明文落库,合规审计无从谈起,出事后追责无据可查。
云端一体化核心,三套 API + 一条实时通道,数据实时同步,一套后台全局掌控
Java 17 · Spring Boot 3.3 企业级后端 · REST /api/* 与 WS /ws 同端口 · MySQL 8 持久化 + Redis 7 实时计数,单容器亦可整体交付
appKey/appSecret HMAC 签名调用 /api/open/*:换用户 token、服务端代发消息、建群拉人,密钥永不出服务端。
小程序 / App / 网站持 24h 短时 token 直连 WebSocket,JSON 帧收发消息,跨域已放行,即接即用。
React 管理工作台:接入方启停与密钥重置、QPS/日配额配置、用量看板趋势、敏感词监控一屏掌控。
消息 AES-256-GCM 密文落库、按租户派生密钥;全部数据按 tenantId 物理隔离,全链路租户校验。
从消息可靠性到安全管控,覆盖即时通讯中台全场景,点击切换查看各板块详解
clientMsgId 全局唯一,弱网重试复用同一 ID,服务端自动去重,绝不重复投递。
对方离线不丢消息,上线拉取会话/历史即达,未读数精准累计。
会话消息持久化分页存储,向上滚动 beforeId 续拉,换端漫游不丢档。
单聊已读水位实时推送,依据 lastReadMsgId 将己方消息精确标记「已读」。
WS 推送在数据库事务提交后执行,从机制上杜绝「幽灵消息」。
未读角标、最后一条预览;单聊删除仅影响自己一侧,对方再发消息自动恢复。
客户端生成唯一 clientMsgId,本地先渲染「发送中」。
AES-256-GCM 密文持久化,幂等键查重拦截重复提交。
对方在线经 WS 实时收到 chat.message;离线静待上线补拉。
发送方收 chat.ack 置「已送达」;对方已读后收 readReceipt 置「已读」。
终端用户与服务器侧均可建群,创建者即群主,群号自动分配。
仅群主可邀请/踢出成员,权限实时校验,越权操作直接拒绝。
created / invited / kicked / quit / dissolved 事件实时推送全群,会话即时刷新。
群成员列表接口随时拉取;界面按角色显隐操作按钮,群主/成员各见其权。
/api/open/groups 服务端直接建群拉人,业务侧自动开群无感同步。
群主发起或服务端代建,成员即刻收到群会话。
邀请入群 / 踢出群,事件帧推送全体成员。
成员可退群;群主不可退只可解散,解散事件全群广播。
每个接入方独立 appKey/appSecret,secret 仅创建/重置时完整显示一次。
secret 重置后旧钥立即失效;接入方禁用后全部在线连接即刻收到 kicked 帧断开。
HMAC-SHA256 签名 + ±5 分钟时间窗 + nonce 五分钟防重放,伪造请求直接拒绝。
终端用户 accessToken 默认 24 小时有效,过期重换;appSecret 永不进入前端代码。
同一用户新连接建立时自动踢掉旧连接并下发 kicked 帧,避免多端消息状态错乱。
管理员新建接入方,一次性展示 appKey/appSecret。
接入方将 secret 保存于自家服务端,仅用于签名。
服务端签名调用 /api/open/token,为终端用户换取短时令牌。
对 open/client 接口秒级计数,超限返回 429 且请求不执行,退避重试即可。
按接入方配置每日调用上限,恶意调用当天自动熔断。
API 调用量、WS 连接数、单聊/群聊消息量、活跃用户、在线峰值逐小时落库。
7 / 14 / 30 天趋势总览,支持单租户下钻定位异常,运营汇报两相宜。
Redis 实时统计在线与调用数据,看板分钟级新鲜度。
每个接入方的调用量与连接数持续计数。
QPS 超限 429 拒绝执行;日配额耗尽当日拦截。
趋势与明细双重留痕,异常租户快速定位。
消息内容 AES-256-GCM 加密落库(enc:v1: 密文),读取自动解密,接入方无感知。
加密密钥按接入方派生,一租户一钥互不可解,单点泄露不扩散。
全部数据按 tenantId 隔离,签名、换 token、消息、群组全链路租户校验。
openUserId 仅在 appKey 内有效,跨接入方发消息/拉群一律拒绝。
存量明文消息在启动时自动加密迁移,升级无感、不留死角。
按租户派生密钥加密消息体,密文入库。
数据库中仅存 enc:v1: 前缀密文,拖库也读不出内容。
API/WS 出口统一解密返回明文,业务零改造。
中台统一维护敏感词库,全部接入方即时生效,无需各自维护。
命中消息照常投递并标记 sensitive=true,是否处置由业务方自主决定。
按接入方/高频用户/命中词聚合统计,命中明细(解密后内容)随时可查。
以任意用户身份代发系统通知/机器人消息,支持幂等键,适合订单与告警触达。
服务端代建群、代拉人,业务群随业务流程自动开通,全程无感。
消息流实时比对词库,命中即标记并进入统计。
按租户/用户/词条多维聚合,异常苗头早发现。
服务端接口直发系统消息,在线实时推、离线必达。
申请密钥 → 服务端换 token → 前端连通道,最小闭环即刻可用
登录中台管理后台「接入方管理」新建接入方,复制弹窗中的 appKey/appSecret(secret 只显示这一次,请妥善保存)。
appKey = "ak_9f3e2b1c" appSecret = "sk_****(复制保存)" // 保存到你的服务端环境变量
你的后端用 appSecret 做 HMAC-SHA256 签名,为体系内用户换取 24 小时短时 accessToken,首次调用自动注册。
{ "openUserId": "u101",
"nickname": "张三",
"avatar": "https://…" }
→ { accessToken, expiresInHours: 24 }
小程序 / App / 网页持 token 直连 /ws,处理 chat.message、chat.ack、readReceipt 帧即完成聊天闭环。
const ws = new WebSocket( `wss://im.xxx.com/ws?token=${token}`) ws.onmessage = e => { const f = JSON.parse(e.data) if (f.type === 'chat.message') show(f.message) }
从接入效率到安全合规,每一项都经得起自动化验证与生产检验
一对 appKey/appSecret 即可获得全部 IM 能力,三步跑通最小闭环;文档配齐 Node/Java/Python/小程序示例代码。
幂等去重、离线必达、事务后推送等关键链路以 62 项端到端断言自动化回归,版本升级不破能力。
全部数据按 tenantId 物理隔离,签名、消息、群组全链路租户校验;跨接入方访问一律拒绝,互不串扰。
消息 AES-256-GCM 加密落库、按租户派生密钥,数据库只见密文;出口自动解密,业务零改造。
QPS 滑动窗口限流、日配额熔断、小时级用量聚合与敏感词监控,一套后台管住全部接入方。
小程序/App/Web 一条 WS 通道通吃;SaaS 订阅开箱即用,Docker 一键私有化部署,数据完全本地化。
同一套中台,灵活适配不同业务的沟通诉求
买卖家实时沟通、订单状态机器人代发触达,客服会话未读不漏,促成转化。
师生答疑即时响应,班级群通知全量触达,开课提醒与作业消息离线必达。
工作流审批通知、团队群聊协作、跨部门沟通留痕,已读回执让协同进度看得见。
网格员联络、办事咨询会话、公告统一推送,敏感词监测为内容安全兜底。
关于接入、部署、可靠性与安全的高频问题,在此一次说清
三步即可跑通最小闭环:管理后台创建接入方拿密钥、服务端签名换 token、前端连 WebSocket。参考 demo-client 源码通常半天内可完成联调;交付随附的 e2e 脚本含 62 项断言,可直接用于验收。
支持。提供 Docker Compose 一键编排(应用 + MySQL + Redis + 前端),也可裸机部署;系统部署于您指定的自有服务器环境,数据完全本地化,满足安全合规要求。
每条消息库内持久化 + clientMsgId 幂等去重:弱网重试复用同一 ID,服务端自动去重绝不重投;对方离线不丢消息,上线拉取会话/历史即达;在线消息在数据库事务提交后才推送,无「幽灵消息」。
消息内容采用 AES-256-GCM 字段级加密落库,密钥按接入方派生,数据库中只有 enc:v1: 前缀的密文;所有 API/WebSocket 出口自动解密,接入方业务零改造。配合租户物理隔离与全链路租户校验,可满足审计与合规要求。
中台采用单端在线策略:同一接入方内同一用户新建连接时,旧连接会立即收到 kicked 帧并被服务端关闭,避免多端消息状态错乱。旧端收到 kicked 后应停止自动重连,防止互踢循环。
QPS 超限返回 429,且该请求未被执行,等待约 1 秒做退避重试即可;日配额耗尽则当日拦截、次日恢复。限流上限与日配额可在管理后台随时调整、即时生效,生产环境请按峰值并发设置合理上限。