Telegram关键词订阅推送机器人搭建指南:自动过滤消息并即时通知

本文详细讲解如何利用Telegram Bot API与Telethon库打造关键词订阅推送机器人,实现频道、群组消息的实时监控与精准过滤,让你的重要信息不再错过。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

在Telegram的庞大信息流中,我们常常需要关注特定频道或群组里的某些关键词,比如技术讨论中的“Python”、行业资讯里的“融资”或社群公告中的“维护”。手动盯着屏幕不仅效率低下,还容易遗漏。借助Telegram机器人实现关键词订阅推送,可以让你自动监控目标来源,一旦出现指定词条,机器人立即把消息推送到你的私人聊天或专属群组,真正做到重要信息零错过。

关键词订阅推送机器人原理与选型

实现关键词订阅推送有两种主流方式:一种是使用现成的第三方机器人,比如部分社群提供的“关键词提醒”Bot,但这类机器人往往受限于服务商,无法自定义复杂逻辑且存在隐私风险。另一种是自主开发,利用Telegram开放接口,自己掌控数据流向和过滤规则。自主开发有两个技术路线:基于Bot API(HTTP接口)和基于Telethon(MTProto客户端库)。Bot API适合处理“用户主动给机器人发消息触发”的场景;Telethon则能以用户账号身份监听任意群聊和频道,实现更灵活的消息流监控。

方案一:基于Telethon实现关键词订阅推送

Telethon是Python的第三方Telegram客户端库,可以模拟客户端登录,从而接收来自频道和群组的实时消息。这套方案需要你拥有一个Telegram账号(建议使用小号,避免影响主账号),并创建API凭据。

步骤1:创建Telegram应用获取API ID和Hash

访问my.telegram.org,登录你的Telegram账号,在“API development tools”中创建一个新应用,填写应用标题和简称(可随意填写)。创建后你会得到api_idapi_hash,这是Telethon连接的关键凭据。

步骤2:安装Telethon库

pip install telethon

建议使用虚拟环境,避免依赖冲突。安装完成后,导入库并创建客户端实例。

步骤3:编写关键词监控核心脚本

下面的核心代码展示了如何监听指定频道(或群组)的新消息,并判断是否包含关键词列表中的任意一个。如果命中,则调用Bot API将消息转发或推送到你的个人聊天(或通知群组)。

示例代码片段:

from telethon import TelegramClient, events

api_id = 123456
api_hash = 'your_api_hash'
# 用自己的账号登录(session会保存登录状态)
client = TelegramClient('monitor', api_id, api_hash)

# 要监控的对话实体(用户名或ID)和关键词
watch_entities = ['some_channel_username']
keywords = ['重要通知', '维护']

@client.on(events.NewMessage(chats=watch_entities))
async def handler(event):
    text = event.raw_text or ''
    if any(kw in text for kw in keywords):
        # 假设你的接收者为 @your_receiver 或给自己发消息
        await client.send_message('me', f'【关键词命中】\n来源: {event.chat.title}\n消息: \n链接: https://t.me/{event.chat.username}/{event.id}')

client.start()
client.run_until_disconnected()

你需要开启客户端后保持运行。推荐将脚本部署在云服务器(如VPS)或使用systemd托管,保证7×24小时在线。

步骤4:将推送消息接入Bot API(可选)

如果需要让普通用户通过Bot订阅关键词,可以配合BotFather创建一个Bot,获取Token后,在Telethon脚本中通过HTTP请求调用Bot API的sendMessage方法,把通知发送到指定聊天。例如,当命中的消息需要推送给一个群组时,可以用requests.post实现。更优雅的方式是只使用Bot API同时接收更新,但这需要处理长轮询和Webhook,复杂度较高。对于内部个人监控,Telethon直接发送给‘me’已经足够。

步骤5:配置常驻运行

在服务器上,使用nohup或systemd服务管理脚本,确保意外断开后自动重启。也可以配合Docker部署,实现一键运行。如果只是临时使用,本地电脑加上电源计划即可。

