EVENT

接入侧需要监听处理的事件列表,详细如下:

Members

(static) SDK_READY

SDK 进入 ready 状态时触发,接入侧监听此事件,然后可调用 SDK 发送消息等 API,使用 SDK 的各项功能

注意:login 成功才会驱动 SDK 触发 SDK_READY 事件

Example
let onSdkReady = function(event) {
  let message = chat.createTextMessage({ to: 'user1', conversationType: 'C2C', payload: { text: 'Hello world!' }});
  chat.sendMessage(message);
};
chat.on(TencentCloudChat.EVENT.SDK_READY, onSdkReady);

(static) SDK_NOT_READY

SDK 进入 not ready 状态时触发,此时接入侧将无法使用 SDK 发送消息等功能。
如果想恢复使用,接入侧需调用 login 接口,驱动 SDK 进入 ready 状态

注意:同一账号多端互踢场景下,避免在 SDK_NOT_READY 中调用 login 接口,可能会造成循环互踢的情况。

Example
let onSdkNotReady = function(event) {
  // 如果想使用发送消息等功能,接入侧需驱动 SDK 进入 ready 状态,重新调用 login 接口即可,如下所示:
  // chat.login({userID: 'your userID', userSig: 'your userSig'});
};
chat.on(TencentCloudChat.EVENT.SDK_NOT_READY, onSdkNotReady);

(static) MESSAGE_RECEIVED

SDK 收到推送的单聊、群聊、群提示、群系统通知的新消息,接入侧可通过遍历 event.data 获取消息列表数据并渲染到页面

Example
let onMessageReceived = function(event) {
  // event.data - 存储 Message 对象的数组 - [Message]
  // Message 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Message.html
};
chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, onMessageReceived);

(static) MESSAGE_MODIFIED

SDK 收到消息被修改的通知,消息发送方可通过遍历 event.data 获取消息列表数据并更新页面上同 ID 消息的内容。
注意:v3.1.2 起支持语音、视频消息异步审核结果通知。
使用举例:
1、单聊用户或群成员发送了一个【Hello World】的消息并上屏,然后 SDK 收到了此消息被第三方回调修改的通知(例如被修改成了【Hello China】,对端或者其他群成员收到的是【Hello China】),此时 SDK 会触发此事件。
2、接入侧在事件回调里,遍历被修改的消息,替换页面上同 ID 消息的内容,将【Hello World】替换为【Hello China】,并重新渲染和展示。

Examples
let onMessageModified = function(event) {
  // event.data - 存储被修改过的 Message 对象的数组 - [Message]
  // Message 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Message.html
};
chat.on(TencentCloudChat.EVENT.MESSAGE_MODIFIED, onMessageModified);
// 语音、视频消息违规处理
let onMessageModified = function(event) {
  // event.data - 存储被修改过的 Message 对象的数组 - [Message]
  event.data.forEach((message) => {
    if (message.hasRiskContent) {
      // 语音、视频消息内容违规
    }
  })
};
chat.on(TencentCloudChat.EVENT.MESSAGE_MODIFIED, onMessageModified);

(static) MESSAGE_REVOKED

SDK 收到消息被撤回的通知,可通过遍历 event.data 获取被撤回的消息列表数据并渲染到页面,如单聊会话内可展示为 "对方撤回了一条消息";群聊会话内可展示为 "XXX撤回了一条消息"。

Example
let onMessageRevoked = function(event) {
  // event.data - 存储撤回信息的数组
  event.data.forEach((item) => {
    const { ID, revokeReason, revokerInfo, sequence } = item;
    // 在本地上屏的消息列表 messageList 中通过消息 ID 更新对应的 message
    messageList = messageList.map((message) => {
       if (message.ID === ID || message.sequence === sequence) {
          message.isRevoked = true;
          message.revokeReason = revokeReason;
          message.revokerInfo = revokerInfo;
       }
       return message;
    });
  });
};
chat.on(TencentCloudChat.EVENT.MESSAGE_REVOKED, onMessageRevoked);

(static) MESSAGE_READ_BY_PEER

