您是否遇到过这样的需求:需要实时监控某个Telegram群组中的特定关键词、新成员加入或重要公告,但手动查看又太耗时?Telegram监听机器人就是解决这一问题的利器。它可以自动监听指定群组或频道中的消息,根据您设定的规则(如关键词、发送者、消息类型等)进行过滤,并将符合条件的消息实时推送到您指定的位置(如私人聊天、另一个群组或第三方服务)。本教程将手把手教您从零搭建一个属于自己的监听机器人,涵盖从创建机器人、配置监听规则到实际部署与故障排除的全流程。
准备工作:注册Telegram账号并获取API凭证
在开始搭建监听机器人之前,您需要先拥有一个Telegram账号,并获取用于控制机器人的API Token。
具体操作说明:
1. 打开Telegram应用,在搜索框中输入 @BotFather(这是Telegram官方机器人管理账号),点击进入对话。
2. 在聊天输入框中输入 /newbot并发送,BotFather会要求您为新机器人设置一个名称(如“MyMonitorBot”),然后设置一个以 bot结尾的用户名(如“MyMonitor_bot”)。
3. 创建成功后,BotFather会返回一条包含 Token的消息,格式类似 1234567890:ABCdefGHIJklmNOPqrstUVwxyz。请立即复制并安全保存此Token,后续所有操作都需要用到它。
4. 如果您需要监听群组消息,请确保您的机器人已被添加为目标群组的管理员,否则机器人无法读取群内消息。添加方法:在群组设置中点击“管理员”,选择“添加管理员”,搜索您的机器人用户名并确认。
注意事项/小提示:
- Token是机器人的唯一身份凭证,切勿泄露给他人,否则他人可以完全控制您的机器人。
- 如果忘记Token,可以重新联系BotFather,输入
/mybots,选择您的机器人,点击“API Token”即可查看。 - 建议使用私人聊天或仅自己可见的频道来接收监听结果,避免信息被他人看到。
备用方案:
- 如果您无法使用BotFather(如网络限制),可以尝试通过Telegram网页版或第三方客户端访问。
- 若Token不慎泄露,立即在BotFather中通过
/revoke命令撤销旧Token并生成新Token。
搭建监听运行环境:选择Python脚本或现成机器人框架
监听机器人本质上是一个持续运行的程序,您需要选择一个运行环境来执行它。本教程以最常用的Python脚本为例,同时提供无代码的现成机器人框架方案。
具体操作说明:
1. Python脚本方案(推荐有编程基础的用户):
- 在您的电脑或服务器上安装Python 3.7以上版本(访问 python.org下载安装包,安装时勾选“Add Python to PATH”)。
- 安装Telegram Bot库:打开命令行(CMD或终端),输入 pip install python-telegram-bot并回车。
- 创建一个新的Python文件(如 monitor_bot.py),用记事本或代码编辑器打开,粘贴以下基础代码框架(需替换其中的 YOUR_TOKEN):
`python
from telegram import Update
from telegram.ext import Application, MessageHandler, filters
TOKEN = "YOUR_TOKEN"
async def handle_message(update: Update, context):
# 这里写监听逻辑,例如打印消息内容
print(f"收到消息: {update.message.text}")
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
app.run_polling()
if __name__ == "__main__":
main()
`
2. 现成机器人框架方案(适合无代码用户):
- 搜索并访问 Combot或 Manybot等第三方机器人平台网站。
- 按照网站指引,将您的机器人Token绑定到该平台,然后通过图形化界面设置监听规则(如选择目标群组、输入关键词等)。
注意事项/小提示:
- Python脚本需要24小时不间断运行才能持续监听,建议部署在云服务器或长期开机的设备上(如树莓派、旧电脑)。
- 如果使用现成框架,注意选择有良好口碑且支持自定义监听规则的平台,避免数据泄露风险。
- 初次测试时,建议先在本地运行脚本,确认能收到消息后再部署到服务器。
备用方案:
- 若您没有Python环境,也可以使用 Node.js的
node-telegram-bot-api库,安装命令为npm install node-telegram-bot-api。 - 对于完全不想写代码的用户,可考虑使用 Telegram自带的消息转发功能(手动将群组消息转发到个人聊天),但无法实现自动过滤。
配置监听规则:设置关键词、发送者或频道过滤
机器人默认会监听所有消息,您需要配置规则来决定哪些消息需要被“监听”并推送。
具体操作说明:
1. 在Python脚本中,修改 handle_message函数,添加判断逻辑。例如,只监听包含“紧急”或“公告”关键词的消息:
`python
async def handle_message(update: Update, context):
text = update.message.text
if text and ("紧急" in text or "公告" in text):
# 将消息转发到您的私人聊天
await context.bot.send_message(chat_id="YOUR_CHAT_ID", text=f"监听到重要消息: {text}")
`
- 如何获取您的私人聊天ID?在Telegram中搜索 @userinfobot,发送任意消息,它会返回您的ID(一串数字)。
2. 如果您只想监听某个特定群组,可以添加群组ID过滤。获取群组ID的方法:将 @getidsbot加入目标群组,发送 /id,它会返回群组ID。
3. 在现成框架中,通常有“添加监听规则”的按钮,您可以直接输入关键词列表(每行一个),并选择目标群组和接收频道。
注意事项/小提示:
- 关键词支持中文、英文和数字,建议使用精确短语,避免误触发(例如“紧急”可能比“急”更准确)。
- 如果监听多个群组,可以在规则中区分来源,例如在推送消息时加上
来自群组A:的前缀。 - 注意Telegram API限制:机器人每秒最多发送30条消息,如果监听结果过多,建议增加去重或限流逻辑。
备用方案:
- 若您需要监听图片或文件中的文字(如截图中的关键词),Python脚本可以使用OCR库(如
pytesseract),但复杂度较高。 - 对于现成框架,部分平台支持“正则表达式”匹配,适合更复杂的模式(如匹配手机号格式)。
测试并验证监听功能:发送模拟消息确认生效
配置完成后,必须进行实际测试,确保机器人能正确监听并推送消息。
具体操作说明:
1. 在本地运行Python脚本:在命令行中进入脚本所在目录,输入 python monitor_bot.py并回车。如果看到类似“Bot started”的提示,说明机器人已启动。
2. 前往您设置的目标群组(或频道),发送一条包含关键词的测试消息(例如“紧急通知:今晚开会”)。
3. 检查您指定的接收位置(如私人聊天或另一个群组),看是否收到了机器人转发的消息。如果收到,说明监听成功。
4. 再发送一条不包含关键词的普通消息(如“今天天气不错”),确认机器人没有转发这条消息,以验证过滤规则正常工作。
注意事项/小提示:
- 如果测试时机器人没有反应,首先检查Token是否正确,以及机器人是否已被添加为目标群组的管理员。
- 如果使用现成框架,测试前请确保已“保存”或“应用”配置,部分平台需要手动激活规则。
- 测试时建议使用不同的关键词和不同发送者,全面验证规则的准确性。
备用方案:
- 若本地测试成功但部署到服务器后失败,检查服务器的网络防火墙是否屏蔽了Telegram API的IP(149.154.167.0/24)。
- 如果机器人没有推送消息,可以尝试在脚本中添加
print("收到消息")输出到控制台,确认脚本是否真的收到了消息。
部署到服务器实现7x24小时监听:使用云服务器或免费平台
本地运行无法保证长期在线,需要将机器人部署到云端。
具体操作说明:
1. 云服务器方案(推荐):
- 购买一台最低配置的云服务器(如阿里云、腾讯云、AWS的免费套餐或按量付费实例),操作系统选择 Ubuntu 20.04或 CentOS 7。
- 通过SSH连接服务器,安装Python和依赖库(命令同本地安装)。
- 将脚本文件上传到服务器(使用 scp命令或FTP工具)。
- 在服务器上使用 nohup python3 monitor_bot.py &命令让脚本在后台运行,即使关闭终端也不会停止。
2. 免费平台方案(如Heroku、PythonAnywhere):
- 注册Heroku账号,创建一个新应用,将脚本代码上传到Git仓库,并设置 Procfile文件(内容为 worker: python3 monitor_bot.py)。
- 在PythonAnywhere上,创建一个“Always-on task”任务,将脚本路径填入并启动。
注意事项/小提示:
- 云服务器方案中,建议使用 systemd将脚本注册为系统服务,实现开机自启和自动重启。配置文件示例(路径
/etc/systemd/system/monitor_bot.service):
`
[Unit]
Description=Telegram Monitor Bot
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/monitor_bot.py
Restart=always
User=root
[Install]
WantedBy=multi-user.target
`
- 免费平台通常有运行时长限制(如Heroku每月550小时免费额度),且可能因长期无活动而休眠,建议定期发送心跳包。
- 部署后,务必修改脚本中的Token和Chat ID为服务器环境中的正确值,并移除本地测试用的打印语句。
备用方案:
- 如果您有闲置的旧手机或树莓派,可以安装Termux(Android)或Linux系统,同样能实现24小时运行,且成本更低。
- 对于极简需求,可使用 IFTTT或 Zapier这类自动化工具,连接Telegram与其他服务,但灵活性较低。
常见问题补充
Q1:机器人启动后一直报错“Conflict: terminated by other getUpdates request”?
A:这个错误通常是因为有另一个程序正在使用同一个Token(比如您同时运行了本地脚本和服务器脚本)。解决方法:关闭所有其他使用该Token的程序,只保留一个运行实例。如果无法找到,可以在BotFather中执行 /revoke重新生成Token。
Q2:机器人能收到消息,但无法转发到我的私人聊天?
A:首先确认您填写的Chat ID是否正确。可以尝试让机器人主动发送一条消息给您:在脚本中添加一行 await context.bot.send_message(chat_id=YOUR_CHAT_ID, text="测试消息")并运行,如果您收到了,说明ID正确。如果没收到,请检查您是否先主动给机器人发过消息(Telegram要求用户必须先与机器人对话一次,机器人才能主动发消息给用户)。
Q3:如何监听多个群组的不同关键词?
A:在Python脚本中,可以使用字典来映射群组ID和对应的关键词列表。例如:
`python
monitor_rules = {
-1001234567890: ["紧急", "重要"],
-1009876543210: ["公告", "通知"]
}
`
然后在 handle_message函数中,根据 update.message.chat_id获取对应的规则进行匹配。
Q4:监听结果太多,如何只推送摘要或统计信息?
A:您可以在脚本中维护一个列表,收集一段时间内的消息,然后定期(如每小时)发送一条汇总消息,而不是每条都推送。使用 asyncio的 create_task可以实现定时任务。
总结:搭建Telegram监听机器人的核心在于获取正确的API Token、配置精准的过滤规则,并确保机器人有权限读取目标群组消息,最后通过持续运行的程序实现自动化监控。