Создание хранилища конфигурации
This commit is contained in:
23
src/cf/CommonModules/HttpОбщегоНазначения.xml
Normal file
23
src/cf/CommonModules/HttpОбщегоНазначения.xml
Normal 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>
|
||||
172
src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl
Normal file
172
src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl
Normal 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", АдресРесурса, СтрСоединить(МассивПараметров, "&"));
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
23
src/cf/CommonModules/ТелеграмМетодыВызовСервера.xml
Normal file
23
src/cf/CommonModules/ТелеграмМетодыВызовСервера.xml
Normal 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>
|
||||
@@ -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", ТелеграмПовторноеИспользование.ТелеграмТокен(), ИмяМетода);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
23
src/cf/CommonModules/ТелеграмОбщегоНазначения.xml
Normal file
23
src/cf/CommonModules/ТелеграмОбщегоНазначения.xml
Normal 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>
|
||||
256
src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl
Normal file
256
src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl
Normal 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) + СмещениеСтандартногоВремени(ЧасовойПоясСеанса()) + ЮниксТайм;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
23
src/cf/CommonModules/ТелеграмПовторноеИспользование.xml
Normal file
23
src/cf/CommonModules/ТелеграмПовторноеИспользование.xml
Normal 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>
|
||||
@@ -0,0 +1,5 @@
|
||||
Функция ТелеграмТокен() Экспорт
|
||||
|
||||
Возврат Константы.ТелеграмТокен.Получить();
|
||||
|
||||
КонецФункции
|
||||
23
src/cf/CommonModules/ТелеграмРегламент.xml
Normal file
23
src/cf/CommonModules/ТелеграмРегламент.xml
Normal 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>
|
||||
19
src/cf/CommonModules/ТелеграмРегламент/Ext/Module.bsl
Normal file
19
src/cf/CommonModules/ТелеграмРегламент/Ext/Module.bsl
Normal file
@@ -0,0 +1,19 @@
|
||||
// Получить обновления и обработать их по расписанию
|
||||
Процедура ПроверкаОбновленийПоРасписанию() Экспорт
|
||||
|
||||
// Проверка установлен ли вебхук
|
||||
Ответ = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелеграмМетодыВызовСервера.GetWebhookInfo());
|
||||
Если Ответ["ok"] И ЗначениеЗаполнено(Ответ["result"]["url"]) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
|
||||
Если Ответ <> Неопределено Тогда
|
||||
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ);
|
||||
Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
|
||||
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
|
||||
ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text)
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
Reference in New Issue
Block a user