浏览 SDKs · WASM
平台
SDKsWASM

撤回消息

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

复制

若需让会话中的所有成员均能看到“某人撤回了一条消息”的系统提示,请调用 revokeMessage(),而不要使用单向的本地删除。普通删除仅对当前操作账号生效(详见批量删除消息);若仅需修改已发送的消息文本,请参考修改消息。

撤回一条消息

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

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

markMessageRevoked(data?.clientMsgID ?? clientMsgID);

接口调用成功后,当前客户端可先将对应 clientMsgID 的本地消息更新为撤回态展示。会话各端随后会通过 SdkEvent.OnNewRecvMessageRevoked 收到撤回事件通知,界面应据此将对应消息气泡替换为撤回提示文案,而非直接从列表中移除该项。

撤回操作的权限校验、允许撤回的时间窗口限制(例如 2 分钟内)由 OpenIMServer 服务端进行控制。调用失败时请勿在本地盲目保留撤回展示。SDK 亦兼容旧版事件名 SdkEvent.OnRecvMessageRevoked,新项目建议统一监听 OnNewRecvMessageRevoked。

返回结果

Promise 成功代表当前撤回请求已完成,不代表所有端界面已经更新。其他客户端收到撤回事件后,应使用 clientMsgID 找到并更新对应消息。

监听撤回事件

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

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

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

openimsdk.on(SdkEvent.OnNewRecvMessageRevoked, handleMessageRevoked);

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

事件载荷 data 为 RevokedInfo 对象。业务层可使用 clientMsgID 匹配具体消息;isAdminRevoke 字段标识本次是否由管理员代为执行撤回,可用于展示“管理员撤回了一条成员消息”等定制化系统提示。在组件销毁、退出登录或切换账号时,请调用 removeRevokeListener() 解绑监听。

相关页面