许多用户在使用 Telegram 时,需要实时关注某个群组中的特定消息,比如项目通知、关键词提及、交易信号或社群公告。手动翻阅群组消息既耗时又容易遗漏,因此需要一种自动监听机制。本教程将手把手教你如何利用 Telegram 官方 API 和简单的脚本,搭建一个高效的群组消息监听系统,实现消息自动抓取、关键词过滤和通知推送。

第一步:准备监听环境和基础账号配置

在开始监听之前,你需要确保拥有一个 Telegram 账号,并获取用于 API 调用的必要凭证。

具体操作说明:

  • 首先,在手机或电脑上注册并登录你的 Telegram 账号。建议使用一个专门用于监听任务的账号,避免与个人聊天混淆。
  • 接着,在 Telegram 中搜索并关注 BotFather(官方机器人创建工具)。发送 /newbot命令,按提示输入机器人名称和用户名(例如 MyMonitorBot),创建成功后你会收到一个 API Token,格式类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11。请务必保存好这个 Token。
  • 然后,在 Telegram 中搜索你创建的机器人用户名,点击 Start启动它。同时,将机器人邀请到你想要监听的群组中,并赋予它 管理员权限(至少需要“读取消息”权限)。

注意事项/小提示:

  • 创建机器人时,Token 一旦生成,请勿公开分享,否则他人可控制你的机器人。
  • 邀请机器人进群时,需确保你是群组管理员,否则无法邀请。
  • 如果群组设置了“仅允许管理员发言”,机器人仍可读取消息,但无法主动回复(监听不受影响)。

备用方案:

  • 若无法创建机器人,可以使用个人账号的 MTProto API进行监听,但步骤更复杂且存在封号风险,不推荐新手使用。
  • 如果找不到 BotFather,请检查网络连接,或尝试使用代理访问 Telegram。

第二步:获取目标群组的 Chat ID

监听消息需要知道目标群组的唯一标识符(Chat ID),这是机器人定位群组的依据。

具体操作说明:

  • 打开你的机器人对话窗口,向机器人发送任意一条消息(如 /start)。
  • 接着,在目标群组中发送一条测试消息(例如“测试”)。
  • 然后,访问以下 URL 以获取最近的更新:https://api.telegram.org/bot<你的Token>/getUpdates。将 <你的Token>替换为第一步获取的 Token。
  • 在返回的 JSON 数据中,找到 "chat":{"id":-1001234567890}这样的字段,负号开头的数字就是群组的 Chat ID。记录下这个 ID。

注意事项/小提示:

  • 如果返回的 JSON 为空,表示没有新消息。请确保机器人在群组中,并且群组中有人发送了消息。
  • Chat ID 通常是负数,个人用户的 ID 是正数。务必确认你复制的是群组的 ID。
  • 可以通过在线 JSON 格式化工具(如 json.cn)来更清晰地查看返回数据。

备用方案:

  • 如果 getUpdates返回的数据过多,可以在 URL 末尾添加 ?offset=-1来只获取最新一条更新。
  • 也可以使用第三方工具如 @getidsbot机器人,在群组中发送 /id直接获取 Chat ID。

第三步:编写简单的监听脚本(Python 示例)

监听的核心是通过代码不断轮询 Telegram API,获取群组新消息并处理。

具体操作说明:

  • 在你的电脑上安装 Python 3(推荐 3.7 以上版本)和 requests 库。打开终端或命令提示符,执行 pip install requests
  • 创建一个新文件,命名为 monitor.py,用文本编辑器打开,粘贴以下代码(请替换 YOUR_BOT_TOKENYOUR_CHAT_ID):

`python

import requests

import time

TOKEN = "YOUR_BOT_TOKEN"

CHAT_ID = "YOUR_CHAT_ID"

URL = f"https://api.telegram.org/bot{TOKEN}/"

last_update_id = 0

def get_messages():

global last_update_id

response = requests.get(URL + "getUpdates", params={"offset": last_update_id + 1, "timeout": 30})

data = response.json()

if data["ok"] and data["result"]:

for update in data["result"]:

last_update_id = update["update_id"]

if "message" in update and str(update["message"]["chat"]["id"]) == CHAT_ID:

text = update["message"].get("text", "")

print(f"新消息: {text}")

# 此处可添加关键词过滤或通知逻辑

time.sleep(2)

while True:

get_messages()

`

  • 保存文件后,在终端运行 python monitor.py。如果一切正常,当群组中有新消息时,控制台会打印出消息内容。

注意事项/小提示:

  • 代码中的 time.sleep(2)表示每 2 秒轮询一次,频率太高可能触发 API 限流,建议保持 1-5 秒。
  • 如果遇到 requests.exceptions.ConnectionError,请检查网络或代理设置。
  • 监听脚本需要持续运行,建议部署在云服务器或长期开机的电脑上。

备用方案:

  • 如果你不熟悉 Python,可以使用现成的 Telegram Bot API 封装库(如 python-telegram-bot),但需额外安装。
  • 也可以使用 Node.js 或 Go 语言编写监听脚本,原理相同。

第四步:实现关键词过滤和通知推送

