如何使用我的电报机器人使用他们的用户名向某人发送消息

Posted

技术标签:

【中文标题】如何使用我的电报机器人使用他们的用户名向某人发送消息【英文标题】:How can I send a message to someone with my telegram bot using their Username 【发布时间】:2017-05-30 14:35:39 【问题描述】:

我正在使用 Telepot python 库,我知道当你有某人的用户 ID(这是一个数字)时,你可以发送消息。 我想知道是否可以在没有用户 ID 而仅使用用户名(以“@”开头的用户名)的情况下向某人发送消息,以及是否有办法将用户名转换为用户 ID。

【问题讨论】:

How to obtain Telegram chat_id for a specific user?的可能重复 我不认为这是重复的——这个问题的表述更笼统,要找到另一个问题,你必须首先知道你需要一个“chat_id”。 【参考方案1】:
    将用户的一条消息发布到机器人。 打开https://api.telegram.org/bot<Bot_token>/getUpdates页面。 找到此消息并导航到 result->message->chat->id 键。 使用此 ID 作为 [chat_id] 参数向用户发送个人消息。

【讨论】:

注意:第一条消息需要通过手机而不是桌面发送:(***.com/questions/43880243/…【参考方案2】:

只能向已在您的机器人上使用 /start 的用户发送消息。当他们启动您的机器人时,您可以直接从他们发送 /start 的消息中找到 update.message.from.user_id,您可以使用相同的方法找到 update.message.from.username。 为了向“@Username”发送消息,您需要它们来启动您的机器人,然后使用 user_id 存储用户名。然后,您可以在每次要向他们发送消息时输入用户名以找到正确的 user_id。

【讨论】:

【参考方案3】:

您不能使用@username 形式的用户名向用户发送消息,您只能向您的机器人管理员的频道用户名发送消息。 Telegram bot api 使用chat_id 标识符来发送消息。如果你想达到chat_id的用户,你可以使用telegram-cli,但是这并不容易,因为那个项目已经停产了,你应该自己调试。 在您的情况下,您应该执行以下命令:

> resolve_username vahid_mas

输出会是这样的:


  "user": 
    "username": "Vahid_Mas",
    "id": "$010000006459670b02c0c7fd66d44708",
    "last_name": "",
    "peer_type": "user",
    "print_name": "Vahid",
    "flags": 720897,
    "peer_id": 191322468,
    "first_name": "Vahid",
    "phone": "xxxxxxx"
  ,
  "online": false,
  "event": "online-status",
  "state": -1,
  "when": "2017-01-22 17:43:16"

【讨论】:

哟,截至2022年还有其他方法吗?我无法让它工作。【参考方案4】:

作为您要了解其ID的用户,将任何内容的消息发送到@JsonDumpBot。它将回复从 Telegram 收到的整个 JSON 元素,包括用户的 ID:

【讨论】:

【参考方案5】:

使用互联网上提供的其他电报版本完全不安全,但我看到Telegram Plus 能够在他们的个人资料中向您显示用户的 chat_id,即使您没有他们的联系方式。

提取该特定用户的 chat_id 的另一种方法是,您拥有该帐户的电话号码,将其保存为您的联系人,然后将其分享给 this bot。自己编写代码很容易,但如果您想接收 chat_id,您也可以将该用户的内容转发给该机器人。

urmurmur 还提到了另一种方式。我还没有检查它,但似乎很有趣。

【讨论】:

以上是关于如何使用我的电报机器人使用他们的用户名向某人发送消息的主要内容,如果未能解决你的问题,请参考以下文章

PHP电报机器人:从id.txt向所有用户发送消息

如何使用电报机器人 api 在群聊中接收消息

我无法在电报 api 中使用强制回复

如何限制对电报机器人的访问

如何发出一个 DM 某人但它可以忽略特定用户的命令?

使用电报机器人 api、python 3 和 JobQueue 将消息发送到通道的方法