How to obtain Telegram chat_id for a specific user?

前端 未结 7 1423
自闭症患者
自闭症患者 2020-12-01 02:36

How to obtain user chat_id in Telegram bot API? The documentation says:

Integer | Unique identifier for the message recipient — User or G

相关标签:
7条回答
  • 2020-12-01 03:01

    First, post a message in a chat where your bot is included (channel, group mentioning the bot, or one-to-one chat). Then, just run:

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

    Feel free to remove the | jq part if your dont have jq installed, it's only useful for pretty printing. You should get something like this:

    You can see the chat ID in the returned json object, together with the chat name and associated message.

    0 讨论(0)
  • 2020-12-01 03:03

    You can just share the contact with your bot and, via /getUpdates, you get the "contact" object

    0 讨论(0)
  • 2020-12-01 03:04

    Using the Perl API you can get it this way: first you send a message to the bot from Telegram, then issue a getUpdates and the chat id must be there:

    #!/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";
    

    The id should be in chat_id but it may depend of the result, so I also added a dump of the whole result.

    You can install the Perl API from https://github.com/Robertof/perl-www-telegram-botapi. It depends on your system but I installed easily running this on my Linux server:

    $ sudo cpan WWW::Telegram::BotAPI
    

    Hope this helps

    0 讨论(0)
  • 2020-12-01 03:10

    Straight out from the documentation:

    Suppose the website example.com would like to send notifications to its users via a Telegram bot. Here's what they could do to enable notifications for a user with the ID 123.

    1. Create a bot with a suitable username, e.g. @ExampleComBot
    2. Set up a webhook for incoming messages
    3. Generate a random string of a sufficient length, e.g. $memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
    4. Put the value 123 with the key $memcache_key into Memcache for 3600 seconds (one hour)
    5. Show our user the button https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
    6. Configure the webhook processor to query Memcached with the parameter that is passed in incoming messages beginning with /start. If the key exists, record the chat_id passed to the webhook as telegram_chat_id for the user 123. Remove the key from Memcache.
    7. Now when we want to send a notification to the user 123, check if they have the field telegram_chat_id. If yes, use the sendMessage method in the Bot API to send them a message in Telegram.
    0 讨论(0)
  • 2020-12-01 03:13

    I created a bot to get User or GroupChat id, just send the /my_id to telegram bot @get_id_bot.

    It does not only work for user chat ID, but also for group chat ID.

    To get group chat ID, first you have to add the bot to the group, then send /my_id in the group.

    Here's the link to the bot.

    0 讨论(0)
  • 2020-12-01 03:17

    The message updates you receive via getUpdates or your webhook will contain the chat ID for the specific message. It will be contained under the message.chat.id key.

    This seems like the only way you are able to retrieve the chat ID. So if you want to write something where the bot initiates the conversation you will probably have to store the chat ID in relation to the user in some sort of key->value store like MemCache or Redis.

    I believe their documentation suggests something similar here, https://core.telegram.org/bots#deep-linking-example. You can use deep-linking to initiate a conversation without requiring the user to type a message first.

    0 讨论(0)
提交回复
热议问题