====== 消息撤回 ====== ''本文档已不再维护,新版文档见:[[ccim:android:message2|消息管理–发送和接收消息]]。'' ------- ===== 服务设置 ===== * 默认设置:消息撤回时限默认为2分钟。 * 是否增值服务:是 ===== 服务分类 ===== * 端消息撤回 * REST消息撤回 ===== 功能介绍 ===== - 用户可以在消息发出后的撤回时限内从客户端发起消息撤回操作; - 被撤回的消息将会从服务器的离线队列中删除,如果应用已开通消息漫游,则所有已登录客户端均撤回或不再接收此消息; - 消息撤回时限默认2分钟,可根据开发者需求以AppKey为单位进行单独设置; - 端消息撤回由用户在各客户端上主动进行消息撤回操作; - REST消息撤回赋予了APP管理员对消息进行撤回的能力,可以对不良消息进行人工的处理; **注意:** 消息撤回时限建议短于服务器保存消息的时间(默认7天,若开通[[im:extensions:value:messageroaming|消息漫游]]增值服务可延长至3个月或者6个月),如果消息撤回时限被设置成了超过服务端消息保存的时间,需要撤回的消息在请求撤回之前已经由于过期在服务端被删除,消息撤回请求会失败,无法从已经收到该消息的客户端撤回该消息。 ===== 使用方法 ===== ==== Android ==== EMClient.getInstance().chatManager().recallMessage(contextMenuMessage); ==== iOS ==== (void)recallMessage:(EMMessage *)aMessage completion:(void (^)(EMMessage *aMessage, EMError *aError))aCompletionBlock; ==== Web ==== WebIM.conn.recallMessage({ mid:mid, //服务端消息ID to : username, //接收方ID type: 'chat' // 单聊为'chat',群组为'groupchat',聊天室为 'chatroom' }) ==== REST API ==== === 服务端消息撤回 === 应用管理员调用接口可以对发送消息进行撤回。允许撤回时间可以在通讯云管理后台进行设置,最大设置时间为7天。 === HTTP Request === ^{{:im:server:ready:post.png?nolink&90 |}}^**/{org_name}/{app_name}/messages/recall**^ === Request Headers === ^参数^说明^ |Content-Type|application/json| |Authorization|Bearer ${token}| === Request Body === ^参数^说明^ |msg_id|撤回消息的消息id| |to|撤回消息的接收方| |chat_type|撤回消息的消息类型,有单聊chat和群聊group_chat两种类型| === Response Body === 在返回值中查看msgs字段包含的信息 ^参数^说明^ |msg_id|需要撤回消息id| |recalled|返回结果,成功是yes| |from|消息撤回方,这里是admin表示通过REST接口撤回| |to|撤回消息送达方,用户名或者群名| |chattype|消息类型,chat或者groupchat| === 请求示例 === curl -i -X POST -H "Authorization: Bearer YWMtnIF_ZI-GEea1KgfxnnDmKAAAAVjnsTKe0OE4vMOBWCtOcrB-56YcrhOHMho" "https://a1.easemob.com/{org_name}/{app_name}/messages/recall" -d '{"msgs": [{"msg_id": "673296797703079892","to": "99537689575425","chat_type": "groupchat"},{"msg_id": "673296835082717140","to": "yifan1","chat_type": "chat"}]}' === 可能返回的结果示例 === **返回值200,表示撤回成功** **成功结果:** **msg_id** :需要撤回消息id **recalled** :返回结果,成功是yes **from** : 消息撤回⽅方,这⾥里里是admin表示通过接⼝口撤回 **to** : 撤回消息送达⽅方,⽤用户名或者群名 **chattype** : 消息类型, chat或者groupchat { "msgs": [ { "msg_id":"673296835082717140", "recalled":"yes", "from":"admin", "to":"yifan1", "chattype":"chat" }, { "msg_id":"673296797703079892", "recalled":"yes", "from":"admin", "to":"99537689575425", "chattype":"groupchat" } ] } **失败结果:** **msg_id** :需要撤回消息id **recalled** :撤回结果,有以下⼏几种情况 1."can't find msg to",⽆无法找到撤回消息的接收⽅方 2."exceed recall time limit" 消息撤回时间超时 3."not_found msg",消息已经过期或者已经被撤回 4."internal error",出现后端服务异常 { "msgs": [ { "msg_id":"673296835082717140", "recalled":"not_found msg" }, { "msg_id":"673296797703079892", "recalled":"not_found msg } ] } **返回结果:** 消息撤回服务没有开通 { "error":"forbidden_op", "exception":"EasemobForbiddenOpException", "timestamp":1644402553845, "duration":0, "error_description":"message recall service is unopened" } === 响应码 === ^状态码^描述^ |200|请求成功。| |401|鉴权失败(无 token,token 错误或者过期),请重新获取 token 再试。| |403|撤回失败。| |429,503 或者其他 5xx|单位时间内请求过多。请稍后重试。| |500|服务器内部错误。如果问题持续存在,请联系我们的技术支持团队。| ---- 上一页:[[im:extensions:value:messageroaming|消息漫游]] 下一页:[[im:extensions:live:intro|产品介绍]]