Делал выгрузку в один облачный сервис данных, и нужно было, чтобы при выгрузке в случае неудачной отправки писались логи, хранить все в регистрах нет смысла, базу только ростить. Но ошибки нужно просматривать....
Именно поэтому решил плотнее задаться вопросом работы с ТЛГ, и тут я вспомнил про свою же статью: Телеграм-бот как инструмент
Сделал отправку сообщений в телегу и расслабился, ровно до того момента, как мне не начало сыпаться овер 100500 ошибок ночью...
Наутро стал думать, что же сделать еще, и понял, что было бы круто в цикле копить текст сообщения с логами и отправлять, сделал, и снова ночь, обмен "взлетел" и... НИ ОДНОЙ ОШИБКИ НЕ ПРИЛЕТЕЛО...
Стал читать форумы, Апишку телеги и о чудо, телега не любит сообщения длинной больше 4к символов, еще пару вечеров с кучей сообщений в 2к символов в сообщении и понял, что это прям полнейшая утопия читать логи в сообщениях...
Тогда-то я и решил, что нужно собирать модуль для формирования текстового файла с логами и отправлять его в телегу одним единственным сообщением.
Функция ОтправитьЛогиВТЛГ(Токен,Chat_ID,TxtFile,FileName, error) Экспорт
//Токен - Апи ключ бота телеграмм тип - строка.
//Chat_ID - ID чата в который нужно отправить сообщение тип - Строка.
//TxtFile - Текстовый файл наполненный данными для отправки.
//FileName - Название файла будет передано в сообщении в ТЛГ (пример - "Логи").
//error - Пустая строка, в случае ошибки при отправке запроса вернет строку с текстом ошибки(для отладки Онли).
ИмяФайла = ПолучитьИмяВременногоФайла("txt");
TxtFile.Записать(ИмяФайла, КодировкаТекста.UTF8);
СтрокаСоединения = "/bot" + Токен + "/sendDocument";
Boundary = "----"+Строка(Новый УникальныйИдентификатор());
//Определяем массив для процедуры ОбъединитьФайлы
МассивФайловДляОбъединения = Новый Массив;
//Формируем начальный фрагмент файла POST-запроса
ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);
//Формируем конечный фрагмент файла POST-запроса
ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);
ТекстДляОтправки = "";
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + chat_id + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=" + FileName + ".txt""" + Символы.ПС;
ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
ФайлОтправкиНачало.Закрыть();
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
МассивФайловДляОбъединения.Добавить(СокрЛП(ИмяФайла));
ТекстДляОтправки = "" + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--"+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",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
СтрокаJ = ОтветHTTP.ПолучитьТелоКакСтроку();
ЧтениеJson = Новый ЧтениеJSON;
ЧтениеJson.УстановитьСтроку(СтрокаJ);
Строка = ПрочитатьJSON(ЧтениеJson);
Если ОтветHTTP.КодСостояния <> 200 тогда
error = "При выполнении запроса произошла ошибка: " + Строка.error_code + " расшифровка: " + Строка.description;
Возврат ЛОЖЬ;
Иначе
Возврат ИСТИНА;
КонецЕсли;
КонецФункции
Все пихнул в общий модуль, т.к. по-любому буду использовать много где и не только я, но и коллеги программисты.
ПыСы. модуль можно переписать совсем чуток(изменить расширения файла) и выгружать отчеты в телегу, а вызывать модуль HTTP запросами, так что думайте, для чего примените).