SDK 收到对端已读消息的通知,消息接收方调用 setMessageRead 已读上报成功后消息发送方会收到此事件。可通过遍历 event.data 获取对端已读的消息列表数据并渲染到页面,如单聊会话内可将自己发送的消息由“未读”状态改为“已读”。

注意:该事件不适用于群聊,仅适用于单聊。

Example
let onMessageReadByPeer = function(event) {
  // event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isPeerRead 属性值为 true
};
chat.on(TencentCloudChat.EVENT.MESSAGE_READ_BY_PEER, onMessageReadByPeer);

(static) MESSAGE_READ_RECEIPT_RECEIVED

SDK 收到了消息的已读回执通知,消息接收方调用 sendMessageReadReceipt 时消息发送方会收到此事件。

Example
let onMessageReadReceiptReceived = function(event) {
  // event.data - 存储消息已读回执信息的数组
  const readReceiptInfoList = event.data;
  readReceiptInfoList.forEach((item) => {
    const { groupID, userID, messageID, readCount, unreadCount, isPeerRead, timestamp } = item;
    // messageID - 消息 ID
    // userID - C2C 消息接收方
    // isPeerRead - C2C 消息对端是否已读
    // timestamp - C2C 消息对端发送已读回执时间,单位:秒(v3.4.0起支持)
    // groupID - 群组 ID
    // readCount - 群消息已读人数
    // unreadCount - 群消息未读人数
    const message = chat.findMessage(messageID);
    if (message) {
     if (message.conversationType === TencentCloudChat.TYPES.CONV_C2C) {
       if (message.readReceiptInfo.isPeerRead === true) {
         // 对端已读
       }
     } else if (message.conversationType === TencentCloudChat.TYPES.CONV_GROUP) {
      if (message.readReceiptInfo.unreadCount === 0) {
        // 全部已读
      } else {
        // message.readReceiptInfo.readCount - 消息最新的已读数
        // 如果想要查询哪些群成员已读了此消息,请使用 [getGroupMessageReadMemberList] 接口
      }
     }
    }
  });
}
chat.on(TencentCloudChat.EVENT.MESSAGE_READ_RECEIPT_RECEIVED, onMessageReadReceiptReceived);

(static) MESSAGE_EXTENSIONS_UPDATED

SDK 收到消息扩展更新通知,调用 setMessageExtensions 设置成功后,自己和对端用户(C2C)或群组成员(Group)都会收到此事件。

Example
let onMessageExtensionsUpdated = function(event) {
  const { messageID, extensions } = event.data;
  // messageID - 消息 ID
  // extensions - 消息扩展信息
  extensions.forEach((item) => {
   const { key, value } = item;
   // key - 消息扩展 key
   // value - 消息扩展 key 对应的 value 值
  });
};
chat.on(TencentCloudChat.EVENT.MESSAGE_EXTENSIONS_UPDATED, onMessageExtensionsUpdated);

(static) MESSAGE_EXTENSIONS_DELETED

SDK 收到消息扩展删除通知,调用 deleteMessageExtensions 删除成功后,自己和对端用户(C2C)或群组成员(Group)都会收到此事件。

Example
let onMessageExtensionsDeleted = function(event) {
  const { messageID, keyList } = event.data;
  // messageID - 消息 ID
  // keyList - 被删除的消息扩展 key 列表
  keyList.forEach((key) => {
   // console.log(key)
  });
};
chat.on(TencentCloudChat.EVENT.MESSAGE_EXTENSIONS_DELETED, onMessageExtensionsDeleted);

(static) MESSAGE_REACTIONS_UPDATED

消息回应更新通知。

注意1:v3.2.0 起支持。
注意2:当变更的 Reaction 信息里的 totalUserCount 字段值为 0 时,表明该 Reaction 已经没有用户在使用,您可以在 UI 上移除该 Reaction 的展示。

