- Рефакторинг процедур http запросов

- Изменил структуру логирования
- Добавил метод sendDocument()
- Структурировал код для большей читабельности
This commit is contained in:
2025-05-18 18:31:19 +03:00
parent cfcc6b55bd
commit a7e569e141
19 changed files with 685 additions and 130 deletions

View File

@@ -2,25 +2,13 @@
&НаКлиенте &НаКлиенте
Процедура ПросмотрФайла(Команда) Процедура ПросмотрФайла(Команда)
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(ПолучитьРасширениеИмениФайла(Объект.file_name)); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РаботаСФайламиКлиентСервер.ПолучитьРасширениеИмениФайла(Объект.file_name));
ДвоичныеДанные = ПолучитьДвоичныеДанныеНаСервере(); ДвоичныеДанные = ПолучитьДвоичныеДанныеНаСервере();
ДвоичныеДанные.Записать(ИмяВременногоФайла); ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЗапуститьПриложениеАсинх(ИмяВременногоФайла); ЗапуститьПриложениеАсинх(ИмяВременногоФайла);
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт
РасширениеФайла = "";
МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь);
Если МассивСтрок.Количество() > 1 Тогда
РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];
КонецЕсли;
Возврат РасширениеФайла;
КонецФункции
&НаСервере &НаСервере
Функция ПолучитьДвоичныеДанныеНаСервере() Функция ПолучитьДвоичныеДанныеНаСервере()

View File

@@ -4,16 +4,29 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/> <AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events> <Events>
<Event name="AfterWrite">ПослеЗаписи</Event> <Event name="AfterWrite">ПослеЗаписи</Event>
<Event name="OnOpen">ПриОткрытии</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events> </Events>
<ChildItems> <ChildItems>
<InputField name="ТелеграмВебХук" id="1"> <InputField name="ТелеграмВебХук" id="1">
<DataPath>НаборКонстант.ТелеграмВебХук</DataPath> <DataPath>НаборКонстант.ТелеграмВебХук</DataPath>
<EditMode>EnterOnInput</EditMode> <EditMode>EnterOnInput</EditMode>
<AutoMaxWidth>false</AutoMaxWidth>
<MultiLine>true</MultiLine> <MultiLine>true</MultiLine>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues> <ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ТелеграмВебХукКонтекстноеМеню" id="2"/> <ContextMenu name="ТелеграмВебХукКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="ТелеграмВебХукРасширеннаяПодсказка" id="3"/> <ExtendedTooltip name="ТелеграмВебХукРасширеннаяПодсказка" id="3"/>
</InputField> </InputField>
<Button name="УдалитьВебХук" id="4">
<Type>UsualButton</Type>
<CommandName>Form.Command.УдалитьВебХук</CommandName>
<ExtendedTooltip name="УдалитьВебХукРасширеннаяПодсказка" id="5"/>
</Button>
<Button name="ВывестиИнформациюОВебхуке" id="6">
<Type>UsualButton</Type>
<CommandName>Form.Command.ВывестиИнформациюОВебхуке</CommandName>
<ExtendedTooltip name="ВывестиИнформациюОВебхукеРасширеннаяПодсказка" id="7"/>
</Button>
</ChildItems> </ChildItems>
<Attributes> <Attributes>
<Attribute name="НаборКонстант" id="1"> <Attribute name="НаборКонстант" id="1">
@@ -24,4 +37,36 @@
<SavedData>true</SavedData> <SavedData>true</SavedData>
</Attribute> </Attribute>
</Attributes> </Attributes>
<Commands>
<Command name="УдалитьВебХук" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Удалить веб хук</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Удалить веб хук</v8:content>
</v8:item>
</ToolTip>
<Action>УдалитьВебХук</Action>
</Command>
<Command name="ВывестиИнформациюОВебхуке" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Вывести информацию о вебхуке</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Вывести информацию о вебхуке</v8:content>
</v8:item>
</ToolTip>
<Action>ВывестиИнформациюОВебхуке</Action>
</Command>
</Commands>
</Form> </Form>

View File

@@ -2,20 +2,42 @@
&НаКлиенте &НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи) Процедура ПослеЗаписи(ПараметрыЗаписи)
Сообщить(РезультатУстановкиВебХукаНаСервере()); Ответ = ТелеграмМетодыВызовСервера.SetWebHook(ТелеграмВебХук());
ТекстСообщения = СтрШаблон(?(Ответ.Успех, "Успешно: %1","Ошибка: %1"), Ответ.Описание);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстСообщения;
Сообщение.Сообщить();
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста &НаСервереБезКонтекста
Функция РезультатУстановкиВебХукаНаСервере() Функция ТелеграмВебХук()
Ответ = ТелеграмМетодыВызовСервера.SetWebHook(Константы.ТелеграмВебХук.Получить()); Возврат Константы.ТелеграмВебХук.Получить();
ОтветОбъект = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ);
Если ОтветОбъект.Получить("description") <> Неопределено Тогда
Возврат ОтветОбъект["description"];
КонецЕсли;
Возврат Ответ;
КонецФункции КонецФункции
&НаКлиенте
Процедура УдалитьВебХук(Команда)
Ответ = ТелеграмМетодыВызовСервера.DeleteWebhook();
ТекстСообщения = СтрШаблон(?(Ответ.Успех, "Успешно: %1","Ошибка: %1"), Ответ.Описание);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстСообщения;
Сообщение.Сообщить();
КонецПроцедуры
&НаКлиенте
Процедура ВывестиИнформациюОВебхуке(Команда)
Ответ = ТелеграмМетодыВызовСервера.GetWebhookInfo();
Если Ответ.Успех И ЗначениеЗаполнено(Ответ.Тело) Тогда
Для каждого ПараметрОтвета из Ответ.Тело["result"] Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "" + ПараметрОтвета.Ключ + "=" + ПараметрОтвета.Значение;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли
КонецПроцедуры

View File

@@ -2,82 +2,115 @@
Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL); РезультатЗапроса = Новый Структура();
РезультатЗапроса.Вставить("Успех", Ложь);
РезультатЗапроса.Вставить("Тело", Неопределено);
РезультатЗапроса.Вставить("Описание", "");
РезультатЗапроса.Вставить("ДвоичныеДанные", ДвоичныеДанные);
Если Параметры <> Неопределено Тогда Попытка
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры); Соединение = Новый 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", КодСостояния, Описание)); АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
ТелоОтвета = Неопределено; КонецЕсли;
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type","application/json");
Ответ = Соединение.Получить(Запрос);
ТелоОтветаКакСтрока = Ответ.ПолучитьТелоКакСтроку();
РезультатЗапроса.Тело = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(),
HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоОтветаКакСтрока));
Если НЕ ДвоичныеДанные И РезультатЗапроса.Тело.Получить("description") <> Неопределено Тогда
РезультатЗапроса.Описание = РезультатЗапроса.Тело["description"];
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
РезультатЗапроса.Успех = Истина;
Иначе
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Ошибка выполнения HTTP-запроса. Код состояния = %1. Описание:%2", КодСостояния,
РезультатЗапроса.Описание));
КонецЕсли;
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.GET, ТелоОтветаКакСтрока, КодСостояния);
КонецЕсли;
Исключение
РезультатЗапроса.Успех = Ложь;
РезультатЗапроса.Описание = "Исключение при выполнении HTTP-запроса: " + ОписаниеОшибки();
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, РезультатЗапроса.Описание);
КонецПопытки;
Возврат ТелоОтвета; Возврат РезультатЗапроса;
КонецФункции КонецФункции
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Тело = Неопределено) Экспорт Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Данные = Неопределено) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL); РезультатЗапроса = Новый Структура();
РезультатЗапроса.Вставить("Успех", Ложь);
РезультатЗапроса.Вставить("Тело", Неопределено);
РезультатЗапроса.Вставить("Описание", "");
Если Параметры <> Неопределено Тогда Попытка
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры); Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса); Если Параметры <> Неопределено Тогда
Запрос.Заголовки.Вставить("Content-Type","application/json"); АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
Если Тело <> Неопределено Тогда КонецЕсли;
Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело)); Запрос = Новый HTTPЗапрос(АдресРесурса);
КонецЕсли;
Если Данные <> Неопределено Тогда
Если Данные.Свойство("Разделитель") Тогда
Запрос.УстановитьТелоИзДвоичныхДанных(Данные.ДвоичныеДанные);
Запрос.Заголовки.Вставить("Content-Length", Формат(Данные.ДвоичныеДанные.Размер(), "ЧН=0; ЧГ="));
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Данные.Разделитель);
КонецЕсли;
Иначе
Запрос.Заголовки.Вставить("Content-Type","application/json");
КонецЕсли;
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтветаКакСтрока = Ответ.ПолучитьТелоКакСтроку();
ТелоДляОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоОтветаКакСтрока);
Если ТелоДляОтвета <> Неопределено Тогда
РезультатЗапроса.Тело = ТелоДляОтвета;
РезультатЗапроса.Описание = ?(ТелоДляОтвета.Получить("description") <> Неопределено, ТелоДляОтвета["description"], "");
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
РезультатЗапроса.Успех = Истина;
Иначе
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Ошибка выполнения HTTP-запроса. Код состояния = %1. Описание:%2", КодСостояния,
РезультатЗапроса.Описание));
КонецЕсли;
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.POST, ТелоОтветаКакСтрока, КодСостояния);
КонецЕсли;
Исключение
РезультатЗапроса.Успех = Ложь;
РезультатЗапроса.Описание = "Исключение при выполнении HTTP-запроса: " + ОписаниеОшибки();
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, РезультатЗапроса.Описание);
КонецПопытки;
Ответ = Соединение.ОтправитьДляОбработки(Запрос); Возврат РезультатЗапроса;
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = Запрос.АдресРесурса;
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
Лог.Записать();
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось выполнить запрос. Код состояния = " + КодСостояния;
Сообщение.Сообщить();
ТелоОтвета = Неопределено;
КонецЕсли;
Возврат ТелоОтвета;
КонецФункции КонецФункции
Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт
Если НЕ ЗначениеЗаполнено(СтрокаJson) Тогда
Возврат Неопределено;
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJson); ЧтениеJSON.УстановитьСтроку(СтрокаJson);
Попытка Попытка
@@ -95,6 +128,11 @@
Функция ОбъектВСтрокуJson(Объект) Экспорт Функция ОбъектВСтрокуJson(Объект) Экспорт
Если Объект = Неопределено Тогда
Возврат "";
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб); ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
@@ -150,7 +188,6 @@
КонецФункции КонецФункции
Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры) Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры)
Если Параметры.Количество() = 0 Тогда Если Параметры.Количество() = 0 Тогда
@@ -169,4 +206,18 @@
КонецФункции КонецФункции
Процедура ЗалогироватьЗапрос(АдресРесурса, Метод, ТелоОтветаКакСтрока, КодСостояния)
АдресРесурса = СтрЗаменить(АдресРесурса, Константы.ТелеграмТокен.Получить(), "#token#");
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = АдресРесурса;
Лог.Метод = Метод;
Лог.КодСостояния = КодСостояния;
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(ТелоОтветаКакСтрока);
Лог.Записать();
КонецПроцедуры
#КонецОбласти #КонецОбласти

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="bc2f6893-5ccb-40f8-8de8-ef7624ff4a5d">
<Properties>
<Name>РаботаСФайламиКлиентСервер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Работа с файлами клиент сервер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>true</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,10 @@
Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт
РасширениеФайла = "";
МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь);
Если МассивСтрок.Количество() > 1 Тогда
РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];
КонецЕсли;
Возврат РасширениеФайла;
КонецФункции

View File

