实时事件Socket 事件

Socket 事件

概述

当客户端透过 Socket 连线并通过验证后(请见 Socket 连线),即可接收服务器推送的实时事件。本页列出所有事件类型与其 payload 格式,供 native app / web 客户端解析使用。


事件总览

事件名称触发时机用途
chat message聊天室收到新消息实时显示消息、触发本地通知
room聊天室属性更新(成员、设置等)更新聊天室列表、成员列表
lastRead某位成员更新最后已读更新已读回条 UI
typing某位成员正在输入显示「对方输入中…」
ai_streamingAI 消息分段串流回传渐进式显示 AI 生成内容
roomPref用户自身更新某聊天室偏好跨设备同步聊天室偏好
myPrefChange用户自身更新个人偏好跨设备同步个人偏好
myPrefDelete用户自身删除某偏好跨设备同步
invitation收到群组邀请显示邀请通知
userDeleteMessages用户自行删除消息(限自己看见)从 UI 移除消息
messageDeleted管理员(super-user)永久删除消息全成员从 UI 移除消息

chat message

聊天室有新消息时触发。

字段内容
DataMessage 对象

示例 payload

{
  "_id": "5c1ddf2d1536bbb6c49f7cfe",
  "message": "Bonjour 2",
  "room": "demo-room",
  "sender": {
    "_id": "sss",
    "nickname": "Desirae",
    "isRobot": false,
    "avatarUrl": "",
    "id": "sss"
  },
  "messageType": "text",
  "appID": "SampleApp",
  "messageTime": "2018-12-22T06:52:29.380Z",
  "messageTimeMS": 1545461549380,
  "id": "5c1ddf2d1536bbb6c49f7cfe"
}

room

聊天室属性(成员、名称、设置等)有更新时触发。

字段内容
Data更新后的聊天室对象

lastRead

某位聊天室成员调用 PUT /rooms/:id/lastRead 更新最后已读后,广播给该聊天室所有成员。

字段说明
roomID聊天室 ID
memberID回报已读的成员 Client ID
messageID该成员的最后已读消息 ID

示例 payload

{
  "roomID": "5be660651a71681534245a4e",
  "messageID": "5be7edaced649e42234f0699",
  "memberID": "aaa"
}

typing

某位成员正在输入时触发,通常用于显示「对方输入中…」。

字段说明
room聊天室 ID
message输入中的内容(可能为片段)

示例 payload

{
  "room": "58871b877390be11d5f1ab30",
  "message": "typing content"
}

ai_streaming

接收来自 AI 的串流消息片段,适用于 AI 助手实时回覆场景。

字段说明
room聊天室 ID
senderAI Client ID
text消息片段内容

示例 payload

{
  "room": "<RoomID>",
  "sender": "<ClientID>",
  "text": "<Message chunk content>"
}

roomPref

当前用户在某设备上更新某聊天室偏好(如静音、置顶、隐藏)时,广播给该用户的其他连线设备。

字段说明
Data更新后的聊天室偏好对象

示例 payload

{
  "room": "demo-room",
  "folder": "Some-Folder",
  "hidden": false,
  "muted": false,
  "sticky": false,
  "tags": ["demo", "sample"]
}

myPrefChange

当前用户在某设备上更新个人偏好设置时,广播给该用户的其他连线设备。

字段说明
Data包含 datakey 两个字段

示例 payload

{
  "data": {
    "foo": "bar",
    "folders": {
      "folder 1": { "rooms": ["aaabbb", "cccddd"] }
    }
  },
  "key": "demokey"
}

myPrefDelete

当前用户删除某项个人偏好时触发。

字段说明
Data被删除的偏好 key

示例 payload

"demokey"

invitation

收到群组邀请时触发。

字段说明
Data邀请对象

userDeleteMessages

用户自行删除消息(仅对自己隐藏)时触发。

字段说明
room聊天室 ID
messages被删除的消息 ID 数组
isUserDeleteAllMessagesInRoom是否为「删除聊天室内所有消息」(boolean)

示例 payload

{
  "room": "demo-FpOtW6",
  "messages": ["64623ad9f83f7f1a35009d6b"],
  "isUserDeleteAllMessagesInRoom": true
}

messageDeleted

管理员(super-user)永久删除某则消息时触发,所有聊天室成员都会收到。

字段说明
room聊天室 ID
messageID被删除的消息 ID;若为 _all,代表聊天室内所有消息都被永久删除

注意事项

  • 事件名含空格:chat message 是含空格的事件名,monitor 时请完整输入字符串
  • payload 解码:若连线时启用 encoding: "base64",所有事件 payload 都需先 base64 decode 再 JSON.parse
  • 仅在线时收到:这些事件只在 socket 连线中才会收到;app 在后台或离线时错过的事件,需以 POST /push/push2clientsWebhook 或重连后拉取消息列表来补齐
  • 消息来源判断:chat messagesender._id 等于自己时,代表是自己另一个设备发出的消息,UI 上仍应显示
  • 与推播搭配:移动 app 应同时使用 socket(前景)+ APNs/FCM 推播(后台),避免漏消息
  • 幂等处理:重连时可能收到先前已处理过的事件,客户端应以 _id 为键做去重
© 2026 FUNTEK Software Inc. All rights reserved.