Example
let onMessageReactionsUpdated = function(event) {
  const { messageID, reactionList } = event.data;
  // messageID - 消息 ID
  // reactionList - 消息回应更新列表
  reactionList.forEach((item) => {
   const { reactionID, totalUserCount, partialUserList, reactedByMyself } = item;
   // reactionID - 消息回应 ID
   // totalUserCount - 同一个 reactionID 回应消息的总的用户个数
   // partialUserList - 同一个 reactionID 的部分用户列表
   // reactedByMyself - 是否我的回应
  });
};
chat.on(TencentCloudChat.EVENT.MESSAGE_REACTIONS_UPDATED, onMessageReactionsUpdated);

(static) CONVERSATION_LIST_UPDATED

会话列表更新,event.data 是包含 Conversation 对象的数组

Example
let onConversationListUpdated = function(event) {
  console.log(event.data); // 包含 Conversation 实例的数组
  // Conversation 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Conversation.html
};
chat.on(TencentCloudChat.EVENT.CONVERSATION_LIST_UPDATED, onConversationListUpdated);

(static) TOTAL_UNREAD_MESSAGE_COUNT_UPDATED

会话未读总数更新,event.data 是当前单聊和群聊会话的未读总数。

注意1:未读总数会减去设置为免打扰的会话的未读数。
注意2:未读总数不计算系统会话的未读数。

Example
let onTotalUnreadMessageCountUpdated = function(event) {
  console.log(event.data); // 当前单聊和群聊会话的未读总数
};
chat.on(TencentCloudChat.EVENT.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED, onTotalUnreadMessageCountUpdated);

(static) CONVERSATION_GROUP_LIST_UPDATED

会话分组更新时触发(如创建会话分组、删除会话分组、重命名会话分组)。

Example
let onConversationGroupListUpdated = function(event) {
  console.log(event.data); // 全量的会话分组名列表
}
chat.on(TencentCloudChat.EVENT.CONVERSATION_GROUP_LIST_UPDATED, onConversationGroupListUpdated);

(static) CONVERSATION_IN_GROUP_UPDATED

会话分组内的会话更新时触发(如添加会话到分组,或者从分组内删除会话)。

Example
let onConversationInGroupUpdated = function(event) {
  const { groupName, conversationList }  = event.data;
  // groupName - 会话分组名
  // conversationList - 分组内的会话列表
}
chat.on(TencentCloudChat.EVENT.CONVERSATION_IN_GROUP_UPDATED, onConversationInGroupUpdated);

(static) GROUP_LIST_UPDATED

SDK 群组列表更新时触发,可通过遍历 event.data 获取群组列表数据并渲染到页面

Example
let onGroupListUpdated = function(event) {
   console.log(event.data);// 包含 Group 实例的数组
   // Group 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Group.html
};
chat.on(TencentCloudChat.EVENT.GROUP_LIST_UPDATED, onGroupListUpdated);

(static) GROUP_ATTRIBUTES_UPDATED

群属性更新时触发,可通过 event.data 获取到更新后的群属性数据

注意1:话题不支持群属性。

Example
let onGroupAttributesUpdated = function(event) {
   const groupID = event.data.groupID // 群组ID
   const groupAttributes = event.data.groupAttributes // 更新后的群属性
   console.log(event.data);
};
chat.on(TencentCloudChat.EVENT.GROUP_ATTRIBUTES_UPDATED, onGroupAttributesUpdated);

(static) GROUP_COUNTER_UPDATED

SDK 收到群计数器更新通知,自己和其他群组成员都会收到此事件。

注意1:您调用以下接口操作成功后均会触发该事件:

Example
let onGroupCounterUpdated = function(event) {
  const { groupID, key, value } = event.data;
  // groupID - 群组 ID
  // key - 群计数器 key
  // value - 群计数器 key 对应的 value
};
chat.on(TencentCloudChat.EVENT.GROUP_COUNTER_UPDATED, onGroupCounterUpdated);

(static) TOPIC_CREATED

创建话题时触发。

Example
let onTopicCreated = function(event) {
   const groupID = event.data.groupID // 话题所属社群 ID
   const topicID = event.data.topicID // 话题 ID
   console.log(event.data);
};
chat.on(TencentCloudChat.EVENT.TOPIC_CREATED, onTopicCreated);