@@ -4,7 +4,7 @@
ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки); ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки);
АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage"); АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage");
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,,ТелоЗапроса); Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,, ТелоЗапроса);
КонецФункции КонецФункции
@@ -48,13 +48,101 @@
КонецФункции КонецФункции
Функция GetMe() Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("getMe");
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса);
КонецФункции
Функция SendDocument(ИдЧата, ДокументДляОтправки, Надпись = Неопределено, БезУведомления = Ложь) Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("sendDocument");
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
ДвоичныеДанныеДокумента = ДвоичныеДанныеДокумента(ИдЧата, ДокументДляОтправки, Надпись, БезУведомления, Разделитель);
ДанныеДокумента = Новый Структура("Разделитель, ДвоичныеДанные", Разделитель, ДвоичныеДанныеДокумента);
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,, ДанныеДокумента);
КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция АдресРесурсаПоИмениМетода(ИмяМетода) Функция АдресРесурсаПоИмениМетода(ИмяМетода)
Возврат СтрШаблон("/bot%1/%2", ТелеграмПовторноеИспользование.ТелеграмТокен(), ИмяМетода); Токен = ТелеграмПовторноеИспользование.ТелеграмТокен();
Если ПустаяСтрока(Токен) Тогда
ВызватьИсключение "Не задан токен Telegram бота";
КонецЕсли;
Возврат СтрШаблон("/bot%1/%2", Токен, ИмяМетода);
КонецФункции
Функция ДвоичныеДанныеДокумента(ИдЧата, Документ, Надпись = Неопределено, БезУведомления = Ложь, Разделитель)
Если Документ = Неопределено ИЛИ Не (Документ.Свойство("ДанныеФайла") И ТипЗнч(Документ.ДанныеФайла) = Тип("ДвоичныеДанные")) Тогда
ВызватьИсключение "Неверный параметр Документ: ожидается непустой объект, содержащий двоичные данные";
КонецЕсли;
ИмяФайла = Документ.ИмяФайла;
ТипСодержимого = СтрШаблон("application/%1", РаботаСФайламиКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла));
ТелоЗапроса = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ТелоЗапроса, , , Символы.ВК + Символы.ПС, "");
ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, "document", Документ.ДанныеФайла, ИмяФайла, ТипСодержимого);
ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, "chat_id", Формат(ИдЧата, "ЧН=0; ЧГ="));
ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, "caption", Надпись);
ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, "disable_notification", БулевоСтрокой(БезУведомления));
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
ЗаписьДанных.Закрыть();
Возврат ТелоЗапроса.ЗакрытьИПолучитьДвоичныеДанные();
КонецФункции
Процедура ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, ИмяПоля, Значение, ИмяФайла = Неопределено, ТипСодержимого = Неопределено)
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
Если ИмяФайла <> Неопределено Тогда
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1; filename=%2", ИмяПоля, ИмяФайла));
Иначе
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1", ИмяПоля));
КонецЕсли;
Если ТипСодержимого <> Неопределено Тогда
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Type: %1", ТипСодержимого));
КонецЕсли;
ЗаписьДанных.ЗаписатьСтроку("");
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
ЗаписьДанных.Записать(Значение);
Иначе
ЗаписьДанных.ЗаписатьСтроку(Значение);
КонецЕсли;
ЗаписьДанных.ЗаписатьСтроку("");
КонецПроцедуры
Функция БулевоСтрокой(БулевоЗначение)
Если ТипЗнч(БулевоЗначение) = Тип("Булево") Тогда
Если БулевоЗначение Тогда
Возврат "true";
КонецЕсли;
КонецЕсли;
Возврат "false";
КонецФункции КонецФункции

View File

