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

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

1С 8.3 Отправка Табличного документа в Телеграм

Источник: https://gist.github.com/PlugFox/5f62e43c56941e4c5a244de2422ee7f8
Перем Токен, ИдентификаторПолучателя; // Телеграм
Перем ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль; // Прокси

Процедура ОтправитьТаблДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
   // Глобальные переменные в процедуре:
   // + Токен
   // + ИдентификаторПолучателя

   // Сформировать тело запроса
   Разделитель = Строка(Новый УникальныйИдентификатор());

   // Формируем основное составное сообщение
   Тело = Новый ПотокВПамяти();
   Данные = Новый ЗаписьДанных(Тело, КодировкаТекста.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_" + Строка(Новый УникальныйИдентификатор()), ИмяФайла)));
   Данные.ЗаписатьСтроку("Content-Type: application/pdf");
   Данные.ЗаписатьСтроку("");
   Данные.Закрыть();

   // Добавим файл
   ТабличныйДокумент.Записать(Тело, ТипФайлаТабличногоДокумента.PDF);

   // Завершение записи
   Данные    = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь);
   Данные.ЗаписатьСтроку("");
   Данные.ЗаписатьСтроку("--" + Разделитель + "--");
   Данные.Закрыть();

   ДанныеТела          = Тело.ЗакрытьИПолучитьДвоичныеДанные();

   // Сформировать соединение и запрос
   СоединениеHTTP = ПолучитьСоединениеHTTP();
   Заголовок = Новый Соответствие;
   Заголовок.Вставить("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");
   АдресURL = СтрШаблон("/bot%1/sendDocument", Токен);
   Запрос = Новый HTTPЗапрос(АдресURL , Заголовок);
   Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);

   // POST
   Ответ = СоединениеHTTP.ОтправитьДляОбработки(Запрос);

   // Разбор ответа
   Если Ответ.КодСостояния <> 200 Тогда
       ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
       ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
    |Код состояния: %1
    |Тело: %2"
       , Ответ.КодСостояния
       , ОтветСтрокой
       );
   КонецЕсли;
КонецПроцедуры // ОтправитьТабличныйДокументВТелеграм()

//************************************************************
Функция ПолучитьСоединениеHTTP()
   // Глобальные переменные в процедуре:
   // + ПроксиПротокол
   // + ПроксиСервер
   // + ПроксиПорт
   // + ПроксиПользователь
   // + ПроксиПароль

   Прокси = Новый ИнтернетПрокси(Истина);
   Если ТипЗнч(ПроксиПротокол) = Тип("Строка") И Не ПустаяСтрока(ПроксиПротокол) Тогда
       Прокси.Установить(ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль, Ложь);
   КонецЕсли;
   ЗащищенноеСоединениеHTTP = Новый ЗащищенноеСоединениеHTTPOpenSSL();
   СоединениеHTTP  = Новый HTTPСоединениеHTTP("api.telegram.org", 443,,, Прокси, 30, ЗащищенноеСоединениеHTTP, Ложь);
   Возврат СоединениеHTTP;
КонецФункции // ПолучитьСоединениеHTTP()

// ТЕЛЕГРАМ +
Токен                   = ""; // 000000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ИдентификаторПолучателя = ""; // -000000000
// ТЕЛЕГРАМ -

// ПРОКСИ +
ПроксиПротокол          = "https"; // для socks5 - https
ПроксиСервер            = "socks5://0.0.0.0"; // socks5://domain.tld
ПроксиПорт              = 1080; // 1080
ПроксиПользователь      = ""; // user
ПроксиПароль            = ""; // password
// ПРОКСИ -
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске»,18.12.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому