Skip to content

WuKongIM JSON-RPC 协议文档 ​

概述 ​

本文档描述了 WuKongIM 使用 JSON-RPC 2.0 规范进行通信的协议格式。所有请求、响应和通知都遵循 JSON-RPC 2.0 标准结构。

  • jsonrpc: 可选 字符串,固定为 "2.0"。如果省略,服务器应假定其为 "2.0"。
  • method: 请求或通知的方法名。
  • params: 请求或通知的参数,通常是一个对象。
  • id: 请求的唯一标识符(字符串类型)。响应必须包含与请求相同的 id。通知没有 id。
  • result: 成功响应的结果数据。
  • error: 错误响应的错误对象。

完整的协议schema: 链接

注意事项 ​

  1. 建立Websocket连接后,需要在2秒之内进行认证(connect),超过2秒或者认证失败的连接将断开

  2. 定期发送ping包,让服务器知道你活着(推荐间隔大概1-2分钟左右)

通用组件 ​

以下是一些在多个消息类型中复用的组件定义:

ErrorObject ​

当请求处理失败时,响应中会包含此对象。

字段类型必填描述
codeinteger是错误码
messagestring是错误描述
dataany否附加错误数据

可选的消息头信息。

字段类型必填描述
noPersistboolean否消息是否不存储
redDotboolean否是否显示红点
syncOnceboolean否是否只被同步一次
dupboolean否是否是重发的消息

SettingFlags ​

消息设置标记位。

字段类型必填描述
receiptboolean否消息已读回执
streamboolean否是否为流式消息
topicboolean否是否包含 Topic

消息类型详解 ​

1. 连接 (Connect) ​

Connect Request (connect) ​

客户端发起的第一个请求,用于建立连接和认证。

参数 (params)

字段类型必填描述
uidstring是用户ID
tokenstring是认证Token
headerHeader否消息头
versioninteger否客户端协议版本
clientKeystring否客户端公钥
deviceIdstring否设备ID
deviceFlaginteger否设备标识 (1:APP, 2:WEB...)
clientTimestampinteger否客户端13位毫秒时间戳

最小示例

json
{
  "method": "connect",
  "params": {
    "uid": "testUser",
    "token": "testToken"
  },
  "id": "req-conn-1"
}

Connect Response ​

服务器对 connect 请求的响应。

成功结果 (result)

字段类型必填描述
serverKeystring是服务端的DH公钥
saltstring是加密盐值
timeDiffinteger是客户端与服务器时间差(毫秒)
reasonCodeinteger是原因码 (成功时通常为0)
headerHeader否消息头
serverVersioninteger否服务端版本
nodeIdinteger否连接的节点ID (协议版本 >= 4)

错误结果 (error): 参考 ErrorObject。

最小成功示例

json
{
  "result": {
    "serverKey": "serverPublicKey",
    "salt": "randomSalt",
    "timeDiff": -15,
    "reasonCode": 0
  },
  "id": "req-conn-1"
}

最小错误示例

json
{
  "error": {
    "code": 1001,
    "message": "Authentication Failed"
  },
  "id": "req-conn-1"
}

2. 发送消息 (Send) ​

Send Request (send) ​

客户端发送消息到指定频道。

参数 (params)

字段类型必填描述
clientMsgNostring是客户端消息唯一编号(UUID)
channelIdstring是频道ID
channelTypeinteger是频道类型 (1:个人, 2:群组)
payloadobject是消息内容 (业务自定义JSON对象)
headerHeader否消息头
settingSettingFlags否消息设置
msgKeystring否消息验证Key
expireinteger否消息过期时间(秒), 0表示不过期
streamNostring否流编号 (如果 setting.stream 为 true)
topicstring否消息 Topic (如果 setting.topic 为 true)

最小示例

json
{
  "method": "send",
  "params": {
    "clientMsgNo": "uuid-12345",
    "channelId": "targetUser",
    "channelType": 1,
    "payload": {"content": "Hello!","type":1}
  },
  "id": "req-send-1"
}

Send Response ​

服务器对 send 请求的响应,表示消息已收到并分配了服务端 ID。

成功结果 (result)

字段类型必填描述
messageIdstring是服务端消息ID
messageSeqinteger是服务端消息序列号
reasonCodeinteger是原因码 (成功时通常为0)
headerHeader否消息头

错误结果 (error): 参考 ErrorObject。

最小成功示例

json
{
  "result": {
    "messageId": "serverMsgId1",
    "messageSeq": 1001,
    "reasonCode": 0
  },
  "id": "req-send-1"
}

3. 收到消息 (Recv) ​

Recv Notification (recv) ​

服务器推送消息给客户端。

参数 (params)