@@ -109,25 +109,8 @@
Ответ = ТелеграмМетодыВызовСервера.GetFile(ИдДокумента); Ответ = ТелеграмМетодыВызовСервера.GetFile(ИдДокумента);
Если Ответ = Неопределено Тогда Если Ответ.Успех И Ответ.Тело.Получить("result") <> Неопределено Тогда
Возврат Ответ; Возврат ПолучитьФайлССервераТелеграм(Ответ.Тело["result"]["file_path"]);
КонецЕсли;
ДанныеФайла = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ);
//Если ДанныеФайла.Получить("ok") <> Неопределено Тогда
// Если ДанныеФайла["ok"] И ДанныеФайла.Получить["result"] <> Неопределено Тогда
// ПутьКФайлуНаСервереТелеграм = ДанныеФайла["result"]["file_path"];
// Возврат ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервереТелеграм);
// Иначе
// ЗаписьЖурналаРегистрации("Телеграм.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
// СтрШаблон("Не удалось получить файл по id. Код ошибки %1, описание: %2", , ДанныеФайла["error_code"],
// ДанныеФайла["description"]));
// КонецЕсли;
//КонецЕсли;
Если ДанныеФайла.Получить("result") <> Неопределено Тогда
Возврат ПолучитьФайлССервераТелеграм(ДанныеФайла["result"]["file_path"]);
Иначе Иначе
Возврат Неопределено; Возврат Неопределено;
КонецЕсли; КонецЕсли;

View File

@@ -251,6 +251,7 @@
<CommonModule>ТелеграмОбщегоНазначения</CommonModule> <CommonModule>ТелеграмОбщегоНазначения</CommonModule>
<CommonModule>ТелеграмПовторноеИспользование</CommonModule> <CommonModule>ТелеграмПовторноеИспользование</CommonModule>
<CommonModule>ТелеграмРегламент</CommonModule> <CommonModule>ТелеграмРегламент</CommonModule>
<CommonModule>РаботаСФайламиКлиентСервер</CommonModule>
<HTTPService>HTTPСервис_Telegram</HTTPService> <HTTPService>HTTPСервис_Telegram</HTTPService>
<ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob> <ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob>
<Constant>ТелеграмТокен</Constant> <Constant>ТелеграмТокен</Constant>
@@ -261,6 +262,7 @@
<Catalog>ТелеграмСообщение</Catalog> <Catalog>ТелеграмСообщение</Catalog>
<Catalog>ТелеграмДокумент</Catalog> <Catalog>ТелеграмДокумент</Catalog>
<Document>ЛогHttpЗапроса</Document> <Document>ЛогHttpЗапроса</Document>
<Enum>МетодHTTPЗапроса</Enum>
<DataProcessor>РаботаССообщениями</DataProcessor> <DataProcessor>РаботаССообщениями</DataProcessor>
<InformationRegister>ТелеграмСообщения</InformationRegister> <InformationRegister>ТелеграмСообщения</InformationRegister>
</ChildObjects> </ChildObjects>

View File

@@ -50,7 +50,7 @@
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString> <FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString> <ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm>Document.ЛогHttpЗапроса.Form.ФормаДокумента</DefaultObjectForm> <DefaultObjectForm>Document.ЛогHttpЗапроса.Form.ФормаДокумента</DefaultObjectForm>
<DefaultListForm/> <DefaultListForm>Document.ЛогHttpЗапроса.Form.ФормаСписка</DefaultListForm>
<DefaultChoiceForm/> <DefaultChoiceForm/>
<AuxiliaryObjectForm/> <AuxiliaryObjectForm/>
<AuxiliaryListForm/> <AuxiliaryListForm/>
@@ -164,7 +164,91 @@
<DataHistory>Use</DataHistory> <DataHistory>Use</DataHistory>
</Properties> </Properties>
</Attribute> </Attribute>
<Attribute uuid="7f828e0d-717b-432e-a5af-c88f7c687b23">
<Properties>
<Name>Метод</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Метод</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:EnumRef.МетодHTTPЗапроса</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="9d3d2497-4ab3-4235-a5c5-4ec678146549">
<Properties>
<Name>КодСостояния</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Код состояния</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаДокумента</Form> <Form>ФормаДокумента</Form>
<Form>ФормаСписка</Form>
</ChildObjects> </ChildObjects>
</Document> </Document>
</MetaDataObject> </MetaDataObject>

View File