仅仅打印消息还不够,你需要让机器人只监听你关心的内容,并发送通知。

具体操作说明:

  • 修改 monitor.py,在 print(f"新消息: {text}")之后添加关键词判断逻辑。例如,只监听包含“紧急”或“公告”的消息:

`python

keywords = ["紧急", "公告"]

if any(kw in text for kw in keywords):

print(f"匹配关键词: {text}")

# 发送通知给自己

requests.get(URL + "sendMessage", params={"chat_id": "你的个人用户ID", "text": f"群组消息: {text}"})

`

  • 要获取你的个人用户 ID,可以给机器人发送 /start,然后在 getUpdates返回数据中查找 "from":{"id":123456789}这个正数 ID。
  • 运行修改后的脚本,当群组中出现包含关键词的消息时,机器人会私聊发送通知给你。

注意事项/小提示:

  • 关键词匹配支持中文,但建议使用精确匹配或 in操作符,避免误触。
  • 通知消息可以自定义格式,例如添加时间戳、发送者昵称等。
  • 如果不需要通知,可以将通知代码注释掉,仅做日志记录。

备用方案:

  • 除了私聊通知,还可以将消息转发到另一个群组,使用 forwardMessageAPI。
  • 也可以集成邮件、钉钉或 Slack 通知,通过 requests 调用相应 Webhook。

第五步:验证监听是否正常工作

测试是确保系统可靠性的关键步骤。

具体操作说明:

  • 保持 monitor.py脚本运行,切换到 Telegram 目标群组。
  • 发送一条包含你设置的关键词的消息(例如“紧急通知:服务器维护”),观察控制台是否打印出匹配消息。
  • 同时检查你的机器人私聊窗口,确认是否收到了通知消息。
  • 发送一条不包含关键词的普通消息(例如“今天天气不错”),确保控制台没有误匹配,且没有收到通知。

注意事项/小提示:

  • 如果通知没有送达,检查 sendMessage请求的返回值是否包含错误信息。
  • 如果控制台打印了消息但没触发通知,检查关键词列表是否拼写正确。
  • 测试时建议使用两个不同的设备或账号,避免干扰。

备用方案:

  • 如果控制台无任何输出,检查 Token 和 Chat ID 是否正确,或重新执行 getUpdates测试。
  • 如果机器人始终收不到新消息,尝试重启脚本并确认群组中有人发言。

第六步:处理常见故障和脚本优化

监听脚本长时间运行可能遇到各种问题,需要提前应对。

具体操作说明:

  • 网络断开问题:在 get_messages函数中添加异常捕获,防止脚本崩溃:

`python

try:

response = requests.get(...)

except Exception as e:

print(f"网络错误: {e}")

time.sleep(10)

`

  • API 限流问题:如果轮询太快,Telegram 可能返回 429 Too Many Requests。建议使用 time.sleep(3)或更长时间,并在异常中增加重试逻辑。
  • 消息重复处理:通过 last_update_id确保每条消息只处理一次。如果脚本重启,last_update_id会重置,可能导致重复处理旧消息。可以在脚本启动时从文件读取上次的 update_id
  • 脚本后台运行:在 Linux 上使用 nohup python monitor.py &screen会话;在 Windows 上可使用任务计划程序或编写为服务。

注意事项/小提示:

  • 建议将日志输出到文件,而不是仅打印到控制台,方便排查问题。
  • 定期检查机器人是否被群组踢出,或被 Telegram 封禁(通常因频繁发送消息)。
  • 如果监听多个群组,可以维护一个 Chat ID 列表,循环处理。

备用方案:

  • 如果不想自己写脚本,可以使用现成的开源项目如 Telegram Monitor Bot,但需自行修改配置。
  • 对于极简需求,可考虑使用 IFTTTZapier等自动化工具,但功能有限。

常见问题补充

问:为什么 getUpdates返回空数据?

答:常见原因包括:Token 错误、机器人未加入群组、群组中无新消息、或使用了错误的 Chat ID。请重新检查并发送一条测试消息。

问:监听脚本运行一段时间后自动停止怎么办?

答:可能是网络超时或 API 返回异常。建议在代码中加入异常捕获和自动重连机制,同时使用 supervisorpm2等进程管理工具保持脚本存活。

问:如何监听多个群组的消息?

答:在代码中维护一个 chat_ids列表,在 if判断中检查消息的 chat_id是否在列表中。每个群组可以独立设置关键词和通知方式。

问:机器人被群组管理员踢出后如何恢复?

答:需要重新邀请机器人进群,并再次赋予管理员权限。建议在脚本中加入异常检测,如果收到 403 Forbidden错误,记录日志并暂停该群组监听。

问:监听的消息包含图片或文件怎么办?

答:本教程示例仅处理文本消息。如需处理媒体消息,可以在 update["message"]中检查 photodocument等字段,并下载文件或提取描述文字。

总结:

通过创建 Telegram 机器人、获取 Chat ID、编写 Python 轮询脚本并添加关键词过滤,你可以轻松搭建一个群组消息监听系统,实现自动抓取和通知推送,从此不再错过任何重要信息。