我试图找出超组中是否存在特定的User
,以便跟踪那些离开的人。
为此,我为每个getChatMember
调用Bot API方法User
,并检查它们的状态是Left
还是Kicked
。但是,我注意到(最近?)我收到了许多在 super 组中或过去的,然后离开的有效用户的USER_ID_INVALID
错误。我还确认了那些帐户在Telegram上仍为且仍处于 Activity 状态。
这是我发送的HTTP请求:
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}
这是我得到的回应:
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"}
无论从哪种角度看,它对我来说都是一个完全有效的要求。而且我还没有找到引发此错误的用户之间的共同模式。
我在这里想念什么?
编辑:正如@sean所指出的那样,让其中一个用户向该机器人发送消息会自动为该特定用户修复错误。 但我绝对可以确定该用户之前曾见过,因为这就是我获得其用户ID 的方式。是什么原因导致漫游器“忘记”了他,我又如何防止这种情况将来发生?
最佳答案
此错误表示您的漫游器之前没有看到过此用户。
例如,我的用户ID为109780439
,您可以尝试使用getChatMember
的@PublicTestGroup
,它应该以 400错误响应。
然后,将我的邮件的任意(例如this)转发到您的机器人,您将看到不同的结果:)