收到的回调事件里面并没有有价值的信息,如下:
<xml>
<ToUserName>
<![CDATA[ww897b5b25811a6935]]>
</ToUserName>
<CreateTime>1652421098</CreateTime>
<MsgType>
<![CDATA[event]]>
</MsgType>
<Event>
<![CDATA[kf_msg_or_event]]>
</Event>
<Token>
<![CDATA[ENCFG7dkUb7fxCr69qHM9wUtKiG5xZcHwCVn5evBcNwhYio]]>
</Token>
</xml>
通过token,调用读取消息API,得到是的是个列表。
{
"errcode":0,
"msg_list":[
{
"msgid":"MXbuYYJYGqC7TXxX9XCCq1zsauJJarCezFsPvGQTh",
"open_kfid":"wkBxgUCAAAQIqDO0UIcFg2ioTFYzHpXg",
"external_userid":"wmBxgUCAAAnSN7-a3duAYORYF2vSxo-w",
"send_time":1652421128,
"origin":3,
"msgtype":"text",
"text":{
"content":"啊啊啊啊啊"
}
}
],
"next_cursor":"HHFq49uYHoiCuZRv9Png",
"errmsg":"ok",
"has_more":0
}
这里即使 "limit": 1 拉取最新的一条数据,也可能存在多个回调然后合并了消息,如何得知回调事件与消息列表里面的具体哪一条消息是关联的呢?
微信客服的回调事件只是通知有新的消息/事件,回调数据中没有告诉是谁发的、发的内容,需要企业通过接口读取。如果你请求读取消息的时不填cursor和limit,会有读取大于1条消息的情况。关键参数cursor是每次读取消息时返回的next_cursor,如下第3行:
{ "errcode": 0, "errmsg": "ok", "next_cursor": "4gw7MepFLfgF2VC5npN", "has_more": 1, "msg_list": [ {'222gujiguji': 'balbalbala'}, {'333gujiguji': 'balbalbala'} ] }
按照API文档的建议是每次读取消息都要存一下的cursor,下一次请求加上,例如加上 {'cursor': 'b4Hidu7Dcy7GLh', 'limit': '10'}, 就可以获取从这个cursor之后的10条数据。