前后端协议
消息类型说明
go
const (
MsgTypeText = 1 // 文本消息
MsgTypeRecall = 2 // 撤回消息
MsgTypeImg = 3 // 图片消息
MsgTypeFile = 4 // 文件消息
MsgTypeSound = 5 // 语音消息
MsgTypeVideo = 6 // 视频消息
MsgTypeEmoji = 7 // 表情消息
MsgTypeSystem = 8 // 系统消息
)
/chat/msg 消息发送接口 请求
请求参数
json
{
"roomId": "123", // 会话id,字符串类型
"msgType": 0, // 消息类型
"body": {} // 消息内容,根据消息类型不同而不同
}
以下皆为req
的json格式
1. 文本消息
json
{
"msgType": 1,
"roomId": "123",
"body": {
"content": "消息内容",
"replyMsgId": 1, // 回复的消息id,如果没有则不用传
"atUidList": [10029] // @的uid集合,如果@全体成员,uid传0
}
}
2. 撤回消息
json
{
"msgType": 2,
"roomId": "123",
"body": {
"msgId": 1, // 要撤回的消息ID
"roomId": 123, // 房间ID
"recallUid": 456 // 撤回操作的用户ID
}
}
3. 图片消息
json
{
"msgType": 3,
"roomId": "123",
"body": {
"size": 123, // 大小(字节)
"width": 123, // 宽度(像素)
"height": 123, // 高度(像素)
"url": "https://example.com/image.jpg" // 下载地址
}
}
4. 文件消息
json
{
"msgType": 4,
"roomId": "123",
"body": {
"size": 123, // 大小(字节)
"fileName": "文件名.pdf", // 文件名
"url": "https://example.com/file.pdf" // 下载地址
}
}
5. 语音消息
json
{
"msgType": 5,
"roomId": "123",
"body": {
"size": 123, // 大小(字节)
"duration": 123, // 时长(秒)
"url": "https://example.com/audio.mp3" // 下载地址
}
}
6. 视频消息
json
{
"msgType": 6,
"roomId": "123",
"body": {
"size": 123, // 大小(字节)
"url": "https://example.com/video.mp4", // 下载地址
"thumbnailWidth": 123, // 缩略图宽度(像素)
"thumbnailHeight": 123, // 缩略图高度(像素)
"thumbnailSize": 123, // 缩略图大小(字节)
"thumbnailUrl": "https://example.com/thumbnail.jpg", // 缩略图下载地址
"duration": 60 // 视频时长(秒)
}
}
7. 表情消息
json
{
"msgType": 7,
"roomId": "123",
"body": {
"url": "https://example.com/emoji.gif" // 表情URL
}
}
/chat/msg 消息发送接口 返回
返回参数
json
{
"code": 0,
"message": "",
"data": {
"id": 123, // 消息ID
"roomId": 123, // 房间ID
"senderId": 456, // 发送者ID
"senderName": "用户名", // 发送者名称
"senderAvatar": "头像URL", // 发送者头像
"sendTime": 1623123456789, // 发送时间戳(毫秒)
"msgType": 1, // 消息类型
"body": {
"content": "", // 文本内容,默认为空字符串
"urlContentMap": {}, // URL内容映射,默认为空对象
"atUidList": [], // @的uid集合,默认为空数组
"url": "", // 视频/音频/图片/文件的URL,默认为空字符串
"width": 0, // 视频/图片宽度,默认为0
"height": 0, // 视频/图片高度,默认为0
"duration": 0, // 视频/音频时长(秒),默认为0
"thumbnailUrl": "", // 缩略图URL,默认为空字符串
"thumbnailWidth": 0, // 缩略图宽度,默认为0
"thumbnailHeight": 0 // 缩略图高度,默认为0
},
"mark": {
"likeCount": 0, // 点赞数
"userLike": 0, // 当前用户是否点赞
"dislikeCount": 0, // 踩数量
"userDislike": 0 // 当前用户是否踩
},
"reply": {
"msgId": 0, // 被回复的消息ID
"senderName": "", // 被回复消息的发送者名称
"sendTime": 0, // 被回复消息的发送时间
"content": "" // 被回复消息的内容
},
"recall": {
"recallUid": 0, // 撤回操作的用户ID
"recallName": "", // 撤回操作的用户名称
"recallTime": 0 // 撤回时间
}
}
}
以下皆为res
的json格式
1. 文本消息
json
{
"msgType": 1, // 消息类型 1文本消息
"body": {
"content": "消息内容", // 文本内容
"urlContentMap": { // URL内容映射(如果消息中包含URL)
"www.baidu.com": {
"title": "百度一下,你就知道",
"description": "全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求",
"image": "https://www.baidu.com/favicon.ico"
}
}
}
}
特殊说明:
- 如果
atUidList
中有 uid 等于 0,代表@全体成员 - 如果
atUidList
中有用户的 uid,代表用户被@,客户端需要有特殊效果处理
2. 撤回消息
json
{
"msgType": 2, // 消息类型 2撤回消息
"body": "[消息已撤回]", // 撤回提示文本
"recall": { // 撤回信息(如果是撤回消息)
"recallUid": 0, // 撤回操作的用户ID
"recallName": "", // 撤回操作的用户名称
"recallTime": 0 // 撤回时间
}
}
3. 图片消息
json
{
"msgType": 3, // 消息类型 3图片消息
"body": {
"content": "[图片]", // 消息内容提示
"size": 123, // 大小(字节)
"width": 123, // 宽度(像素)
"height": 123, // 高度(像素)
"url": "https://example.com/image.jpg" // 下载地址
}
}
4. 文件消息
json
{
"msgType": 4, // 消息类型 4文件消息
"body": {
"content": "[文件]", // 消息内容提示
"size": 123, // 大小(字节)
"fileName": "文件名.pdf", // 文件名
"url": "https://example.com/file.pdf" // 下载地址
}
}
5. 语音消息
json
{
"msgType": 5, // 消息类型 5语音消息
"body":
"content": "[语音]", // 消息内容提示
"size": 123, // 大小(字节)
"duration": 123, // 时长(秒)
"url": "https://example.com/audio.mp3" // 下载地址
}
6. 视频消息
json
{
"msgType": 6, // 消息类型 6视频消息
"body": {
"content": "[视频]", // 消息内容提示
"size": 123, // 大小(字节)
"url": "https://example.com/video.mp4", // 下载地址
"thumbnailWidth": 123, // 缩略图宽度(像素)
"thumbnailHeight": 123, // 缩略图高度(像素)
"thumbnailSize": 123, // 缩略图大小(字节)
"thumbnailUrl": "https://example.com/thumbnail.jpg", // 缩略图下载地址
"duration": 60 // 视频时长(秒)
}
}
7. 表情消息
json
{
"msgType": 7, // 消息类型 7表情消息
"body": {
"content": "[表情]", // 消息内容提示
"url": "https://example.com/emoji.gif" // 表情URL
}
}
websocket req请求
前端请求
1.登录请求二维码
2.心跳包
3.登录验证
json
{
"type":3,
"req": {
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiZW1haWwiOiIxMzI5NjYzNDY1N0AxNjMuY29tIiwicGFzc3dvcmQiOiI0MmEyNjJlYTJlMDA2OWY1NWY2OTY5MWE3OTc1OGMyMyIsImlzcyI6InJlbGF4aW5nIiwiZXhwIjoxNzM2NDE5NDc3fQ.k_uPuuD2uLAGciv56UlVg1FvvpsAL5u8pf4ZJGOIxVM"
}
}
4.邮箱登录请求
json
{
"type":4,
"req": {
"email":"xxx@qq.com"
}
}
websocket res返回
后端返回
1.登录二维码返回
3.登录成功
在ws用户认证的时候,后端返回认证成功type=3,并返回用户信息、
json
{
"type": 3,
"res": {
"uid": 1,
"avatar": "...",
"token": "...",
"name": "放",
}
}
5.用户上下线通知
json
{
"type": 5,
"res": {
"uid": 1,
}
}