You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Bot API:调用getChatMember对有效用户抛出USER_ID_INVALID错误

解决Telegram Bot调用getChatMember时USER_ID_INVALID的坑

咱们先唠唠为啥明明是活跃用户,调用getChatMember却报USER_ID_INVALID——其实这大多和Telegram的隐私规则还有Bot权限有关,不是你代码写错了:

常见原因

  • 用户隐私锁死了:很多用户会开启严格的隐私设置,禁止非联系人的Bot获取自己的信息。哪怕用户之前在你的超级群里,一旦离开,Bot就失去了访问权限,自然查不到。
  • 你传的ID格式不对:别把用户名(@xxx)当成用户ID传啊!必须用纯数字的用户ID,要是传了其他格式,API肯定给你报错。
  • Bot没权限碰这个用户:Telegram对Bot的权限管得很严,Bot只能查两种用户的信息:要么是Bot所在群组/频道里的成员,要么是已经和Bot私聊过的用户。用户离开群后又没和Bot聊过?那Bot根本没资格查人家状态。

靠谱的解决办法

  • 提前存状态,靠事件推送:这是最稳的方式!用户进群的时候,你记录好ID;等Telegram主动推chat_member事件(用户离开/被踢的时候会触发),直接把状态改成Left/Kicked就行,完全不用事后调用getChatMember。
  • 先试探能不能互动:如果非得查,可以先给用户发一条轻量的消息(比如“你已离开XX群,如有疑问可联系我”),要是消息发成功了,说明Bot能访问用户信息,再去调用getChatMember。不过这种方式可能打扰用户,得谨慎用。
  • 先校验ID格式:调用API前先检查下用户ID是不是纯数字,用个简单的正则^[0-9]+$就能搞定,避免低级错误。

官方文档早就明确说明

Telegram官方文档提到:如果目标用户不在指定聊天里,而且Bot没有该用户的联系人权限,调用getChatMember就会返回USER_ID_INVALID错误。这是隐私机制限制,不是Bug哦。

所以核心思路就是别等用户走了再去查,而是在用户状态变化的时候直接记录,既符合平台规则,效率也更高。

内容的提问来源于stack exchange,提问作者Axel Magagnini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:15:38