如何检测用户是否删除Telegram Bot聊天?

如何检测用户是否删除Telegram Bot聊天?,telegram,telegram-bot,Telegram,Telegram Bot,是否可以通过API检查是否有人删除了Bot聊天电报 我的测试:当前如果用户删除聊天,新消息不会停止发送给用户。否。只有在向用户发送内容时出错 如果用户阻止聊天,即使调用sendChatAction方法也不会返回错误: $ curl https://api.telegram.org/bot***/sendChatAction -d 'chat_id=7975895' -d "action=typing" {"ok":true,"result":true} $curlhttps://api.tele

是否可以通过API检查是否有人删除了Bot聊天电报


我的测试:当前如果用户删除聊天,新消息不会停止发送给用户。

否。只有在向用户发送内容时出错

如果用户阻止聊天,即使调用sendChatAction方法也不会返回错误:

$ curl https://api.telegram.org/bot***/sendChatAction -d 'chat_id=7975895' -d "action=typing" {"ok":true,"result":true} $curlhttps://api.telegram.org/bot***/sendChatAction-d'chat\u id=7975895'-d“action=typing” {“确定”:正确,“结果”:正确} $curlhttps://api.telegram.org/bot***/sendMessage-d'chat_id=81083738'-d“text=ololo” {“ok”:false,“error_code”:403,“description”:“[错误]:Bot被用户阻止”}
您可以获取
getChat
method()。如果用户停止并阻止bot,此方法返回
403
status

其他答案中的某人建议使用getChat方法

出于两个原因,请勿使用它:

  • 即使它们可以返回一些特殊错误,它们也可以随时更改。相反,任何发送方法都应该是安全的!(这是我几个月前联系官方支持部门得到的答案)
  • 从我的使用情况来看,我知道getChat结果可能会被缓存很多周,并且不会有一个安全的结果。i、 即使在他们从群中踢出机器人一个月后,我仍然能够使用getChat定期获得群的结果
那你能做什么呢?您可以使用send方法,我建议您使用sendChatAction,这样您就不会打扰用户

您可以处理异常并检查返回的错误代码(403是这种情况下的错误)。此外,在我写这个答案的时候,如果用户阻止了bot,返回的字符串包含单词“blocked”,而如果他删除了帐户,字符串包含单词“deactivated”

例如,对于我的机器人,我开发了一个自动按时间间隔运行的函数,它有一个For循环,并尝试向每个用户发送chataction。我检查错误代码(403用于此),并检查错误文本。如果它包含“已阻止”,我只是在数据库中将该用户标记为已阻止,因为我希望保留首选项,否则如果它包含“已停用”,我将从数据库中删除该用户。 我这样做是为了统计我的机器人有多少用户,以及有多少用户没有阻止机器人。
如果要执行类似操作,请记住在for循环中添加睡眠,因为在达到限制之前,每秒只能使用30个sendChatAction。

这通过新的电报更新解决:

2021年3月9日 机器人API 5.1

添加了两种新的更新类型

添加了有关聊天中成员状态更改的更新,由ChatMemberUpdated类和更新类中的my_chat_成员和chat_成员字段表示。bot必须是聊天中的管理员才能接收有关其他聊天成员的聊天成员更新。默认情况下,只有my_chat_成员更新有关e机器人本身被接收


更改日志链接:

谢谢,你对我的测试有什么想法吗?你可以继续发送消息,希望用户能够解锁你的bot。删除聊天记录后,似乎需要几分钟时间才能将其传播到所有服务器。我可以声明sendChatAction非常适用于此,如果用户阻止了bot,则正确返回即使他删除了该帐户。请检查我在此问题帖子中的答案。这是不正确的。您仍将收到聊天数据。对于我,sendChatAction返回异常仅适用于被阻止的bot,对于已删除的bot,它返回所有操作的true。这可能意味着API从此时起已更改。 $ curl https://api.telegram.org/bot***/sendMessage -d 'chat_id=81083738' -d "text=ololo" {"ok":false,"error_code":403,"description":"[Error]: Bot was blocked by the user"}