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
相关产品推荐
相关产品推荐