@@ -4,6 +4,9 @@
<UsePostingMode>Auto</UsePostingMode> <UsePostingMode>Auto</UsePostingMode>
<RepostOnWrite>true</RepostOnWrite> <RepostOnWrite>true</RepostOnWrite>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/> <AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems> <ChildItems>
<InputField name="Номер" id="1"> <InputField name="Номер" id="1">
<DataPath>Объект.Number</DataPath> <DataPath>Объект.Number</DataPath>
@@ -19,6 +22,12 @@
<ContextMenu name="ДатаКонтекстноеМеню" id="5"/> <ContextMenu name="ДатаКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="6"/> <ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="6"/>
</InputField> </InputField>
<InputField name="Метод" id="18">
<DataPath>Объект.Метод</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="МетодКонтекстноеМеню" id="19"/>
<ExtendedTooltip name="МетодРасширеннаяПодсказка" id="20"/>
</InputField>
<UsualGroup name="HTTP" id="13"> <UsualGroup name="HTTP" id="13">
<Title> <Title>
<v8:item> <v8:item>

View File

@@ -0,0 +1,7 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.ТолькоПросмотр = Истина;
КонецПроцедуры

View File

@@ -0,0 +1,21 @@
<?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">
<Form uuid="d008fa49-c87c-4ad1-aebb-0703895d1310">
<Properties>
<Name>ФормаСписка</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма списка</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
</Properties>
</Form>
</MetaDataObject>

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" 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: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">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа пользовательских настроек</v8:content>
</v8:item>
</Title>
<VerticalStretch>false</VerticalStretch>
<Group>Vertical</Group>
<ShowTitle>false</ShowTitle>
<ExtendedTooltip name="СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка" id="2"/>
</UsualGroup>
<Table name="Список" id="3">
<Representation>List</Representation>
<CommandBarLocation>None</CommandBarLocation>
<DefaultItem>true</DefaultItem>
<UseAlternationRowColor>true</UseAlternationRowColor>
<InitialTreeView>ExpandTopLevel</InitialTreeView>
<EnableStartDrag>true</EnableStartDrag>
<DataPath>Список</DataPath>
<RowPictureDataPath>Список.DefaultPicture</RowPictureDataPath>
<AutoRefresh>false</AutoRefresh>
<AutoRefreshPeriod>60</AutoRefreshPeriod>
<Period>
<v8:variant xsi:type="v8:StandardPeriodVariant">Custom</v8:variant>
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</Period>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<RestoreCurrentRow>false</RestoreCurrentRow>
<TopLevelParent xsi:nil="true"/>
<ShowRoot>true</ShowRoot>
<AllowRootChoice>false</AllowRootChoice>
<UpdateOnDataChange>Auto</UpdateOnDataChange>
<UserSettingsGroup>СписокКомпоновщикНастроекПользовательскиеНастройки</UserSettingsGroup>
<AllowGettingCurrentRowURL>true</AllowGettingCurrentRowURL>
<ContextMenu name="СписокКонтекстноеМеню" id="4"/>
<AutoCommandBar name="СписокКоманднаяПанель" id="5">
<Autofill>false</Autofill>
</AutoCommandBar>
<ExtendedTooltip name="СписокРасширеннаяПодсказка" id="6"/>
<SearchStringAddition name="СписокСтрокаПоиска" id="7">
<AdditionSource>
<Item>Список</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="СписокСтрокаПоискаКонтекстноеМеню" id="8"/>
<ExtendedTooltip name="СписокСтрокаПоискаРасширеннаяПодсказка" id="9"/>
</SearchStringAddition>
<ViewStatusAddition name="СписокСостояниеПросмотра" id="10">
<AdditionSource>
<Item>Список</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="СписокСостояниеПросмотраКонтекстноеМеню" id="11"/>
<ExtendedTooltip name="СписокСостояниеПросмотраРасширеннаяПодсказка" id="12"/>
</ViewStatusAddition>
<SearchControlAddition name="СписокУправлениеПоиском" id="13">
<AdditionSource>
<Item>Список</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="СписокУправлениеПоискомКонтекстноеМеню" id="14"/>
<ExtendedTooltip name="СписокУправлениеПоискомРасширеннаяПодсказка" id="15"/>
</SearchControlAddition>
<ChildItems>
<LabelField name="Дата" id="16">
<DataPath>Список.Date</DataPath>
<DefaultItem>true</DefaultItem>
<ContextMenu name="ДатаКонтекстноеМеню" id="17"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="18"/>
</LabelField>
<LabelField name="Номер" id="19">
<DataPath>Список.Number</DataPath>
<ContextMenu name="НомерКонтекстноеМеню" id="20"/>
<ExtendedTooltip name="НомерРасширеннаяПодсказка" id="21"/>
</LabelField>
<LabelField name="Метод" id="25">
<DataPath>Список.Метод</DataPath>
<ContextMenu name="МетодКонтекстноеМеню" id="26"/>
<ExtendedTooltip name="МетодРасширеннаяПодсказка" id="27"/>
</LabelField>
<LabelField name="КодСостояния" id="31">
<DataPath>Список.КодСостояния</DataPath>
<ContextMenu name="КодСостоянияКонтекстноеМеню" id="32"/>
<ExtendedTooltip name="КодСостоянияРасширеннаяПодсказка" id="33"/>
</LabelField>
<LabelField name="HTTPЗапрос" id="28">
<DataPath>Список.HTTPЗапрос</DataPath>
<ContextMenu name="HTTPЗапросКонтекстноеМеню" id="29"/>
<ExtendedTooltip name="HTTPЗапросРасширеннаяПодсказка" id="30"/>
</LabelField>
</ChildItems>
</Table>
</ChildItems>
<Attributes>
<Attribute name="Список" id="1">
<Type>
<v8:Type>cfg:DynamicList</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<Settings xsi:type="DynamicList">
<ManualQuery>false</ManualQuery>
<DynamicDataRead>true</DynamicDataRead>
<MainTable>Document.ЛогHttpЗапроса</MainTable>
<ListSettings>
<dcsset:filter>
<dcsset:viewMode>Normal</dcsset:viewMode>
<dcsset:userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</dcsset:userSettingID>
</dcsset:filter>
<dcsset:order>
<dcsset:viewMode>Normal</dcsset:viewMode>
<dcsset:userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</dcsset:userSettingID>
</dcsset:order>
<dcsset:conditionalAppearance>
<dcsset:viewMode>Normal</dcsset:viewMode>
<dcsset:userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</dcsset:userSettingID>
</dcsset:conditionalAppearance>
<dcsset:itemsViewMode>Normal</dcsset:itemsViewMode>
<dcsset:itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</dcsset:itemsUserSettingID>
</ListSettings>
</Settings>
</Attribute>
</Attributes>
</Form>

View File

@@ -0,0 +1,67 @@
<?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">
<Enum uuid="71ba9b1f-8966-4c88-accf-4683d4764b70">
<InternalInfo>
<xr:GeneratedType name="EnumRef.МетодHTTPЗапроса" category="Ref">
<xr:TypeId>062ec44f-ddff-4eb2-9d67-ace1243a7874</xr:TypeId>
<xr:ValueId>cdbc4fda-6d89-4e83-950b-648b679c0a5c</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="EnumManager.МетодHTTPЗапроса" category="Manager">
<xr:TypeId>75bb42b3-89ee-4666-a3d9-dfe18b9c28e1</xr:TypeId>
<xr:ValueId>bc3f9676-2064-4845-a533-556e907c48bf</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="EnumList.МетодHTTPЗапроса" category="List">
<xr:TypeId>ac64ef38-c6cc-4bc3-a870-1784bd2b1317</xr:TypeId>
<xr:ValueId>35a3a837-9322-46af-9807-8d233146ed18</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>МетодHTTPЗапроса</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Метод HTTP запроса</v8:content>
</v8:item>
</Synonym>
<Comment/>
<UseStandardCommands>false</UseStandardCommands>
<Characteristics/>
<QuickChoice>true</QuickChoice>
<ChoiceMode>BothWays</ChoiceMode>
<DefaultListForm/>
<DefaultChoiceForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
<ChildObjects>
<EnumValue uuid="7e9d78ae-a70f-4b89-88d7-f05af30bbbf8">
<Properties>
<Name>GET</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>GET</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="94fc155f-0031-4d7e-9dd4-4d424566307b">
<Properties>
<Name>POST</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>POST</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
</ChildObjects>
</Enum>
</MetaDataObject>

