问题
I'm trying to find out if a specific User
is present in a supergroup, in order to keep track of those who left.
For that, I'm calling the Bot API method getChatMember
for each User
and checking if their status is either Left
or Kicked
. However, I noticed that (recently?) I'm getting USER_ID_INVALID
errors for many valid users that are either in the supergroup or have been in the past and then left. I also confirmed that those accounts are still active on Telegram.
Here's the HTTP request I'm sending:
POST https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXX/getChatMember HTTP/1.1
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 46
Host: api.telegram.org
{"chat_id":-0000000000000,"user_id":000000000}
And here's the response I'm getting:
HTTP/1.1 400 Bad Request
Server: nginx/1.12.2
Date: Fri, 20 Apr 2018 04:17:32 GMT
Content-Type: application/json
Content-Length: 74
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
{"ok":false,"error_code":400,"description":"Bad Request: USER_ID_INVALID"}
Any way I look at it, it looks like a perfectly valid request to me. And I haven't been able to find a common pattern between the users that throw this error.
What am I missing here?
EDIT: As @sean pointed out, having one of those users message the bot privately fixed the error for that particular user. But I'm absolutely sure that user was seen before because that's how I got his user ID. What could have caused the bot "forget" about him and how would I prevent this from happening in the future?
回答1:
This error means your bot haven't seen this user before.
For instance, my user ID is 109780439
, you can try getChatMember
with @PublicTestGroup
, it should response with 400 error.
And then, forward ANY of my message (e.g., this) to your bot, you will see the different result :)
来源:https://stackoverflow.com/questions/49934454/telegram-bot-api-getchatmember-throws-user-id-invalid-for-valid-user