在Telegram的生态中,机器人是不可或缺的自动化工具。无论是定时推送新闻、发送产品图集,还是管理文件分发,让机器人主动发送图片和文件都是最常用的功能之一。本文将以通俗易懂的方式,带你掌握Telegram机器人发送图片文件的完整流程。
一、准备工作:创建机器人与获取Token
所有Telegram机器人的操作都始于BotFather。在Telegram中搜索并打开@BotFather,发送 /newbot,按提示设置机器人名称和用户名(用户名必须以 bot 结尾)。创建成功后,BotFather会返回一个HTTP API Token,形如 123456789:ABCdefGhijkl... ,这个Token是调用API的唯一凭证。
注意:Token务必妥善保存,不要泄露给他人。
二、使用HTTP API发送图片与文件(基础方法)
Telegram Bot API提供了两个核心端点:sendPhoto 和 sendDocument。你可以通过简单的HTTPS请求,让机器人发送图片或任意格式的文件。
1. 发送图片(sendPhoto)
请求格式:https://api.telegram.org/bot<TOKEN>/sendPhoto
常用参数:chat_id(接收者ID),photo(图片URL或文件ID),可选的 caption(图片说明)。
示例(使用curl发送本地图片):
curl -F "chat_id=123456789" -F "photo=@/path/to/photo.jpg" -F "caption=这是测试图片" https://api.telegram.org/bot<YOUR_TOKEN>/sendPhoto
2. 发送文件(sendDocument)
类似地,用 sendDocument 端点,参数 document 支持PDF、ZIP等文件。示例:
curl -F "chat_id=123456789" -F "document=@/path/to/file.pdf" https://api.telegram.org/bot<YOUR_TOKEN>/sendDocument
通过浏览器访问返回的JSON,即可确认消息是否发送成功。
三、使用Python库发送图片文件(推荐)
对于开发者和自动化场景,使用 python-telegram-bot 库更简洁高效。首先安装:
pip install python-telegram-bot
以下代码演示如何发送图片和文件:
from telegram import Bot
from telegram.error import TelegramError
TOKEN = "YOUR_TOKEN"
CHAT_ID = "123456789"
bot = Bot(token=TOKEN)
# 发送本地图片
with open("photo.jpg", "rb") as f:
bot.send_photo(chat_id=CHAT_ID, photo=f, caption="来自Python的照片")
# 发送网络URL图片
bot.send_photo(chat_id=CHAT_ID, photo="https://example.com/photo.jpg")
# 发送本地文件(如PDF)
with open("document.pdf", "rb") as f:
bot.send_document(chat_id=CHAT_ID, document=f)
# 发送文件并附带自定义文件名
bot.send_document(chat_id=CHAT_ID, document=open("report.pdf", "rb"), filename="report_2025.pdf")
print("发送成功")
如果要实现定时推送,可结合 schedule 库或异步任务队列。
四、常见问题与解决方法
1. 文件大小超限
Telegram对通过Bot发送的文件有大小限制:图片最大5MB,文件最大50MB。若超出,可先压缩或使用分片上传(需借助云存储)。
2. 图片无法显示
检查图片URL是否公开可访问,或本地路径是否正确。若使用文件ID发送,需确认ID有效。
3. 403错误或权限问题
确认Token是否正确,机器人是否被对方拉黑或群组禁言。群组中需先添加机器人并设置为管理员(部分操作需要)。
4. 发送到频道或群组
将 chat_id 替换为频道用户名(如 @channel_name),或获取群组ID(可通过 getUpdates 方法获取)。
五、进阶技巧:批量发送与媒体组
需要一次发送多张图片时,可使用 sendMediaGroup 方法,将图片作为媒体组发送,用户可左右滑动查看。示例:
from telegram import InputMediaPhoto
media = [
InputMediaPhoto(open("img1.jpg", "rb"), caption="图1"),
InputMediaPhoto(open("img2.jpg", "rb"), caption="图2"),
]
bot.send_media_group(chat_id=CHAT_ID, media=media)
此外,还可以通过 ReplyKeyboardMarkup 或 InlineKeyboardButton 添加交互按钮,让用户点击后触发图片发送。
总结
通过本文的学习,你已经掌握了Telegram机器人发送图片文件的核心方法:从创建机器人、调用API到使用Python库实现自动化。无论是简单的单张图片还是批量媒体组,都能轻松实现。现在,你可以开始构建自己的自动化推送工具,比如每日天气图片、产品轮播图或文件分发机器人。