Telegram 机器人在启动时通过 webhook 发送“my_chat_member”对象而不是“message”对象

问题描述 投票:0回答:3

我有一个电报机器人,用户可以在其中发送 /start 命令,我将通过网络挂钩在我的服务器上接收此命令。在 99% 的情况下,来自电报的请求如下所示:

{
   "update_id":99999999,
   "message":{
      "message_id":9999,
      "from":{
         "id":999999999,
         "is_bot":false,
         "first_name":"first_name",
         "last_name":"last_name",
         "language_code":"code"
      },
      "chat":{
         "id":99999999,
         "first_name":"first_name",
         "last_name":"last_name",
         "type":"private"
      },
      "date":1665383118,
      "text":"/start",
      "entities":[
         {
            "offset":0,
            "length":6,
            "type":"bot_command"
         }
      ]
   }
}

该对象是“消息”,我在那里有一个文本“/start”。

但有时,一些以前没有使用过此机器人的新用户在从电报发送启动请求时看起来像这样:

{
   "update_id":999999999,
   "my_chat_member":{
      "chat":{
         "id":999999999,
         "first_name":"first_name",
         "type":"private"
      },
      "from":{
         "id":999999999,
         "is_bot":false,
         "first_name":"first_name",
         "language_code":"code"
      },
      "date":1665381194,
      "old_chat_member":{
         "user":{
            "id":8888888888,
            "is_bot":true,
            "first_name":"bot_name",
            "username":"bot_name"
         },
         "status":"member"
      },
      "new_chat_member":{
         "user":{
            "id":8888888888,
            "is_bot":true,
            "first_name":"bot_name",
            "username":"bot_name"
         },
         "status":"kicked",
         "until_date":0
      }
   }
}

未从该用户收到对象“my_chat_member”和“start”命令。

iPhone、Android、PC、Web 上的用户都会发生这种情况。 我不明白为什么会发生这种情况以及如何解决。

telegram telegram-bot
3个回答
1
投票

消息类型“my_chat_member”表示被描述为“from”的某人想要取消订阅机器人。 "status":"kicked" 说得一样。在这里https://core.telegram.org/bots/api您可以阅读获取更新主题


0
投票

问题出在我的服务器端。我使用 int32 作为用户和聊天的 ID,但它们可以更大。使用正确的类型解决了问题。


0
投票

我也有同样的情况。我不明白这种行为的原因是什么。 几个月前还好。 但现在我收到了 my_chat_member 更新,其中 new_chat_member.status == 'kicked'。 我通过方法 getChatMember 检查真实状态并收到 status == 'member'

我收到大约 15% 的 my_chat_member 更新,状态正确:new_chat_member.status == 'member'getChatMember status == 'member'。 85% 的 my_chat_member 更新了错误的状态:new_chat_member.status == 'kicked'getChatMember status == 'member'

原因是什么?

© www.soinside.com 2019 - 2024. All rights reserved.