Skip to content

Instantly share code, notes, and snippets.

@JohnyDeath
Forked from PlugFox/telegram.bsl
Created September 27, 2019 09:48
Show Gist options
  • Select an option

  • Save JohnyDeath/76b4b7c6254e59caf4a7e9ff64b51ad3 to your computer and use it in GitHub Desktop.

Select an option

Save JohnyDeath/76b4b7c6254e59caf4a7e9ff64b51ad3 to your computer and use it in GitHub Desktop.
Отправка ТабличныйДокумент в телеграм
Процедура ОтправитьСообщениеВТелеграм(Сообщение)
// Глобальные переменные в процедуре:
// + Токен
// + ИдентификаторПолучателя
// Сформировать соединение и запрос
Соединение = ПолучитьСоединение();
Адрес = СтрШаблон("/bot%1/sendMessage?chat_id=%2&parse_mode=HTML&text=%3"
, Токен
, ИдентификаторПолучателя
, КодироватьСтроку(Сообщение, СпособКодированияСтроки.КодировкаURL, "UTF8"));
Заголовки = Новый Соответствие;
Запрос = Новый HTTPЗапрос(Адрес, Заголовки);
// GET
Ответ = Соединение.Получить(Запрос);
// Разбор ответа
Если Ответ.КодСостояния <> 200 Тогда
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
|Код состояния: %1
|Тело: %2"
, Ответ.КодСостояния
, ОтветСтрокой
);
КонецЕсли;
КонецПроцедуры // ОтправитьСообщениеВТелеграм()
//************************************************************
Процедура ОтправитьТабличныйДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
// Глобальные переменные в процедуре:
// + Токен
// + ИдентификаторПолучателя
// Сформировать тело запроса
Разделитель = Строка(Новый УникальныйИдентификатор());
// Формируем основное составное сообщение
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина);
// chat_id
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(ИдентификаторПолучателя);
// disable_notification
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("true");
// parse_mode
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("HTML");
// caption
Если Не ПустаяСтрока(Сообщение) Тогда
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(Сообщение);
КонецЕсли;
// document
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document_" + Строка(Новый УникальныйИдентификатор()), ИмяФайла)));
ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Закрыть();
// Добавим файл
ТабличныйДокумент.Записать(Тело, ТипФайлаТабличногоДокумента.PDF);
// Завершение записи
ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
// Сформировать соединение и запрос
Соединение = ПолучитьСоединение();
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Заголовки.Вставить("content-type", "multipart/form-data; boundary=" + Разделитель);
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Cache-Control", "no-cache");
Заголовки.Вставить("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"
, Ответ.КодСостояния
, ОтветСтрокой
);
КонецЕсли;
КонецПроцедуры // ОтправитьТабличныйДокументВТелеграм()
//************************************************************
Функция ПолучитьСоединение()
// Глобальные переменные в процедуре:
// + ПроксиПротокол
// + ПроксиСервер
// + ПроксиПорт
// + ПроксиПользователь
// + ПроксиПароль
Прокси = Новый ИнтернетПрокси(Истина);
Если ТипЗнч(ПроксиПротокол) = Тип("Строка") И Не ПустаяСтрока(ПроксиПротокол) Тогда
Прокси.Установить(ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль, Ложь);
КонецЕсли;
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,, Прокси, 30, SSL, Ложь);
Возврат Соединение;
КонецФункции // ПолучитьСоединение()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment