В начало

Отправка файла в Телеграм

 

Листинг. Модуль формы внешней обработки

&НаСервере

Процедура ОтправитьФайл(Токен, ChatId, ДвоичныеДанные, ИмяФайла, Сообщение)

 

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

    Тело            = Новый ПотокВПамяти();

    ЗаписьДанных    = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина);

   

    //chat_id

    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);

    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id""");

    ЗаписьДанных.ЗаписатьСтроку("");

    ЗаписьДанных.ЗаписатьСтроку(ChatId);

   

    // 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-Type: application/pdf");

    ЗаписьДанных.ЗаписатьСтроку("");  

    //ЗаписьДанных.Закрыть();   

   

    //Добавим файл

    //ЗаписьДанных    = Новый ЗаписьДанных(...);

    ЗаписьДанных.Записать(ДвоичныеДанные);

    //ЗаписьДанных.Закрыть();

   

    //Завершение записи

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

    ЗаписьДанных.ЗаписатьСтроку("");

    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");

    ЗаписьДанных.Закрыть();

   

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

 

    //Соединение и запрос

    Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());

    Заголовки   = Новый Соответствие;

    Заголовки.Вставить("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"

            , Ответ.КодСостояния

            , ОтветСтрокой

        );

    КонецЕсли;

КонецПроцедуры

 

 

&НаКлиенте

Процедура ОтправитьФайлВТелеграм(Команда)

            ИмяФайла  =  "C:\TEMP\Test.pdf";

            ДанныеФайла  = Новый ДвоичныеДанные(иф);

            ТестСообщение = "Некое сообщение";

            ОтправитьФайл("1234:abcde", "-123456", ДанныеФайла, ИмяФайла, ТестСообщение);

КонецПроцедуры