在Telegram机器人的开发中,向用户发送文件是高频需求。无论是图片、文档、音频还是视频,Bot API提供了统一的接口来轻松实现。本文将从准备工作开始,一步步讲解如何通过Python代码让机器人发送文件给用户,并介绍常见问题和解决技巧。
准备工作:创建机器人与获取Token
在开始编写代码之前,你需要完成以下准备:
- 在Telegram中向@BotFather发送
/newbot命令,创建一个新机器人并获取Token。Token是调用API的唯一凭证,请妥善保管。 - 安装Python环境(推荐3.6+),并安装requests库:
pip install requests - 获取接收人的chat_id。可以通过向机器人发送消息后,调用
getUpdates方法获取,或使用一些聊天工具查看。
使用sendDocument发送文件
Bot API的 sendDocument 方法用于发送通用文件。你可以上传本地文件,也可以提供一个公网可访问的URL。以下是Python示例:
import requests
TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'USER_CHAT_ID'
url = f'https://api.telegram.org/bot/sendDocument'
# 发送本地文件
files = {'document': ('example.pdf', open('example.pdf', 'rb'), 'application/pdf')}
data = {'chat_id': CHAT_ID}
response = requests.post(url, data=data, files=files)
print(response.json())
# 发送URL文件
url_data = {
'chat_id': CHAT_ID,
'document': 'https://www.example.com/example.pdf'
}
response = requests.post(url, data=url_data)
print(response.json())注意:当使用URL发送时,Telegram服务器会去下载该文件,因此URL必须公网可访问且没有登录限制。
发送其他类型的文件
根据文件类型,你可以使用以下方法:
sendPhoto:发送图片,支持JPG、PNG等。sendVideo:发送视频,支持MP4等。sendAudio:发送音频,支持MP3等。sendAnimation:发送GIF动画。
这些方法的参数与 sendDocument 类似,只需将 document 替换为对应字段名(如 photo, video)。还可以通过 thumb 参数设置缩略图,用 caption 添加说明文字,限制在1024字符以内。
通过file_id发送已存在的文件
当用户或你的机器人曾经上传过某个文件,Telegram会返回一个唯一的 file_id。之后你可以直接使用这个ID来重复发送该文件,无需再次上传,节省时间和带宽。获取 file_id 的方法有两种:
- 在机器人接收到的消息对象中提取
document.file_id或photo.file_id。 - 调用
getFile方法传入file_id来获取更多信息,但发送时仍使用原来的file_id。
示例:
data = {
'chat_id': CHAT_ID,
'document': 'AgACAgUAAxkBAA...'
}
response = requests.post(url, data=data)错误处理与常见问题
| 错误码 | 可能原因 | 解决方案 |
|---|---|---|
| 400 | chat_id无效或文件格式不支持 | 检查chat_id是否正确,确保文件符合类型要求 |
| 403 | 机器人被用户屏蔽或禁用 | 检查用户是否主动联系过机器人 |
| 413 | 文件过大 | Telegram限制本地上传最大50MB,尝试压缩文件或使用URL |
| 429 | 请求过于频繁 | 触发限流,稍后重试或降低发送频率 |
此外,当使用URL发送时,如果Telegram无法访问该URL(例如网络不通、文件不存在),会返回400错误。建议先手动测试URL是否可正常下载。
总结
通过上述步骤,你应该已经掌握了Telegram机器人发送文件的基本方法和进阶技巧。如果你正在思考telegram机器人如何发送文件给用户,不妨从调用 sendDocument 开始,按照本文示例编写你的第一个文件发送功能。在实践中遇到问题时,只需对照错误码表排查,就能快速定位并解决。