diff --git a/src/cf/Catalogs/ТелеграмДокумент/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/ТелеграмДокумент/Forms/ФормаЭлемента/Ext/Form/Module.bsl index c60fdb4..2d502c4 100644 --- a/src/cf/Catalogs/ТелеграмДокумент/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/src/cf/Catalogs/ТелеграмДокумент/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -2,25 +2,13 @@ &НаКлиенте Процедура ПросмотрФайла(Команда) - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(ПолучитьРасширениеИмениФайла(Объект.file_name)); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РаботаСФайламиКлиентСервер.ПолучитьРасширениеИмениФайла(Объект.file_name)); ДвоичныеДанные = ПолучитьДвоичныеДанныеНаСервере(); ДвоичныеДанные.Записать(ИмяВременногоФайла); ЗапуститьПриложениеАсинх(ИмяВременногоФайла); КонецПроцедуры -&НаСервереБезКонтекста -Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт - - РасширениеФайла = ""; - МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); - Если МассивСтрок.Количество() > 1 Тогда - РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1]; - КонецЕсли; - Возврат РасширениеФайла; - -КонецФункции - &НаСервере Функция ПолучитьДвоичныеДанныеНаСервере() diff --git a/src/cf/CommonForms/ТелеграмВебХук/Ext/Form.xml b/src/cf/CommonForms/ТелеграмВебХук/Ext/Form.xml index 807a46d..2507edc 100644 --- a/src/cf/CommonForms/ТелеграмВебХук/Ext/Form.xml +++ b/src/cf/CommonForms/ТелеграмВебХук/Ext/Form.xml @@ -4,16 +4,29 @@ ПослеЗаписи + ПриОткрытии + ПриСозданииНаСервере НаборКонстант.ТелеграмВебХук EnterOnInput + false true true + + @@ -24,4 +37,36 @@ true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удалить веб хук</v8:content> + </v8:item> + + + + ru + Удалить веб хук + + + УдалитьВебХук + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вывести информацию о вебхуке</v8:content> + </v8:item> + + + + ru + Вывести информацию о вебхуке + + + ВывестиИнформациюОВебхуке + + \ No newline at end of file diff --git a/src/cf/CommonForms/ТелеграмВебХук/Ext/Form/Module.bsl b/src/cf/CommonForms/ТелеграмВебХук/Ext/Form/Module.bsl index fa34f68..1bc4edc 100644 --- a/src/cf/CommonForms/ТелеграмВебХук/Ext/Form/Module.bsl +++ b/src/cf/CommonForms/ТелеграмВебХук/Ext/Form/Module.bsl @@ -2,20 +2,42 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Сообщить(РезультатУстановкиВебХукаНаСервере()); + Ответ = ТелеграмМетодыВызовСервера.SetWebHook(ТелеграмВебХук()); + ТекстСообщения = СтрШаблон(?(Ответ.Успех, "Успешно: %1","Ошибка: %1"), Ответ.Описание); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщения; + Сообщение.Сообщить(); КонецПроцедуры &НаСервереБезКонтекста -Функция РезультатУстановкиВебХукаНаСервере() - - Ответ = ТелеграмМетодыВызовСервера.SetWebHook(Константы.ТелеграмВебХук.Получить()); - ОтветОбъект = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ); - - Если ОтветОбъект.Получить("description") <> Неопределено Тогда - Возврат ОтветОбъект["description"]; - КонецЕсли; - - Возврат Ответ; - +Функция ТелеграмВебХук() + + Возврат Константы.ТелеграмВебХук.Получить(); + КонецФункции + +&НаКлиенте +Процедура УдалитьВебХук(Команда) + + Ответ = ТелеграмМетодыВызовСервера.DeleteWebhook(); + ТекстСообщения = СтрШаблон(?(Ответ.Успех, "Успешно: %1","Ошибка: %1"), Ответ.Описание); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщения; + Сообщение.Сообщить(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВывестиИнформациюОВебхуке(Команда) + + Ответ = ТелеграмМетодыВызовСервера.GetWebhookInfo(); + Если Ответ.Успех И ЗначениеЗаполнено(Ответ.Тело) Тогда + Для каждого ПараметрОтвета из Ответ.Тело["result"] Цикл + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "" + ПараметрОтвета.Ключ + "=" + ПараметрОтвета.Значение; + Сообщение.Сообщить(); + КонецЦикла; + КонецЕсли + +КонецПроцедуры diff --git a/src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl b/src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl index fa429d6..3c9c420 100644 --- a/src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl +++ b/src/cf/CommonModules/HttpОбщегоНазначения/Ext/Module.bsl @@ -2,82 +2,115 @@ Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт - Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL); + РезультатЗапроса = Новый Структура(); + РезультатЗапроса.Вставить("Успех", Ложь); + РезультатЗапроса.Вставить("Тело", Неопределено); + РезультатЗапроса.Вставить("Описание", ""); + РезультатЗапроса.Вставить("ДвоичныеДанные", ДвоичныеДанные); - Если Параметры <> Неопределено Тогда - АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры); - КонецЕсли; - Запрос = Новый HTTPЗапрос(АдресРесурса); - Запрос.Заголовки.Вставить("Content-Type","application/json"); - - Ответ = Соединение.Получить(Запрос); - - Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда - Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент(); - Лог.Дата = ТекущаяДатаСеанса(); - Лог.HTTPЗапрос = Запрос.АдресРесурса; - Лог.HTTPОтвет = ?(ДвоичныеДанные,"Двоичные данные", - HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку())); - Лог.Записать(); - КонецЕсли; - - КодСостояния = Ответ.КодСостояния; - - Если КодСостояния = 200 Тогда - ТелоОтвета = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ.ПолучитьТелоКакСтроку()); - Иначе - ТелоОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ.ПолучитьТелоКакСтроку()); - Описание = ?(ТелоОтвета.Получить("description") <> Неопределено, ТелоОтвета["description"], ""); + Попытка + Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL); - ЗаписьЖурналаРегистрации("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Запрос(АдресРесурса); - Запрос.Заголовки.Вставить("Content-Type","application/json"); - Если Тело <> Неопределено Тогда - Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело)); - КонецЕсли; + Попытка + Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL); + + Если Параметры <> Неопределено Тогда + АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры); + КонецЕсли; + Запрос = Новый 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); Попытка @@ -95,6 +128,11 @@ Функция ОбъектВСтрокуJson(Объект) Экспорт + Если Объект = Неопределено Тогда + Возврат ""; + КонецЕсли; + + ЗаписьJSON = Новый ЗаписьJSON; ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); @@ -150,7 +188,6 @@ КонецФункции - Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры) Если Параметры.Количество() = 0 Тогда @@ -169,4 +206,18 @@ КонецФункции +Процедура ЗалогироватьЗапрос(АдресРесурса, Метод, ТелоОтветаКакСтрока, КодСостояния) + + АдресРесурса = СтрЗаменить(АдресРесурса, Константы.ТелеграмТокен.Получить(), "#token#"); + + Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент(); + Лог.Дата = ТекущаяДатаСеанса(); + Лог.HTTPЗапрос = АдресРесурса; + Лог.Метод = Метод; + Лог.КодСостояния = КодСостояния; + Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(ТелоОтветаКакСтрока); + Лог.Записать(); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/src/cf/CommonModules/РаботаСФайламиКлиентСервер.xml b/src/cf/CommonModules/РаботаСФайламиКлиентСервер.xml new file mode 100644 index 0000000..5520003 --- /dev/null +++ b/src/cf/CommonModules/РаботаСФайламиКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + РаботаСФайламиКлиентСервер + + + ru + Работа с файлами клиент сервер + + + + false + true + true + true + false + true + false + DontUse + + + \ No newline at end of file diff --git a/src/cf/CommonModules/РаботаСФайламиКлиентСервер/Ext/Module.bsl b/src/cf/CommonModules/РаботаСФайламиКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..831f21c --- /dev/null +++ b/src/cf/CommonModules/РаботаСФайламиКлиентСервер/Ext/Module.bsl @@ -0,0 +1,10 @@ +Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт + + РасширениеФайла = ""; + МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); + Если МассивСтрок.Количество() > 1 Тогда + РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1]; + КонецЕсли; + Возврат РасширениеФайла; + +КонецФункции diff --git a/src/cf/CommonModules/ТелеграмМетодыВызовСервера/Ext/Module.bsl b/src/cf/CommonModules/ТелеграмМетодыВызовСервера/Ext/Module.bsl index 8691ee2..8979916 100644 --- a/src/cf/CommonModules/ТелеграмМетодыВызовСервера/Ext/Module.bsl +++ b/src/cf/CommonModules/ТелеграмМетодыВызовСервера/Ext/Module.bsl @@ -4,7 +4,7 @@ ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки); АдресРесурса = АдресРесурсаПоИмениМетода("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"; КонецФункции diff --git a/src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl b/src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl index 2a545c0..5a7d52a 100644 --- a/src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl +++ b/src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl @@ -109,25 +109,8 @@ Ответ = ТелеграмМетодыВызовСервера.GetFile(ИдДокумента); - Если Ответ = Неопределено Тогда - Возврат Ответ; - КонецЕсли; - - ДанныеФайла = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ); - - //Если ДанныеФайла.Получить("ok") <> Неопределено Тогда - // Если ДанныеФайла["ok"] И ДанныеФайла.Получить["result"] <> Неопределено Тогда - // ПутьКФайлуНаСервереТелеграм = ДанныеФайла["result"]["file_path"]; - // Возврат ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервереТелеграм); - // Иначе - // ЗаписьЖурналаРегистрации("Телеграм.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, - // СтрШаблон("Не удалось получить файл по id. Код ошибки %1, описание: %2", , ДанныеФайла["error_code"], - // ДанныеФайла["description"])); - // КонецЕсли; - //КонецЕсли; - - Если ДанныеФайла.Получить("result") <> Неопределено Тогда - Возврат ПолучитьФайлССервераТелеграм(ДанныеФайла["result"]["file_path"]); + Если Ответ.Успех И Ответ.Тело.Получить("result") <> Неопределено Тогда + Возврат ПолучитьФайлССервераТелеграм(Ответ.Тело["result"]["file_path"]); Иначе Возврат Неопределено; КонецЕсли; diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml index 0deaeef..b8e1c15 100644 --- a/src/cf/Configuration.xml +++ b/src/cf/Configuration.xml @@ -251,6 +251,7 @@ ТелеграмОбщегоНазначения ТелеграмПовторноеИспользование ТелеграмРегламент + РаботаСФайламиКлиентСервер HTTPСервис_Telegram ПроверкаОбновленийТелеграм ТелеграмТокен @@ -261,6 +262,7 @@ ТелеграмСообщение ТелеграмДокумент ЛогHttpЗапроса + МетодHTTPЗапроса РаботаССообщениями ТелеграмСообщения diff --git a/src/cf/Documents/ЛогHttpЗапроса.xml b/src/cf/Documents/ЛогHttpЗапроса.xml index 4b5cde0..546b122 100644 --- a/src/cf/Documents/ЛогHttpЗапроса.xml +++ b/src/cf/Documents/ЛогHttpЗапроса.xml @@ -50,7 +50,7 @@ DontUse Directly Document.ЛогHttpЗапроса.Form.ФормаДокумента - + Document.ЛогHttpЗапроса.Form.ФормаСписка @@ -164,7 +164,91 @@ Use + + + Метод + + + ru + Метод + + + + + cfg:EnumRef.МетодHTTPЗапроса + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодСостояния + + + ru + Код состояния + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + +
ФормаДокумента
+
ФормаСписка
\ No newline at end of file diff --git a/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form.xml b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form.xml index 6e45b6e..7ceb0a9 100644 --- a/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form.xml +++ b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form.xml @@ -4,6 +4,9 @@ Auto true + + ПриСозданииНаСервере + Объект.Number @@ -19,6 +22,12 @@ + + Объект.Метод + true + + + <v8:item> diff --git a/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form/Module.bsl b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..1ed1042 --- /dev/null +++ b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,7 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЭтаФорма.ТолькоПросмотр = Истина; + +КонецПроцедуры diff --git a/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка.xml b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка.xml new file mode 100644 index 0000000..4574205 --- /dev/null +++ b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка.xml @@ -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> \ No newline at end of file diff --git a/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка/Ext/Form.xml b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..b96ac68 --- /dev/null +++ b/src/cf/Documents/ЛогHttpЗапроса/Forms/ФормаСписка/Ext/Form.xml @@ -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> + + false + Vertical + false + + + + List + None + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + true + + + + + Список.Number + + + + + Список.Метод + + + + + Список.КодСостояния + + + + + Список.HTTPЗапрос + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.ЛогHttpЗапроса + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/src/cf/Enums/МетодHTTPЗапроса.xml b/src/cf/Enums/МетодHTTPЗапроса.xml new file mode 100644 index 0000000..4c91337 --- /dev/null +++ b/src/cf/Enums/МетодHTTPЗапроса.xml @@ -0,0 +1,67 @@ + + + + + + 062ec44f-ddff-4eb2-9d67-ace1243a7874 + cdbc4fda-6d89-4e83-950b-648b679c0a5c + + + 75bb42b3-89ee-4666-a3d9-dfe18b9c28e1 + bc3f9676-2064-4845-a533-556e907c48bf + + + ac64ef38-c6cc-4bc3-a870-1784bd2b1317 + 35a3a837-9322-46af-9807-8d233146ed18 + + + + МетодHTTPЗапроса + + + ru + Метод HTTP запроса + + + + false + + true + BothWays + + + + + + + + Auto + + + + + GET + + + ru + GET + + + + + + + + POST + + + ru + POST + + + + + + + + \ No newline at end of file diff --git a/src/cf/HTTPServices/HTTPСервис_Telegram.xml b/src/cf/HTTPServices/HTTPСервис_Telegram.xml index 12aa03d..63b1884 100644 --- a/src/cf/HTTPServices/HTTPСервис_Telegram.xml +++ b/src/cf/HTTPServices/HTTPСервис_Telegram.xml @@ -39,6 +39,30 @@ + + + ШаблонURL2 + + + + + + + + GeBotInfo + + + ru + Ge bot info + + + + GET + ШаблонURL1GeBotInfo + + + + \ No newline at end of file diff --git a/src/cf/HTTPServices/HTTPСервис_Telegram/Ext/Module.bsl b/src/cf/HTTPServices/HTTPСервис_Telegram/Ext/Module.bsl index fc20ba5..94eec5d 100644 --- a/src/cf/HTTPServices/HTTPСервис_Telegram/Ext/Module.bsl +++ b/src/cf/HTTPServices/HTTPСервис_Telegram/Ext/Module.bsl @@ -2,28 +2,30 @@ Функция ШаблонURL1PostGetUpdate(Запрос) Попытка - Лог = Неопределено; - Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда - Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент(); - Лог.Дата = ТекущаяДатаСеанса(); - ТелоЗапросаДляЛогов = HttpОбщегоНазначения.ФорматированныйJson(Запрос.ПолучитьТелоКакСтроку()); - Лог.HTTPЗапрос = ТелоЗапросаДляЛогов; - КонецЕсли; ТелеграмОбщегоНазначения.ОбработатьИСохранитьОбновленияТелеграм(Запрос.ПолучитьТелоКакСтроку()); Ответ = HttpОбщегоНазначения.ОтветУспех(); - Если Лог <> Неопределено Тогда - Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()); - Лог.Записать(); - КонецЕсли; Возврат Ответ; Исключение - Ответ = HttpОбщегоНазначения.ОтветОшибка(); - Если Лог <> Неопределено Тогда - Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()); - Лог.Записать(); - КонецЕсли; - - Возврат Ответ; + ЗаписьЖурналаРегистрации("Телеграм-бот.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат HttpОбщегоНазначения.ОтветОшибка(); + КонецПопытки; + +КонецФункции + +Функция ШаблонURL1GeBotInfo(Запрос) + + Попытка + ОтветБотИнфо = ТелеграмМетодыВызовСервера.GetMe(); + Если ОтветБотИнфо.Успех Тогда + Ответ = Новый HTTPСервисОтвет(200); + Ответ.УстановитьТелоИзСтроки(HttpОбщегоНазначения.ОбъектВСтрокуJson(ОтветБотИнфо.Тело)); + Возврат Ответ; + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации("Телеграм-бот.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат HttpОбщегоНазначения.ОтветОшибка(); КонецПопытки; КонецФункции diff --git a/src/cf/Subsystems/ТелеграмБот.xml b/src/cf/Subsystems/ТелеграмБот.xml index 1aef90c..97574b8 100644 --- a/src/cf/Subsystems/ТелеграмБот.xml +++ b/src/cf/Subsystems/ТелеграмБот.xml @@ -26,8 +26,8 @@ CommonForm.ТелеграмВебХук Constant.ЛогироватьHttpЗапросы Document.ЛогHttpЗапроса - 23bf8986-e502-4170-ad89-eac16b64e144 Catalog.ТелеграмДокумент + c3c88554-5bc5-41b7-ae33-7a29b983d784 diff --git a/src/cf/VERSION b/src/cf/VERSION index 6f42a32..4801487 100644 --- a/src/cf/VERSION +++ b/src/cf/VERSION @@ -1,2 +1,2 @@  -1 +2