|
Отправка файла в телегу | ☑ | ||
---|---|---|---|---|
0
Chameleon1980
26.02.23
✎
14:50
|
Приветствую всем.
Простите меня все. Ребят поделитесь кодом отправки файла в телегу. кучу примеров перепробовал: код ответа 400 и все. день уже бьюсь. АПИ, вроде читал. Примеров кучу перебрал. Может что-то менялось накануне и примеры из инета уже не актуальные. |
|||
1
Chameleon1980
26.02.23
✎
15:49
|
все жгут чучело? :) :) :)
|
|||
2
Chameleon1980
26.02.23
✎
17:06
|
похоже нужно:
добавить бота в админы канала телеграмм но нифига не понял как это сделать. нет таких кнопок ни в десктопной телеге ни на мобилке. https://softolet.ru/telegramm/boty/dlya-chego-delat-bota-administratorom-i-kak-eto-delaetsya.html |
|||
3
mdao
26.02.23
✎
19:49
|
Пишешь тг бота, в бот кидаешь URL,
бот отправляет тебе файл, учти что файл может быть только gif, zip, pdf Далее из бота пересылать можно, бот может быть назначен админом и копировать файл в группы |
|||
4
Chameleon1980
27.02.23
✎
08:16
|
(3) xls тоже запросто отправляет
|
|||
5
fbear
27.02.23
✎
09:45
|
СтрокаСоединения = "/bot" + "<ID>" + "/sendphoto";
Boundary = "----"+Строка(Новый УникальныйИдентификатор()); //Определяем массив для процедуры ОбъединитьФайлы МассивФайловДляОбъединения = Новый Массив; //Формируем начальный фрагмент файла POST-запроса ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8); //Формируем конечный фрагмент файла POST-запроса ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8); ТекстДляОтправки = ""; ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС; ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС; ТекстДляОтправки = ТекстДляОтправки + "172070948" + Символы.ПС; ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС; ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""photo""; filename=""пример.gif""" + Символы.ПС; ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки); ФайлОтправкиНачало.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); МассивФайловДляОбъединения.Добавить(СокрЛП("<ИМЯФАЙЛА>")); ТекстДляОтправки = "" + Символы.ПС; ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--"; ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки); ФайлаОтправкиКонец.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt"); ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки); HTTPЗапрос = Новый HTTPЗапрос; Заголовки = Новый Соответствие; HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary); HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки); HTTPЗапрос.АдресРесурса = СтрокаСоединения; ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows); HTTPСоединение = Новый HTTPСоединение("api.telegram.org",,,,,, ЗащищенноеСоединение); Попытка ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку()); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
6
fbear
27.02.23
✎
09:47
|
Пропустил в строке
ТекстДляОтправки = ТекстДляОтправки + "172070948" + Символы.ПС; Заменить на свой id ТекстДляОтправки = ТекстДляОтправки + "<IDTG>" + Символы.ПС; |
|||
7
fbear
27.02.23
✎
09:54
|
И еще - это для картинки, а для других типов файлов надо будет использовать другие методы, а не sendPhoto, но думаю будет подобно
|
|||
8
Chameleon1980
27.02.23
✎
10:38
|
тут что угодно отправляется через ДД
Процедура ОтправитьФайл(Токен, ИдентификаторПолучателя, ДвоичныеДанные, ИмяФайла = "", Сообщение = "") Экспорт // Сформировать тело запроса Разделитель = Строка(Новый УникальныйИдентификатор()); // Формируем основное составное сообщение Тело = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина); // chat_id ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id"""); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку(ИдентификаторПолучателя); // disable_notification ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification"""); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку("True"); Если Не ПустаяСтрока(Сообщение) Тогда // caption ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption"""); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку(Сообщение); // parse_mode ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode"""); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку("HTML"); КонецЕсли; // document ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); //ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document_" + Строка(Новый УникальныйИдентификатор()) + ".pdf", ИмяФайла))); ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1""", ?(ПустаяСтрока(ИмяФайла), "document_" + Строка(Новый УникальныйИдентификатор()) + ".pdf", ИмяФайла))); ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf"); ЗаписьДанных.ЗаписатьСтроку(""); //ЗаписьДанных.Закрыть(); // Добавим файл //ЗаписьДанных = Новый ЗаписьДанных(...); ЗаписьДанных.Записать(ДвоичныеДанные); //ЗаписьДанных.Закрыть(); // Завершение записи //ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); ЗаписьДанных.Закрыть(); ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные(); // Сформировать соединение и запрос Соединение = ПолучитьСоединение(); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель); Заголовки.Вставить("Accept", "*/*"); Заголовки.Вставить("Cache-Control", "no-cache"); Заголовки.Вставить("Host", "api.telegram.org"); Заголовки.Вставить("Accept-Encoding", "gzip, deflate"); Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0")); Заголовки.Вставить("Connection", "close"); Адрес = СтрШаблон("/bot%1/sendDocument", Токен); Запрос = Новый HTTPЗапрос(Адрес, Заголовки); Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела); // POST Ответ = Соединение.ОтправитьДляОбработки(Запрос); // Разбор ответа Если Ответ.КодСостояния <> 200 Тогда ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм. |Код состояния: %1 |Тело: %2" , Ответ.КодСостояния , ОтветСтрокой ); КонецЕсли; КонецПроцедуры // ОтправитьФайлВТелеграм() |
|||
9
Chameleon1980
27.02.23
✎
10:43
|
вопрос сейчас в другом.
почему не отправляется на другой ИдентификаторПолучателя как правильно в телеге привязывать ИдентификаторПолучателя к боту свой я как-то привязал, но не до конца понял как. мне отправляется, товарищу - нет. |
|||
10
Chameleon1980
27.02.23
✎
10:44
|
+ (8)
Функция ПолучитьСоединение() //Прокси = Новый ИнтернетПрокси(Истина); //Если ИспользоватьПрокси И ТипЗнч(ПроксиПротокол) = Тип("Строка") И Не ПустаяСтрока(ПроксиПротокол) Тогда // Прокси.Установить(ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль, Ложь); //КонецЕсли; SSL = Новый ЗащищенноеСоединениеOpenSSL(); //Соединение = Новый HTTPСоединение("api.telegram.org", 443,,, Прокси, 30, SSL, Ложь); Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,, 30, SSL, Ложь); Возврат Соединение; КонецФункции |
|||
11
arsik
гуру
27.02.23
✎
10:54
|
(9) Пользователь должен быть подключен к боту.
|
|||
12
arsik
гуру
27.02.23
✎
10:55
|
+(11) Пользователь должен подписаться на бота
|
|||
13
fbear
27.02.23
✎
10:55
|
А он себе бота добавил, start сделал?
Я при старте у себя сохранял этот chai_id и потом отправлял по этим чатам |
|||
14
OldCondom
27.02.23
✎
11:15
|
Ммм...
СтрШаблон("/bot%1/sendDocument?chat_id=%2&document=%3", Токен, IDЧата, URLПутьКФайлу); |
|||
15
Chameleon1980
27.02.23
✎
11:26
|
(13) счас попробуем
|
|||
16
OldCondom
27.02.23
✎
11:35
|
||||
17
Chameleon1980
27.02.23
✎
11:42
|
(16) я же указал, что сейчас попробуем:
... А он себе бота добавил, start сделал? ... при чем тут уже АПИ? я уже написал процедуры нужные для отправки. И они работают. |
|||
18
OldCondom
27.02.23
✎
12:20
|
(17) Это ты про (8)? А более извращенны и нечитаемый способ слабо придумать?)
И это все точно работает? Бот спокойно принимает эту дичь? ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id"""); Мсье конечно знает толк и делает очень странный POST вместе компатных и понятных GET, но я всегда думал, что для POST достаточно все теже параметры воткнуть в тело запроса и все. |
|||
19
arsik
гуру
01.03.23
✎
13:24
|
А нельзя сообщения рассылать без бота?
Ну есть допустим у меня база клиентов, слать им сообщения о статусах заказов в телеграм? |
|||
20
mTema32
01.03.23
✎
15:38
|
(19) А кто, простите, будет эти сообщения отсылать-то?
Бот как раз и служит транспортом сообщений. |
|||
21
arsik
гуру
01.03.23
✎
18:07
|
(20) ну есть же апи телеграма. На любой телефон учетку зарегистрировать и от имени этой учетки рассылать. Там вроде разницы нет большой бот или юзербот.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |