Создание хранилища конфигурации

This commit is contained in:
2025-05-15 17:56:42 +03:00
commit af42567ca9
42 changed files with 3421 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="efcaabde-708f-4990-928d-8c4c280e6352">
<Properties>
<Name>HttpОбщегоНазначения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>HTTP общего назначения</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,172 @@
#Область ПрограммныйИнтерфейс
Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Если Параметры <> Неопределено Тогда
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type","application/json");
Ответ = Соединение.Получить(Запрос);
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = Запрос.АдресРесурса;
Лог.HTTPОтвет = ?(ДвоичныеДанные,"Двоичные данные",
HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()));
Лог.Записать();
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
ТелоОтвета = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ.ПолучитьТелоКакСтроку());
Иначе
ТелоОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ.ПолучитьТелоКакСтроку());
Описание = ?(ТелоОтвета.Получить("description") <> Неопределено, ТелоОтвета["description"], "");
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Не удалось выполнить запрос. Код состояния = %1. %2", КодСостояния, Описание));
ТелоОтвета = Неопределено;
КонецЕсли;
Возврат ТелоОтвета;
КонецФункции
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Тело = Неопределено) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Если Параметры <> Неопределено Тогда
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type","application/json");
Если Тело <> Неопределено Тогда
Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело));
КонецЕсли;
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = Запрос.АдресРесурса;
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
Лог.Записать();
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось выполнить запрос. Код состояния = " + КодСостояния;
Сообщение.Сообщить();
ТелоОтвета = Неопределено;
КонецЕсли;
Возврат ТелоОтвета;
КонецФункции
Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJson);
Попытка
ИтоговоеСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат ИтоговоеСоответствие;
Исключение
Ошибка = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Ошибка конвертации из JSON в объект", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
КонецПопытки;
Возврат Неопределено;
КонецФункции
Функция ОбъектВСтрокуJson(Объект) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
Попытка
ЗаписатьJSON(ЗаписьJSON, Объект);
Возврат ЗаписьJSON.Закрыть();
Исключение
Ошибка = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Ошибка конвертации объекта в JSON", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
КонецПопытки;
Возврат "";
КонецФункции
Функция ФорматированныйJson(СтрокаJson) Экспорт
Возврат ОбъектВСтрокуJson(СтрокаJsonВОбъект(СтрокаJson));
КонецФункции
Функция ОтветУспех() Экспорт
СтруктураОтвета = Новый Структура("result", "ok");
Возврат ОтветJson(СтруктураОтвета, 200);
КонецФункции
Функция ОтветОшибка() Экспорт
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
СтруктураОтвета = Новый Структура("result, description", "error", КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат ОтветJson(СтруктураОтвета, 500);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ОтветJson(Объект, КодСостояния)
Ответ = Новый HTTPСервисОтвет(КодСостояния);
Ответ.Заголовки.Вставить("Content-Type","application/json");
Ответ.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Объект));
Возврат Ответ;
КонецФункции
Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры)
Если Параметры.Количество() = 0 Тогда
Возврат АдресРесурса;
КонецЕсли;
МассивПараметров = Новый Массив;
Для каждого Параметр Из Параметры Цикл
Если НЕ ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
МассивПараметров.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, Параметр.Значение));
КонецЦикла;
Возврат СтрШаблон("%1?%2", АдресРесурса, СтрСоединить(МассивПараметров, "&"));
КонецФункции
#КонецОбласти

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="17334000-8590-4921-bfa2-eadc0a2503db">
<Properties>
<Name>ТелеграмМетодыВызовСервера</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Телеграм методы вызов сервера</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,61 @@
#Область ПрограммныйИнтерфейс
Функция SendMessage(ИдЧата, СообщениеДляОтправки) Экспорт
ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки);
АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage");
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,,ТелоЗапроса);
КонецФункции
Функция SetWebHook(АдресВебхук) Экспорт
ПараметрыЗапроса = Новый Структура("url", АдресВебхук);
АдресРесурса = АдресРесурсаПоИмениМетода("setWebhook");
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса, ПараметрыЗапроса);
КонецФункции
Функция DeleteWebhook() Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("deleteWebhook");
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса);
КонецФункции
Функция GetWebhookInfo() Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("getWebhookInfo");
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса);
КонецФункции
Функция GetUpdates() Экспорт
Смещение = ? (ТелеграмОбщегоНазначения.ИдПоследнегоСообщения() = 0,0,
Формат(ТелеграмОбщегоНазначения.ИдПоследнегоСообщения() + 1, "ЧГ=0"));
ПараметрыЗапроса = Новый Структура("offset", Смещение);
АдресРесурса = АдресРесурсаПоИмениМетода("getUpdates");
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса, ПараметрыЗапроса);
КонецФункции
Функция GetFile(ИдФайла) Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("getFile");
ПараметрыЗапроса = Новый Структура("file_id", ИдФайла);
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса, ПараметрыЗапроса);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция АдресРесурсаПоИмениМетода(ИмяМетода)
Возврат СтрШаблон("/bot%1/%2", ТелеграмПовторноеИспользование.ТелеграмТокен(), ИмяМетода);
КонецФункции
#КонецОбласти

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="4dc6cf4e-e097-4cb0-ba80-0472e448fac0">
<Properties>
<Name>ТелеграмОбщегоНазначения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Телеграм общего назначения</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,256 @@
#Область ПрограммныйИнтерфейс
Функция ИдПоследнегоСообщения() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(МАКСИМУМ(ТелеграмСообщения.ИдСообщения), 0) КАК ИдСообщения
|ИЗ
| РегистрСведений.ТелеграмСообщения КАК ТелеграмСообщения";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.ИдСообщения;
КонецЕсли;
Возврат 0;
КонецФункции
// Получить обновления, пришедшие от вебхука и сохранить в базу
Процедура ОбработатьИСохранитьОбновленияТелеграм(ТелоЗапроса) Экспорт
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
Если ДанныеОбновления = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЭтоМассивОбновлений(ДанныеОбновления) Тогда
МассивОбновлений = ДанныеОбновления["result"];
Для каждого Обновление Из МассивОбновлений Цикл
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
СохранитьСообщениеВБазу(ПараметрыСообщения);
КонецЦикла;
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
ПараметрыСообщения = СтруктураСообщенияТелеграм(ДанныеОбновления);
СохранитьСообщениеВБазу(ПараметрыСообщения);
КонецЕсли;
КонецПроцедуры
Функция ОбновленияТелеграм(ТелоЗапроса) Экспорт
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
МассивСообщенийТелеграм = Новый Массив;
Если ДанныеОбновления = Неопределено Тогда
Возврат МассивСообщенийТелеграм;
КонецЕсли;
Если ЭтоМассивОбновлений(ДанныеОбновления) Тогда
МассивОбновлений = ДанныеОбновления["result"];
Для каждого Обновление Из МассивОбновлений Цикл
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
КонецЦикла;
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
КонецЕсли;
Возврат МассивСообщенийТелеграм;
КонецФункции
Функция СтруктураСообщенияТелеграм(Обновление)
ДанныеСообщения = Обновление["message"];
ПараметрыСообщения = Новый Структура;
ПараметрыСообщения.Вставить("ИдСообщения", Обновление["update_id"]);
Автор = АвторСообщения(ДанныеСообщения["from"]);
ПараметрыСообщения.Вставить("Автор", Автор);
НовоеСообщение = ТелеграмСообщение(ДанныеСообщения, Автор);
ПараметрыСообщения.Вставить("Сообщение", НовоеСообщение);
ПараметрыСообщения.Вставить("Дата", ТекущаяДатаСеанса());
ИдЧата = ДанныеСообщения["chat"]["id"];
ПараметрыСообщения.Вставить("ИдЧата", ИдЧата);
Возврат ПараметрыСообщения;
КонецФункции
Процедура СохранитьСообщениеВБазу(СтруктураСообщения) Экспорт
МенеджерЗаписи = РегистрыСведений.ТелеграмСообщения.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураСообщения);
МенеджерЗаписи.Записать();
КонецПроцедуры
Функция ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервере) Экспорт
АдресРесурса = СтрШаблон("file/bot%1/%2", ТелеграмПовторноеИспользование.ТелеграмТокен(), ПутьКФайлуНаСервере);
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса,, Истина);
КонецФункции
Функция ДанныеДокументаПоИд(ИдДокумента) Экспорт
Ответ = ТелеграмМетодыВызовСервера.GetFile(ИдДокумента);
Если Ответ = Неопределено Тогда
Возврат Ответ;
КонецЕсли;
ДанныеФайла = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ);
//Если ДанныеФайла.Получить("ok") <> Неопределено Тогда
// Если ДанныеФайла["ok"] И ДанныеФайла.Получить["result"] <> Неопределено Тогда
// ПутьКФайлуНаСервереТелеграм = ДанныеФайла["result"]["file_path"];
// Возврат ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервереТелеграм);
// Иначе
// ЗаписьЖурналаРегистрации("Телеграм.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
// СтрШаблон("Не удалось получить файл по id. Код ошибки %1, описание: %2", , ДанныеФайла["error_code"],
// ДанныеФайла["description"]));
// КонецЕсли;
//КонецЕсли;
Если ДанныеФайла.Получить("result") <> Неопределено Тогда
Возврат ПолучитьФайлССервераТелеграм(ДанныеФайла["result"]["file_path"]);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ЭтоМассивОбновлений(СоответствиеОбновления)
Результат = СоответствиеОбновления.Получить("ok");
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ЭтоОдиночноеОбновление(СоответствиеОбновления)
ИдОбновления = СоответствиеОбновления.Получить("update_id");
Сообщение = СоответствиеОбновления.Получить("message");
Если ИдОбновления <> Неопределено И Сообщение <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция АвторСообщения(СоответствиеОт)
Если СоответствиеОт.Получить("id") = Неопределено Тогда
Возврат Справочники.ТелеграмПользователь.НеОпределен;
КонецЕсли;
Автор = Справочники.ТелеграмПользователь.НайтиПоРеквизиту("id", СоответствиеОт["id"]);
Если Не ЗначениеЗаполнено(Автор) Тогда
НовыйПользователь = Справочники.ТелеграмПользователь.СоздатьЭлемент();
НовыйПользователь.Наименование = СоответствиеОт["first_name"];
НовыйПользователь.id = СоответствиеОт["id"];
НовыйПользователь.last_name = СоответствиеОт["last_name"];
НовыйПользователь.username = СоответствиеОт["username"];
НовыйПользователь.Записать();
Автор = НовыйПользователь.Ссылка;
КонецЕсли;
Возврат Автор;
КонецФункции
Функция ТелеграмСообщение(СообщениеДляОбработки, Автор)
ИдСообщения = СообщениеДляОбработки.Получить("message_id");
Если ИдСообщения = Неопределено Тогда
Возврат Справочники.ТелеграмСообщение.ПустаяСсылка();
КонецЕсли;
ИтоговоеСообщение = Справочники.ТелеграмСообщение.НайтиПоРеквизиту("id", ИдСообщения);
Если НЕ ЗначениеЗаполнено(ИтоговоеСообщение) Тогда
НовоеСообщение = Справочники.ТелеграмСообщение.СоздатьЭлемент();
НовоеСообщение.Наименование = "Сообщение № " + ИдСообщения + " от " + Автор;
НовоеСообщение.id = ИдСообщения;
НовоеСообщение.Автор = Автор;
Если СообщениеДляОбработки.Получить("text") <> Неопределено Тогда
НовоеСообщение.text = СообщениеДляОбработки["text"];
КонецЕсли;
Если СообщениеДляОбработки.Получить("document") <> Неопределено Тогда
НовоеСообщение.document = СформироватьДокумент(СообщениеДляОбработки["document"]);
КонецЕсли;
НовоеСообщение.date = TimeStampToDate(СообщениеДляОбработки["date"]);
НовоеСообщение.Записать();
ИтоговоеСообщение = НовоеСообщение.Ссылка;
КонецЕсли;
Возврат ИтоговоеСообщение;
КонецФункции
Функция СформироватьДокумент(СоответствиеДокумент)
ИдДокумента = СоответствиеДокумент.Получить("file_unique_id");
Если ИдДокумента = Неопределено Тогда
Возврат Справочники.ТелеграмДокумент.ПустаяСсылка();
КонецЕсли;
ИтоговыйДокумент = Справочники.ТелеграмДокумент.НайтиПоРеквизиту("id", ИдДокумента);
Если НЕ ЗначениеЗаполнено(ИтоговыйДокумент) Тогда
НовыйДокумент = Справочники.ТелеграмДокумент.СоздатьЭлемент();
НовыйДокумент.Наименование = СоответствиеДокумент["file_name"];
НовыйДокумент.id = ИдДокумента;
НовыйДокумент.file_name = СоответствиеДокумент["file_name"];
НовыйДокумент.mime_type = СоответствиеДокумент["mime_type"];
НовыйДокумент.file_size = СоответствиеДокумент["file_size"];
ДанныеДокумента = ДанныеДокументаПоИд(СоответствиеДокумент["file_id"]);
Если ДанныеДокумента <> Неопределено Тогда
НовыйДокумент.ДанныеФайла = Новый ХранилищеЗначения(ДанныеДокумента);
КонецЕсли;
НовыйДокумент.Записать();
ИтоговыйДокумент = НовыйДокумент.Ссылка;
КонецЕсли;
Возврат ИтоговыйДокумент;
КонецФункции
Функция TimeStampToDate(ЮниксТайм)
Возврат Дата(1970,1,1,1,0,0) + СмещениеСтандартногоВремени(ЧасовойПоясСеанса()) + ЮниксТайм;
КонецФункции
#КонецОбласти

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="354dceca-97a4-47f6-ba86-c99149e26775">
<Properties>
<Name>ТелеграмПовторноеИспользование</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Телеграм повторное использование</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DuringSession</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,5 @@
Функция ТелеграмТокен() Экспорт
Возврат Константы.ТелеграмТокен.Получить();
КонецФункции

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="46f5bbaa-d130-4422-9f24-fd3068b83e34">
<Properties>
<Name>ТелеграмРегламент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Телеграм регламент</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,19 @@
// Получить обновления и обработать их по расписанию
Процедура ПроверкаОбновленийПоРасписанию() Экспорт
// Проверка установлен ли вебхук
Ответ = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелеграмМетодыВызовСервера.GetWebhookInfo());
Если Ответ["ok"] И ЗначениеЗаполнено(Ответ["result"]["url"]) Тогда
Возврат;
КонецЕсли;
Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
Если Ответ <> Неопределено Тогда
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ);
Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text)
КонецЦикла;
КонецЕсли;
КонецПроцедуры