【问题标题】:Does incoming message sent to Telegram Bot contain any id of that bot?发送到 Telegram Bot 的传入消息是否包含该机器人的任何 ID?
【发布时间】:2016-08-06 19:45:48
【问题描述】:

当我从电报机器人获得更新,用户消息写入机器人时,我希望看到带有用户 ID 的机器人 ID,但是,我看到了这样的更新:

Update{update_id=515450315, 
    message=Message{message_id=117, 
       from=User{id=1234567890, first_name='Name', last_name='Surname', username='null'}, 
       date=1470510167, 
       chat=Chat{id=1234567890, type=Private, first_name='Name', last_name='Surname', username='null', title='null'},
       ...

正如文档所说,User 是消息的发送者(用户或机器人)。但在这种情况下,用户 ID 是实际用户 ID(不是机器人 ID),并且出于某种原因聊天 ID 等于用户 ID。那么有人知道如何在更新对象期间获取机器人 ID 吗?

【问题讨论】:

    标签: telegram telegram-bot


    【解决方案1】:

    这是一个JSON 对象,当用户向机器人发送消息时,机器人会收到电报。(我从你的问题中了解到)

    这完全正常。你问为什么? 有两个原因:

    1- 当USER 向机器人发送内容时,首先Telegram 服务器抓取 并将其重新发送到自己服务器上的bot 应用程序。所以这个JSON 对象 逻辑上包含发件人(用户)ID。(为什么?)它是user_id 而不是 bot_id 因为bot 接收消息并且应该知道是谁发送的 它。这个号码(user_id)告诉bot关于发件人。

    2- 为什么chat_iduser_id(sender) 是相等的?因为当用户是 在与机器人的私人消息中,他/她在私人聊天中发送给机器人,所以 这两个数字是相等的,但是当用户在一个组中发送一些东西时 你的机器人也是它的成员,有两个不同的数字: chat_id 代表group_id 这里和user_id(sender_id) 告诉你的机器人是谁发送了消息。

    我们可以使用这两个数字的相等性检查来找出用户是在与机器人私聊还是在群中发送。

    而且我不知道从Telegram 发送到Bot 的任何JSON 对象都包含关于bot_id 的任何字段。除了一些特定的方法,如getMe 方法。(它返回有关您的机器人的基本信息)

    【讨论】:

    • 那么,我是否正确,无法检查消息是来自通过机器人的用户还是直接来自用户?
    • @sphinks 你的问题我不清楚,请解释一下。 a user passing a bot 是什么?
    • 我的意思是这样的情况:用户向机器人写一些消息,机器人将其传递给后端。据我了解,该机器人未在消息对象中提供消息已通过 bo 的任何信息。
    • @sphinks ,所有消息都来自电报服务器到您的 BOT。所有这些都是从私人聊天或群聊(或在不久的将来从频道)发起的。 Bot 就像一个虚拟用户。当某人向 bot 发送一些东西时,这类似于他/她向朋友发送一些东西,但是 Bot 可以处理和做一些事情。我没有听到关于传递机器人等的任何信息。 [用户/组...][电报服务器][你的机器人]
    • 似乎我有一个误导性的评论:) 我知道机器人只是另一个用户,可能有用于输入响应的自动脚本。我在问机器人是否放置了一些 uniq id,因此在消息处理过程中服务器端可能会发现此消息来自特定机器人,以防我们为多个机器人使用相同的 webhook 并汇集来自多个机器人的更新对象.据我从您的回答中了解到,这是不可能的:我们只能从更新对象中获取正在写入的用户的 id。
    猜你喜欢
    • 2018-05-17
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多