消息撤回

撤回用于在发送后短时间内收回消息:发送者调用撤回接口,服务端校验时限与身份后,把撤回事件推送给会话内所有端。客户端应把原消息替换为“已撤回”占位,而不是直接删除(保留会话上下文与可追溯性)。

规则​

项规则
谁可以撤回仅消息发送者本人
时限默认 2 分钟(可在控制台调整);超时返回 1022
双方可见性单聊双方、群聊全体成员都会收到撤回事件
多端同账号其它端同步替换为撤回占位
重复撤回幂等:已撤回的消息再次撤回返回 1023
删除 vs 撤回删除只影响本端视图;撤回影响所有端

recallMessage​

撤回消息(仅发送者、撤回时限内)。成功后本地与对端收到 MESSAGE_RECALLED。

项值
Swiftfunc recallMessage(messageId: String) async -> RcResult<IMPMessage>
Objective-C- (void)recallMessageWithMessageId:(NSString *)messageId completion:(void (^)(IMPOSResult *result))completion
传输长连接(WebSocket)
幂等否

参数​

参数类型必填说明
messageIdstring是消息 ID(服务端生成)

返回​

Message:消息实体(messageId、seq、发送状态)

示例(Swift / Objective-C)​

let res = await client.recallMessage(messageId: "m_10001")
if res.code != 0 { print(res.msg ?? "") }
[client recallMessageWithMessageId:@"m_10001" completion:^(IMPOSResult *result) {
    if (result.code != 0) { NSLog(@"IM 调用失败:%ld %@", (long)result.code, result.msg); }
}];
错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1003FORBIDDEN客户端 / 参数 / 权限403否无权限
1004USER_NOT_FOUND客户端 / 参数 / 权限404否用户不存在
1022RECALL_EXPIRED客户端 / 参数 / 权限400否超过撤回时限
1023MESSAGE_ALREADY_RECALLED客户端 / 参数 / 权限400否消息已撤回
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪

事件与 UI​

  • 成功后本端立即替换为撤回占位(乐观更新),并以服务端事件为准校正。
  • 对端通过 `MESSAGE_RECALLED` 事件收到 `{messageId, operatorId, ...}`,按 messageId 定位替换。
  • 撤回后原消息内容不再展示;搜索与引用应跳过已撤回消息。
  • 失败时按错误码提示:1022 超时、1023 已撤回、1003 无权限、3001 连接未就绪。
Swift
let recallStatus = client.getConnectionStatus()
print(recallStatus)

相关:消息管理、状态码、已读回执。