1С 8.3 Отправка файлов в Телеграм чат - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Отправка файлов в Телеграм чат

Telegram bot - отправка файлов в телеграм из 1С 8.3:
// Отправка файла в Телеграм чат
&НаСервере
Функция ОтправитьФайлВтелеграм(ПутьКФайлу)

   //Через BotFather создаём бота (для регистрации нового бота должен быть уникальный UserName)
   //Инструкция есть здесь: https://botcreators.ru/blog/botfather-instrukciya/
   //В конце операции получаем Access token
   AccessToken = "Access token";

   //Получаем Chat ID Телеграм заранее написав боту любое сообщение
   //https://api.telegram.org/bot123456789:XXXXXX-X-XXXX-XXXXXXXXXXXXXXXXXXXXXX/getUpdates,
   //где 123456789:XXXXXX-X-XXXX-XXXXXXXXXXXXXXXXXXXXXX - это токен нашего бота
   ServerTg  = "api.telegram.org";
   ChatID      = "123456789";

   ФайлОтправки = Новый Файл(ПутьКФайлу);

   СтрокаСоединения = "bot" + AccessToken + "/sendDocument";

   // Разделитель;
   Boundary = "----"+Строка(Новый УникальныйИдентификатор());

   // Определяем массив для процедуры ОбъединитьФайлы;
   МассивФайловДляОбъединения = Новый Массив;

   // Формируем начальный фрагмент файла POST-запроса;
   ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
   ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);

   // Формируем конечный фрагмент файла POST-запроса;
   ИмяФайлаЗаписи = ПолучитьИмяВременногоФайла("txt");
   ФайлаЗаписи = Новый ЗаписьТекста(ИмяФайлаЗаписи, КодировкаТекста.UTF8);

   ТекстОтправки = "";
   ТекстОтправки = ТекстОтправки + "--" + Boundary + Символы.ПС;
   ТекстОтправки = ТекстОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС + СтрЗаменить(Формат(ChatID, "ЧДЦ=0; ЧС=; ЧРГ=.; ЧГ=0"), ".", "") + Символы.ПС;
   ТекстОтправки = ТекстОтправки + "--" + Boundary + Символы.ПС;
   ТекстОтправки = ТекстОтправки + "Content-Disposition: form-data; name=""document""; filename=""/" + ФайлОтправки.Имя + """" + Символы.ПС;

   // Записываем ФайлОтправки;
   ФайлОтправки.ЗаписатьСтроку(ТекстОтправки);
   ФайлОтправки.Закрыть();

   ТекстОтправки = "" + Символы.ПС;
   ТекстОтправки = ТекстОтправки + "--" +  Boundary+"--";

   // Записываем ФайлаЗаписи;
   ФайлаЗаписи.ЗаписатьСтроку(ТекстОтправки);
   ФайлаЗаписи.Закрыть();

   // Заполняем массив;
   МассивФайловДляОбъединения.Добавить(ИмяФайлаЗаписи);
   МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
   МассивФайловДляОбъединения.Добавить(СокрЛП(ПутьКФайлу));

   // Формируем ИмяФайлаОтправки;
   ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
   ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);

   HTTPЗапрос     = Новый HTTPЗапрос;
   Заголовки     = Новый Соответствие;
   // Формируем Заголовки HTTP Запроса;
   HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
   HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
   HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
   // Установим АдресРесурса;
   HTTPЗапрос.АдресРесурса     = СтрокаСоединения;

   SSL  = Новый ЗащищенноеСоединениеOpenSSL();
   СоединениеHTTP = Новый HTTPСоединение(ServerTg, 443,,,,, SSL);

   Попытка
       // POST запрос;
       Ответ = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос);
       КодСостояния     = Ответ.КодСостояния;
       СтрокаОтвета     = Ответ.ПолучитьТелоКакСтроку();
       Если КодСостояния = 200 Тогда
           // Читаем JSON;
           ЧтениеJSON = Новый ЧтениеJSON;
           ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
           РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
           Если РезультатСтруктура.ok = Истина Тогда
               СтруктураMessage = РезультатСтруктура.result;
           КонецЕсли;
       Иначе
           Сообщить("КодСостояния " + КодСостояния);
           Сообщить(СтрокаОтвета);
       КонецЕсли;

   Исключение
       // Здесь может быть обработчик ошибки или вход в резервную функцию
   КонецПопытки;

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске»,09.05.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому