在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_id和api_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真正成为你的信息路由器。