消息格式

  • 支持 ack重发 消息序列 匿名登录用户名密码登录
  • 支持发送 textimagevideonewsmarkdown
  • 支持群聊:创建群、解散群、邀请加入群、加入群、退出群、屏蔽群、群发消息。
  • 支持鉴权:在发送消息等相关操作中需要携带 token

消息格式

消息重发机制

  • 消息序列号 (sequence):每个消息都有唯一的序列号,用于跟踪消息的发送和接收。
  • 确认字段 (ack):用于确认收到特定序列号的消息。如果发送方在一定时间内未收到确认,则可以重发该消息。

支持匿名登录,用户名密码登录,token 登录

  • 匿名登录:在登录请求中,将anonymous字段设置为true,提供loginname即可进行匿名登录。
  • 用户名密码登录:提供loginnamepassword字段进行验证。
  • token:提供token字段进行验证。

通用消息结构

在消息结构中,增加 token 字段用于鉴权:

通用消息结构

所有的消息都遵循以下通用结构:

{
  "cmd": "命令码",
  "sequence": "消息序列号 (Long类型)",
  "ack": "确认的消息序列号 (Long类型,可选)",
  "from": "发送方ID",
  "to": "接收方ID",
  "token": "鉴权令牌 (String类型,可选)",
  "createTime": "消息创建时间 (Long类型,utc时间戳)",
  "body": {
    // 根据cmd不同,body内容不同
  }
}
  • cmd:命令码,表示消息类型。
  • sequence:消息序列号,用于消息的唯一标识和重发机制。
  • ack:可选字段,用于确认收到特定序列号的消息。
  • fromto:发送方和接收方的 ID。
  • createTime:消息创建的时间戳,System.currentTimeMillis()。
  • body:消息主体,根据不同的 cmd 类型而变化。

System.currentTimeMillis() 方法返回的是自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时) 起到当前时刻的毫秒数。这是一个绝对时间戳,表示的是统一的 UTC 时间,与系统的本地时区设置无关

1. 登录请求消息

命令码COMMAND_LOGIN_REQ (5)

{
  "cmd": 5,
  "sequence": 1234567894,
  "from": "客户端ID",
  "createTime": 1725338896811,
  "body": {
    "loginname": "用户名",
    "password": "密码 (可选)",
    "token": "校验码 (可选)",
    "anonymous": true // 是否匿名登录,默认为false
  }
}

2. 登录响应消息

命令码COMMAND_LOGIN_RESP (6)

