无法向Bale Bot发送FileMessage:上传成功但发送时连接重置
首先,我看到你在使用bale.ai机器人SDK发送文件消息时,明明文件上传成功拿到了fileId等信息,但调用bot.send()时出现了连接重置的问题。结合你的代码,我整理了几个大概率的原因和对应的解决思路:
1. FileMessage的参数传错了
你创建FileMessage的时候,第三个参数填的是'telename'——这个参数应该是文件的原始文件名(比如你的a.html),而不是随便填的字符串。如果SDK后端对这个参数有校验,错误的值会直接导致请求被拒绝,进而触发连接重置。
修正这部分代码试试:
var file = new SDK.FileMessage(fileId, fileAccessHash, 'a.html', stats.size, 'text/html', 'see')
2. 没有处理异步操作的异常
bot.send()大概率是异步的Promise操作,但你现在的代码没有加任何错误捕获逻辑,连最基本的.catch()都没有。连接重置可能只是表象,背后有具体的错误信息(比如权限不足、参数格式不对),你应该加上错误捕获来看看细节:
bot.send(file, responder.peer) .then(res => console.log('消息发送成功:', res)) .catch(err => console.error('发送失败,具体错误:', err))
拿到具体错误日志后,排查问题会精准很多。
3. 文件本身不符合消息发送规则
虽然上传成功了,但bale.ai的消息接口和上传接口的限制可能不一样:比如上传允许10MB,但发送消息只允许5MB;或者text/html这个MIME类型不允许作为消息文件发送。你可以去官方文档确认下文件大小和类型的限制,对比你的a.html是否符合要求。
4. SDK版本或环境问题
检查下你用的bale.ai SDK是不是最新版本,旧版本可能存在已知的网络连接bug。另外,你的Node.js版本是否和SDK兼容?某些老版本Node.js在处理HTTPS请求时容易出现连接重置的情况,建议升级到稳定版试试。
附上你的原始问题和代码:
我尝试向bale.ai机器人发送文件消息,文件上传环节似乎运行正常,但执行send函数时连接被重置。请问问题出在哪里?
let ddd = fs.readFileSync(__dirname + '/a.html') bot.UploadFile(ddd,'file').then(response => { let fileId = response.fileId let fileAccessHash = response.accessHash let fileٰVersion = response.version const stats = fs.statSync(__dirname + '/a.html') var file = new SDK.FileMessage(fileId, fileAccessHash, 'telename', stats.size, 'text/html', 'see') bot.send(file, responder.peer)
内容的提问来源于stack exchange,提问作者user43857

