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

Telegram Bot发送YouTube视频报wrong file identifier错误排查

Telegram Bot 发送YouTube视频报错问题定位

报错核心原因

你遇到的Bad Request: wrong file identifier/HTTP URL specified错误,根源是对Telegram Bot API的接口规则理解有误:

  • bot.send_video方法的video参数仅支持传入Telegram已保存的文件ID、本地视频文件对象、可直接访问视频二进制内容的直链URL,不支持传入YouTube这类视频平台的网页观看链接(也就是你代码里写的https://www.youtube.com/watch?v=xxx格式的地址),Telegram服务器无法从这类网页链接中直接拉取到视频文件,因此会抛出参数错误。

代码存在的其他问题

  • 消息监听规则不匹配:你给消息处理器设置的监听内容类型是["url","video"],但触发逻辑写的是匹配纯文本内容Video,纯文本属于text类型消息,根本不会进入当前的处理函数,即使用户发送了Video关键词,发视频的逻辑也不会执行。
  • 流式参数生效前提错误:supports_streaming=True仅在传入有效视频源时生效,传入YouTube网页链接时,该参数没有任何作用,Telegram无法直接解析YouTube网页内的视频流实现站内流式播放。

可行实现方式

你可以根据需求二选一实现:

  1. 直接作为普通文本发送YouTube观看链接,Telegram客户端会自动生成链接预览,用户点击即可跳转至对应页面观看。
  2. 若需要实现Telegram站内流式播放,需要自行获取目标YouTube视频的可直接访问的视频文件直链,或者将视频下载到本地存储,再将直链/本地文件对象传入send_video方法,同时开启supports_streaming=True参数。

修正后参考代码

import telebot
from telebot import types
import config
bot = telebot.TeleBot(config.token)

# 补充text类型监听,才能匹配到用户发送的纯文本"Video"关键词
@bot.message_handler(content_types=["text", "url", "video"])
def handle_text(message):
    if message.text == 'Video':
        # 方案1:直接发送链接,靠Telegram自动生成预览
        bot.send_message(message.chat.id, "https://www.youtube.com/watch?v=HodO2eBEz_8")
        
        # 方案2:传本地视频/有效视频直链实现站内流式播放,替换对应参数即可
        # bot.send_video(
        #     chat_id=message.chat.id,
        #     video=open("local_video_file.mp4", "rb"),
        #     supports_streaming=True
        # )

bot.polling(none_stop=True, interval=0)

内容的提问来源于stack exchange,提问作者Илья Алексашин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:12:31