拉取公众号用户历史消息

背景说明

即时通信 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

请求参数说明

下表仅列出调用本接口时涉及修改的参数及其说明,更多参数详情请参考 REST API 简介
参数
说明
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
必须为 App 管理员账号,更多详情请参见 App 管理员
usersig
App 管理员账号生成的签名,具体操作请参见 生成 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
选填
上一次拉取到的最后一条消息的 MsgKey,续拉时需要填该字段,填写方法见上方 示例
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
消息内容,详情请参见 消息内容 MsgBody 说明

错误码说明

除非发生网络错误(例如502错误),否则该接口的 HTTP 返回码均为200。真正的错误码,错误信息是通过应答包体中的 ErrorCode、ErrorInfo 来表示的。 公共错误码(60000到79999)参见 错误码 文档。 本 API 私有错误码如下:
错误码
描述
10002
服务器内部错误,请重试
10003
请求命令字非法
10004
参数非法,请根据错误描述检查请求是否正确
10007
操作权限不足,操作人必须为该公众号中有权限执行对应操作的角色
10010
公众号用户不存在,或者曾经存在过,但是目前已经被解散
10015
公众号用户 ID 非法,请检查公众号用户 ID 是否填写正确

接口调试工具

通过 REST API 在线调试工具 调试本接口。