(static) TOPIC_DELETED

删除话题时触发。

Example
let onTopicDeleted = function(event) {
   const groupID = event.data.groupID // 话题所属社群 ID
   const topicIDList = event.data.topicIDList // 删除的话题 ID 列表
   console.log(event.data);
};
chat.on(TencentCloudChat.EVENT.TOPIC_DELETED, onTopicDeleted);

(static) TOPIC_UPDATED

话题资料更新时触发。

Example
let onTopicUpdated = function(event) {
   const groupID = event.data.groupID // 话题所属社群 ID
   const topic = event.data.topic // 话题资料
   console.log(event.data);
};
chat.on(TencentCloudChat.EVENT.TOPIC_UPDATED, onTopicUpdated);

(static) PROFILE_UPDATED

自己或好友的资料发生变更时触发,event.data 是包含 Profile 对象的数组

Example
let onProfileUpdated = function(event) {
  console.log(event.data); // 包含 Profile 对象的数组
  // Profile 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Profile.html
};
chat.on(TencentCloudChat.EVENT.PROFILE_UPDATED, onProfileUpdated);

(static) USER_STATUS_UPDATED

已订阅用户,或好友,或 Web 多实例登录场景下的状态变更(在线状态或自定义状态)时触发。

Example
let onUserStatusUpdated = function(event) {
   console.log(event.data);
   const userStatusList = event.data;
   userStatusList.forEach((item) => {
     const { userID, statusType, customStatus } = item;
     // userID - 用户 ID
     // statusType - 用户状态,枚举值及说明如下:
     // TencentCloudChat.TYPES.USER_STATUS_UNKNOWN - 未知
     // TencentCloudChat.TYPES.USER_STATUS_ONLINE - 在线
     // TencentCloudChat.TYPES.USER_STATUS_OFFLINE - 离线
     // TencentCloudChat.TYPES.USER_STATUS_UNLOGINED - 未登录
     // customStatus - 用户自定义状态
   })
};
chat.on(TencentCloudChat.EVENT.USER_STATUS_UPDATED, onUserStatusUpdated);

(static) BLACKLIST_UPDATED

SDK 黑名单列表更新时触发

Example
let onBlacklistUpdated = function(event) {
  console.log(event.data); // 我的黑名单列表,结构为包含用户 userID 的数组
};
chat.on(TencentCloudChat.EVENT.BLACKLIST_UPDATED, onBlacklistUpdated);

(static) FRIEND_LIST_UPDATED

好友列表更新时触发

Example
let onFriendListUpdated = function(event) {
  console.log(event.data); // 包含 Friend 对象的数组
  // Friend 数据结构详情请参考 https://web.sdk.qcloud.com/im/doc/v3/zh-cn/Friend.html
}
chat.on(TencentCloudChat.EVENT.FRIEND_LIST_UPDATED, onFriendListUpdated);

(static) FRIEND_GROUP_LIST_UPDATED

好友分组列表更新时触发

Example
let onFriendGroupListUpdated = function(event) {
  console.log(event.data);
}
chat.on(TencentCloudChat.EVENT.FRIEND_GROUP_LIST_UPDATED, onFriendGroupListUpdated);

(static) FRIEND_APPLICATION_LIST_UPDATED

SDK 好友申请列表更新时触发

Example
let onFriendApplicationListUpdated = function(event) {
  // friendApplicationList - 好友申请列表 - [FriendApplication]
  // unreadCount - 好友申请的未读数
  const { friendApplicationList, unreadCount } = event.data;
  // 发送给我的好友申请(即别人申请加我为好友)
  const applicationSentToMe = friendApplicationList.filter((friendApplication) => friendApplication.type === TencentCloudChat.TYPES.SNS_APPLICATION_SENT_TO_ME);
  // 我发送出去的好友申请(即我申请加别人为好友)
  const applicationSentByMe = friendApplicationList.filter((friendApplication) => friendApplication.type === TencentCloudChat.TYPES.SNS_APPLICATION_SENT_BY_ME);
};
chat.on(TencentCloudChat.EVENT.FRIEND_APPLICATION_LIST_UPDATED, onFriendApplicationListUpdated);