字段类型必填描述
messageIdstring是服务端消息ID
messageSeqinteger是服务端消息序列号
timestampinteger是服务端消息时间戳(秒)
channelIdstring是频道ID
channelTypeinteger是频道类型
fromUidstring是发送者UID
payloadobject是消息内容 (业务自定义JSON对象)
headerHeader否消息头
settingSettingFlags否消息设置
msgKeystring否消息验证Key
expireinteger否消息过期时间(秒) (协议版本 >= 3)
clientMsgNostring否客户端消息唯一编号 (用于去重)
streamNostring否流编号 (协议版本 >= 2)
streamIdstring否流序列号 (协议版本 >= 2)
streamFlaginteger否流标记 (0:Start, 1:Ing, 2:End)
topicstring否消息 Topic (如果 setting.topic 为 true)

最小示例

json
{
  "method": "recv",
  "params": {
    "messageId": "serverMsgId2",
    "messageSeq": 50,
    "timestamp": 1678886400,
    "channelId": "senderUser",
    "channelType": 1,
    "fromUid": "senderUser",
    "payload": {"content": "How are you?","type":1}
  }
}

4. 收到消息确认 (RecvAck) ​

RecvAck Request (recvack) ​

客户端确认收到某条消息。

参数 (params)

字段类型必填描述
messageIdstring是要确认的服务端消息ID
messageSeqinteger是要确认的服务端消息序列号
headerHeader否消息头

最小示例

json
{
  "method": "recvack",
  "params": {
    "messageId": "serverMsgId2",
    "messageSeq": 50
  },
  "id": "req-ack-1"
}

(注:recvack 通常没有特定的响应体,如果需要响应,服务器可能会返回一个空的成功 result 或错误)

5. 订阅频道 (Subscribe)(暂不支持) ​

Subscribe Request (subscribe) ​

客户端请求订阅指定频道的消息。

参数 (params)

字段类型必填描述
subNostring是订阅请求编号 (客户端生成)
channelIdstring是要订阅的频道ID
channelTypeinteger是频道类型
headerHeader否消息头
settingSettingFlags否消息设置
paramstring否订阅参数 (可选)

最小示例

json
{
  "method": "subscribe",
  "params": {
    "subNo": "sub-req-1",
    "channelId": "group123",
    "channelType": 2
  },
  "id": "req-sub-1"
}

6. 取消订阅频道 (Unsubscribe)(暂不支持) ​

Unsubscribe Request (unsubscribe) ​

客户端请求取消订阅指定频道。

参数 (params)

字段类型必填描述
subNostring是取消订阅请求编号 (客户端生成)
channelIdstring是要取消订阅的频道ID
channelTypeinteger是频道类型
headerHeader否消息头
settingSettingFlags否消息设置

最小示例

json
{
  "method": "unsubscribe",
  "params": {
    "subNo": "unsub-req-1",
    "channelId": "group123",
    "channelType": 2
  },
  "id": "req-unsub-1"
}

Subscription Response ​

服务器对 subscribe 或 unsubscribe 请求的响应。

成功结果 (result)

字段类型必填描述
subNostring是对应的请求编号
channelIdstring是对应的频道ID
channelTypeinteger是对应的频道类型
actioninteger是动作 (0: Subscribe, 1: Unsubscribe)
reasonCodeinteger是原因码 (成功时通常为0)
headerHeader否消息头

错误结果 (error): 参考 ErrorObject。

最小成功示例 (Subscribe)

json
{
  "result": {
    "subNo": "sub-req-1",
    "channelId": "group123",
    "channelType": 2,
    "action": 0,
    "reasonCode": 0
  },
  "id": "req-sub-1"
}

7. 心跳 (Ping/Pong) ​

Ping Request (ping) ​

客户端发送心跳以保持连接。

参数 (params): 通常为 null 或空对象 {}。

最小示例

json
{
  "method": "ping",
  "id": "req-ping-1"
}

Pong Response ​

服务器对 ping 请求的响应。

成功结果 (result): 通常为 null 或空对象 {}。 错误结果 (error): 参考 ErrorObject。

最小成功示例

json
{
  "method": "pong"
}

8. 断开连接 (Disconnect)(暂不支持) ​

Disconnect Request (disconnect) ​

客户端主动通知服务器断开连接。

参数 (params)

字段类型必填描述
reasonCodeinteger是原因码
headerHeader否消息头
reasonstring否断开原因描述 (可选)

最小示例

json
{
  "method": "disconnect",
  "params": {
    "reasonCode": 0
  },
  "id": "req-disc-1"
}

(注:disconnect 请求通常不需要服务器响应)

Disconnect Notification (disconnect) ​

服务器通知客户端连接已断开(例如,被踢出)。

参数 (params)

字段类型必填描述
reasonCodeinteger是原因码
headerHeader否消息头
reasonstring否断开原因描述 (可选)

最小示例

json
{
  "method": "disconnect",
  "params": {
    "reasonCode": 401,
    "reason": "Kicked by another device"
  }
}

本文档内容版权属于 上海信必达网络科技有限公司,保留所有权利