API Telegram - требуется помощь

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Реакции
35
Баллы
13
Доброго времени суток!

Требуется помощь в создании кода С# или POST-запроса для отправления в телеграм канал видео до 50мб с описанием, через API.

Пост должен выглядеть примерно так:

66081


Ниже приведён код, который отправляет видео в ТГ, но воспроизводится видео, только после загрузки, в канале видео не воспроизводится.

var bot_id = project.Variables["tg_api"].Value;
var chat_id = project.Variables["tg_chanel"].Value;

string description = project.Variables["description"].Value; //если требуется описание

string File = project.Lists["File"].First();
project.Lists["File"].RemoveAt(0);
project.SendInfoToLog(File);

string data = string.Empty;
data += "--8d769bc76365cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"video\"; filename=\"{0}\"\n", File);
data += "Content-Type: application/octet-stream\n";
data += File;
string resRequest = ZennoPoster.HttpPost(
"https://api.telegram.org/bot" + bot_id + "/sendVideo?chat_id=" + chat_id + "&caption=" + description,
data,
"multipart/form-data",
"",
"UTF-8",
ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
30000,
"",
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",
true,
5,
new[] {"Host: api.telegram.org"}
);
 
У телеграмма есть несколько api.
Первый это работа с ботами, второй это работа с сервисом как клиент.
В твоем коде используется api для ботов.

В чем суть задачи? Долго загружается видео?

Можно сначала загрузить видео и получить его media_id и далее в сообщении указать этот параметр.

Есть еще вот такой параметр:

66085
 
Мне нужно публиковать посты в канале (примерно как на скрине). Всё равно через какое api и автоматом.
Через код выше публикуется вот это:
66087


А руками публикую так:

66088
 
Последнее редактирование:
Можно отправить видео как файл. Это когда нету пережатия, в таком случае да, нету автозапуска. А можно отправить как видео, тогда видос сжимается на сервере и его можно запустить непосредственно с телеграма. Об этом речь?
 
Ответил в личку
 
Достопочтенно автор предложил 500 рублей за потраченное время =)

Поэтому выкладываю решение, возможно кому-то пригодиться;

Добавляем своего бота как администратора в свою группу.

Подключаем внешнюю сборку Telegram.Bot

В using прописываем следующее:
C#:
Развернуть Свернуть Копировать
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.InputFiles;

Код отправки:
C#:
Развернуть Свернуть Копировать
string token = "ТОКЕН ДОСТУПА";
string filePath = "981600635597.mp4"; //имя файла
string channel = "@ИМЯ КАНАЛА"; //имя канала
string description = "<b> Вечер шутов или серьезно с приветом</b>\n\n#мелодрама #комедия\n\n<i>Лирическая новогодняя комедия, действие которой разворачивается 30 декабря.</i>";

var botClient = new TelegramBotClient(token);
var me = botClient.GetMeAsync().Result;
using (FileStream stream = System.IO.File.OpenRead(filePath))
{
    Message message = botClient.SendVideoAsync(
        chatId: channel,
        caption: description,
        parseMode: ParseMode.Html,
        video: new InputOnlineFile(stream),
        supportsStreaming: true
    ).Result;
}
 
Достопочтенно автор предложил 500 рублей за потраченное время =)

Поэтому выкладываю решение, возможно кому-то пригодиться;

Добавляем своего бота как администратора в свою группу.

Подключаем внешнюю сборку Telegram.Bot

В using прописываем следующее:
C#:
Развернуть Свернуть Копировать
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.InputFiles;

Код отправки:
C#:
Развернуть Свернуть Копировать
string token = "ТОКЕН ДОСТУПА";
string filePath = "981600635597.mp4"; //имя файла
string channel = "@ИМЯ КАНАЛА"; //имя канала
string description = "<b> Вечер шутов или серьезно с приветом</b>\n\n#мелодрама #комедия\n\n<i>Лирическая новогодняя комедия, действие которой разворачивается 30 декабря.</i>";

var botClient = new TelegramBotClient(token);
var me = botClient.GetMeAsync().Result;
using (FileStream stream = System.IO.File.OpenRead(filePath))
{
    Message message = botClient.SendVideoAsync(
        chatId: channel,
        caption: description,
        parseMode: ParseMode.Html,
        video: new InputOnlineFile(stream),
        supportsStreaming: true
    ).Result;
}
а где данную библиотеку скачать можно?
 

Вложения

Нужно скопировать файлы в каталог установки зенки, в директорию ExternalAssemblies.

Вроде все подключил, но выдает ошибку:
Компиляция кода Ошибка в действии "CS0246" "Ошибка в директивах using. The type or namespace name 'Telegram' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 7]
 
Третий вариант шаблона, без библиотек и C# кода, реализован через экшен - "POST-запрос". Конечный результат идентичен двум предыдущим. Описание внутри архива.
 

Вложения

Как загружать большие гифки?(более 15мб), чтобы показывалась сразу
 
Последнее редактирование:
Кто-нибудь может подсказать, зачем нужна строчка
"--8d769bc76365cd4\n"
в коде?
C#:
Развернуть Свернуть Копировать
data += "--8d769bc76365cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"video\"; filename=\"{0}\"\n", filePath);
data += "Content-Type: application/octet-stream\n";
data += filePath;
Если параметр убрать вообще, то запрос не проходит, но при этом его можно сократить до "--\n", и всё срабатывает.
 
Кто-нибудь может подсказать, зачем нужна строчка
"--8d769bc76365cd4\n"
в коде?
C#:
Развернуть Свернуть Копировать
data += "--8d769bc76365cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"video\"; filename=\"{0}\"\n", filePath);
data += "Content-Type: application/octet-stream\n";
data += filePath;
Если параметр убрать вообще, то запрос не проходит, но при этом его можно сократить до "--\n", и всё срабатывает.
Я по моему похожий вопрос задавал когда то. ))) Генирировал случай что ли... Не мешало в общем.
 
  • Спасибо
Реакции: Lite
Кто-нибудь может подсказать, зачем нужна строчка
"--8d769bc76365cd4\n"
в коде?
C#:
Развернуть Свернуть Копировать
data += "--8d769bc76365cd4\n";
data += string.Format("Content-Disposition: form-data; name=\"video\"; filename=\"{0}\"\n", filePath);
data += "Content-Type: application/octet-stream\n";
data += filePath;
Если параметр убрать вообще, то запрос не проходит, но при этом его можно сократить до "--\n", и всё срабатывает.
Да, его можно заменить рандом {-Variable.rand-}
 
  • Спасибо
Реакции: Lite
Я по моему похожий вопрос задавал когда то. ))) Генирировал случай что ли... Не мешало в общем.
Тоже подумал, что лучше его вообще снести, или генерить. Чтобы одинаковый параметр не был палевным для разных акков.

p.s. кто будет пробовать варианты с библиотекой- они уже не пашут. Ну точнее надо переписать под новый синтаксис, и мне уже показалось проще сделать на запросах.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)