使用电报Bot上传文件-NodeJS

时间:2019-01-03 11:16:45

标签: javascript node.js telegram-bot

我想将一个.txt文件上传到我的JavaScript机器人进行电报。 我已经在php和python中看到了一些示例,但听不懂,所以我只需要一个js示例来查找。

我应该先上传文件然后上传sendDocmuent,还是应该在sendDocmuent中输入?

我尝试将sendDocumentdocument: '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);
            }
        }
});

}

Telegram bot API

1 个答案:

答案 0 :(得分:0)

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

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

要发送的文件。传递file_id作为字符串以发送电报服务器上存在的文件(推荐),传递HTTP URL作为字符串以使电报从互联网获取文件,或使用多部分/表单数据

您不仅需要发送字符串'file.txt',还需要像猜测的那样,将文件的内容实际发送为multipart / form-data。以this answer为基础,您只需要修改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'))