拉取公众号用户历史消息
背景说明
即时通信 IM 的公众号消息是按 Seq 排序的,按照 server 收到公众号消息的顺序分配 Seq,先发的公众号消息 Seq 小,后发的 Seq 大。
即时通信 IM 会给每条公众号消息生成一个 MsgKey,格式为 "Seq_1_ServerTime"。
如果用户想拉取一个公众号的全量消息,需要填写消息的 LastMsgKey,首次拉取时不用填拉取 LastMsgKey,Server 会自动返回最新的消息,以后拉取时拉取 LastMsgKey 填上次请求返回 LastMsgKey。
如果返回消息的 IsPlaceMsg 为1,表示这个 Seq 的消息或者过期、或者存储失败、或者被删除了。
功能说明
App 管理员可以通过该接口拉取公众号的历史消息。
接口调用说明
请求 URL 示例
https://xxxxxx/v4/official_account_open_http_svc/official_account_msg_get_simple?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
请求参数说明
参数 | 说明 |
xxxxxx | SDKAppID 所在国家/地区对应的专属域名: 中国: console.tim.qq.com 新加坡: adminapisgp.im.qcloud.com 首尔: adminapikr.im.qcloud.com 法兰克福: adminapiger.im.qcloud.com 硅谷: adminapiusa.im.qcloud.com 雅加达: adminapiidn.im.qcloud.com |
v4/official_account_open_http_svc/official_account_msg_get_simple | 请求接口 |
sdkappid | 创建应用时即时通信 IM 控制台分配的 SDKAppID |
identifier | |
usersig | |
random | 请输入随机的32位无符号整数,取值范围0 - 4294967295 |
contenttype | 请求格式固定值为 json |
最高调用频率
200次/秒。
请求包示例
基础形式
拉取公众号的历史消息,返回公众号最新的 ReqMsgNumber 条消息。
{"Official_Account": "@TOA#_15ERQPAER", //拉取消息的公众号用户"ReqMsgNumber": 2 //需要拉取的消息条数}
按 LastMsgKey 续拉
返回早于指定 LastMsgKey 之前的消息。
{"Official_Account": "@TOA#_15ERQPAER","LastMsgKey": "71_1_1698741698", // 续拉 MsgKey"ReqMsgNumber": 2}
请求包字段说明
字段 | 类型 | 属性 | 说明 |
Official_Account | String | 必填 | 要拉取历史消息的公众号用户 |
LastMsgKey | String | 选填 | |
ReqMsgNumber | Integer | 选填 | 请求的消息条数 |
WithRecalledMsg | Integer | 选填 | 是否带撤回的消息,填1表明需要拉取撤回后的消息;默认不拉取撤回后的消息 |
应答包体示例
{"ActionStatus": "OK","ErrorInfo": "","ErrorCode": 0,"Official_Account": "@TOA#_15ERQPAER","IsFinished": 1,"LastMsgKey": "71_1_1698741698""RspMsgList": [{"From_Account": "144115197276518801","IsPlaceMsg": 0,"MsgBody": [{"MsgContent": {"Data": "\b\u0001\u0010\u0006\u001A\u0006猫瞳","Desc": "MIF","Ext": ""},"MsgType": "TIMCustomElem"},{"MsgContent": {"Data": "","Index": 15},"MsgType": "TIMFaceElem"}],"MsgSeq": 71,"MsgKey" :"71_1_1698741698""MsgTimeStamp": 1698741698},{"From_Account": "144115198339527735","IsPlaceMsg": 0,"MsgBody": [{"MsgContent": {"Data": "\b\u0001\u0010\u0006\u001A\u000F西瓜妹妹。","Desc": "MIF","Ext": ""},"MsgType": "TIMCustomElem"},{"MsgContent": {"Text": "报上来"},"MsgType": "TIMTextElem"}],"MsgSeq": 72,"MsgKey" :"72_1_1698741700""MsgTimeStamp": 1698741700}]}
应答包字段说明
字段 | 类型 | 说明 |
ActionStatus | String | 请求处理的结果: OK:表示处理成功 FAIL:表示失败 |
ErrorInfo | String | 错误信息 |
ErrorCode | Integer | 错误码: 0:表示成功 非0:表示失败 |
Official_Account | String | 请求中的公众号用户 |
IsFinished | Integer | 是否返回了请求区间的全部消息 当成功返回了请求区间的全部消息时,值为1 当消息长度太长或者区间太大(超过20)导致无法返回全部消息时,值为0 当请求区间之前的所有消息都过期时,值为2 |
RspMsgList | Array | 返回的消息列表 |
IsPlaceMsg | Integer | 是否是空洞消息,当消息被删除或者消息过期后: MsgBody 为空,该字段为1 撤回的消息,该字段为2 |
MsgKey | String | |
MsgSeq | Integer | 消息 seq,用于标识唯一消息,值越小发送的越早 |
MsgTimeStamp | Integer | 消息被发送的时间戳(单位:秒),server 的时间 |
MsgBody | Object / Array |
错误码说明
除非发生网络错误(例如502错误),否则该接口的 HTTP 返回码均为200。真正的错误码,错误信息是通过应答包体中的 ErrorCode、ErrorInfo 来表示的。
公共错误码(60000到79999)参见 错误码 文档。
本 API 私有错误码如下:
错误码 | 描述 |
10002 | 服务器内部错误,请重试 |
10003 | 请求命令字非法 |
10004 | 参数非法,请根据错误描述检查请求是否正确 |
10007 | 操作权限不足,操作人必须为该公众号中有权限执行对应操作的角色 |
10010 | 公众号用户不存在,或者曾经存在过,但是目前已经被解散 |
10015 | 公众号用户 ID 非法,请检查公众号用户 ID 是否填写正确 |