You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-telegram-bot向Telegram用户发送文档报错如何解决

问题原因

你搞混了API的使用方向:

  • download方法是用来下载用户发给Bot的文件的,不属于Message对象本身,自然会报属性不存在的错误
  • 你当前的需求是给用户发文件,应该调用发送类API,而不是下载类API
    另外你打开文件用的rb是只读二进制模式,也完全和你写的下载逻辑不匹配(下载写文件需要wb模式)。
解决方案

你使用的update+context的函数写法对应python-telegram-bot v13.x版本,直接调用context.bot.send_document即可实现发送文档的需求,示例代码如下:

def start(update, context):
    context.bot.send_document(
        # 指定要发送的目标聊天ID,就是当前触发命令的用户ID
        chat_id=update.effective_chat.id,
        # 传入本地文件的二进制对象
        document=open('cv.pdf', 'rb'),
        # 可选参数:指定用户收到文件时显示的文件名,不填则默认用本地文件名
        filename="个人简历.pdf"
    )
补充说明
  • document参数支持三种传值格式:本地文件路径字符串、打开的二进制可读文件对象、已经上传过的Telegram文件ID,大文件建议第一次上传后保存file_id,后续直接传ID速度更快
  • 如果你使用的是v20.x异步版本,需要把函数改成异步写法:
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await context.bot.send_document(
        chat_id=update.effective_chat.id,
        document=open('cv.pdf', 'rb'),
        filename="个人简历.pdf"
    )
  • 如果是需要下载用户发送给Bot的文件,正确写法如下:
def download_user_doc(update, context):
    # 先拿到用户发送的文档对象
    user_doc = update.message.document
    # 获取文件实例
    file = context.bot.get_file(user_doc.file_id)
    # 下载到本地
    file.download(custom_path="用户上传的简历.pdf")

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 13:30:05