View File

@@ -39,6 +39,30 @@
</Method> </Method>
</ChildObjects> </ChildObjects>
</URLTemplate> </URLTemplate>
<URLTemplate uuid="fd611f01-bc5b-412f-9d6a-395f20daf8f7">
<Properties>
<Name>ШаблонURL2</Name>
<Synonym/>
<Comment/>
<Template>/info</Template>
</Properties>
<ChildObjects>
<Method uuid="570679c7-7797-42cc-ab33-1b3b48407bdf">
<Properties>
<Name>GeBotInfo</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ge bot info</v8:content>
</v8:item>
</Synonym>
<Comment/>
<HTTPMethod>GET</HTTPMethod>
<Handler>ШаблонURL1GeBotInfo</Handler>
</Properties>
</Method>
</ChildObjects>
</URLTemplate>
</ChildObjects> </ChildObjects>
</HTTPService> </HTTPService>
</MetaDataObject> </MetaDataObject>

View File

@@ -2,28 +2,30 @@
Функция ШаблонURL1PostGetUpdate(Запрос) Функция ШаблонURL1PostGetUpdate(Запрос)
Попытка Попытка
Лог = Неопределено;
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
ТелоЗапросаДляЛогов = HttpОбщегоНазначения.ФорматированныйJson(Запрос.ПолучитьТелоКакСтроку());
Лог.HTTPЗапрос = ТелоЗапросаДляЛогов;
КонецЕсли;
ТелеграмОбщегоНазначения.ОбработатьИСохранитьОбновленияТелеграм(Запрос.ПолучитьТелоКакСтроку()); ТелеграмОбщегоНазначения.ОбработатьИСохранитьОбновленияТелеграм(Запрос.ПолучитьТелоКакСтроку());
Ответ = HttpОбщегоНазначения.ОтветУспех(); Ответ = HttpОбщегоНазначения.ОтветУспех();
Если Лог <> Неопределено Тогда
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
Лог.Записать();
КонецЕсли;
Возврат Ответ; Возврат Ответ;
Исключение Исключение
Ответ = HttpОбщегоНазначения.ОтветОшибка(); ЗаписьЖурналаРегистрации("Телеграм-бот.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
Если Лог <> Неопределено Тогда ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()); Возврат HttpОбщегоНазначения.ОтветОшибка();
Лог.Записать(); КонецПопытки;
КонецЕсли;
КонецФункции
Возврат Ответ;
Функция ШаблонURL1GeBotInfo(Запрос)
Попытка
ОтветБотИнфо = ТелеграмМетодыВызовСервера.GetMe();
Если ОтветБотИнфо.Успех Тогда
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(HttpОбщегоНазначения.ОбъектВСтрокуJson(ОтветБотИнфо.Тело));
Возврат Ответ;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Телеграм-бот.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат HttpОбщегоНазначения.ОтветОшибка();
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции

View File

@@ -26,8 +26,8 @@
<xr:Item xsi:type="xr:MDObjectRef">CommonForm.ТелеграмВебХук</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">CommonForm.ТелеграмВебХук</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Constant.ЛогироватьHttpЗапросы</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Constant.ЛогироватьHttpЗапросы</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ЛогHttpЗапроса</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Document.ЛогHttpЗапроса</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">23bf8986-e502-4170-ad89-eac16b64e144</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">c3c88554-5bc5-41b7-ae33-7a29b983d784</xr:Item>
</Content> </Content>
</Properties> </Properties>
<ChildObjects/> <ChildObjects/>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<VERSION>1</VERSION> <VERSION>2</VERSION>