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

Node.js开发Telegram Bot视频流转VideoNote报错问题咨询

问题解答

1. 处理思路是否正确?

你的核心方向是对的:Telegram Bot的sendVideoNote方法确实不能直接传入远程文件URL,需要提供文件流或者本地文件路径来完成发送。但你在实现流的环节出现了关键错误。

2. 操作有误的地方

你犯的核心错误是用fs.createReadStream()读取远程HTTPS URL:

  • fs.createReadStream()是Node.js文件系统模块的方法,只能读取本地磁盘上的文件,无法处理远程URL地址。你传入的videoPath是https://api.telegram.org/file/bot...这样的远程链接,fs根本无法解析,这就是报错的直接原因。

正确的实现方案

你需要用HTTP客户端(比如axios或node-fetch)来获取远程视频的流,再传给sendVideoNote。下面是修正后的代码示例:

步骤1:先安装依赖(以axios为例)

npm install axios

步骤2:修正代码

const axios = require('axios');

if(msg.video != null) {
  bot.getFile(msg.video.file_id)
    .then(function (video){
      const videoPath = "https://api.telegram.org/file/bot" + TOKEN + "/" + video.file_path;
      console.log("Source File path is: ", videoPath);
      
      // 用axios获取远程视频的流
      axios({
        method: 'get',
        url: videoPath,
        responseType: 'stream' // 关键:指定响应类型为流
      }).then(response => {
        // 发送VideoNote
        bot.sendVideoNote(chatID, response.data)
          .then(() => console.log("VideoNote发送成功"))
          .catch(err => console.error("发送失败:", err));
      })
      .catch(err => console.error("获取远程视频流失败:", err));
    })
    .catch(err => console.error("获取文件信息失败:", err));
}

额外注意事项

  • VideoNote有严格格式要求:必须是1:1比例的正方形视频,文件大小不能超过1GB,时长不超过60秒。如果你的源视频不符合,发送会失败,建议加入格式校验逻辑。
  • 确保你的Bot Token有足够权限,并且目标聊天/频道允许Bot发送消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:03