Загрузить файлы с ботом Telegram - NodeJS - PullRequest
0 голосов
/ 03 января 2019

Я хочу загрузить файл .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 Telegram бота

1 Ответ

0 голосов
/ 03 января 2019

РЕДАКТИРОВАНИЕ: это код, который работает для меня.

Похоже, что для API Telegram никогда не требуется имя файла для метода sendDocument:

Файл для отправки. Передайте file_id в виде String для отправки файла, существующего на серверах Telegram (рекомендуется), передайте HTTP-URL-адрес в виде String для Telegram для получения файла из Интернета или загрузите новый, используя multipart / form-data

Вместо того, чтобы просто отправлять строку 'file.txt', вам нужно на самом деле отправить содержимое файла как multipart / form-data, как вы уже догадались. Основываясь на этом ответе , вам просто нужно изменить поле 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'))    
...