Telegram机器人 - 如何获取群聊ID?

428

我一直在使用telegram_bot,并尝试获取群组聊天id以便向群组发送通知,但不知道需要使用哪些方法。

在机器人参与聊天时,我使用message.chat.id来获取聊天id,但是我不知道该使用哪些方法来获取群组聊天id。


1
我为此管理一个机器人。希望这可以帮到你,查看这个链接:https://dev59.com/SV0Z5IYBdhLWcg3wxCuQ#37396871。 - fredy kardian
20个回答

573

为了获取群聊ID,请按照以下步骤进行:

  1. 将Telegram机器人添加到群组中。

  2. 获取您的机器人的更新列表:

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

Ex:

例如:

https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
  1. 查找“chat”对象:

{"update_id":8393,"message":{"message_id":3,"from":{"id":7474,"first_name":"AAA"},"chat":{"id":<group_ID>,"title":""},"date":25497,"new_chat_participant":{"id":71,"first_name":"NAME","username":"YOUR_BOT_NAME"}}}

这是将BOT添加到组中时的响应示例。

  1. 使用“chat”对象的“id”发送消息。

  2. (如果您是用机器人创建新组并且只收到 {"ok":true,"result":[]},请将机器人从组中删除并重新添加)

  3. 仅在图像argoprojlabs/argocd-notifications:v1.1.0或更高版本中才支持私人对话。


5
您可以像添加其他成员一样向群组中添加机器人:进入群组属性,点击添加成员,然后使用搜索图标查找机器人的名称。但是,请注意,由于Telegram群组的最近更改,您必须是群组“管理员”才能添加新成员,无论他们是否是机器人。 - Maverick_Java
124
对于新创建的群组,即使我尝试向该群组发送一系列消息并通过@提及机器人和一些随机"命令"/my_id、/start、/help,getUpdates请求返回{"ok":true,"result":[]}。有什么想法怎么办?-更新:好的,将机器人从群组中移除,然后再次添加机器人可以解决此问题(还打印了在群组中的聊天ID)---看起来机器人不能在群组创建期间添加。 - rutsky
34
这是返回的结果:{"ok":true,"result":[]}。 - Tom
6
嗨@Tom。您是否已经尝试过rutsky解决方案:"将机器人从群组中移除,然后重新添加机器人可以解决此问题(还会在群组中打印聊天ID)——似乎无法在创建群组期间添加机器人。"?我也遇到过几次相同的问题,将机器人从群组中移除并重新添加它总是解决了问题。如果这不能帮助您,请告诉我。 - Maverick_Java
12
@tom,如果你收到{"ok":true,"result":[]}的回复,请在机器人频道里输入一些内容。之后,你应该会收到chat_id。 - guagay_wk
显示剩余12条评论

311

在我挣扎了几个小时后,这是对我起作用的顺序:

假设机器人名字是 my_bot

1- 将机器人添加到群组中。
进入群组,点击群名,点击添加成员,在搜索框中搜索你的机器人:@my_bot,选择你的机器人并点击添加。

2- 给机器人发送一条虚拟消息。
你可以使用这个示例:/my_id @my_bot
(我尝试了一些消息,并不是所有的消息都有效。上面的示例可以正常工作。也许消息应该以 / 开头)

3- 前往以下网址: https://api.telegram.org/botXXX:YYYY/getUpdates
将 XXX:YYYY 替换为你的机器人令牌。

4- 查找 "chat":{"id":-zzzzzzzzzz,
-zzzzzzzzzz 是你的聊天 ID(带有负号)。

5- 测试: 你可以使用 curl 测试向群组发送消息:

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

如果你错过了第二步,你将无法更新你正在寻找的群组。而且如果有多个群组,你可以在响应中查找群组名称("title":"group_name")。


2
如何配置机器人的拆分非常出色。 - fear_matrix
9
我无法让我的机器人在群组中运作,浏览器上显示 {"ok":true,"result":[]}。希望有人能够帮助我解决问题。 - user234562
2
这对我有用。还有一件事,如果您配置了 Webhooks,则必须将其禁用。谢谢! - Erich García
5
据apadana所说,似乎发送以斜杠(/)开头的消息,例如“/test something”,可以让getUpdates正常工作。 - Déjà vu
1
我不知道为什么它对我不起作用。我使用了我的 https://api.telegram.org/ 这里包含我的机器人令牌/getUpdates,但它根本不起作用。它一直显示 "{"ok":false,"error_code":404,"description":"Not Found"}"。 - CCCC
显示剩余9条评论

246

截至2021年5月,只需要:

  • 邀请@RawDataBot进入您的群组。

它将输出一个JSON文件,其中您的聊天ID将位于message.chat.id处。

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

确保在完成后将 @RawDataBot 从您的群组中移除。


10
@RawDataBot应该在哪里输出?我将机器人添加到我的群组中,但没有任何反应。更新:你需要在Telegram上设置一个用户名,否则什么也不会发生。 - Frank Meulenaar
4
@Cherona:我刚刚重新验证了一下。但是似乎Web客户端已经更改,邀请机器人比以前更难了。以下是您可以操作的步骤:在搜索栏中搜索“RawDataBot”。点击联系人以开始聊天会话。点击聊天标题以打开“联系人信息”。点击“添加到群组”并选择群组。它将立即像以前一样输出信息。希望对您有用。 - eivamu
2
截至2021年5月,工作完美无缺。 - Lucio Paiva
11
实际上是 @raw_data_bot 为我完成了工作。 - Dejv
3
邀请 @ShowJsonBot 加入你的群组。 - 0 cęĥ

87

2018年中期之后:
1:) 邀请@getidsbot或者@RawDataBot到你的群组,并从聊天id字段中获取你的群组id。

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:) 使用类似Plus Messenger的非官方Messenger,并在群/频道信息中查看你的群ID。

