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


170

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

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


1
我为此管理一个机器人。我希望这会有所帮助,请检查此< stackoverflow.com/a/37396871/6223024 >
fredy kardian

Answers:


226

为了获得群聊ID,请执行以下操作:

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

  2. 获取您的BOT的更新列表:

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

    例如:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. 查找“聊天”对象:

{“ update_id”:8393,“ message”:{“ message_id”:3,“ from”:{“ id”:7474,“ first_name”:“ AAA”},“聊天”:{“ id” :,“标题“:”“},” date“:25497,” new_chat_participant“:{” id“:71,” first_name“:” NAME“,”用户名“:” YOUR_BOT_NAME“}}}

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

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

1
你能提供一个例子吗?
Roman Podpryatov 2015年

2
@WannaBeCoder,您可以像其他任何成员一样将BOT添加到组:转到您的组属性,单击添加成员,然后使用搜索图标查找BOT的名称。但是,请记住,由于最近对Telegrams组进行了更改,因此您必须是组“管理员”才能添加新成员,无论它们是否为BOT。
Maverick_Java

37
对于新创建的组getUpdates请求返回{"ok":true,"result":[]}即使我尝试发送一束消息来通过组和提BOT @和一些随机的“命令” /my_id/start/help。有什么想法怎么办?-更新:确定,从群组中删除漫游器,然后重新添加漫游器,从而解决了该问题(它还在群组中打印了聊天ID)---好像无法在创建群组时添加漫游器。
rutsky

8
这将返回:{“ ok”:true,“ result”:[]}
汤姆

3
你好汤姆。您是否已经尝试过rutsky解决方案:“从组中删除bot,并重新添加bot修复了此问题(它还在组中打印了聊天ID)---似乎在组创建期间无法添加bot。” 我已经遇到过几次相同的问题,将机器人从组中删除并再次添加始终可以解决该问题。让我知道这是否对您没有帮助。
Maverick_Java

136

这是在奋斗几个小时后为我工作的顺序:

假设机器人名称为my_bot

1-将机器人添加到组中。
转到该组,单击组名,单击“添加成员”,在搜索框中搜索您的机器人,如下所示:@my_bot,选择您的机器人并单击“添加”。

2-向机器人发送虚拟消息。
您可以使用以下示例:(/my_id @my_bot
我尝试了一些消息,但并非所有消息都起作用。上面的示例很好用。也许消息应该以/开头)

3-转到以下网址: https://api.telegram.org/botXXX:YYYY/getUpdates
用您的机器人令牌替换XXX:YYYY

4-查找“聊天”:{“ id”:-zzzzzzzzzzzz,
-zzzzzzzzzzzz是您的聊天ID(带负号)。

5- 测试:您可以测试是否向卷曲的群组发送消息:

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

如果您错过了第2步,那么您要查找的组将不会有任何更新。另外,如果有多个组,则可以在响应中查找组名(“ title”:“ group_name ”)。

希望这可以帮助。


2
关于如何配置BOT的出色分手。
fear_matrix

我向机器人发送了一条消息,但该消息无法立即生效,需要等待几秒钟(或可能几分钟),然后再次尝试卷曲。
LiveWireBT

4
我无法让我的机器人在该小组中工作,我在浏览器中得到了{“ ok”:true,“ result”:[]}。希望有人能帮帮我
TheMrkt

1
这对我有用。一件事,如果您配置了webhooks,则必须将其禁用。谢谢!
埃里希·加西亚

3
@TheMrkt好像apadana所说,sendind消息以/like 开头/test something使getUpdates高兴。
e2-e4

100

截至2020年3月,只需:

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

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

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

之后一定要从您的小组中踢出@RawDataBot。


3
@RawDataBot应该在哪里输出?我将该机器人添加到了我的小组,但是什么也没发生。更新:您需要在电报中设置用户名,否则什么也不会发生。
Frank Meulenaar

1
到目前为止,实现这一目标的最简单方法。谢谢!
–suchanoob

1
@Cherona:我刚刚重新验证了它。但是似乎Web客户端已经发生了变化,因此邀请bot变得比以往更加困难。操作方法如下:在搜索字段中搜索RawDataBot。单击联系人以开始聊天会话。单击聊天标题以打开“联系信息”。单击“添加到组”,然后选择组。它将像以前一样立即输出信息。希望对你有效。
eivamu

42

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:将您的消息发送给bot.sendMessage(-154513121, "Hi")
我现在测试过的Gorup ,像魅力一样工作


1
很简单。谢谢!在Grafana警报通知中测试。到目前为止,一切都很好。
Adrian Nicolaiev

@Sedric Heidarizarei如果这是一个不是一个数字作为这样的(web.telegram.org/#/im?p=@welcomeworld
马克思巴布

2
“ @welcomeworld”是您的频道用户名,您可以将消息转发到“ @getidsbot”并获取您的ID
Sedric Heidarizarei 18-10-27

做了同样的事情,但遇到错误OverflowError:Python int太大,无法转换为SQLite INTEGER ... client.send_message(-1240933195_1386556410045688xx08.'Hi')
vinod

我更新了答案,此方法不再起作用,暂时使用该After mid-2018方法。
Sedric Heidarizarei

9

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

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

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

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

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

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


8

使用python和telethon可以很容易地获得聊天ID。该解决方案最适合使用电报API的用户。

如果您没有Telethon,请运行以下命令:

pip install telethon

如果您没有使用电报注册的应用程序,请注册一个:在此处输入图片说明 链接为: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))

您可能想向群组发送一条消息,以便该群组出现在列表顶部。


7

您可以以相同的方式检索组ID。它在邮件正文中显示为message.chat.id,通常是一个负数,正常的聊天是积极的。

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


任何人都可以确认这是真的吗?阅读完文档后,我快要说了。我希望能够从组链接中获取chat_id以满足我的要求。
PrimeTimeTran

1

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

有权访问消息

显然,无论Telegram组有多老/多新:

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

  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)


0

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

根据需要提取数据

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

/ *内容

{
    "update_id": 20383255,
    "message": {
        "message_id": 147,
        "from": {
            "id": 999999999,
            "is_bot": false,
            "first_name": "Trajano",
            "last_name": "Roberto",
            "username": "TrajanoRoberto",
            "language_code": "en"
        },
        "chat": {
            "id": -666666666,
            "title": "Test Ataque Media Flamengo",
            "type": "group",
            "all_members_are_administrators": true
        },
        "date": 1585450075,
        "text": "Menu"
    }
}

0

恕我直言,要做到这一点的最好办法是使用募捐活动,但考虑到答案Apadana酒店已经过时,无法修复,我会写在这里工作的解决方案:

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_id并且api_hash来自my.telegram.org

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

当帖子来自某个组时,可以通过JSON对象获得几条信息,您可以提取相关信息供您使用,上面的示例说明了如何获取chat_id内容为对象
Trajano Roberto

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.