Telegram机器人发送图片与视频的完整指南:从Bot API到实战

掌握Telegram机器人发送图片视频的核心方法,涵盖Bot API调用、Python示例、常见错误处理与最佳实践。

阅读提示涉及账号和安全设置时,请边阅读边核对当前设备界面。

在Telegram机器人的开发中,向用户发送图片和视频是最常见的需求之一。无论是用于通知、教程、产品展示还是娱乐交互,多媒体消息都能显著提升用户体验。然而,很多开发者初次接触时会对Bot API的参数感到困惑,甚至在处理大文件或网络错误时无从下手。本文将带你从零开始,系统学习Telegram机器人发送图片和视频的所有关键知识点,并通过可运行的代码示例让你快速上手。

一、发送图片与视频的两种核心方式

Telegram Bot API提供了sendPhotosendVideo两个方法,分别用于发送图片和视频。在调用之前,你需要明确使用的是哪种方式:

  • 通过文件ID发送:如果文件已经上传过Telegram,你可以直接使用其file_id发送。这种方式不会产生重复上传,速度最快,推荐优先使用。
  • 通过URL发送:直接传一个公网可访问的图片或视频URL,Telegram服务器会主动抓取并发送。注意URL必须公网可达,且文件格式被支持。
  • 通过multipart/form-data上传:适用于本地文件或需要动态生成的内容,比如从服务器本地读取图片后发送。此时需要将文件作为二进制流放在请求中。

二、python-telegram-bot库快速入门

如果你使用Python开发机器人,python-telegram-bot是目前最流行的库。首先安装:

pip install python-telegram-bot

下面是一个最简单的示例,当用户发送“图片”时,机器人回一张图片;发送“视频”时,回一个视频:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

async def send_photo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat_id = update.effective_chat.id
    await context.bot.send_photo(chat_id, photo='https://example.com/pic.jpg', caption='你好,这是一张图片')

async def send_video(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat_id = update.effective_chat.id
    await context.bot.send_video(chat_id, video='https://example.com/video.mp4', caption='请看这个视频')

def main() -> None:
    app = Application.builder().token('YOUR_BOT_TOKEN').build()
    app.add_handler(MessageHandler(filters.TEXT & filters.Regex('^图片$'), send_photo))
    app.add_handler(MessageHandler(filters.TEXT & filters.Regex('^视频$'), send_video))
    app.run_polling()

三、纯API调用:用requests发送文件

如果你不使用第三方库,直接调用HTTP接口也很简单。用requests发送本地文件的例子:

import requests

TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = '123456789'

url = f'https://api.telegram.org/bot/sendPhoto'
files = {'photo': open('local_image.jpg', 'rb')}
data = {'chat_id': CHAT_ID, 'caption': '来自本地上传的图片'}
response = requests.post(url, data=data, files=files)
print(response.json())

发送视频时,将sendPhoto改为sendVideo,字段名改为video。注意:Telegram对上传文件的大小有限制,图片最大5MB,视频最大50MB(免费公共Bot)。如果视频大于50MB,需要使用sendDocument并设置as_document=True或采用本地Bot方式。

四、巧妙利用媒体组一次发送多张

如果一次要发送多张图片或多个视频,可以使用sendMediaGroup方法。它允许你一次性发送最多10个媒体附件,且可以混合图片和视频。每个媒体项由typemedia和可选的caption组成:

from telegram import MediaGroup

media_group = MediaGroup()
media_group.add_photo(open('1.jpg', 'rb'))
media_group.add_photo(open('2.jpg', 'rb'))
media_group.add_video(open('v.mp4', 'rb'))

await context.bot.send_media_group(chat_id, media=media_group)

注意:在媒体组中,只有第一个媒体可以设置caption,且总计长度有限制。这在做轮播图或相册展示时非常实用。

五、常见错误与解决方案

  • 400 Bad Request: wrong file identifier:说明file_id无效或过期。请确认是通过Bot API获取的ID,且没有被删除。
  • file is too big:图片超过5MB或视频超过50MB。尝试压缩文件,或改用sendDocument发送。
  • URL fetch timeout:Telegram无法访问你的URL,检查域名是否公网可达,或文件是否被墙。
  • Unsupported URL protocol:URL必须为http或https,且不能包含本地路径。
  • Chat not found:确保chat_id正确,且机器人已被添加到该会话。

六、性能与最佳实践

  • 优先使用file_id:每次上传都会消耗资源,存储file_id可大幅提升效率。对于经常发送的固定资源,建议提前上传并记录其ID。
  • 合理设置caption:简洁且说明性的caption能提升点击率。支持HTML或Markdown格式,但需注意解析模式对齐。
  • 异步处理:在Web框架中,请将发送操作放在异步任务里,避免阻塞主线程。
  • 错误重试:网络抖动可能导致发送失败,建议捕获RetryAfter等异常并进行退避重试。
  • 使用缩略图:对于视频,可以指定thumb参数为本地文件或URL,让预览更美观。

总结

通过本文的学习,你已经掌握了Telegram机器人发送图片和视频的多种方法,包括Bot API参数、Python代码示例、媒体组、错误处理及优化技巧。实际操作时,请先梳理你的业务场景:如果是高频固定内容,走file_id;如果是用户生成内容,考虑上传后缓存ID。同时,时刻留意文件大小限制和网络异常,确保机器人在生产环境中稳定运行。现在就去实践吧,让你的机器人拥有更生动的表达能力!

FAQ

中文版使用教程

常见问题

Telegram机器人发送图片和视频分别有什么大小限制?

通过Bot API发送图片(photo)最大支持5MB,视频(video)最大支持50MB。如果超过该限制,需要改用sendDocument方法并设置as_document=True以文档形式发送,或者使用Telegram本地Bot(Local Bot)绕过限制。

如何用file_id复用已上传的图片或视频?

当机器人发送过某个文件后,API响应中会包含file_id字段。你可以将此ID存储在数据库中,下次发送时直接传入file_id参数,不需要重新上传。注意file_id仅在同一个机器人下有效,且如果文件被删除则无法使用。

sendMediaGroup一次最多可以发送多少个文件?

sendMediaGroup一次最多可发送10个媒体附件,它们会以媒体组(相册)的形式展示。媒体组可以混合图片和视频,但所有媒体的总大小不能超过50MB。