Telegram Bot API:getChatMember为有效用户抛出USER_ID_INVALID

时间:2018-04-20 05:14:55

标签: api telegram telegram-bot bad-request

我试图找出超级组中是否存在特定的User,以便跟踪那些离开的人。

为此,我为每个getChatMember调用了Bot API方法User,并检查其状态是Left还是Kicked。但是,我注意到(最近?)我在许多有效用户中遇到USER_ID_INVALID错误,这些用户位于超级组中,或者已经过去然后离开了。我还确认这些帐户在Telegram上仍然有效

这是我发送的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的方式。什么可能导致机器人“忘记”他,以及我将来如何防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

此错误表示您的机器人以前没有看到此用户。

例如,我的用户ID为109780439,您可以使用getChatMember尝试@PublicTestGroup,它应该以 400错误进行回复。

然后,将我的消息 ANY (例如,this)转发给您的机器人,您会看到不同的结果:)

答案 1 :(得分:0)

您将创建一个变量来获取您频道的结果,如下所示:

$join : api.telegram.org/botYOURTOKEN/getchat .....

if($message && (strpos($join,'"status":"left"') or strpos($join,'"Bad Request: USER_ID_INVALID"') or strpos($join,'"status":"kicked"'))!== false) {
}