撤回消息
撤回已发送的消息,并向会话成员同步撤回状态。
如果界面需要让其他会话成员看到“消息已撤回”,使用 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);
}OnNewRecvMessageRevoked 的 data 是 RevokedInfo。消息使用 clientMsgID 合并。组件卸载、退出登录或切换账号时调用 removeRevokeListener();重新登录后的撤回变化由消息事件同步。
相关页面
这个页面有帮助吗?