diff --git a/src/cf/CommonModules/БотОбщегоНазначения.xml b/src/cf/CommonModules/БотОбщегоНазначения.xml
new file mode 100644
index 0000000..deecb85
--- /dev/null
+++ b/src/cf/CommonModules/БотОбщегоНазначения.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ БотОбщегоНазначения
+
+
+ ru
+ Бот общего назначения
+
+
+
+ false
+ false
+ true
+ false
+ false
+ false
+ 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..7132618
--- /dev/null
+++ b/src/cf/CommonModules/БотОбщегоНазначения/Ext/Module.bsl
@@ -0,0 +1,283 @@
+#Область ПрограммныйИнтерфейс
+
+Процедура ОбработкаКомандыБота(Тело) Экспорт
+
+ МассивОбновленийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Тело);
+ Для каждого ОбновлениеТелеграм Из МассивОбновленийТелеграм Цикл
+ ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(ОбновлениеТелеграм);
+
+ ДанныеПользователя = РаботаСОбновлениямиВызовСервера.ПолучитьДанныеПользователя(ОбновлениеТелеграм.ИдЧата);
+
+ Если ОбновлениеТелеграм.Свойство("ИдСообщения") Тогда
+ Если ОбновлениеТелеграм.Сообщение.text = "/start" Тогда
+ ОбработатьКомандуСтарт(ОбновлениеТелеграм);
+ ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/subscribe" Тогда
+ ОбработатьКомандуПодписки(ОбновлениеТелеграм);
+ ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/add" Тогда
+ ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм);
+ ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/delete" Тогда
+ ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм);
+ ИначеЕсли ДанныеПользователя <> Неопределено
+ И ДанныеПользователя.СтатусДиалога = Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда
+ ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя);
+ КонецЕсли;
+ ИначеЕсли ОбновлениеТелеграм.Свойство("ИдКоллбэка") <> Неопределено Тогда
+ Данные = ОбновлениеТелеграм.ДанныеКоллбэка;
+ Если СтрНачинаетсяС(Данные, XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion)) Тогда
+ ДобавитьКонфигурациюВСписокОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата);
+ ИначеЕсли СтрНачинаетсяС(Данные, XMLСтрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion)) Тогда
+ УдалитьКонфигурациюИзСпискаОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата);
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ДобавитьКонфигурациюВСписокОтслеживания(ТекстСообщения, ИдЧата)
+
+ Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion);
+
+ Если НЕ СтрНачинаетсяС(ТекстСообщения, Команда) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ИмяКонфигурации = СокрЛП(Сред(ТекстСообщения, СтрДлина(Команда) + 1));
+
+ Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ИмяКонфигурации);
+
+ Если Конфигурация <> Неопределено Тогда
+ ТекстОтвета = СтрШаблон("Отлично, добавляем в список конфигурацию ""%1"".", Конфигурация.Наименование) + Символы.ПС +
+ Символы.ВК + Символы.ПС +
+ "Для корректного отслеживания обновлений нужно ввести версию конфигурации (четыре группы цифр, разделённых точками):" +
+ Символы.ПС +
+ "Например: 3.1.30.197";
+ РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии,
+ ИмяКонфигурации);
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура УдалитьКонфигурациюИзСпискаОтслеживания(ТекстСообщения, ИдЧата)
+
+ Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion);
+ Если НЕ СтрНачинаетсяС(ТекстСообщения, Команда) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ИмяКонфигурации = СокрЛП(Сред(ТекстСообщения, СтрДлина(Команда) + 1));
+
+ Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ИмяКонфигурации);
+
+ Если Конфигурация <> Неопределено Тогда
+
+ МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
+ МенеджерЗаписи.Конфигурация = Конфигурация;
+ МенеджерЗаписи.ИдЧата = ИдЧата;
+ Попытка
+ МенеджерЗаписи.Удалить();
+ ТекстОтвета = СтрШаблон("Конфигурация ""%1"" удалена из списка отслеживания", Конфигурация.Наименование);
+ Исключение
+ ТекстОтвета = "При удалении данных возникла ошибка";
+ КонецПопытки;
+
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя)
+
+ ИдЧата = ОбновлениеТелеграм.ИдЧата;
+ Версия = ОбновлениеТелеграм.Сообщение.text;
+
+ Если НЕ ВерсияКонфигурацииКорректна(Версия) Тогда
+ ТекстОтвета = СтрШаблон("Вы ввели некорректный номер версии: %1%2Для корректного отслеживания обновлений нужно
+ |ввести версию конфигурации(четыре группы цифр, разделённых точками):Например: 3.1.30.197.", Версия, Символы.ПС);
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+ Возврат;
+ КонецЕсли;
+
+ Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ДанныеПользователя.ДополнительнаяИнформация);
+ Ответ = РаботаСОбновлениямиВызовСервера.АктуальнаяВерсияКонфигурации(Конфигурация, Версия);
+
+ Если НЕ Ответ.Успех Тогда
+ ТекстОтвета = "При получении данных с сервера произошла ошибка";
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+ Возврат;
+ КонецЕсли;
+
+ АктуальнаяВерсия = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"];
+
+ Если АктуальнаяВерсия = Неопределено Тогда
+ ТекстОтвета = СтрШаблон("Для указанной версии: %1 нет данных по актуальности", Версия);
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+ Возврат;
+ КонецЕсли;
+
+ МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
+ МенеджерЗаписи.Конфигурация = Конфигурация;
+ МенеджерЗаписи.ИдЧата = ИдЧата;
+ МенеджерЗаписи.ТекущаяВерсия = Версия;
+ МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
+ Попытка
+ МенеджерЗаписи.Записать();
+ РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.НачальноеСостояние, "");
+ ТекстОтвета = СтрШаблон("Версия: %1 успешно добавлена", Версия);
+ Исключение
+ ТекстОтвета = "При сохранении данных возникла ошибка";
+ КонецПопытки;
+
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
+
+КонецПроцедуры
+
+Функция ВерсияКонфигурацииКорректна(Версия)
+
+ Попытка
+ РегулярноеВыражение = "^\d+\.\d+\.\d+\.\d+$";
+ Возврат СтрПодобнаПоРегулярномуВыражению(Версия, РегулярноеВыражение);
+ Исключение
+ МассивГруппЦифр = СтрРазделить(Версия, ".");
+ Если МассивГруппЦифр.Количество() <> 4 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ Для Каждого ГруппаЦифрВерсии Из МассивГруппЦифр Цикл
+ Если Не ТолькоЦифрыВСтроке(ГруппаЦифрВерсии) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Истина;
+ КонецПопытки;
+
+КонецФункции
+
+Функция ТолькоЦифрыВСтроке(Знач Значение, Знач ПробелыЗапрещены = Истина) Экспорт
+
+ Если ТипЗнч(Значение) <> Тип("Строка") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Если Не ПробелыЗапрещены Тогда
+ Значение = СтрЗаменить(Значение, " ", "");
+ КонецЕсли;
+
+ Если СтрДлина(Значение) = 0 Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ // Если содержит только цифры, то в результате замен должна быть получена пустая строка.
+ // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
+ Возврат СтрДлина(
+ СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
+ СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
+ Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
+
+КонецФункции
+
+
+Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм)
+
+ ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС +
+ Символы.ВК + Символы.ПС +
+ "Что я умею:" + Символы.ПС +
+ "- Отслеживать новые релизы" + Символы.ПС +
+ "- Присылать уведомления о выходе обновлений" + Символы.ПС +
+ "- Показывать текущую версию" + Символы.ПС +
+ Символы.ВК + Символы.ПС +
+ "/subscribe - Список конфигураций для отслеживания" + Символы.ПС +
+ "/add - Добавить конфигурацию в список отслеживания" + Символы.ПС +
+ "/delete - Удалить конфигурацию из списка отслеживания";
+
+ ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,);
+
+КонецПроцедуры
+
+Процедура ОбработатьКомандуПодписки(ОбновлениеТелеграм)
+
+ СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ОбновлениеТелеграм.ИдЧата);
+ ТекстОтвета = "";
+
+ Если СписокКонфигураций.Количество() = 0 Тогда
+ ТекстОтвета = "Не удалось получить список конфигураций";
+ Иначе
+ Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
+ ТекстОтвета = ТекстОтвета + СтрШаблон("%1 %2%3", ?(ПунктМенюПодписки.Подписка, "[X]", "[ ]"),
+ ПунктМенюПодписки.Наименование,Символы.ПС);
+ КонецЦикла;
+ КонецЕсли;
+
+ ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,);
+
+КонецПроцедуры
+
+Процедура ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм)
+
+ ИдЧата = ОбновлениеТелеграм.ИдЧата;
+ Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion);
+
+ МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Ложь);
+ Если МассивРядов = Неопределено Тогда
+ ТекстОтвета = "Не удалось получить список конфигураций";
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
+ КонецЕсли;
+
+ Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураВстроенная(МассивРядов);
+ ТекстОтвета = "Выберите нужную конфигурацию для отслеживания обновлений";
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,, Клавиатура);
+
+КонецПроцедуры
+
+Процедура ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм)
+
+ ИдЧата = ОбновлениеТелеграм.ИдЧата;
+ Команда = XMLстрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion);
+
+ МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Истина);
+ Если МассивРядов = Неопределено Тогда
+ ТекстОтвета = "Не удалось получить список конфигураций";
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
+ КонецЕсли;
+
+ Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураВстроенная(МассивРядов);
+
+ ТекстОтвета = "Выберите нужную конфигурацию для отмены отслеживания обновлений";
+ ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,, Клавиатура);
+
+КонецПроцедуры
+
+
+Функция МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Подписка = Неопределено)
+
+ СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ИдЧата);
+
+ Если СписокКонфигураций.Количество() = 0 Тогда
+ Возврат Неопределено;
+ Иначе
+ МассивРядов = Новый Массив;
+ Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
+ Если Подписка = Неопределено
+ ИЛИ (Подписка И ПунктМенюПодписки.Подписка)
+ ИЛИ (НЕ Подписка И НЕ ПунктМенюПодписки.Подписка) Тогда
+ МассивКнопок = Новый Массив;
+ МассивКнопок.Добавить(ТелеграмРаботаСКлавиатурой.КнопкаКлавиатурыВстроенной(
+ ПунктМенюПодписки.Наименование
+ ,
+ ,
+ СтрШаблон("%1 %2", Команда, ПунктМенюПодписки.Имя)
+ ));
+ МассивРядов.Добавить(МассивКнопок);
+ КонецЕсли;
+ КонецЦикла;
+ Возврат МассивРядов;
+ КонецЕсли;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index 91122ba..17ebb65 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -249,13 +249,14 @@
Обновления
КартинкаБот
HttpОбщегоНазначения
+ РаботаСОбновлениямиВызовСервера
+ РаботаСФайламиКлиентСервер
ТелеграмМетодыВызовСервера
ТелеграмОбщегоНазначения
ТелеграмПовторноеИспользование
- ТелеграмРегламент
- РаботаСФайламиКлиентСервер
ТелеграмРаботаСКлавиатурой
- РаботаСОбновлениямиВызовСервера
+ ТелеграмРегламент
+ БотОбщегоНазначения
HTTPСервис_Telegram
ПроверкаОбновленийТелеграм
ТелеграмТокен
@@ -269,6 +270,8 @@
ЛогHttpЗапроса
МетодHTTPЗапроса
ТелеграмРежимРазметки
+ ТелеграмСтатусДиалога
+ ВидыДанныхКоллбэков
РаботаССообщениями
РаботаСОбновлениями
ТелеграмСообщения
diff --git a/src/cf/Enums/ВидыДанныхКоллбэков.xml b/src/cf/Enums/ВидыДанныхКоллбэков.xml
new file mode 100644
index 0000000..2d2a1aa
--- /dev/null
+++ b/src/cf/Enums/ВидыДанныхКоллбэков.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+ faee0c1e-a312-43c8-8af2-20618cc53904
+ b6d6ee51-fdfe-47bd-bc31-3147751dc7fc
+
+
+ 268e63a6-adc9-4961-9d35-92c1ddc296e3
+ 6e68fa9a-2345-462c-98d4-6c31908cb17b
+
+
+ 6bf0eedb-c7aa-4a05-ae0f-3900e6b21ff7
+ 7947dc7b-96c2-4672-8ebe-c48dba063c3e
+
+
+
+ ВидыДанныхКоллбэков
+
+
+ ru
+ Виды данных коллбэков
+
+
+
+ false
+
+ true
+ BothWays
+
+
+
+
+
+
+
+ Auto
+
+
+
+
+ AddVersion
+
+
+ ru
+ Add version
+
+
+
+
+
+
+
+ DeleteVersion
+
+
+ ru
+ Delete version
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cf/Enums/ТелеграмСтатусДиалога.xml b/src/cf/Enums/ТелеграмСтатусДиалога.xml
new file mode 100644
index 0000000..9a21e41
--- /dev/null
+++ b/src/cf/Enums/ТелеграмСтатусДиалога.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+ cf2bd22c-53f7-4ac4-b9cd-481d538fa00e
+ 6d902a2a-3f17-4fd5-b737-7026d967c7b8
+
+
+ 8db25e5c-a1bf-4d76-aec6-db62437baabf
+ 70ab63bd-a1f5-4a77-9a44-aa12047391a8
+
+
+ 392a66d6-1ea8-4044-b85f-a259b75aea29
+ f4d001cd-6eda-4cf1-b3a4-124be40377dd
+
+
+
+ ТелеграмСтатусДиалога
+
+
+ ru
+ Телеграм статус диалога
+
+
+
+ false
+
+ true
+ BothWays
+
+
+
+
+
+
+
+ Auto
+
+
+
+
+ НачальноеСостояние
+
+
+ ru
+ Начальное состояние
+
+
+
+
+
+
+
+ ОжиданиеВводаВерсии
+
+
+ ru
+ Ожидание ввода версии
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/cf/VERSION b/src/cf/VERSION
index aed039b..b82891c 100644
--- a/src/cf/VERSION
+++ b/src/cf/VERSION
@@ -1,2 +1,2 @@
-6
+7