47

I am using the telepot python library, I know that you can send a message when you have someone's UserID(Which is a number). I wanna know if it is possible to send a message to someone without having their UserID but only with their username(The one which starts with '@'), Also if there is a way to convert a username to a UserID.

ATheCoder
  • 958
  • 1
  • 9
  • 20
  • Possible duplicate of [How to obtain Telegram chat\_id for a specific user?](http://stackoverflow.com/questions/31078710/how-to-obtain-telegram-chat-id-for-a-specific-user) – koalo Jan 15 '17 at 19:21
  • 1
    I don't think this is a duplicate - this question is formulated more generally, to find the other question you have to know that you need a "chat_id" in the first place. – rob74 Sep 20 '18 at 12:03

7 Answers7

88
  1. Post one message from User to the Bot.
  2. Open https://api.telegram.org/bot<Bot_token>/getUpdates page.
  3. Find this message and navigate to the result->message->chat->id key.
  4. Use this ID as the [chat_id] parameter to send personal messages to the User.
Andrey Radomanov
  • 1,777
  • 1
  • 13
  • 6
  • 8
    Note: the first message NEEDS to be sent via phone not desktop :( https://stackoverflow.com/questions/43880243/new-telegram-bot-return-almost-empty-json-to-api – Krzysztof Kaczor Sep 12 '20 at 21:49
  • 1
    The privacy of the bot much be changed to disabled so it works with desktop messages. – Jack Apr 08 '23 at 05:35
19

It is only possible to send messages to users whom have already used /start on your bot. When they start your bot, you can find update.message.from.user_id straight from the message they sent /start with, and you can find update.message.from.username using the same method. In order to send a message to "@Username", you will need them to start your bot, and then store the username with the user_id. Then, you can input the username to find the correct user_id each time you want to send them a message.

Resin Drake
  • 528
  • 4
  • 9
17

You can't send message to users using their username that is in form of @username, you can just send messages to channel usernames which your bot is administrator of it. Telegram bot api uses chat_id identifier for sending messages. If you want to achieve chat_id of users, you can use telegram-cli, but it's not easy at all because that project is discontinued and you should debug it yourself. in your case you should do following command:

> resolve_username vahid_mas

and the output will be something like this:

{
  "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"
}
GameO7er
  • 2,028
  • 1
  • 18
  • 33
Vahid Msm
  • 1,032
  • 7
  • 16
8

As the user you want to learn the ID of, send a message of any content to @JsonDumpBot. It will reply the whole JSON element that it receives from Telegram, including the ID of the user:

enter image description here

Judge
  • 644
  • 8
  • 11
0

It's totally not safe to use other telegram versions available on internet, but I've seen that Telegram Plus has a ability to show you the chat_id of the user in their profile, even tho you don't have their contact.

Another way to extract chat_id of that particular user is that you have the phone number of that account, save it as your contact, then share it to this bot. It's easy to code it yourself but you can forward something from that user to this bot too, if you want to recieve the chat_id.

urmurmur has also mentioned another way. I haven't checked it yet but seems to be interesting.

0

Maybe you can try telethon:

from telethon import TelegramClient

def send_msg(name, msg):
    with TelegramClient(session_file, app_id, app_hash, proxy=my_proxy) as client:
        # client.loop.run_until_complete(client.send_message('me', 'hello')) # send 'hello' to saved messages
        client.loop.run_until_complete(client.send_message(name, msg))

"name" can be "@xxxxx".

Then you can call send_msg(name, msg) in your bot.

  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Nov 04 '22 at 14:55
0

you can send bulk messages to people in telegram using by v-user telegram bulk message sender

omid
  • 1