如何获取特定用户的 Telegram chat_id?
Posted
技术标签:
【中文标题】如何获取特定用户的 Telegram chat_id?【英文标题】:How to obtain Telegram chat_id for a specific user? 【发布时间】:2015-09-13 17:37:09 【问题描述】:如何在 Telegram bot API 中获取用户chat_id
?
文档说:
整数 |消息接收者的唯一标识符 - 用户或 GroupChat id
【问题讨论】:
我刚刚注意到做了一些测试,私人聊天 chat_id 和 from_user.id 是相同的。假设这是一条规则(我还没有找到一些参考资料),如果您找到他的 user_id(可能来自群组中的更新),您可以私下与他聊天。有人可以反驳吗? 我也有同样的问题!但无需用户向我发送消息。 根据 Telegram 网站的说法,“机器人无法与用户发起对话。用户必须先将他们添加到群组中或先向他们发送消息。”请阅读此内容以获取更多信息:core.telegram.org/bots/#4-how-are-bots-different-from-humans 【参考方案1】:您通过 getUpdates
或您的 webhook 收到的消息更新将包含特定消息的聊天 ID。它将包含在message.chat.id
键下。
这似乎是您能够检索聊天 ID 的唯一方法。因此,如果您想在机器人发起对话的地方编写一些内容,您可能必须将与用户相关的聊天 ID 存储在某种 key->value 存储中,例如 MemCache 或 Redis。
我相信他们的文档在这里提出了类似的建议,https://core.telegram.org/bots#deep-linking-example。您可以使用深层链接来发起对话,而无需用户先输入消息。
【讨论】:
是的,我同意。 Bot 能够将用户数据和 ID 存储在持久存储中,以连续发起不请自来的“对话”。顺便说一句,据我所知,chat_ID 是唯一的。 在深层链接下提到:'Show our user the button telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA' 如何显示一个按钮? 只有当您必须将 Telegram 用户与您的网站/服务的用户(在您的数据库中)相关联时,才需要深度链接。如果您只是想让用户让机器人知道他的存在并希望从机器人接收一些东西,那么标准的 telegram.me/TheBot 链接就可以了。 @kb0000 这是一个链接,您可以决定在哪里以及如何向用户显示它 因此,如果我想向 /start-ed 我的机器人的所有用户发送消息,我必须将他们的 chat_id 存储在我的本地存储中吗?我不能从机器人中获取所有“订阅”的 ID? 你必须将所有的chat_ids存储在你的机器人大脑中(使用redis大脑进行持久化)。据我所知,没有办法通过他们的 API 检索“订阅”用户。【参考方案2】:我创建了一个机器人来获取 User 或 GroupChat id,
只需将/my_id
发送到电报机器人@get_id_bot
。
不仅适用于用户聊天ID,也适用于群聊ID。
要获取群聊 ID,首先您必须将机器人添加到群中,
然后在群里发/my_id
。
Here 是机器人的链接。
【讨论】:
您也可以将您的电报联系人分享给@get_id_bot 以显示他们的chat_id 太棒了,谢谢,但它不断向我发送垃圾邮件,我该如何阻止它? @fmalaussena:对不起,我已经修好了,...谢谢 确实如此。让我补充一下你的答案,修复很快就来了。谢谢。 谢谢,发送 /my_id 到 @get_id_bot bot 是获取聊天 ID 的最简单方法。【参考方案3】:有一个机器人会在开始对话时回显您的聊天 ID。
只需搜索@chatid_echo_bot
并点击/start
。它会回显您的聊天 ID。
另一个选项是@getidsbot
,它可以为您提供更多信息。如果您将消息转发到机器人,该机器人还会提供有关转发消息(从用户、到用户、乍得 ID 等)的信息。
【讨论】:
似乎没有更多的工作。这个电报名称似乎不属于机器人,而是属于普通用户。 @AxelBeckert,我的错。我写错了名字,应该是@chatid_echo_bot
。刚刚检查过,它是一个机器人并且可以工作。
将@chatid_echo_bot
添加到群组会立即告诉您聊天ID!非常感谢!【参考方案4】:
首先,在包含您的机器人的聊天中发布消息(频道、提及机器人的群组或一对一聊天)。然后,只需运行:
curl https://api.telegram.org/bot<TOKEN>/getUpdates | jq
如果您没有安装 jq,请随意删除 | jq
部分,它只对漂亮的打印有用。你应该得到这样的东西:
您可以在返回的 json 对象中看到聊天 ID,以及聊天名称和相关消息。
【讨论】:
/getUpdates 返回 chat.id 但 webhook 不返回它只是返回 NULL。在这里检查我的问题:***.com/q/68815736/10302693"ok":false,"error_code":404,"description":"Not Found"%
【参考方案5】:
您可以与您的机器人共享联系人,然后通过 /getUpdates 获得“联系人”对象
【讨论】:
【参考方案6】:使用 Perl API,您可以通过以下方式获取它:首先您从 Telegram 向机器人发送消息,然后发出 getUpdates 并且聊天 ID 必须存在:
#!/usr/bin/perl
use Data::Dumper;
use WWW::Telegram::BotAPI;
my $TOKEN = 'blablabla';
my $api = WWW::Telegram::BotAPI->new (
token => $TOKEN
) or die "I can't connect";
my $out = $api->api_request ('getUpdates');
warn Dumper($out);
my $chat_id = $out->result->[0]->message->chat->id;
print "chat_id=$chat_id\n";
id 应该在 chat_id 中,但它可能取决于结果,所以我还添加了整个结果的转储。
您可以从https://github.com/Robertof/perl-www-telegram-botapi 安装 Perl API。这取决于你的系统,但我很容易在我的 Linux 服务器上安装运行它:
$ sudo cpan WWW::Telegram::BotAPI
希望对你有帮助
【讨论】:
【参考方案7】:直接出documentation:
假设网站 example.com 想通过 Telegram 机器人向其用户发送通知。下面是他们可以为 ID 为 123 的用户启用通知的方法。
-
使用合适的用户名创建机器人,例如@ExampleComBot
为传入消息设置 webhook
生成足够长的随机字符串,例如$
memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
将值 123 和键 $memcache_key 放入 Memcache 3600 秒(一小时)
向我们的用户显示按钮https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
将 webhook 处理器配置为使用传入消息中以/start
开头的参数来查询 Memcached。如果密钥存在,则将传递给 webhook 的 chat_id 记录为用户 123 的 telegram_chat_id。从 Memcache 中删除密钥。
现在,当我们要向用户 123 发送通知时,请检查他们是否有字段 telegram_chat_id
。如果是,请使用 Bot API 中的 sendMessage
方法在 Telegram 中向他们发送消息。
【讨论】:
【参考方案8】:每当用户与机器人通信时,它都会发送如下信息:
$response =
"update_id":640046715,
"message":
"message_id":1665,
"from":"id":108177xxxx,"is_bot":false,"first_name":"Suresh","last_name":"Kamrushi","language_code":"en",
"chat":"id":108xxxxxx,"first_name":"Suresh","last_name":"Kamrushi","type":"private",
"date":1604381276,
"text":"1"
所以你可以像这样访问聊天:$update["message"]["chat"]["id"]
假设您使用的是 php。
【讨论】:
【参考方案9】:chat_id 只不过是用户的 id(电报用户帐户 id)。您可以与@get_my_chat_id_bot
开始聊天。它会将您的 chat_id(您的 user_id)发回给您。
常用的id有以下几种:channel id、group id、bot id、chat id(user id)。
【讨论】:
以上是关于如何获取特定用户的 Telegram chat_id?的主要内容,如果未能解决你的问题,请参考以下文章