Roman Podpryatov
Roman Podpryatov

Reputation: 4771

Telegram Bot - how to get a group chat id?

I've been using telegram_bot, and trying to get groupChat id to send notifications to group chat, but don't know which methods I have to use for it.

For getting chat id I use to message.chat.id when the bot participated in the chat but which I have to use for getting group chat id can't find/

Upvotes: 477

Views: 1336012

Answers (22)

Maverick_Java
Maverick_Java

Reputation: 6799

In order to get the group chat id, do as follows:

  1. Add the Telegram BOT to the group.

  2. Message your bot in the group. E.g. if your bot is called ExampleBot, send a message from your personal account @ExampleBot /start to the group. Prior to this your bot does not have access to the messages in the chat.

  3. Get the list of updates for your BOT:

https://api.telegram.org/bot<YourBOTToken>/getUpdates

Ex:

https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
  1. Look for the "chat" object:
{
    "update_id": 8393,
    "message": {
        "message_id": 3,
        "from": {
            "id": 7474,
            "first_name": "AAA"
        },
        "chat": {
            "id": <group_ID>,
            "title": "<Group name>"
        },
        "date": 25497,
        "new_chat_participant": {
            "id": 71, 
            "first_name": "NAME",
            "username": "YOUR_BOT_NAME"
        }
    }
}

This is a sample of the response when you add your BOT into a group.

  1. Use the "id" of the "chat" object to send your messages (always negative?).

  2. (If you created the new group with the bot and you only get {"ok":true,"result":[]}, remove and add the bot again to the group)

  3. Private chart only works in image argoprojlabs/argocd-notifications:v1.1.0 or above.

Upvotes: 665

danrodz
danrodz

Reputation: 106

I successfully retrieved all my dialog's IDs (channels, groups, personal chats) in Telegram using Python and the Telethon library.

To install Telethon with pip:

pip install telethon

Modify the following code snippet (adapted from the Telethon Documentation):

from telethon import TelegramClient

# Replace `YOUR_API_ID` and `YOUR_API_HASH`
api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'

# Create a Telegram client session
client = TelegramClient('anon', api_id, api_hash)

async def main():
    # Iterate through all the dialogs
    async for dialog in client.iter_dialogs():
        # Printing the name and ID of each dialog
        print(dialog.name, 'has ID', dialog.id)

# Running the client
if __name__ == '__main__':
    with client:
        client.loop.run_until_complete(main())

Save the script and run it from your terminal:

python telegram_script.py

This script will print all the names and IDs for all your personal chats, groups, and channels.

Be sure to replace 'YOUR_API_ID' and 'YOUR_API_HASH' with your actual Telegram API ID and hash as found in your my.telegram.org.

Upvotes: 2

Bitler
Bitler

Reputation: 63

Settings -> Advanced -> Experimental Settings -> Enable "Show Peer IDs in Profile"

An ID would appear at last line of chat description. (with italics formatting and click-to-copy ID)

https://github.com/telegramdesktop/tdesktop/blob/c0db5ee98ab3b536389d6bde0363c1030f7f5d87/Telegram/SourceFiles/info/profile/info_profile_actions.cpp#L83

Upvotes: 2

Evertos
Evertos

Reputation: 21

Indeed adding @RawDataBot Give it 10 seconds to send you the message witch include the chat ID.

Upvotes: 1

apadana
apadana

Reputation: 14690

Here is the sequence that worked for me after struggling for several hours:

Assume the bot name is my_bot.

1- Add the bot to the group.
Go to the group, click on group name, click on Add members, in the searchbox search for your bot like this: @my_bot, select your bot and click add.

2- Send a dummy message to the bot.
You can use this example: /my_id @my_bot
(I tried a few messages, not all the messages work. The example above works fine. Maybe the message should start with /)

3- Go to following url: https://api.telegram.org/botXXX:YYYY/getUpdates
replace XXX:YYYY with your bot token

