Telegram机器人批量发送文件给多个用户:从API调用到群发部署的完整实战

本文详细介绍Telegram机器人向多个用户批量发送文件的常用方案,包含逐用户发送、循环队列、广播模式、错误处理与速率限制,并提供Python代码示例与实战部署步骤。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

为什么需要机器人批量发送文件

在Telegram运营中,经常需要向多个用户或群组发送文件,例如产品资料、电子书、课程视频、发票等。手动逐个发送效率极低,而Telegram机器人提供了官方API,可以编程方式向任意用户或群聊发送文件,实现批量推送。本文将基于Python + python-telegram-bot库,演示如何构建一个稳定、可靠的批量文件发送机器人。

方案概览:三种批量发送模式

  • 逐用户发送:遍历用户ID列表,逐个发送文件,适合数量较少、需要精确控制的场景。
  • 广播模式:将同一文件同时推送给多个聊天,需要处理速率限制与失败重试。
  • 队列模式:使用异步队列控制发送频率,避免触发Flood Control,适合大规模群发。

基础准备:创建机器人与获取用户ID

  1. 在Telegram中找到@BotFather,发送/newbot,按提示设置名称和用户名,获得BOT_TOKEN
  2. 获取目标用户或群组的Chat ID:可向机器人发送任意消息,然后访问https://api.telegram.org/bot<你的TOKEN>/getUpdates,在返回的JSON中查找message.chat.id
  3. 对于群组,可通过添加机器人到群后,使用@getidsbot等辅助机器人获取群ID。

核心实现:使用python-telegram-bot发送文件

安装依赖:pip install python-telegram-bot

以下代码演示如何向多个用户发送文件(以图片为例):

from telegram import Bot
from telegram.error import TelegramError
import asyncio

async def send_file_to_users(token, chat_ids, file_path, caption=None):
    bot = Bot(token)
    for chat_id in chat_ids:
        try:
            with open(file_path, 'rb') as f:
                await bot.send_document(chat_id=chat_id, document=f, caption=caption)
            print(f"发送成功: ")
        except TelegramError as e:
            print(f"发送失败 : ")
        await asyncio.sleep(0.5)  # 控制频率,避免触发限制

if __name__ == "__main__":
    TOKEN = "你的BOT_TOKEN"
    USERS = [123456789, 987654321, 555123456]  # 替换为目标Chat ID
    FILE = "report.pdf"
    asyncio.run(send_file_to_users(TOKEN, USERS, FILE))

发送其他类型文件,只需替换方法:send_photosend_videosend_audiosend_document等。

高级技巧:处理大文件与速率限制

  • 大文件上传:如果文件超过Telegram限制(最大2GB),考虑使用send_documentthumb参数或压缩文件。
  • Flood Control:Telegram对同一次请求有限制(大约每秒1条消息),使用time.sleep(1)或更智能的指数退避。
  • 错误处理:捕获TelegramError,区分“Chat not found”和“Bot was blocked”,记录失败列表以便重试。
  • 并发优化:使用asyncio.gather配合信号量控制并发数,提升发送效率而不触发限制。

实战:从Excel名单读取并批量发送

更实际的场景是,用户名单存储在Excel表中。使用pandas读取:

import pandas as pd

df = pd.read_excel("users.xlsx")
chat_ids = df["chat_id"].tolist()
# 然后调用上面的发送函数

注意:仅能向已主动与机器人互动的用户发送消息,否则Telegram会限制。

完整部署建议

  • 将脚本部署到云服务器或GitHub Actions,定时运行实现日常推送。
  • 记录发送日志,便于追溯。
  • 为机器人添加管理员权限(若发送到群组),否则可能被限制。

常见问题与解决方案

Q1: 提示“Chat not found”怎么办?

确认Chat ID正确,且用户未屏蔽机器人。若用户从未与机器人对话,需先由用户主动发送/start

Q2: 发送文件时收到“Bad Request: file is too big”

Telegram对文件大小有限制,机器人在发送时必须提供本地文件或已有文件的file_id,不能直接发送URL。如使用URL,需先调用getFile获取file_id。

Q3: 如何动态修改接收者列表?

可以结合Webhook或定时从数据库读取,或通过机器人命令/subscribe收集用户ID。

总结

Telegram机器人批量发送文件并不复杂,核心是调用sendDocument等API,配合合理的频率控制和错误处理。通过本文的Python示例,你可以快速构建自己的文件群发工具。注意遵守Telegram的使用政策,避免骚扰用户,保护好用户隐私。

FAQ

下载与安装

常见问题

Telegram机器人能否主动向任意用户发送文件?

不能。Telegram机器人只能向至少与机器人发起过一次对话(即发送过/start命令)的用户发送消息。这是为了防止垃圾信息。如果你需要向用户推送文件,必须确保用户已经主动联系过你的机器人。

发送文件时,Telegram的速率限制具体是多少?

Telegram的flood控制通常限制为每个聊天每秒发送1条消息,但全局限制可能会有所变化。批量发送时建议每条消息间隔约0.5~1秒,或使用退避算法处理429错误。

机器人发送文件给多个用户,如何避免内容被转发?

Telegram本身不提供禁止转发文件的选项,但你可以使用水印、设置文件仅限本人查看等策略,或者使用被保护的内容功能(仅限频道)。对于直接发送的文件,无法完全禁止转发,建议通过加密或其他DRM方案。