Процедура
ПроверкаСообщенийДляРеглЗадания()
Экспорт
Сервер =
"api.telegram.org";
Токен =
"1234567:asdfghjk-zxcvbnm";
мСообщений
= ПолучитьМассивСообщений2(Сервер, Токен);
Для Каждого Эл Из мСообщений Цикл
Если НЕ Эл.свойство("message")
Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Эл.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")
Тогда
МЗ.Команда = Эл.message.text;
Иначе
МЗ.Команда = "";
КонецЕсли;
МЗ.Выполнено = ВыполнитьКомандуБотаПоИмени(Сервер,
Токен, МЗ);
МЗ.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ВыполнитьКомандуБотаПоИмени(Знач вхСервер, Знач вхТокен, Знач ЗаписьРегистра)
Если ЗаписьРегистра.Команда
= "/report1"
ИЛИ
ЗаписьРегистра.Команда
= "/report1@Bot"
Тогда
ВывестиОтчет_ЖурналОтключений(вхТокен, ЗаписьРегистра.chat_id,
"5270", Перечисления.Города.
Смоленск);
КонецЕсли;
КонецФункции
&НаСервере
Процедура
ВывестиОтчет_ЖурналОтключений(Знач вхТокен, Знач chat_id, Знач MessageThreadId, Знач перГород)
ИмяФайла
= ПолучитьИмяВременногоФайла("xlsx");
Об = Обработки.ЖурналОтключений.Создать();
ТабДок =
Об.кмдСформироватьВМодулеОбъекта(перГород);
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
ДД
= Новый ДвоичныеДанные(ИмяФайла);
ТекстСообщ
= "Отчет";
ИмяПрилФайла
= "Отчет.xlsx";
Если ЗначениеЗаполнено(MessageThreadId) Тогда
ОтправитьФайлОтчетаВТемуГруппыТелеграм(вхТокен, СтрЗаменить(Формат(chat_id, "ЧДЦ=; ЧС=; ЧРГ=."), ".",
""), MessageThreadId,
ДД, ИмяПрилФайла, ТекстСообщ);
Иначе
ОтправитьФайлОтчетаВТелеграм(вхТокен, СтрЗаменить(Формат(chat_id, "ЧДЦ=; ЧС=; ЧРГ=."), ".",
""), ДД, ИмяПрилФайла, ТекстСообщ);
КонецЕсли;
УдалитьФайлы(ИмяФайла);//Удаляем временные файлы
КонецПроцедуры
Процедура
ОтправитьФайлОтчетаВТемуГруппыТелеграм(Токен,
ChatId, MessageThreadId,
ДвоичныеДанные, ИмяФайла,
Сообщение)
Разделитель = Строка(Новый УникальныйИдентификатор());
Тело = Новый ПотокВПамяти();
ЗаписьДанных
= Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК
+ Символы.ПС, Символы.ПС,
Истина);
// chat_id – идентификатор чата/группы в
Телеграм
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""chat_id""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(ChatId);
// message_thread_id
– идентификатор темы в группе Телеграм
ЗаписьДанных.ЗаписатьСтроку("--" +
Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""message_thread_id""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(MessageThreadId);
// 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.Закрыть();
КонецЕсли;
КонецПроцедуры
|