|
Процедура
ОтправитьФайлОтчетаВТелеграм(Токен, 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=" + ИмяФайла + "");
ЗаписьДанных.ЗаписатьСтроку("");
//Добавим файл
ЗаписьДанных.Записать(ДвоичныеДанные);
//Завершение записи
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель + "--");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
//Сформировать соединение и запрос
Соединение = Новый 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Запрос(Адрес,
Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния
= 200 Тогда
ЧтениеJSON
= Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
РезСтруктура
= ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецПроцедуры//ОтправитьФайлОтчетаВТелеграм
&НаСервере
Процедура
ВывестиПодсказку(Знач
вхСервер, Знач вхТокен, Знач chat_id)
Ресурс = "bot"
+ вхТокен + "/sendMessage?chat_id="
+ СтрЗаменить(Формат(chat_id,
"ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text=Подсказка";
Соединение =
Новый HTTPСоединение(вхСервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
КонецПроцедуры
&НаСервере
Процедура
ВывестиОтчетЖурналОтключений(Знач вхТокен, Знач chat_id)
ИмяФайла
= ПолучитьИмяВременногоФайла("xlsx");
Об = Обработки.ЖурналОтключений.Создать();
ТабДок =
Об.кмдСформироватьВМодулеОбъекта();
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
ДД
= Новый ДвоичныеДанные(ИмяФайла);
ТекстСообщ
= "Журнал отлючений";
ОтправитьФайлОтчетаВТелеграм(вхТокен, СтрЗаменить(Формат(chat_id, "ЧДЦ=; ЧС=; ЧРГ=."), ".",
""), ДД, "Журнал отключений.xlsx", ТекстСообщ);
УдалитьФайлы(ИмяФайла);
КонецПроцедуры//ВывестиОтчетЖурналОтключений
Функция ВыполнитьКомандуБотаПоИмени(Знач
вхСервер, Знач вхТокен, Знач ЗаписьРегистра)
Если ЗаписьРегистра.Команда
= "/report" Тогда
ВывестиОтчетЖурналОтключений(вхТокен, ЗаписьРегистра.chat_id);
ИначеЕсли
ЗаписьРегистра.Команда = "/help"
Тогда
ВывестиПодсказку(вхСервер, вхТокен, ЗаписьРегистра.chat_id);
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ПолучитьМассивСообщений2(Знач вхСервер, Знач вхТокен)
Ресурс = "bot"
+ вхТокен + "/getUpdates";
Соединение =
Новый HTTPСоединение(вхСервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
Ответ2 = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат
Ответ2.Result;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Процедура
ПроверкаСообщенийДляРеглЗадания() Экспорт
Сервер =
"api.telegram.org";
Токен = "12345678912:AAEwfm1M2GHif-3pw0vgbgHfrXDXmfIkOiM";
мСообщений
= ПолучитьМассивСообщений2(Сервер, Токен);
Для Каждого Эл Из мСообщений Цикл
Если ЗначениеЗаполнено(Эл.message.chat.id) И
ЗначениеЗаполнено(Эл.message.date)
Тогда
НЗ = РегистрыСведений.БАШНЯ_ЖурналКомандБота.СоздатьНаборЗаписей();
НЗ.Отбор.chat_id.Установить(Эл.message.chat.id);
НЗ.Отбор.date.Установить(Эл.message.date);
НЗ.Прочитать();
Если НЗ.Количество() > 0 Тогда
Для
Каждого Зап Из НЗ Цикл
Если
НЕ Зап.Выполнено Тогда
ВыполнитьКомандуБотаПоИмени(Сервер, Токен, Зап);
КонецЕсли;
КонецЦикла;
НЗ.Записать();
Иначе
МЗ
= РегистрыСведений.БАШНЯ_ЖурналКомандБота.СоздатьМенеджерЗаписи();
МЗ.chat_id = Эл.message.chat.id;
МЗ.date = Эл.message.date;
МЗ.Время = Дата(1970, 1, 1) + 3600 * 3 + Эл.message.date;
МЗ.Команда = Эл.message.text;
МЗ.Выполнено = ВыполнитьКомандуБотаПоИмени(Сервер,
Токен, МЗ);
МЗ.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
|