4- Look for "chat":{"id":-zzzzzzzzzz,
-zzzzzzzzzz is your chat id (with the negative sign).

5- Testing: You can test sending a message to the group with a curl:

curl -X POST "https://api.telegram.org/botXXX:YYYY/sendMessage" -d "chat_id=-zzzzzzzzzz&text=my sample text"

If you miss step 2, there would be no update for the group you are looking for. Also if there are multiple groups, you can look for the group name in the response ("title":"group_name").

Upvotes: 338

Trajano Roberto
Trajano Roberto

Reputation: 307

function adminCheck( chat_id, name ) {
var bAdminCheck = false;
var contents = JSON.parse( getAdmin( chat_id ) );      
var i = 0;
while( !bAdminCheck && (i < contents.result.length ) ) {
    if( name == (contents.result[i].user.first_name + " " + contents.result[i].user.last_name) ) {
        bAdminCheck = true;  
    }
    i++;
}  
return bAdminCheck;

}

Upvotes: 0

Muhammadyk
Muhammadyk

Reputation: 319

  • go on the group of choice
  • add @rose bot
  • type the command /id
  • type the command /identer image description here

Upvotes: 18

Pawan Vikasitha
Pawan Vikasitha

Reputation: 349

Group chat id should start with - (minus) is essential

This is wrong
10540154212

This is correct
-10540154212

Upvotes: 13

zakaria35
zakaria35

Reputation: 1077

the simplest way i found using only telegram-web :

  • open web.telegram in browser ( chrome in my case )
  • right click on the group name on the left menu
  • click 'inspect' button
  • you will see the group id in the attribute data-peer-id="-xxxxxxxxxx" or peer="-xxxxxxxxxx"

group chat id : -xxxxxxxxxx

channel chat id : -100xxxxxxxxxx

(for some channels/groups you need to add -100 prefix)

Edit : in some cases the ID is shown in the browsers address bar when you click a group name

https://web.telegram.org/z/#-xxxxxxxxxx

Upvotes: 80

Eljah
Eljah

Reputation: 5165

I'd like to note very specific case made me monkey around it.

I've got the chat_id with above steps in the format like -1001379XXXXXX. So I just supposed the real id is 1001379XXXXXX, and left it in a such format to the grafana admin page. But in fact the id got this - as the integral part. If was really needed to be copied together with numbers.

Upvotes: 0

eivamu
eivamu

Reputation: 3225

As of May 2021, simply:

  • Invite @RawDataBot to your group.

Upon joining it will output a JSON file where your chat id will be located at message.chat.id.

"message": {
    "chat": {
        "id": -210987654,
        "title": ...,
        "type": "group",
        ...
    }
    ...
}

Be sure to kick @RawDataBot from your group afterwards.

Upvotes: 258

Abhilash
Abhilash

Reputation: 2953

You can get your id by sending a /start message to the bot userinfobot

Note: once u search for userinfobot in telegram u get many responses. Makesure u choose the one with @bot tag

Upvotes: 6

Jannunen
Jannunen

Reputation: 394

I don't understand why the most obvious (and probably the simplest) answer isn't here.

As you are writing a bot, you can get the id with these three simple lines:

bot.on('message', (msg) => {
  console.log(msg)
})

Then just check the groupId from the console :D

And as you are probably trying to look the groupId to be able to send message to a group with your bot, the correct answer is probably this:

You don't use anymore the groupId. You use the group name (the one with https://t.me/careless_whisper) prefixed with @. And remember that your group has to be public. Source: Telegram API

So if your group name is careless_whisper the recipient will be @careless_whisper

Upvotes: 0

Trajano Roberto
Trajano Roberto

Reputation: 307

create a bot, or if already created set as follows:

has access to messages

apparently, regardless of how old/new the Telegram group is:

  1. add a bot to the group

  2. remove bot from the group

  3. add bot again to the group

  4. create a script file and run getUpdates method example:

    var vApiTokenTelegram = "1234567890:???>yg5GeL5PuItAOEhvdcPPELAOCCy3jBo"; // @?????Bot API token
    var vUrlTelegram = "https://api.telegram.org/bot" + vApiTokenTelegram;

    function getUpdates() {
        var response = UrlFetchApp.fetch(vUrlTelegram + "/getUpdates");
        console.log(response.getContentText());
    }
  1. function shall log to the console the following:
[20-04-21 00:46:11:130 PDT] {"ok":true,"result":[{"update_id":81329501,
"message":{"message_id":975,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454914,"left_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"left_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}}},{"update_id":81329502,
"message":{"message_id":976,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454932,"new_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_members":[{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}]}}]}
  1. Telegram group chat_id can be extracted from above message "chat":{"id":-1001202656383,"title"

Upvotes: 6

Sebastian
Sebastian

Reputation: 929

My second Solution for the error {"ok":true,"result":[]}

  1. Go in your Telegram Group
  2. Add new User (Invite)
  3. Search for "getidsbot" => @getidsbot
  4. Message: /start@getidsbot
  5. Now you see the ID. looks like 1068773197, which is -1001068773197 for bots (with -100 prefix)!!!
  6. Kick the bot from the Group.
  7. Now go to the Webbrowser an send this line (Test Message):
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test

Edit the API Token and the Group-ID!

Upvotes: 15

Sebastian
Sebastian

Reputation: 929

I tested now 4h but it dont work 2021 with the group-chat-id. All the time the error {"ok":true,"result":[]}

But now i found a Solution:

1:) install the "Plus Messenger" (https://play.google.com/store/apps/details?id=org.telegram.plus)

2:) go in the Group => Tap now on the "Group-Name" in the Head => Double Tap now on the Headline from the Group. A Info is comming: ID123456789 is copy in the clipboard

