电报机器人-如何获得一个群聊天id?

我一直在使用telegram_bot,并试图获得groupChat id发送通知到组聊天,但不知道我必须使用哪些方法。

为了获得聊天id,当机器人参与聊天时,我使用message.chat.id,但我必须使用它来获得组聊天id,无法找到/

860453 次浏览

您可以以同样的方式检索组ID。它在消息体中显示为message.chat.id,通常是一个负数,而正常的聊天是正数。

组id和聊天id只能从收到的消息中检索,没有可用的调用来检索活动的组等。收到消息时必须记住组ID,并将其存储在缓存或类似的东西中。

要获取群聊id,请执行以下步骤:

  1. 将Telegram BOT加入群组。

  2. 获取BOT的更新列表:

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

例:

https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
  1. 寻找“聊天”;对象:

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

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

  1. 使用&;id"“聊天”;对象发送消息。

  2. (如果你用bot创建了新组,并且你只得到{"ok":true,"result":[]},删除bot并再次将其添加到组中)

  3. 私有图表只能在图像argoprojlabs/argocd-notifications:v1.1.0或以上中工作。

在我挣扎了几个小时后,下面是对我有用的顺序:

假设bot名称为my_bot

< p > 1-将机器人加入群组。
进入群组,点击群组名称,点击添加成员,在搜索框中搜索你的bot,像这样:@my_bot,选择你的bot,点击添加

2-发送一个虚拟消息给机器人。
你可以用这个例子:/my_id @my_bot
(我试了一些消息,不是所有的消息都有效。上面的例子工作得很好。也许该消息应该以/)

开头 < p > 3-转到以下网址: https://api.telegram.org/botXXX:YYYY/getUpdates
用bot令牌

替换XXX:YYYY < p > 4-查找"chat":{"id":-zzzzzzzzzz,
-zzzzzzzzzz是你的聊天id(带负号)。< / p >

5- 测试:你可以用curl测试发送消息到组:

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

如果您错过了第2步,则您正在寻找的组将没有更新。另外,如果有多个组,可以在响应中查找组名("title":"group_name")。

希望这能有所帮助。

使用python和telethon,很容易获得聊天id。这个解决方案最适合那些使用电报API的人。

如果你没有电视马拉松,运行这个:

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))

您可能希望向您的群组发送消息,以便该群组显示在列表顶部。

截至2021年5月,简单地说:

  • 邀请@RawDataBot到你的组。

在加入时,它将输出一个JSON文件,其中你的聊天id将位于message.chat.id

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

之后一定要把@RawDataBot从组中踢出去。

你可以通过这种方式获取聊天ID。

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

从bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY获取api令牌

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

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

请求返回一个json响应,在json文本中搜索你的random message并在该对象中获得聊天id。

< p > 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,比如加上信使,在group/channel info中查看你的群组id。

在2018年代中期之前:(不使用)
1: Goto (https://web.telegram.org)
2:去你的Gorup和找到你的Gorup的链接(https://web.telegram.org/#/im?p=g154513121)
3:复制g后面的那个数字,并在That -154513121
之前放一个(-) 4:发送你的信息给Gorup bot.sendMessage(-154513121, "Hi")
我现在测试,工作就像一个咒语

以我之见,最好的方法是使用TeleThon,但鉴于这个问题的答案 by 譬喻已经过时无法修复,我将在这里写下工作解决方案:

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())

这个片段将给你第10聊天在你的电报。

假设:

  • 你已经安装了telethonnest_asyncio
  • 你有api_idapi_hashmy.telegram.org

创建一个机器人,如果已经创建了,则如下所示:

可以访问消息

显然,不管Telegram群组有多老/多新:

  1. 添加一个bot到组中

  2. 从组中删除bot

  3. 再次将bot添加到组中

  4. 创建脚本文件并运行getUpdates方法 例子:< / p >

    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. 登录控制台的功能如下:
[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. 电报组chat_id可以从上面的消息中提取 李"chat":{"id":-1001202656383,"title" < / >

如果你正在实现你的机器人,保持存储一个组名->Id表,并使用命令询问它。然后还可以按名称发送。

我现在测试了4h,但它不工作2021与群聊id。错误{"ok":true,"result":[]}

但现在我找到了一个解决方案:

1:)安装“Plus messenger”;(https://play.google.com/store/apps/details?id=org.telegram.plus)

2:) go in Group =>现在点击“组名”;在头部=>双击现在从集团的标题。信息即将到来:ID123456789是剪贴板中的副本

3:)进入组,粘贴剪贴板文本。是你,地面id

4:)看起来像1068773197,对于bots (带-100前缀)来说是-1001068773197 !!

顺便说一下,你也可以在你的个人资料上看到用户id。

5:)现在转到web浏览器,发送这一行(测试消息):

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

编辑API令牌和Group-ID !

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

  1. 加入你的电报群
  2. 添加新用户(邀请)
  3. 搜索“getidsbot”;=比;@getidsbot
  4. 信息:/start@getidsbot
  5. 现在您看到了ID。看起来像1068773197,对于bot来说是-1001068773197(前缀是-100)!!
  6. 把机器人踢出群组。
  7. 现在转到web浏览器,发送这一行(测试消息):
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test

Edit the API Token and the Group-ID!

我不明白为什么最明显(可能也是最简单)的答案不在这里。

当你在写一个bot时,你可以用这三行简单的代码获取id:

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

然后从控制台检查groupId:D

当你可能试图查看groupId,以便能够用你的bot向一个组发送消息时,正确答案可能是这样的:

你不再使用groupId了。使用组名(带有https://t.me/careless_whisper的组名)加上@前缀。记住你的组必须是公开的。来源:电报API

因此,如果你的组名是careless_whisper,收件人将是@careless_whisper

你可以通过向bot userinfobot发送/start消息来获得你的id

注意:一旦你在telegram中搜索userinfobot,你会得到很多回复。 确保你选择一个带有@bot标签

我想说的是一个非常具体的案例让我绕开了它。

我已经得到了上面步骤的chat_id,格式类似-1001379XXXXXX。所以我只是假设真实的id是1001379XXXXXX,并将其以这样的格式留给grafana管理页面。但实际上id得到了-作为积分部分。如果真的需要和数字一起复制。

最简单的方法我找到using only telegramm -web . txt:

  • 在浏览器中打开web.telegram(在我的情况下是chrome)
  • 右键单击左侧菜单上的组名
  • 点击“检查”按钮
  • 您将在属性中看到组id data-peer-id =“-xxxxxxxxxx"或对等=“-xxxxxxxxxx" < / >强

组聊天id: -xxxxxxxxxx

频道聊天id: -100年xxxxxxxxxx

(对于某些频道/组,你需要添加-100前缀)

< p >编辑: 在某些情况下,当单击组名

时,ID显示为在浏览器地址栏

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

群聊id必须以-(减)开头

This is wrong
10540154212


This is correct
-10540154212
  • 去你选择的小组吧
  • 添加@rose机器人
  • 输入命令/id
  • 输入命令/identer image description here
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;