Twitter DM API v1.1 私信事件列表接口未返回全部消息问题咨询
Twitter v1.1 私信事件列表接口仅返回部分发送方私信的问题
问题现象
- 以已认证用户身份调用1.1版本私信事件列表接口时,使用两个不同Twitter账号向当前认证关联账号发送若干私信,接口仅返回其中一个发送方的
message_create类型结果,未返回另一个发送方的全部消息 - 浏览器端登录Twitter网页版时,可正常查看到两个账号发送的所有私信
- 当前账号私信总数量不足20条,接口返回结果中无
next_cursor属性,排除遗漏消息位于下一分页的可能 - 所有私信均为最近一周内发送,未触发接口30天数据返回的时间限制
精简后的接口响应示例
{ "events": [{ "type": "message_create", "id": "1537138057991884809", "created_timestamp": "1655317246326", "message_create": { "target": { "recipient_id": "114729189" }, "sender_id": "1520424127873654786", "source_app_id": "3033300", "message_data": { "text": "An image", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } } }, // 其余返回事件的sender_id均与上述一致 // 但实际有两名不同用户分别向我发送了私信(非群聊消息) ], "apps": { "3033300": { "id": "3033300", "name": "Twitter Web App" } } }
佐证截图

截图显示Twitter官方网页端可正常查看两名用户发送的全部私信
核心疑问
该问题是调用时遗漏了配置项,还是接口存在未公开的返回限制?根据官方公开文档说明,该接口无额外可传入的请求参数。
问题原因与解决方案
该问题不是调用参数遗漏导致的,属于Twitter v1.1私信接口的已知权限限制,对应原因和处理方式如下:
- 应用访问权限等级不足
Twitter开发者平台对v1.1接口的应用设置了三级权限:只读、读-写、读-写+私信访问。如果应用仅申请了前两个等级,接口只会返回和当前应用存在交互关联的私信会话——也就是通过该应用主动发过消息的会话,其余会话的消息会被静默过滤,不会出现在返回结果中,也不会抛出明确报错。
处理方式:进入开发者后台的应用设置页,将应用权限调整为读-写+私信访问(Read, write, and Direct Messages),重新生成对应用户的access token和secret后再调用接口,即可拉取到全量私信。 - 账号隐私规则过滤
如果发送缺失消息的账号开启了「仅允许已关注用户发送私信」设置,而当前认证账号未关注该发送方,在未开启全量私信访问权限的场景下,也会出现接口过滤消息、但网页端正常展示的情况,调整完上述应用权限等级后即可正常拉取。 - 补充排查方式
调整权限后如果仍存在消息缺失,可以调用单条私信查询接口,传入缺失消息的具体事件ID做验证:如果单条接口能正常返回结果,说明权限配置仍未生效;如果单条接口返回无权限错误,需要检查发送方是否拉黑了当前认证账号,或是对应消息被系统判定为垃圾信息拦截。
注:v1.1版本的私信事件列表接口确实没有额外的筛选请求参数,所有非全量返回的场景都和权限配置、消息本身状态有关,不存在分页、时间窗限制之外的隐藏请求参数。
内容的提问来源于stack exchange,提问作者Matthijn
相关产品推荐
相关产品推荐