2018年中之前:(不要使用)
1:进入https://web.telegram.org
2:进入你的群组,找到你的群链接(https://web.telegram.org/#/im?p=g154513121)
3:复制g后面的数字,在它之前加上一个减号-154513121
4:发送消息到群组 bot.sendMessage(-154513121, "Hi")
我现在已经测试过了,像魅力一样运作。


1
非常简单。谢谢!在 Grafana 警报通知中进行了测试。目前为止,一切都很好。 - Adrian Nicolaiev
@Sedric Heidarizarei 如果这个不是一个数字,比如这个(https://web.telegram.org/#/im?p=@welcomeworld)会怎样? - Marx Babu
3
'@welcomeworld' 是你的频道用户名,你可以将一条消息转发给 '@getidsbot' 并获取你的 ID。 - Saeed Heidarizarei
1
执行相同操作时遇到错误OverflowError:Python整数过大无法转换为SQLite INTEGER ... client.send_message(-1240933195_1386556410045688xx08,'Hi') - vinod
我更新了我的回答,这个方法不再可行,暂时使用“2018年中期后”的方法。 - Saeed Heidarizarei
请注意,@getidsbot 可以阅读频道中的所有消息。他们尚未为其启用隐私设置。 - lindhe

62

我发现的最简单的方法, 只使用telegram-web:

  • 在浏览器中打开web.telegram (我用的是chrome)
  • 右键点击左侧菜单的群组名称
  • 点击“检查”按钮
  • 您将在属性中看到群组ID data-peer-id="-xxxxxxxxxx"或peer="-xxxxxxxxxx"

群聊ID:-xxxxxxxxxx

频道聊天ID:-100xxxxxxxxxx

(对于某些渠道/组,您需要添加-100前缀

编辑: 在某些情况下,单击群组名称时在浏览器地址栏中显示ID

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


但是他们开始捕获右键点击,因此打开Web检查器并启动位于左上角的“选择元素”可能很有用。 - Belegnar
这对我没有用,HTML不存储任何数据属性。 - Dimitri Kopriwa
6
是的,似乎有一些更新来隐藏 HTML 属性,但你仍然可以在 Web 版 Telegram 中获取 ID。当你点击聊天名称时,ID 会出现在浏览器地址栏(对我来说是 Chrome)上。https://web.telegram.org/z/#-xxxxxxxx - zakaria35
2
这是新的方法。我搜索了一个多小时,终于找到了。非常感谢! 另外:如果您无法通过右键单击打开“检查元素”,请尝试使用Ctrl+Shift+I或F12。 - TheLexoPlexx
现在我可以通过web.telegram看到id,在频道中单击后,id会出现在浏览器中。https://web.telegram.org/#/im?p=cXXXXXXXXXX_YYYYYYYYYYYYYYYYYYY。 - malloc32
5
在网址中在群组前加上“-100”对我起到了作用,谢谢! - Scott Fleming

25

您可以通过以下方式获取聊天ID。

与您的机器人进行私密聊天,发送一条随机消息。稍后您将搜索此消息。

从bot_father获取您的API-token:XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

然后,在您的浏览器上使用该URL发出请求:

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

请求会返回一个JSON响应,在JSON文本中搜索你的随机消息,并获取该对象中的聊天ID。


15
使用Python和Telethon很容易获取聊天ID。 这种解决方案最适合那些使用Telegram API的人。
如果您没有安装Telethon,请运行以下命令:
pip install telethon
如果您还没有在 Telegram 上注册应用,请先注册: enter image description here 链接是: https://my.telegram.org/ 然后运行以下代码:
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))

你可能希望向你的群组发送一条消息,这样该群组就会出现在列表的顶部。


13
  • 进入所选的群组
  • 添加 @rose 机器人
  • 输入命令 /id
  • 输入命令 /id输入图片描述

12
你可以通过相同的方式检索到群组ID。它会在消息正文中以message.chat.id的形式出现,通常是负数,而正常聊天则为正数。
只有从接收到的消息中才能检索到群组ID和聊天ID,没有调用可用来检索活动组等。当你接收到消息时,必须记住群组ID并将其存储在缓存或类似的地方。

还有其他人可以确认这是真的吗?在阅读文件后,我几乎要说是的。我想能够从群链接中获取聊天ID以满足我的要求。 - PrimeTimeTran

12

我对错误 {"ok":true,"result":[]} 的第二个解决方案:

  1. 进入您的电报群组
  2. 添加新用户(邀请)
  3. 搜索“getidsbot”=> @getidsbot
  4. 消息:/start@getidsbot
  5. 现在您可以看到ID,看起来像1068773197,对于机器人是-1001068773197(带有-100前缀)!!!
  6. 从组中踢出机器人。
  7. 现在转到 Webbrowser 并发送此行(测试消息):
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test

编辑 API 令牌和群组 ID!


/start@getidsbot 没有任何回应。 - Michael A.
1
@MichaelA。邀请getidsbot机器人,他会提供所有信息。 - Sebastian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接