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

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
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"}
);
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
У телеграмма есть несколько api.
Первый это работа с ботами, второй это работа с сервисом как клиент.
В твоем коде используется api для ботов.

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

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

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

66085
 

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Мне нужно публиковать посты в канале (примерно как на скрине). Всё равно через какое api и автоматом.
Через код выше публикуется вот это:
66087


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

66088
 
Последнее редактирование:

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Можно отправить видео как файл. Это когда нету пережатия, в таком случае да, нету автозапуска. А можно отправить как видео, тогда видос сжимается на сервере и его можно запустить непосредственно с телеграма. Об этом речь?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Отправлять нужно в формате mp4
 

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Отправлять нужно в формате mp4
Отправляю в mp4. Видео, которое я ручками отправляю само запускается в канале, внизу описание. Мне нужно также на автомате через ЗП
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Так должно быть?
66095
 

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Ответил в личку
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Достопочтенно автор предложил 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;
}
 

Master Woo

Client
Регистрация
06.12.2014
Сообщения
122
Благодарностей
129
Баллы
43
Достопочтенно автор предложил 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;
}
а где данную библиотеку скачать можно?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63

Вложения

alexsandroid

Client
Регистрация
06.08.2018
Сообщения
91
Благодарностей
28
Баллы
18
Нужно скопировать файлы в каталог установки зенки, в директорию 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]
 

alexsandroid

Client
Регистрация
06.08.2018
Сообщения
91
Благодарностей
28
Баллы
18
  • Спасибо
Реакции: VerBin

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Кому интересно, во вложении рабочий шаблон, чтобы не устраивать танцы с бубном.
Описание внутри архива.
 

Вложения

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Во вложении рабочий шаблон, без всяких библиотек. Конечный результат - такой же. Описание внутри архива.
 

Вложения

alexmin9559

Client
Регистрация
19.10.2013
Сообщения
20
Благодарностей
34
Баллы
13
Третий вариант шаблона, без библиотек и C# кода, реализован через экшен - "POST-запрос". Конечный результат идентичен двум предыдущим. Описание внутри архива.
 

Вложения

Vinovnik

Client
Регистрация
10.08.2016
Сообщения
354
Благодарностей
106
Баллы
43
Подскажите, а как загружать большие файлы?
 

dima8121

Client
Регистрация
09.09.2018
Сообщения
14
Благодарностей
6
Баллы
3
Кому интересно, во вложении рабочий шаблон, чтобы не устраивать танцы с бубном.
Описание внутри архива.
Здравствуйте. Можно попросить убрать ограничение по версии?
 
Регистрация
25.12.2021
Сообщения
23
Благодарностей
16
Баллы
3
Регистрация
25.12.2021
Сообщения
23
Благодарностей
16
Баллы
3
Как загружать большие гифки?(более 15мб), чтобы показывалась сразу
 
Последнее редактирование:

Dmitryreps

Client
Регистрация
05.10.2017
Сообщения
36
Благодарностей
19
Баллы
8
что бы видео воспроизводилось сразу - нужно в конце запроса подписать "supports_streaming=true"
у меня так сработало, надеюсь кому помогло)


101117
 

Lite

Client
Регистрация
17.10.2013
Сообщения
282
Благодарностей
89
Баллы
28
Кто-нибудь может подсказать, зачем нужна строчка
"--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", и всё срабатывает.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
Кто-нибудь может подсказать, зачем нужна строчка
"--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

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 085
Благодарностей
126
Баллы
63
Кто-нибудь может подсказать, зачем нужна строчка
"--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

Lite

Client
Регистрация
17.10.2013
Сообщения
282
Благодарностей
89
Баллы
28
Я по моему похожий вопрос задавал когда то. ))) Генирировал случай что ли... Не мешало в общем.
Тоже подумал, что лучше его вообще снести, или генерить. Чтобы одинаковый параметр не был палевным для разных акков.

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

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