我试图找出超级组中是否存在特定的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的方式。什么可能导致机器人“忘记”他,以及我将来如何防止这种情况发生?
答案 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) {
}