Telegram如何查找群组Chat ID 实现Bot自动化发消息
问题描述
我已花费三天尝试解决该问题,网上检索到的所有方案均无法生效,特此求助。
我计划为所在俱乐部成员搭建Telegram群组用于日常沟通,已创建名为「ABCD」的群组并添加了部分成员,希望实现不定期自动向群组推送消息的功能,推送内容包括天气预报、图库随机照片等。
我通过@BotFather创建了名为「ABCDbot」的机器人并记录了该机器人的token,目前浏览器左侧边栏显示两个名为「ABCD」的会话:选中其中一个进入的是「ABCD bot」机器人对话页,选中另一个进入的是标注「ABCD 123名成员」的群组对话页。
我使用Perl脚本结合LWP库实现图片发送功能,代码如下:
#!/usr/bin/perl -w use feature 'say'; use LWP; my $api = LWP::UserAgent->new (); my $chat_id = '1234567890'; my $photo = '/home/user/gallery/photo999.jpg'; my $response = $api->post( "https://api.telegram.org/bot<ABCDbot's token>/sendPhoto", [ 'chat_id' => $chat_id, 'caption' => 'Photo Randomly Selected by the gallery', 'photo' => $photo, ], 'Content_Type' => 'form-data', ); if ($response->is_success) { say "Response..... Success!"; } else { say "Response..... Failure!"; }
只要传入合法的chat_id和有效待发送文件,该脚本即可正常运行。但目前遇到的核心问题是:我无法找到这个拥有123名成员的群组对应的chat_id!我尝试过的所有获取方法要么已经过时失效,要么无法返回ABCD群组的正确chat_id。目前我可以正常获取自身的聊天ID、群内单个成员的ID、机器人自身的ID,也可以成功向这些对象发送图片、消息等内容,但始终无法向目标群组发送内容。
希望有经验的开发者可以一步步指导我获取群组chat_id的完整流程,或者提供记载了最新、可正常生效的获取方法的相关文档,非常感谢各位的协助。
可直接落地的获取流程
按顺序操作即可,不需要借助任何第三方工具:
- 第一步:确认机器人权限。先检查ABCDbot是否已经被加入123人的目标群组,进入群设置查看机器人权限,确保开启「发送消息」权限。
- 第二步:触发群消息事件。进入目标群组,发送一条任意内容的消息,可以直接@ABCDbot发送一句测试内容,比如
@ABCDbot 测试,这条消息会被推送到机器人的更新队列中。 - 第三步:调用官方接口拉取更新。打开浏览器,在地址栏输入
https://api.telegram.org/bot<替换成你从BotFather拿到的真实机器人token>/getUpdates访问,注意不要保留尖括号占位符。 - 第四步:提取群组chat_id。接口返回的JSON内容中,找到
chat字段,群组对应的chat_id是固定以-100开头的负数字符串,和个人用户的正数ID有明确区分,直接复制完整带负号的字符串即可。 - 第五步:验证ID有效性。把你Perl脚本里的
$chat_id变量值替换为刚拿到的群组ID,运行脚本测试发送,确认功能正常。
常见问题排查
- 如果访问getUpdates接口返回空数组:先去@BotFather找到ABCDbot,进入「Bot Settings - Group Privacy」选项,关闭隐私模式,再回到群里发一条新消息重新调用接口即可。隐私模式开启时,机器人只能收到群内@自己的消息,普通消息不会被收录到更新队列。
- 如果接口提示冲突:说明你之前给机器人配置过webhook,先在浏览器访问
https://api.telegram.org/bot<你的机器人token>/deleteWebhook清除webhook配置,再重新调用getUpdates即可。- 不要使用网上流传的第三方ID查询机器人,这类工具大多已经失效,还存在泄露机器人token、群隐私信息的风险,用官方原生接口是最稳定安全的方式。
内容的提问来源于stack exchange,提问作者Angus McLeod
相关产品推荐
相关产品推荐

