Telegram Bot - 如何获取群聊 ID?
Posted
技术标签:
【中文标题】Telegram Bot - 如何获取群聊 ID?【英文标题】:Telegram Bot - how to get a group chat id? 【发布时间】:2015-12-02 03:12:57 【问题描述】:我一直在使用telegram_bot,并尝试获取 groupChat id 以向群聊发送通知,但不知道我必须使用哪些方法。
当机器人参与聊天时,我使用 message.chat.id 获取聊天 id,但我必须使用它来获取群聊 id 无法找到/
【问题讨论】:
我为此管理了一个机器人。我希望这会有所帮助,检查一下 ***.com/a/37396871/6223024> 【参考方案1】:要获取群聊ID,请执行以下操作:
将 Telegram BOT 添加到群组。
获取您的 BOT 的更新列表:
https://api.telegram.org/bot<YourBOTToken>/getUpdates
例如:
https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
寻找“聊天”对象:
"update_id":8393,"message":"message_id":3,"from":"id":7474,"first_name":"AAA","chat":"id":
,"title":"","date":25497,"new_chat_participant":"id":71,"first_name":"NAME","username":"YOUR_BOT_NAME"
这是您将 BOT 添加到组时的响应示例。
使用“聊天”对象的“id”发送消息。
(如果您使用机器人创建了新组并且您只获得了"ok":true,"result":[]
,请删除该机器人并将其再次添加到组中)
私人图表仅适用于图片argoprojlabs/argocd-notifications:v1.1.0
或以上。
【讨论】:
@WannaBeCoder,您可以像任何其他成员一样将 BOT 添加到组:转到您的组属性,单击添加成员,然后使用搜索图标查找 BOT 的名称。但是,请记住,由于 Telegram 群组最近发生了变化,您必须是群组“管理员”才能添加新成员,无论他们是否是 BOT。 对于新创建的群组getUpdates
,请求返回"ok":true,"result":[]
,即使我尝试通过@
和一些随机“命令”/my_id
、@ 向群组发送一堆消息并提及机器人987654329@,/help
。有什么想法该怎么做? - 更新:好的,从组中删除机器人,然后重新添加机器人修复了这个问题(它还在组中打印了聊天 id)---看起来在组创建过程中无法添加机器人。
返回:"ok":true,"result":[]
嗨@Tom。您是否已经尝试过 rutsky 解决方案:“从组中删除机器人,然后重新添加机器人修复了这个问题(它还在组中打印了聊天 id)——看起来在组创建期间无法添加机器人。”?我遇到过同样的问题几次,从组中删除机器人并重新添加它总是可以解决问题。如果这对您没有帮助,请告诉我。
@tom,如果你得到 "ok":true,"result":[] ,请在机器人频道中输入一些内容。在此之后,你应该得到 chat_id【参考方案2】:
经过几个小时的努力,这是对我有用的顺序:
假设机器人名称是 my_bot。
1- 将机器人添加到组中。 转到组,单击组名称,单击添加成员,在搜索框中搜索您的机器人,如下所示:@my_bot,选择您的机器人并单击添加。
2- 向机器人发送虚拟消息。 您可以使用此示例:/my_id @my_bot
(我试了几条消息,不是所有的消息都能正常工作。上面的例子工作正常。也许消息应该以/开头)
3- 转到以下网址: https://api.telegram.org/botXXX:YYYY/getUpdates
用你的机器人令牌替换 XXX:YYYY
4- 寻找“聊天”:“id”:-zzzzzzzzzz, -zzzzzzzzzz 是您的聊天 ID(带有负号)。
5- 测试:您可以测试用 curl 向群组发送消息:
curl -X POST "https://api.telegram.org/botXXX:YYYY/sendMessage" -d "chat_id=-zzzzzzzzzz&text=my sample text"
如果您错过了第 2 步,您正在寻找的群组将不会有更新。此外,如果有多个组,您可以在响应中查找组名(“title”:“group_name”)。
希望这会有所帮助。
【讨论】:
关于如何配置 BOT 的精彩分解。 我无法让我的机器人在组中工作,我在浏览器中得到 "ok":true,"result":[]。希望有人能帮帮我 这对我有用。一件事,如果你配置了 webhook,你必须禁用它。谢谢! @TheMrkt 似乎,正如 apadana 所说,发送一条以/
开头的消息,比如 /test something
,让 getUpdates 很开心。
我不知道为什么它对我不起作用。我用我的api.telegram.org/here 包含我的机器人令牌/getUpdates,它根本不起作用。它一直说 ""ok":false,"error_code":404,"description":"Not Found""【参考方案3】:
截至 2021 年 5 月,只需:
邀请 @RawDataBot 加入您的群组。加入后,它将输出一个 JSON 文件,您的 chat id 将位于 message.chat.id。
"message":
"chat":
"id": -210987654,
"title": ...,
"type": "group",
...
...
之后一定要把@RawDataBot踢出你的小组。
【讨论】:
@RawDataBot 应该在哪里输出这个?我将机器人添加到我的组中,但没有任何反应。更新:你需要在 Telegram 中设置一个用户名,否则什么都不会发生。 @Cherona:我刚刚重新验证了它。但似乎网络客户端发生了变化,因此邀请机器人比以前更难了。您可以这样做: 在搜索字段中搜索 RawDataBot。单击联系人以开始聊天会话。单击聊天标题以打开“联系信息”。单击“添加到组”并选择组。它将像以前一样立即输出信息。希望它对你有用。 截至 2021 年 5 月运行良好。 实际上是 @raw_data_bot 为我完成了这项工作。【参考方案4】: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:) 使用非官方 Messenger,例如 Plus Messenger,并在群组/频道信息中查看您的群组 ID。
2018 年年中之前:(请勿使用)
1:转到 (https://web.telegram.org)
2:转到您的 Gorup 并找到您的 Gorup 链接(https://web.telegram.org/#/im?p=g154513121)
3:在 g 之后复制那个数字并在那个之前放一个 (-) -154513121
4:将您的信息发送给 Gorup
bot.sendMessage(-154513121, "Hi")
我现在测试并像魅力一样工作
【讨论】:
非常简单。谢谢!在 Grafana 警报通知中测试。到目前为止,一切顺利。 @Sedric Heidarizarei 如果这不是这样的数字怎么办 (web.telegram.org/#/im?p=@welcomeworld) '@welcomeworld' 是您的频道用户名,您可以转发消息到 '@getidsbot' 并获取您的 id 做了同样的事情,但遇到错误 OverflowError: Python int too large to convert to SQLite INTEGER ... client.send_message(-1240933195_1386556410045688xx08.'Hi') 我更新了我的答案,这个方法已经不行了,暂时用After mid-2018
这个方法。【参考方案5】:
您可以通过这种方式获取聊天ID。
在与您的机器人进行私人聊天时,发送一条随机消息。稍后您将搜索此消息。
从 bot_father 获取您的 API 令牌:XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY
然后,在您的浏览器上使用该 url 发出请求:
https://api.telegram.org/botXXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY/getUpdates
请求返回一个 json 响应,在 json 文本中搜索您的 random message
并获取该对象中的聊天 ID。
【讨论】:
【参考方案6】:我发现的最简单的方法只使用电报网络:
在浏览器中打开web.telegram(我的情况是chrome) 右键单击左侧菜单中的组名 点击“检查”按钮 您将在属性中看到组 ID data-peer-id="-xxxxxxxxxx" 或 peer="-xxxxxxxxxx"群聊ID:-xxxxxxxxxx
频道聊天ID:-100xxxxxxxxxx
(对于某些频道/组,您需要添加 -100 前缀)
编辑: 在某些情况下,当您点击群组名称时,ID 会显示在浏览器地址栏中
https://web.telegram.org/z/#-xxxxxxxxxx
【讨论】:
但是他们开始捕捉右键单击,因此打开网络检查器并启动位于左上角的Choose an element
可能很有用
这对我不起作用,html 不存储任何数据属性。
是的,似乎有一些更新可以隐藏 html 属性,但是您仍然可以在 web-telegram 中获取 id,一旦您单击聊天名称,id 就会出现在浏览器的地址栏上(我的铬)web.telegram.org/z/#-xxxxxxxx
这是新方法。我搜索了一个多小时,就是这样。太感谢了!另外:如果无法通过右键单击打开 Inspect Element,请使用 Ctrl+Shift+I 或 F12。
用 -100 为 url 中的组添加前缀对我有用,谢谢!【参考方案7】:
使用 python 和 telethon 很容易获得聊天 ID。这个解决方案最适合那些使用电报 API 的人。
如果你没有 Telethon,运行这个:
pip install telethon
如果您没有注册过 Telegram 的应用,请注册一个: 链接是这样的: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))
您可能希望向您的群组发送消息,以便该群组显示在列表顶部。
【讨论】:
【参考方案8】:您可以用相同的方式检索组 ID。它在消息正文中显示为message.chat.id
,通常为负数,正常聊天为正数。
组 ID 和聊天 ID 只能从收到的消息中检索,没有可用于检索活动组的呼叫等。您必须在收到消息时记住组 ID 并将其存储在缓存或类似的东西中。
【讨论】:
其他人可以确认这是真的吗?在阅读完这些文件后,我差点说是的。我希望能够从群组链接中获取 chat_id 以满足我的要求。【参考方案9】:我的第二个错误解决方案 "ok":true,"result":[]
-
加入你的电报群
添加新用户(邀请)
搜索“getidsbot” =>
@getidsbot
留言:/start@getidsbot
现在您可以看到 ID。看起来像 1068773197,对于机器人来说是 -1001068773197(带有 -100 前缀)!!!
将机器人踢出群组。
现在转到网络浏览器并发送此行(测试消息):
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test
编辑 API 令牌和组 ID!
【讨论】:
【参考方案10】:创建一个机器人,或者如果已经创建,设置如下:
有权访问消息
显然,无论 Telegram 组的新旧程度如何:
将机器人添加到组
从组中删除机器人
再次将机器人添加到组中
创建一个脚本文件并运行getUpdates
方法
示例:
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());
-
函数应将以下内容记录到控制台:
[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"]]
-
电报群chat_id可以从上面的消息中提取
"chat":"id":-1001202656383,"title"
【讨论】:
请不要发布多个答案,除非每个答案都真正不同【参考方案11】:我现在测试了 4 小时,但它在 2021 年无法使用 group-chat-id。一直错误 "ok":true,"result":[]
但现在我找到了解决方案:
1:) 安装“Plus Messenger”(https://play.google.com/store/apps/details?id=org.telegram.plus)
2:) 进入群组 => 现在点击头部中的“群组名称” => 现在双击群组的标题。信息即将发布:ID123456789 已复制到剪贴板
3:) 进入 Group 并粘贴剪贴板文本。是你的地名
4:) 看起来像 1068773197,对于机器人来说是 -1001068773197(带有 -100 前缀)!!!
顺便说一句,您也可以在您的个人资料上看到用户 ID。
5:) 现在转到网络浏览器并发送此行(测试消息):
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test
编辑 API 令牌和组 ID!
【讨论】:
【参考方案12】:您可以通过向机器人userinfobot
发送/start
消息来获取您的ID
注意:一旦你在电报中搜索 userinfobot,你会得到很多回复。 确保你选择带有
@bot
标签的那个
【讨论】:
【参考方案13】:恕我直言,最好的方法是使用 TeleThon,但鉴于 apadana 的 the answer 已经过时且无法修复,我将在此处编写工作解决方案:
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())
这个 sn-p 将为您提供 Telegram 中的第一个 10
聊天。
假设:
您已安装telethon
和 nest_asyncio
你有来自my.telegram.org的api_id
和api_hash
【讨论】:
这个 sn-p 不起作用。我得到SyntaxError: 'async with' outside async function
。有办法解决吗?
很遗憾听到您无法使用我的答案。这是很久以前的事了。我不能保证我可以立即修复它。
我可能已经修复了它,但它需要来自其他机器人的会话文件。我在这里发布代码以防其他人偶然发现同样的问题。只要您有会话文件,似乎就可以工作:gist.github.com/casper/444daf52c1fde5a1b839306b551f757f【参考方案14】:
我不明白为什么最明显(也可能是最简单)的答案不在这里。
在编写机器人时,您可以通过以下三行简单的代码获取 id:
bot.on('message', (msg) =>
console.log(msg)
)
然后只需从控制台检查 groupId :D
而且您可能正在尝试查看 groupId 以便能够使用您的机器人向群组发送消息,正确的答案可能是:
您不再使用 groupId。您使用以@ 为前缀的组名(带有https://t.me/careless_whisper 的组名)。请记住,您的群组必须公开。来源:Telegram API
因此,如果您的群组名称是 careless_whisper,那么收件人将是 @careless_whisper
【讨论】:
【参考方案15】:我想指出非常具体的案例让我对此感到困惑。
我得到了chat_id
,上面的步骤格式为-1001379XXXXXX
。所以我只是假设真实的 id 是1001379XXXXXX
,并以这样的格式将其留给 grafana 管理页面。但实际上 id 得到了这个 -
作为不可或缺的部分。如果真的需要和数字一起复制。
【讨论】:
【参考方案16】:如果您正在实现您的机器人,请保持存储组名 -> id 表,并使用命令询问它。然后你也可以按名字发送。
【讨论】:
以上是关于Telegram Bot - 如何获取群聊 ID?的主要内容,如果未能解决你的问题,请参考以下文章
在 python-telegram-bot 中如何获取该组的所有参与者?
Telegram bot:如何通过 id(而不是用户名)提及用户