我一直在使用telegram_bot,并试图让groupChat id向群聊发送通知,但不知道我必须使用哪种方法。
为了获取聊天ID我使用message.chat.id当机器人参与聊天但我必须使用它来获取群组聊天ID无法找到/
答案 0 :(得分:132)
要获取群聊ID,请执行以下操作:
将电报BOT添加到该组。
获取BOT的更新列表:
https://api.telegram.org/bot<YourBOTToken>/getUpdates
例如:
https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
寻找&#34;聊天&#34;对象:
{&#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 :(得分: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年中期,简单地说:
加入后,它会输出一个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":[]} 的第二个解决方案
@getidsbot
/start@getidsbot
https://api.telegram.org/botAPITOKENNUMBER:APITOKENKEYHERE/sendmessage?chat_id=-100GROUPNUMBER&text=test
编辑 API 令牌和组 ID!
答案 7 :(得分:5)
使用python和telethon,很容易获得聊天ID。此解决方案最适合使用电报API的人员。
如果你没有电视节目,请运行:
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))
您可能希望向群组发送消息,以便群组显示在列表顶部。
答案 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组的成立时间是多久/多久
再次将漫游器添加到组
创建脚本文件并运行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":-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 answer的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
个聊天记录。
假设:
telethon
和nest_asyncio
api_id
和api_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表,并使用命令询问。然后,您也可以按姓名发送。