3:) go in the Group an paste the clipboard text. It´s you Groud-ID

4:) looks like 1068773197, which is -1001068773197 for bots (with -100 prefix)!!!

btw, you see the user-id too, on your profil.

5:) Now go to the Webbrowser an send this line (Test Message):

https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test

Edit the API Token and the Group-ID!

Upvotes: 4

Saeed Heidarizarei
Saeed Heidarizarei

Reputation: 8936

After mid-2018:
1:) Invite @getidsbot or @RawDataBot to your group and get your group id from the chat id field.

Message
 ├ message_id: 338
 ├ from
 ┊  ├ id: *****
 ┊  ├ is_bot: false
 ┊  ├ first_name: 사이드
 ┊  ├ username: ******
 ┊  └ language_code: en
 ├ chat
 ┊  ├ id: -1001118554477    // This is Your Group id
 ┊  ├ title: Test Group
 ┊  └ type: supergroup
 ├ date: 1544948900
 └ text: A

2:) use an unofficial Messenger like Plus Messenger and see your group id in group/channel info.

Before mid-2018: (don't Use)
1: Goto (https://web.telegram.org)
2: Goto your Gorup and Find your link of Gorup(https://web.telegram.org/#/im?p=g154513121)
3: Copy That number after g and put a (-) Before That -154513121
4: Send Your Message to Gorup bot.sendMessage(-154513121, "Hi")
I Tested Now and Work like a Charm

Upvotes: 92

Angelo Dureghello
Angelo Dureghello

Reputation: 330

If you are implementing your bot, keep stored a group name -> id table, and ask it with a command. Then you can also send per name.

Upvotes: -2

Foad S. Farimani
Foad S. Farimani

Reputation: 14026

IMHO the best way to do this is using TeleThon, but given that the answer by apadana is outdated beyond repair, I will write the working solution here:

import os
import sys
from telethon import TelegramClient
from telethon.utils import get_display_name

import nest_asyncio
nest_asyncio.apply()

session_name = "<session_name>"
api_id = <api_id>
api_hash = "<api_hash>"
dialog_count = 10 # you may change this

if f"{session_name}.session" in os.listdir():
    os.remove(f"{session_name}.session")

client = TelegramClient(session_name, api_id, api_hash)

async def main():
    dialogs = await client.get_dialogs(dialog_count)
    for dialog in dialogs:
        print(get_display_name(dialog.entity), dialog.entity.id)

async with client:
    client.loop.run_until_complete(main())

this snippet will give you the first 10 chats in your Telegram.

Assumptions:

  • you have telethon and nest_asyncio installed
  • you have api_id and api_hash from my.telegram.org

Upvotes: 2

Yigit Yuksel
Yigit Yuksel

Reputation: 1170

You can get Chat ID in this way.

On private chat with your bot, send a random message. You will search this message later.

Get Your API-token from bot_father : XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Then, on your browser make a request with that url :

https://api.telegram.org/botXXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY/getUpdates

The request returns a json response, in json text search your random message and get chat id in that object.

Upvotes: 27

apadana
apadana

Reputation: 14690

Using python and telethon it's very easy to get chat id. This solution is best for those who work with telegram API.

If you don't have telethon, run this:

pip install telethon

If you don't have a registered app with telegram, register one: enter image description here The link is this: https://my.telegram.org/

Then run the following code:

from telethon import InteractiveTelegramClient
from telethon.utils.tl_utils import get_display_name

client = InteractiveTelegramClient('session_id', 'YOUR_PHONE_NUMBER', api_id=1234YOURAPI_ID, api_hash='YOUR_API_HASH')

dialog_count = 10
dialogs, entities = client.get_dialogs(dialog_count)
for i, entity in enumerate(entities):
                    i += 1  # 1-based index
                    print('{}. {}. id: {}'.format(i, get_display_name(entity), entity.id))

You may want to send a message to your group so the group show up in top of the list.

Upvotes: 15

Chris Brand
Chris Brand

Reputation: 1990

You can retrieve the group ID the same way. It appears in the message body as message.chat.id and it's usually a negative number, where normal chats are positive.

Group IDs and Chat IDs can only be retrieved from a received message, there are no calls available to retrieve active groups etc. You have to remember the group ID when you receive the message and store it in cache or something similar.

Upvotes: 13

Related Questions