方案二:基于Bot API + Python构建订阅系统

如果希望让多用户各自设置不同的关键词,Telethon的个人账号方式就不再适用。这时应使用Bot API,让用户私聊你的Bot,Bot接收用户发送的关键词后,将其存入数据库(如SQLite),然后在需要监控的群组中添加Bot为管理员,通过getUpdates轮询或Webhook获取群组新消息,匹配每个用户的关键词后逐一推送。

核心逻辑拆解

  • 用户注册与订阅管理:使用/subscribe命令让用户发送关键词,Bot存储用户ID和关键词列表。
  • 监听群组消息:将Bot加入目标群组并设为管理员,同时开启“读取消息”权限,Bot就能收到群里所有新消息。
  • 关键词匹配与推送:将消息文本与所有用户的关键词进行比对,命中后调用sendMessage向对应用户发送通知,包含原文和跳转链接。

这种模式适合做公开的“关键词提醒机器人”,但需要注意Telegram Bot API的更新获取有100条限制,需要及时处理未读更新,且不能接收频道匿名帖子的实时事件(除非频道开启讨论群)。因此,纯Bot方案更适合群组场景。

关键代码与参数详解

无论哪种方案,都要注意以下几点:

  • 实体解析:监听对话时,可以使用用户名、ID或手机号,必要时用client.get_entity()解析。
  • 消息类型:除了纯文本,还要处理媒体消息的caption(配文),可以用event.message.message获取。
  • 多关键词逻辑:建议采用正则表达式(re.search)代替简单的in,支持大小写不敏感和复杂匹配。
  • 去重与频率限制:同一关键词在短时间内重复触发会打扰用户,可以增加冷却时间,比如一分钟内只推送一次。
  • 隐私与安全:如果使用Telethon,务必保护session文件,避免泄露导致账号被滥用;Bot Token也不要提交到公开仓库。

常见问题与优化建议

问题1:为什么收不到频道消息?

Telethon监听频道必须使用用户账号,且该账号需要先加入频道。纯Bot无法直接监听频道动态,除非频道开设有讨论群,Bot加入讨论群后才能收到新帖子通知。

问题2:如何实现多关键词分组订阅?

可以在数据库中为用户建立多个关键词组,每个组对应不同通知场景。例如“工作”组和“娱乐”组,推送时标注分组名称。

问题3:推送消息频繁被限流?

Telegram对Bot发送消息有频率限制(约30条/秒),个人账号也有安全限制。建议为每个用户设置推送间隔,合并同类消息,比如每10分钟汇总一次命中消息,减少请求数。

总结

通过Telegram机器人实现关键词订阅推送,本质上是开发一个消息过滤与转发引擎。无论是使用Telethon的个人监听,还是借助Bot API的服务型订阅,都能大幅提升你追踪重要信息的效率。对于个人用户,推荐先跑通Telethon脚本,快速解决问题;若想做成面向多人的服务,再升级为Bot API架构。掌握这些技巧后,你还可以扩展更多玩法,如热门话题榜、舆情监控等,让Telegram真正成为你的信息路由器。

FAQ

安装与配置指南

常见问题

Telegram机器人关键词订阅推送需要哪些前置条件?

至少需要一个Telegram账号(用于Telethon方式)或一个Bot Token(通过BotFather创建),以及Python环境和基本的编程能力。如果是监听频道,还需要先加入目标频道。

纯Bot API能直接监听频道消息吗?

纯Bot不能直接监听频道消息,因为频道的匿名帖子不会直接推送给非管理员的Bot。但可以通过频道关联的讨论群,让Bot加入群组并在获得管理员权限后,通过群组消息监听帖子转发。

关键词订阅推送机器人会不会被封号?

使用Telethon个人账号存在一定风控风险,尤其当账号行为异常(如大量监控和转发)时可能触发限制。建议使用小号,并按照官方文档合理控制请求频率。Bot账号则相对安全,只要不违反Telegram服务条款和反垃圾政策。