调用Telegram Bot的getUserProfilePhotos获取用户头像返回空如何解决
问题原因及解决方案
1. 参数传递格式错误
Telegram Bot API 对大多数简单接口的POST请求,要求参数以application/x-www-form-urlencoded格式传递,你当前代码使用json=par传递JSON格式参数,接口无法正确解析参数,虽然返回ok为true,但实际参数没有生效,会默认返回空结果。
修复方案:将请求行改为dataReq = requests.post(requestStr, data=par),或者直接使用GET请求把参数拼接到URL中。
2. 机器人没有获取用户信息的权限
根据Telegram隐私规则,机器人必须满足以下任意一个条件,才能获取用户头像:
- 用户曾经主动给你的机器人发送过消息
- 用户曾经主动点击过你机器人的inline交互按钮
- 用户和机器人在同一个公开群组/频道中,且机器人拥有管理员权限
如果用户从未和你的机器人产生过任何交互,就算你拿到了正确的用户ID,接口也会返回空的头像列表。
3. 传入的user_id不正确
请确认你传入的user.id是用户和机器人交互时,Telegram主动推送给你的字段值,不要使用第三方工具查询的用户ID,也不要把群组/频道的chat_id误作为user_id传入。
修复后代码示例
def getUserProfilePicture (self, user : User): if (user is None) : return None requestStr = self.httpbase + self.token + "/getUserProfilePhotos" par ={ "user_id" : user.id, "limit" : 5 } # 改为用data传递表单格式参数 dataReq = requests.post(requestStr, data=par) updateData = dataReq.json() # requests自带json解析方法,不需要手动loads isOk = updateData.get("ok")
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

