在Telegram机器人开发中,发送照片和文件是常见需求。无论是图片分享、文档传递还是数据导出,掌握机器人发送多媒体消息的方法都能让你的机器人更加实用。本文将基于Telegram Bot API,详细介绍发送照片和文件的具体操作,并给出可运行的代码示例。
Telegram机器人发送照片和文件的基础
Telegram Bot API提供了两个核心方法:sendPhoto用于发送照片,sendDocument用于发送文件。所有请求都需要通过HTTPS发送到https://api.telegram.org/bot<token>/METHOD_NAME,其中<token>是你在BotFather处获取的机器人令牌。
发送方式有两种:一是直接上传文件(multipart/form-data),二是通过URL发送已有文件。对于大文件,Telegram要求使用本地Bot API服务器,但标准API通常也够用。
使用sendPhoto方法发送照片
sendPhoto方法的必要参数是chat_id(聊天标识)和photo(照片)。照片可以是一个URL,也可以是一个文件ID(多次发送同一文件时使用)。可选参数包括caption(图片说明)、reply_to_message_id等。
示例请求(通过curl):
curl -F "chat_id=123456789" -F "photo=@path/to/picture.jpg" -F "caption=欢迎关注" https://api.telegram.org/bot<token>/sendPhoto如果要通过URL发送,则:
curl -F "chat_id=123456789" -F "photo=https://example.com/picture.jpg" https://api.telegram.org/bot<token>/sendPhoto使用sendDocument方法发送文件
sendDocument方法用于发送任意文件,参数与sendPhoto类似,但用document字段。同样支持URL和文件上传。
示例:
curl -F "chat_id=123456789" -F "document=@report.pdf" -F "caption=月度报告" https://api.telegram.org/bot<token>/sendDocument用curl快速测试发送照片
如果你还没有程序环境,可直接用curl测试。首先获取你的机器人token,然后按上面命令替换chat_id和照片路径即可。注意文件路径需要在当前目录或绝对路径。
使用Python实现自动发送
使用Python的requests库可以轻松集成到你的项目中。先安装:pip install requests,然后编写以下代码:
import requests
BOT_TOKEN = "你的token"
CHAT_ID = "接收者的chat_id"
# 发送照片
url = f"https://api.telegram.org/bot/sendPhoto"
files = {'photo': open('picture.jpg', 'rb')}
data = {'chat_id': CHAT_ID, 'caption': '测试照片'}
r = requests.post(url, files=files, data=data)
print(r.json())
# 发送文件
url = f"https://api.telegram.org/bot/sendDocument"
files = {'document': open('doc.pdf', 'rb')}
data = {'chat_id': CHAT_ID, 'caption': '测试文件'}
r = requests.post(url, files=files, data=data)
print(r.json())你也可以使用python-telegram-bot等第三方库,但底层原理相同。
注意事项与常见问题
- 照片最大尺寸为10MB,文件最大为2GB(标准API),但通过本地Bot API服务器可跳过限制。
- 上传文件时,请确保
content-type被正确设置,否则可能发送失败。 - 对于多渠道,
chat_id可能是用户ID或群组ID,需提前获取。 - 发送文件ID可以节省带宽,但文件ID长期有效,可在发送后从响应中获取。
- 如果发送大批量文件,建议使用多线程或异步方式避免超时。
总结
通过Telegram Bot API发送照片和文件并不复杂,掌握sendPhoto与sendDocument两个方法即可满足大部分需求。结合Python等编程语言,你可以轻松实现定时推送、文件分发等高级功能。希望本文能帮助你在Telegram机器人开发中更进一步。