撤回消息

大约 2 分钟

撤回消息

发送方可以撤回一条发送成功的消息,包括已经发送的历史消息,离线消息或漫游消息。

默认情况下,发送方可撤回发出 2 分钟内的消息。你可以在环信即时通讯云控制台open in new window功能配置 > 功能配置总览 > 基础功能页面设置消息撤回时长,该时长不超过 7 天。

技术原理

环信即时通讯 IM 支持你撤回一条发送成功的消息:

  • recallMessage:撤回一条发送成功的消息。

前提条件

开始前,请确保满足以下条件:

实现方法

撤回消息

你可以调用 recallMessage 方法撤回一条发送成功的消息。

调用该方法后,服务端的该条消息(历史消息,离线消息或漫游消息)会被移除,消息的接收方会收到 onRecallMessage 事件。

对于 4.7.0 及以上版本,该接口新增 ext 参数,支持传入自定义字符串,设置扩展信息。

let option = {
  // 要撤回消息的消息 ID。
  mid: "msgId",
  // 消息接收方:单聊为对方用户 ID,群聊和聊天室分别为群组 ID 和聊天室 ID。
  to: "username",
  // 会话类型:单聊、群聊和聊天室分别为 `singleChat`、`groupChat` 和 `chatRoom`。
  chatType: "singleChat",
  // 撤回消息自定义字段。
  ext: 'ext'
};
conn.recallMessage(option)
  .then((res) => {
    console.log("success", res);
  })
  .catch((error) => {
    // 消息撤回失败,原因可能是超过了撤销时限(超过 2 分钟)。
    console.log("fail", error);
  });

设置消息撤回监听

你可以设置消息撤回监听,通过 onRecallMessage 监听消息撤回状态。

  conn.addEventHandler('MESSAGES',{
   onRecallMessage: (msg) => {
      // 这里需要在本地删除对应的消息,也可以插入一条消息:“XXX撤回一条消息”。
      console.log('Recalling the message success',msg)
      // 消息撤回方设置的自定义字段。
      console.log('recall message ext', msg?.ext)
   }
})