(static) MY_FOLLOWERS_LIST_UPDATED

我粉丝列表更新时触发

注意1:v3.2.6 起支持。

Example
let onMyFollowersListUpdated = function(event) {
  console.log(event.data);
  const { userInfoList, isAdd } = event.data;
  userInfoList - 变更的用户信息列表, isAdd = false 时列表只返回 userID
  isAdd - true 表示增加的粉丝信息, false 表示减少的粉丝信息
}
chat.on(TencentCloudChat.EVENT.MY_FOLLOWERS_LIST_UPDATED, onMyFollowersListUpdated);

(static) MY_FOLLOWING_LIST_UPDATED

我关注列表更新时触发

注意1:v3.2.6 起支持。

Example
let onMyFollowingListUpdated = function(event) {
  console.log(event.data);
  const { userInfoList, isAdd } = event.data;
  userInfoList - 变更的用户信息列表, isAdd = false 时列表只返回 userID
  isAdd - true 表示增加的关注信息, false 表示减少的关注信息
}
chat.on(TencentCloudChat.EVENT.MY_FOLLOWING_LIST_UPDATED, onMyFollowingListUpdated);

(static) MUTUAL_FOLLOWERS_LIST_UPDATED

互关列表更新时触发

注意1:v3.2.6 起支持。

Example
let onMutualFollowersListUpdated = function(event) {
  console.log(event.data);
  const { userInfoList, isAdd } = event.data;
  userInfoList - 变更的用户信息列表, isAdd = false 时列表只返回 userID
  isAdd - true 表示增加的互关信息, false 表示减少的互关信息
}
chat.on(TencentCloudChat.EVENT.MUTUAL_FOLLOWERS_LIST_UPDATED, onMutualFollowersListUpdated);

(static) KICKED_OUT

用户被踢下线时触发

注意1:如需支持 Web 多实例登录(允许在多个网页中同时登录同一账号),请到 即时通信 IM 控制台,找到相应 SDKAppID,【应用配置】>【功能配置】>【登录与消息】>【Web端可同时在线个数】配置实例个数。配置将在5分钟内生效。
注意2:默认情况下,每种平台只支持1个终端在线(如 Android 和 Android 会互踢)。如果需要使用“同平台多设备在线”功能,请 升级旗舰版套餐包 ,详见 价格说明

Example
let onKickedOut = function(event) {
  console.log(event.data.type);
  // TencentCloudChat.TYPES.KICKED_OUT_MULT_ACCOUNT(Web端,同一账号,多页面登录被踢)
  // TencentCloudChat.TYPES.KICKED_OUT_MULT_DEVICE(同一账号,多端登录被踢)
  // TencentCloudChat.TYPES.KICKED_OUT_USERSIG_EXPIRED(签名过期)
  // TencentCloudChat.TYPES.KICKED_OUT_REST_API(REST API kick 接口踢出)
};
chat.on(TencentCloudChat.EVENT.KICKED_OUT, onKickedOut);

(static) NET_STATE_CHANGE

网络状态发生改变

Example
let onNetStateChange = function(event) {
  // event.data.state 当前网络状态,枚举值及说明如下:
  // TencentCloudChat.TYPES.NET_STATE_CONNECTED - 已接入网络
  // TencentCloudChat.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动,SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
  // TencentCloudChat.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试,若用户网络恢复,SDK 会自动同步消息
};
chat.on(TencentCloudChat.EVENT.NET_STATE_CHANGE, onNetStateChange);

(static) ALL_RECEIVE_MESSAGE_OPT_UPDATED

全局消息接收选项变更通知 注意:v3.3.0 起支持。

Example
let onAllReceiveMessageOptUpdated = function(event) {
  console.log(event.data);
}
chat.on(TencentCloudChat.EVENT.ALL_RECEIVE_MESSAGE_OPT_UPDATED, onAllReceiveMessageOptUpdated);