许多Telegram用户在日常运营中会遇到需要向多个群组或大量联系人发送相同消息的场景,例如活动通知、产品推广或社群维护。手动逐条发送不仅耗时费力,还容易触发Telegram的发送频率限制导致账号被临时封禁。此时,Telegram群发机器人便成为高效解决这一痛点的关键工具。它能够自动化完成消息分发,同时支持定时发送、多群组管理及联系人筛选,显著提升工作效率。
准备阶段:获取机器人Token与创建基础环境
具体操作说明:
首先,在Telegram中搜索并打开 @BotFather,这是Telegram官方的机器人管理账号。输入 /newbot命令,按照提示为你的机器人命名(如“MyGroupBroadcastBot”),然后设置一个以 bot结尾的用户名(例如 MyGroupBroadcast_bot)。创建成功后,BotFather会返回一个API Token,格式类似 1234567890:ABCdefGHIjklmNOPqrStuVWXyz。请务必复制并妥善保存这个Token,它是控制机器人的唯一凭证。接着,在电脑或服务器上安装Python环境(推荐3.8以上版本),并通过 pip install python-telegram-bot命令安装必要的库。
注意事项/小提示:
- 机器人Token相当于密码,切勿泄露给他人,否则他人可控制你的机器人。
- 如果你的服务器位于中国境内,可能需要配置代理才能正常连接Telegram API。
- 建议使用虚拟环境(如venv)来隔离项目依赖,避免与其他Python项目冲突。
备用方案:
- 如果不想使用Python,也可以使用Node.js的
node-telegram-bot-api库,或直接通过HTTP请求调用Telegram API。 - 若没有服务器,可在本地电脑上运行脚本,但需要保持电脑开机且网络稳定。
核心操作:编写群发消息脚本
具体操作说明:
创建一个新的Python文件,例如 broadcast.py。导入必要的库:from telegram.ext import Application, CommandHandler。使用你的Token初始化Application对象:application = Application.builder().token("你的TOKEN").build()。定义一个异步函数 async def broadcast(update, context),在其中获取发送目标列表(可以是一个包含群组ID或用户ID的列表)和消息内容。使用循环遍历列表,调用 await context.bot.send_message(chat_id=target_id, text=message)发送消息。最后,添加命令处理器:application.add_handler(CommandHandler("broadcast", broadcast)),并启动机器人:application.run_polling()。
注意事项/小提示:
- 发送消息时建议添加
await asyncio.sleep(1)延迟,避免因发送过快被Telegram限制(通常每分钟不超过20条消息)。 - 群组ID可以通过将机器人加入群组后,使用
@getidsbot获取。 - 消息内容支持Markdown或HTML格式,可通过
parse_mode="Markdown"参数实现富文本。
备用方案:
- 如果不想写代码,可以使用现成的群发机器人软件(如“TG群发宝”),但存在账号安全风险。
- 也可通过Telegram的 @ControllerBot等第三方服务实现可视化群发,但功能通常有限制。
验证结果:测试群发功能
具体操作说明:
保存并运行脚本(例如 python broadcast.py)。在Telegram中打开你的机器人,发送 /broadcast命令。如果脚本正确,机器人会向预设的群组或用户发送指定消息。检查目标群组是否收到消息,并确认消息内容、格式是否正确。同时,观察控制台输出,看是否有报错信息(如“Chat not found”表示ID错误)。如果一切正常,可以尝试发送多条消息测试稳定性。
注意事项/小提示:
- 首次测试建议只发送给1-2个目标,避免因错误导致大量无效发送。
- 如果机器人没有回应,检查Token是否填写正确,以及网络连接是否正常。
- 注意Telegram对机器人的限制:机器人无法主动向用户发送消息,除非用户先与机器人对话(可使用
send_message但需用户ID)。
备用方案:
- 如果机器人无响应,尝试在脚本中添加
print("Bot started")日志,确认是否成功启动。 - 使用
curl命令测试API:curl https://api.telegram.org/bot,返回/getMe {"ok":true}表示Token有效。
优化与扩展:添加定时发送与多群组管理
具体操作说明:
在脚本中引入 asyncio和 datetime库,实现定时发送功能。例如,使用 asyncio.create_task创建一个后台任务,在指定时间(如每天上午10点)调用发送函数。对于多群组管理,可以将群组ID存储在文本文件或数据库中,通过命令动态增删目标。更高级的用法包括:支持发送图片、文件或按钮(InlineKeyboardMarkup),以及根据用户标签进行定向发送。
注意事项/小提示:
- 定时任务建议使用
apscheduler库,它比纯asyncio更稳定且支持复杂调度。 - 批量发送时务必记录发送日志,包括成功/失败次数,便于排查问题。
- 不要将机器人用于发送垃圾广告,否则可能被Telegram封禁机器人账号。
备用方案:
- 如果不想自行开发定时功能,可使用系统自带的cron(Linux)或任务计划程序(Windows)定时执行脚本。
- 对于企业级需求,可考虑购买成熟的Telegram营销工具(如Gramaddict),但需谨慎评估安全性。
常见问题补充
问:机器人发送消息时提示“Chat not found”怎么办?
答:这通常是因为你使用的群组ID错误,或者机器人未被加入该群组。请确保机器人是群组管理员,并重新获取正确的群组ID(可尝试将机器人移除后重新加入)。
问:群发速度很慢,如何提升?
答:Telegram对单个机器人有频率限制(约30条消息/秒),但实际建议控制在5条/秒以内。你可以通过使用多个机器人账号并行发送,或使用代理池分散请求。注意:过快发送可能导致IP被临时封禁。
问:如何让机器人只向特定用户发送消息?
答:在发送前添加条件判断,例如从数据库中读取用户标签列表。你也可以让用户通过输入关键词订阅,然后仅向订阅用户发送。记住:机器人无法主动添加用户,必须用户先发起对话。
问:发送消息时如何避免被Telegram判定为垃圾信息?
答:避免发送重复内容、控制发送频率、使用人性化的消息模板(加入用户昵称等变量)。同时,确保每个目标群组或用户与你的业务相关,不要盲目群发。
问:机器人被Telegram封禁了怎么办?
答:首先检查是否触犯了Telegram服务条款(如发送色情、暴力内容)。如果无违规,可尝试通过 @BotSupport申诉。预防措施:使用备用机器人账号,并严格控制发送频率。
总结:搭建Telegram群发机器人的核心在于获取Bot Token、编写发送脚本并控制发送频率,通过合理的延迟与目标管理,即可实现稳定高效的批量消息分发。