浏览 SDKs · WASM
SDKsWASM

撤回消息

撤回已发送的消息,并向会话成员同步撤回状态。

复制

如果界面需要让其他会话成员看到“消息已撤回”,使用 revokeMessage(),不要用普通删除替代。删除只影响当前账号侧可见性,见批量删除消息。修改已发送消息内容见修改消息

撤回一条消息

revokeMessage() 接收消息所在的 conversationID 和目标 clientMsgID

const { data } = await openimsdk.revokeMessage({
  conversationID,
  clientMsgID,
});

markMessageRevoked(data?.clientMsgID ?? clientMsgID);

Promise 成功后,调用端可先把当前列表中的同 clientMsgID 消息更新为撤回态。在线客户端随后通过 CbEvents.OnNewRecvMessageRevoked 收到撤回信息,接收端应根据事件里的 clientMsgID 更新对应气泡,而不是直接从列表中删除。

允许撤回的发送者、时间窗口和消息类型由 OpenIMServer 校验;调用失败时不要只在本地保留撤回展示。

SDK 同时保留 CbEvents.OnRecvMessageRevoked。它是旧的单条撤回事件名;新代码优先监听 OnNewRecvMessageRevoked。维护既有项目时,应先确认当前部署实际触发的事件;如果只能收到旧事件,则用旧事件名替换下方注册项并复用同一个处理器,不要同时监听两个名称后重复合并同一次撤回。

返回结果

Promise 成功代表当前撤回请求已完成,不代表所有端界面已经更新。其他客户端通过撤回事件合并增量。

监听撤回事件

本页是 OnNewRecvMessageRevoked 的完整监听示例归属页。同步删除见批量删除消息,按用户批量删除见删除群聊中指定用户的全部消息

import { CbEvents } from '@openim/wasm-client-sdk';

const handleMessageRevoked = ({ data }) => {
  markMessageRevoked(data.clientMsgID);
};

openimsdk.on(CbEvents.OnNewRecvMessageRevoked, handleMessageRevoked);

function removeRevokeListener() {
  openimsdk.off(CbEvents.OnNewRecvMessageRevoked, handleMessageRevoked);
}

OnNewRecvMessageRevokeddataRevokedInfo。消息使用 clientMsgID 合并。组件卸载、退出登录或切换账号时调用 removeRevokeListener();重新登录后的撤回变化由消息事件同步。

相关页面