Telegram bot - 如何获得群聊ID?

时间:2015-09-06 12:58:17

标签: telegram telegram-bot

我一直在使用telegram_bot,并试图让groupChat id向群聊发送通知,但不知道我必须使用哪种方法。

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

17 个答案:

答案 0 :(得分:132)

要获取群聊ID,请执行以下操作:

  1. 将电报BOT添加到该组。

  2. 获取BOT的更新列表:

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

    例如:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. 寻找&#34;聊天&#34;对象:

  4.   

    {&#34; UPDATE_ID&#34;:8393,&#34;消息&#34; {&#34; MESSAGE_ID&#34;:3,&#34;从&#34; {&#34; ID&#34;:7474,&#34;如first_name&#34;:&#34; AAA&#34;}&#34;聊天&#34; {&#34; ID&#34;:&#34;标题&#34;:&#34;&#34;}&#34;日期&#34;:25497&#34; new_chat_participant&#34; {&#34; ID&#34;:71,&#34 ;如first_name&#34;:&#34; NAME&#34;&#34;用户名&#34;:&#34; YOUR_BOT_NAME&#34;}}}

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

    1. 使用&#34; id&#34; #34;聊天&#34;发送邮件的对象。

答案 1 :(得分:105)

这是在经过几个小时挣扎后对我有用的序列:

假设机器人名称为 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 ”)。

希望这会有所帮助。

答案 2 :(得分:55)

截至2018年中期,简单地说:

  • 邀请 @RawDataBot 加入您的论坛。

加入后,它会输出一个JSON文件,其聊天ID 位于 message.chat.id

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

请务必在之后从您的小组中踢出@RawDataBot。

答案 3 :(得分:18)

2018年中期后:
1 :)邀请@getidsbo@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:转到你的Gorup并找到你的Gorup(https://web.telegram.org/#/im?p=g154513121)的链接 3:在g之后复制该数字并在-154513121之前放一个( - ) 4:将您的消息发送给Gorup bot.sendMessage(-154513121, "Hi")
我现在测试并像魅力一样工作

答案 4 :(得分:8)

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

在与您的机器人私聊时,发送随机消息。您稍后会搜索此邮件。

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

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

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

请求返回json响应,在json文本中搜索您的random message并获取该对象中的聊天ID。

答案 5 :(得分:7)

您可以采用相同的方式检索组ID。它在邮件正文中显示为message.chat.id,并且通常为负数,正常聊天为正数。

只能从收到的消息中检索组ID和聊天ID,没有可用于检索活动组等的呼叫。您必须在收到消息时记住组ID并将其存储在缓存或类似内容中。< / p>

答案 6 :(得分:6)

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

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

编辑 API 令牌和组 ID!

答案 7 :(得分:5)

使用python和telethon,很容易获得聊天ID。此解决方案最适合使用电报API的人员。

如果你没有电视节目,请运行:

pip install telethon

如果您没有已注册的电报应用,请注册一个: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))

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

答案 8 :(得分:4)

我现在测试了 4 小时,但它在 2021 年不适用于群聊 ID。一直错误 {"ok":true,"result":[]}

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

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

2:) 进入组 => 现在点击头部中的“组名称”=> 现在双击来自组的标题。 A Info is come: ID123456789 is copy in the clipboard

3:) 进入组并粘贴剪贴板文本。是你的 Groud-ID

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

顺便说一句,您也可以在个人资料中看到用户 ID。

5:) 现在转到网络浏览器并发送此行(测试消息):

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

编辑 API 令牌和组 ID

答案 9 :(得分:2)

创建一个机器人,或者如果已经创建,则设置如下:

可以访问邮件

显然,无论Telegram组的成立时间是多久/多久

  1. 将漫游器添加到群组
  2. 从群组中删除漫游器
  3. 再次将漫游器添加到组

  4. 创建脚本文件并运行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());
    }
  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"

希望有帮助(HTH)

答案 10 :(得分:1)

您可以通过向机器人发送 /start 消息来获取您的 ID userinfobot

<块引用>

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

答案 11 :(得分:0)

我想指出一个非常具体的案例让我对它感到困惑。

我已经获得了 chat_id 格式的上述步骤,如 -1001379XXXXXX。所以我只是假设真正的 id 是 1001379XXXXXX,并以这种格式将其保留到 grafana 管理页面。但实际上 id 得到了这个 - 作为不可或缺的部分。如果真的需要和数字一起复制。

答案 12 :(得分:0)

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

在编写机器人时,您可以通过以下三行简单的代码获取 id:

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

然后只需从控制台检查 groupId :D

而且由于您可能正在尝试查看 groupId 以便能够使用您的机器人向群组发送消息,因此正确答案可能是:

您不再使用 groupId。您使用以@ 为前缀的组名(带有https://t.me/careless_whisper 的组名)。请记住,您的群组必须是公开的。来源:Telegram API

因此,如果您的群组名称是 careless_whisper,则收件人将是 @careless_whisper

答案 13 :(得分:0)

恕我直言,做到这一点的最佳方法是使用TeleThon,但是鉴于the answerapadana已过时,无法修复,我将在此处编写可行的解决方案:

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
  • 您有my.telegram.orgapi_idapi_hash

答案 14 :(得分:0)

bot收到以下消息,该消息起源于具有bot并存的Telegram组:

根据需要提取数据

var countryList = CountryList()
countryList.delegate = self

/ *内容

function doPost(e) {
    var contents = JSON.parse(e.postData.contents);
    //  GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Telegram Bot Update", JSON.stringify(contents, null, 4));
    var chat_id = contents.message.chat.id;
    var text = contents.message.text;
    var name = contents.message.from.first_name + " " +  contents.message.from.last_name;
    var sResponse = telegramBotMachine( chat_id, text, name );
}  

答案 15 :(得分:0)

function doPost(e) {
    var contents = JSON.parse(e.postData.contents);
    //  GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Telegram Bot Update",     JSON.stringify(contents, null, 4));
    var chat_id = contents.message.chat.id;
    var text = contents.message.text;
    var name = contents.message.from.first_name + " " +  contents.message.from.last_name;
    var sResponse = telegramBotMachine( chat_id, text, name );
}

答案 16 :(得分:-1)

如果要实现机器人,请保留存储的组名-> id表,并使用命令询问。然后,您也可以按姓名发送。