WuKongIM Docs

Message Flags

查阅 WKProto 固定 Header 与 Setting 位,并理解持久化、红点、命令、回执、加密和流边界。

编辑此页报告文档问题

消息行为由两组不同位控制:固定 Header 的低位布尔标志,以及消息 Setting 位。集成者应使用 SDK 暴露的类型,不手写魔法数字;本页用于跨语言核对 Wire 含义。

目标与完成标准

看到任一标志时,你应能说明它是否影响持久化、路由、展示或编码,并避免把协议意图误解为业务完成证明。

权威来源

固定 Header 位与 pkg/protocol/codec/common.go 对齐;Setting 值与 pkg/protocol/frame/setting.go 对齐。测试冻结位序、名称和值。

固定 Header 位

WKProto 消息固定 Header 位
Bit名称范围集成说明
0NoPersistWire 标志普通和命令式消息均进入瞬时在线投递;分配消息 ID,序号为零,不写入持久历史,也不能离线恢复。
1RedDotWire 标志携带红点展示意图;它不是消息已读回执,也不单独证明服务端未读数发生变化。
2SyncOnceWire 标志把命令式消息路由到独立 CMD Channel;可恢复命令还需要绑定与 CMD 同步流程。
3DUPWire 标志协议重发标记;业务幂等仍以稳定 client_msg_no 和结果关联为准。

Setting 位值

WKProto 消息 Setting 位值
名称范围集成说明
128SettingReceiptEnabledWire 标志开启协议回执意图;不能把它等同于 Channel 提交、设备业务执行或最终用户已读。
32SettingSignalWire 标志标记兼容 signal 模式;只在所选 SDK 和协议版本明确支持时使用。
16SettingNoEncryptWire 标志跳过已协商的会话 Payload 加密;它不替代 TLS,敏感消息不应启用。
8SettingTopicWire 标志表示数据包携带 Topic 字段;Topic 生命周期仍由兼容客户端与业务约定。
2SettingStreamWire 标志表示兼容流消息字段;流式 AI 的持久投影与实时增量仍是不同路径。

NoPersist 在线投递但不保留历史

普通 NoPersist=true, SyncOnce=false 消息使用源频道,命令式消息使用命令频道。 两者都经过权限检查、解析 authority、分配消息 ID,并以序号零进入瞬时在线投递; 不写入持久历史,也不能离线恢复。

  • 可靠聊天、通知、审计及需要回放的业务事件使用持久消息。
  • 普通在线消息使用 NoPersist;在线命令额外使用命令语义。
  • 可恢复命令使用持久 SyncOnce,并接入独立 CMD bind/sync/ack。
  • 瞬时消息的成功 SENDACK 表示在线投递已接收,不能证明设备已收到。

RedDot 与回执

RedDot 携带客户端展示意图,会随消息进入存储、投递和兼容回调,但它不等于:

  • 服务端已经修改某个 Conversation 的 read_seq
  • 最终用户看过消息;
  • 接收端发出了业务回执。

SettingReceiptEnabled 也只是协议回执意图。SENDACK 是 Channel 提交结果,RECVACK 是 Session 传输反馈,最终用户已读与设备执行结果需要独立业务合同。

加密相关位

  • SettingNoEncrypt 会让兼容 WKProto 适配器跳过已协商的 Session Payload 加密;它不关闭或提供 TLS;
  • 敏感消息不要启用该位;
  • SettingSignal 是专用 signal 模式,只在精确 SDK 与协议版本明确支持时使用;
  • 不要根据一个位自行发明端到端加密保证,密钥分发、身份验证和轮换仍需完整设计。

Topic 与 Stream

SettingTopic 表示数据包包含 Topic 字段。SettingStream 表示兼容流字段;它不自动承诺实时 token 推送、持久事件投影或重连恢复全部同时存在。当前 AI 流教程使用 durable base + message-event projection,并明确区分实时增量路径。

组合检查

需求选择
普通可恢复聊天消息NoPersist=falseSyncOnce=false
普通在线瞬时消息NoPersist=trueSyncOnce=false;不保留历史
在线瞬时命令NoPersist=trueSyncOnce=true,接受无历史
可恢复命令NoPersist=falseSyncOnce=true,另做 CMD 绑定与同步
业务已读独立持久回执,不依赖 RedDot / RECVACK
流式 AI先阅读 AI 与 IoT,不要只设置 Stream 位

失败诊断

  • NoPersist 成功但接收端没有消息: 检查订阅成员、在线 presence、投递接收情况和 owner Session 写入;离线接收者无法恢复消息。
  • 消息无法离线恢复:检查是否使用 NoPersist 或未建立 CMD 恢复流程。
  • 红点与未读数不一致:分开检查 Message Flag 与 Conversation Badge floor。
  • 设置位后某 SDK 解码失败:核对精确 SDK/协议版本,不盲目保留未知位。

安全边界

未知位应 fail closed 或由兼容 SDK 安全忽略,不能默认启用。原始 setting 与 Header 可以进入受控诊断,但不能连同完整敏感 Payload 写入普通日志。

下一步

消息收发中应用这些位,错误结果按 Reason Code分类。

本页内容