首页 > 解决方案 > 使用电报机器人上传文件 - NodeJS

问题描述

我想.txt用我的 javascript 机器人将文件上传到电报。看过几个php和python的例子但是没看懂,所以只需要一个js例子就知道了。

我应该先上传文件然后再sendDocmuent输入还是应该输入sendDocmuent

我试过但没有sendDocument用。document: 'file.txt'

还阅读了有关表单数据的信息,但一无所获!

call("sendDocument",{
chat_id: owner,
document: 'file.txt' // or /file.txt or full address (C:...)
});

我没有使用任何库,这是我的调用函数:

const botUrl = "https://api.telegram.org/bot" + token + "/";
const request = require('request');
function call(method, params, onResponse)
{

var requestData = params;

var data = {
    url: botUrl+method,
    json: true,
    body: requestData
};


request.post(data, function(error, httpResponse, body){
    if (onResponse) {
            if(body)
            {
                onResponse(body.result);
            }
        }
});

}

电报机器人 API

标签: javascriptnode.jstelegram-bot

解决方案


编辑:这是对我有用的代码。

似乎 Telegram API 从不需要 sendDocument 方法的文件名:

要发送的文件。将 file_id 作为字符串传递以发送存在于 Telegram 服务器上的文件(推荐),将 HTTP URL 作为字符串传递以使 Telegram 从 Internet 获取文件,或使用 multipart/form-data 上传新文件

正如您所猜测的那样,您需要实际发送文件的内容,而不是仅仅发送字符串'file.txt',作为多部分/表单数据。在此答案的基础上,您只需要修改对象的form字段request

const request = require('request')
const fs = require('fs')
const token = '752511654:AAGnu88dyi7YsmpZfcaA6XvR26Fy7f2moGo'
const url = 'https://api.telegram.org/bot'+token+'/sendDocument'
const chat_id = "741718736"

let r = request(url, (err, res, body) => {
    if(err) console.log(err)
    console.log(body)
})

let f = r.form()
f.append('chat_id', chat_id)
f.append('document', fs.createReadStream('file.txt'))    

推荐阅读