如何获取特定用户的Telegram chat_id?

时间:2015-06-26 17:16:31

标签: telegram-bot

如何在Telegram bot API中获取用户chat_id? 文档说:

  

整数|邮件收件人的唯一标识符 - User或GroupChat id

8 个答案:

答案 0 :(得分:34)

我创建了一个bot来获取User或GroupChat id, 只需将/my_id发送到电报机器人@get_id_bot

它不仅适用于用户聊天ID,也适用于群聊ID。

要获取群组聊天ID,首先您必须将群组添加到群组, 然后在小组中发送/my_id

Here是机器人的链接。

答案 1 :(得分:30)

您通过getUpdates收到的消息更新,或者您的webhook将包含特定消息的聊天ID。它将包含在message.chat.id密钥下。

这似乎是您能够检索聊天ID的唯一方法。因此,如果您想要编写机器人启动对话的内容,您可能必须在某种键 - >值存储(如MemCache或Redis)中存储与用户相关的聊天ID。

我相信他们的文档提出了类似的内容,https://core.telegram.org/bots#deep-linking-example。您可以使用深层链接发起对话,而无需用户先输入消息。

答案 2 :(得分:7)

您可以与机器人分享联系人,通过/ getUpdates,您可以获得“联系”对象

答案 3 :(得分:5)

使用Perl API,您可以通过以下方式获取:首先从Telegram向bot发送消息,然后发出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

希望这有帮助

答案 4 :(得分:5)

有一个机器人在开始对话时会回显您的聊天ID。

只需搜索@Test @DisplayName ( "NameGoesHere" ) void parse () { // ------| Arrange |-------------------------- // ------| Act |------------------------------ // ------| Assert |--------------------------- } ,然后点击BODY。它将回显您的聊天ID。

Chat id bot screenshot

答案 5 :(得分:3)

首先,在包含您的漫游器的聊天室中发布一条消息(频道,群组提及该漫游器或一对一聊天)。然后,只需运行:

curl https://api.telegram.org/bot<TOKEN>/getUpdates | jq

如果您没有安装jq,请随意删除| jq部分,它仅对漂亮的打印有用。你应该得到这样的东西:

enter image description here

您可以在返回的json对象中看到聊天ID,以及聊天名称和相关消息。

答案 6 :(得分:1)

直接从documentation退出:

假设网站example.com想通过Telegram机器人向其用户发送通知。他们可以为ID为123的用户启用通知。

  1. 使用合适的用户名创建漫游器,例如@ExampleComBot
  2. 设置传入消息的网络挂钩
  3. 生成足够长度的随机字符串,例如$ memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
  4. 使用键$ memcache_key将值123放入Memcache中3600秒(一小时)
  5. 向我们的用户显示按钮https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
  6. 配置Webhook处理器以使用以/start开头的传入消息中传递的参数查询Memcached。如果密钥存在,请将传递给Webhook的chat_id记录为用户123的telegram_chat_id。从内存缓存中删除密钥。
  7. 现在,当我们想向用户123发送通知时,请检查他们是否具有字段telegram_chat_id。如果是,请使用Bot API中的sendMessage方法向他们发送电报消息。

答案 7 :(得分:0)

每当用户与机器人通信时,它都会发送如下信息:

$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。