{
  "cmd": 6,
  "sequence": 1234567895,
  "ack": 1234567894,
  "from": "服务器ID",
  "to": "客户端ID",
  "createTime": 1725338896911,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

3. 鉴权请求消息

命令码COMMAND_AUTH_REQ (3)

{
  "cmd": 3,
  "sequence": 1234567892,
  "from": "客户端ID",
  "createTime": 1725338896611,
  "body": {
    "token": "校验码"
  }
}

4. 鉴权响应消息

命令码COMMAND_AUTH_RESP (4)

{
  "cmd": 4,
  "sequence": 1234567893,
  "ack": 1234567892,
  "from": "服务器ID",
  "to": "客户端ID",
  "createTime": 1725338896711,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

4. 聊天消息请求

命令码COMMAND_CHAT_REQ (11)

{
  "cmd": 11,
  "sequence": 1234567890,
  "from": "发送方ID",
  "to": "接收方ID",
  "token": "鉴权令牌",
  "createTime": 1725338896411,
  "body": {
    "msgType": "消息类型 (text、image、audio、video、news、markdown)",
    "content": {
      // 根据msgType不同,content结构不同
    }
  }
}

消息类型的数据结构

  1. 文本消息 (text)

    "content": {
        "text": "文本内容"
    }
    
  2. 图片消息 (image)

    "content": {
        "url": "图片URL",
        "width": 800,
        "height": 600,
        "format": "png"
    }
    
  3. 音频消息 (audio)

    "content": {
        "url": "音频URL",
        "duration": 60, // 秒
        "format": "mp4"
    }
    
  4. 视频消息 (video)

    "content": {
        "url": "视频URL",
        "duration": 60, // 秒
        "thumbnail": "缩略图URL",
        "format": "mp4"
    }
    
  5. 新闻消息 (news)

    "content": {
        "title": "新闻标题",
        "description": "新闻描述",
        "url": "新闻链接",
        "image": "新闻图片URL"
    }
    
  6. Markdown 消息 (markdown)

    "content": {
        "markdown": "Markdown格式的文本"
    }
    

5. 聊天消息响应(确认)

命令码COMMAND_CHAT_RESP (12)

{
  "cmd": 12,
  "sequence": 1234567891,
  "ack": 1234567890,
  "from": "接收方ID",
  "to": "发送方ID",
  "createTime": 1725338896511,
  "body": {
    "status": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}
  • ack 确认的消息序列 id

7. 心跳请求消息

命令码COMMAND_HEARTBEAT_REQ (13)

{
  "cmd": 13,
  "sequence": 1234567896,
  "from": "客户端ID/服务端Id",
  "token": "鉴权令牌",
  "createTime": 1725338897011,
  "body": {
    "hbbyte": "心跳内容"
  }
}

8. 退出请求消息

命令码COMMAND_CLOSE_REQ (14)

{
  "cmd": 14,
  "sequence": 1234567897,
  "from": "客户端ID",
  "token": "鉴权令牌",
  "createTime": 1725338897111
}

9. 获取用户信息请求消息

命令码COMMAND_GET_USER_REQ (17)

{
  "cmd": 17,
  "sequence": 1234567898,
  "from": "客户端ID",
  "token": "鉴权令牌",
  "createTime": 1725338897211,
  "body": {
    "userId": "用户ID (type为0时必填)",
    "groupId": "组Id (type为1时必填)",
    "type": 0 // 0:指定用户,1:指定组用户,2:所有在线用户,3:所有用户
  }
}

10. 获取用户信息响应消息

命令码COMMAND_GET_USER_RESP (18)

{
  "cmd": 18,
  "sequence": 1234567899,
  "ack": 1234567898,
  "from": "服务器ID",
  "to": "客户端ID",
  "createTime": 1725338897311,
  "body": {
    "users": [
      {
        "userId": "用户ID",
        "username": "用户名",
        "status": 1 // 0:离线,1:在线
      }
      // 更多用户信息
    ]
  }
}

11. 创建群请求消息

命令码COMMAND_CREATE_GROUP_REQ (19)

{
  "cmd": 19,
  "sequence": 1234567900,
  "from": "创建者ID",
  "token": "鉴权令牌",
  "createTime": 1725338897411,
  "body": {
    "groupName": "群名称",
    "members": ["成员ID1", "成员ID2"], // 可选,初始成员列表
    "description": "群描述"
  }
}

12. 创建群响应消息

命令码COMMAND_CREATE_GROUP_RESP (20)

{
  "cmd": 20,
  "sequence": 1234567901,
  "ack": 1234567900,
  "from": "服务器ID",
  "to": "创建者ID",
  "createTime": 1725338897511,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息",
    "groupId": "新创建的群ID"
  }
}

13. 解散群请求消息

命令码COMMAND_DISBAND_GROUP_REQ (21)

{
  "cmd": 21,
  "sequence": 1234567902,
  "from": "群主ID",
  "token": "鉴权令牌",
  "createTime": 1725338897611,
  "body": {
    "groupId": "群ID"
  }
}

14. 解散群响应消息

命令码COMMAND_DISBAND_GROUP_RESP (22)

{
  "cmd": 22,
  "sequence": 1234567903,
  "ack": 1234567902,
  "from": "服务器ID",
  "to": "群主ID",
  "createTime": 1725338897711,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

15. 邀请加入群请求消息

命令码COMMAND_INVITE_TO_GROUP_REQ (23)

{
  "cmd": 23,
  "sequence": 1234567904,
  "from": "邀请者ID",
  "token": "鉴权令牌",
  "createTime": 1725338897811,
  "body": {
    "groupId": "群ID",
    "invitees": ["被邀请者ID1", "被邀请者ID2"]
  }
}

16. 邀请加入群响应消息

命令码COMMAND_INVITE_TO_GROUP_RESP (24)

{
  "cmd": 24,
  "sequence": 1234567905,
  "ack": 1234567904,
  "from": "服务器ID",
  "to": "邀请者ID",
  "createTime": 1725338897911,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

17. 加入群请求消息

命令码COMMAND_JOIN_GROUP_REQ (25)

{
  "cmd": 25,
  "sequence": 1234567906,
  "from": "申请者ID",
  "token": "鉴权令牌",
  "createTime": 1725338898011,
  "body": {
    "groupId": "群ID"
  }
}

18. 加入群响应消息

命令码COMMAND_JOIN_GROUP_RESP (26)

{
  "cmd": 26,
  "sequence": 1234567907,
  "ack": 1234567906,
  "from": "服务器ID",
  "to": "申请者ID",
  "createTime": 1725338898111,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

19. 退出群请求消息

命令码COMMAND_LEAVE_GROUP_REQ (27)

{
  "cmd": 27,
  "sequence": 1234567908,
  "from": "成员ID",
  "token": "鉴权令牌",
  "createTime": 1725338898211,
  "body": {
    "groupId": "群ID"
  }
}

20. 退出群响应消息

命令码COMMAND_LEAVE_GROUP_RESP (28)

{
  "cmd": 28,
  "sequence": 1234567909,
  "ack": 1234567908,
  "from": "服务器ID",
  "to": "成员ID",
  "createTime": 1725338898311,
  "body": {
    "result": 1, // 1:成功, 其他:错误代码
    "message": "描述信息"
  }
}

21. 屏蔽群请求消息

命令码COMMAND_MUTE_GROUP_REQ (29)

{
  "cmd": 29,
  "sequence": 1234567910,
  "from": "成员ID",
  "token": "鉴权令牌",
  "createTime": 1725338898411,
  "body": {
    "groupId": "群ID",
    "mute": true // true:屏蔽, false:取消屏蔽
  }
}

22. 屏蔽群响应消息

命令码COMMAND_MUTE_GROUP_RESP (30)

{
  "cmd": 30,
  "sequence": 1234567911,
  "ack": 1234567910,
  "from": "服务器ID",
  "to": "成员ID",
  "createTime": 1725338898511,
  "body": {
    "result": 1,
    "message": "描述信息"
  }
}

23. 群发消息请求

命令码COMMAND_GROUP_MESSAGE_REQ (31)

{
  "cmd": 31,
  "sequence": 1234567912,
  "from": "发送方ID",
  "groupId": "群ID",
  "token": "鉴权令牌",
  "createTime": 1725338898611,
  "body": {
    "msgType": "消息类型",
    "content": {
      // 与之前的消息类型相同
    }
  }
}

14. 群发消息响应

命令码COMMAND_GROUP_MESSAGE_RESP (32)

{
  "cmd": 32,
  "sequence": 1234567913,
  "ack": 1234567912,
  "from": "服务器ID",
  "to": "发送方ID",
  "createTime": 1725338898711,
  "body": {
    "status": 1,
    "message": "描述信息"
  }
}