diff --git a/.github/workflows/os/dictionary.json b/.github/workflows/os/dictionary.json
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/.github/workflows/os/oint_dictionary.os b/.github/workflows/os/oint_dictionary.os
index e69de29bb2..4337b1d457 100644
--- a/.github/workflows/os/oint_dictionary.os
+++ b/.github/workflows/os/oint_dictionary.os
@@ -0,0 +1,303 @@
+Перем СписокЯзыков;
+Перем ОбщийМассивСлов;
+Перем Алфавит;
+Перем МассивСимволов;
+
+Процедура ПолучитьСписокЯзыков() Экспорт
+
+	СписокЯзыков = Новый Массив();
+	СписокЯзыков.Добавить("en");
+
+КонецПроцедуры
+
+Процедура СоздатьСловари()
+
+	ПолучитьСписокЯзыков();
+	ПолучитьАлфавит();
+	ПолучитьМассивСимволов();
+
+	Для Каждого Язык Из СписокЯзыков Цикл
+		СоздатьСловарь(Язык);
+	КонецЦикла;
+
+КонецПроцедуры
+
+Процедура СоздатьСловарь(Знач Язык)
+
+	ФайлыМодулей  = НайтиФайлы("./ru/", "*.os", Истина);
+	СписокСлов    = Новый СписокЗначений();
+
+	Для Каждого Модуль Из ФайлыМодулей Цикл
+		ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
+	КонецЦикла;
+
+	ПутьСловаря         = "./service/dictionaries/" + Язык + ".json";
+	ФайлСловаря         = Новый Файл(ПутьСловаря);
+
+	СоответствиеСловаря              = Новый Соответствие();
+	СоответствиеСуществующегоСловаря = Новый Соответствие();
+
+	Если ФайлСловаря.Существует() Тогда
+
+		ЧтениеJSON = Новый ЧтениеJSON();
+		ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
+		СоответствиеСуществующегоСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
+		ЧтениеJSON.Закрыть();
+
+	КонецЕсли;
+
+	//СписокСлов.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
+
+	Для Каждого Слово Из СписокСлов Цикл
+
+		Значение     = Слово.Значение;
+		Существующее = СоответствиеСуществующегоСловаря[Значение];
+
+		Если Существующее = Неопределено Тогда
+			СоответствиеСловаря.Вставить(Значение, "");
+		Иначе
+			СоответствиеСловаря.Вставить(Значение, Существующее);
+		КонецЕсли;
+
+	КонецЦикла;
+
+	ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
+
+КонецПроцедуры
+
+Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
+
+	ТекстовыйДок = Новый ТекстовыйДокумент();
+	ТекстовыйДок.ДобавитьСтроку("{");
+
+	ТЗ = Новый ТаблицаЗначений();
+	ТЗ.Колонки.Добавить("Ключ");
+	ТЗ.Колонки.Добавить("Значение");
+	ТЗ.Колонки.Добавить("ДлинаКлюча");
+	ТЗ.Колонки.Добавить("Заполнено");
+
+	Для Каждого Элемент Из СоответствиеСловаря Цикл
+
+		НоваяСтрока = ТЗ.Добавить();
+		НоваяСтрока.Ключ = Элемент.Ключ;
+		НоваяСтрока.Значение = Элемент.Значение;
+		НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
+		НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
+
+	КонецЦикла;
+
+	ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
+
+	Для Каждого СтрокаТЗ Из ТЗ Цикл
+		Значение = СтрокаТЗ.Значение;
+		Значение = СтрЗаменить(Значение, "\", "\\");
+		Значение = СтрЗаменить(Значение, "/", "\/");
+		Значение = СтрЗаменить(Значение, """", "\""");
+
+		Ключ = СтрокаТЗ.Ключ;
+		Ключ = СтрЗаменить(Ключ, "\", "\\");
+		Ключ = СтрЗаменить(Ключ, "/", "\/");
+		Ключ = СтрЗаменить(Ключ, """", "\""");
+
+		ТекстовыйДок.ДобавитьСтроку("""" + Ключ + """: """ + Значение + """,");
+	КонецЦикла;
+
+	ТекстовыйДок.ДобавитьСтроку("}");
+	ТекстовыйДок.Записать(ПутьСловаря);
+
+КонецПроцедуры
+
+Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
+
+	Документ = Новый ТекстовыйДокумент();
+	Документ.Прочитать(ПутьКФайлу, "UTF-8");
+
+	Для Н = 1 По Документ.КоличествоСтрок() Цикл
+
+		ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
+
+		Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
+			ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
+			ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
+			ТекущаяСтрока = СтрРазделить(ТекущаяСтрока, "$", Ложь);
+
+			Для Каждого Элемент Из ТекущаяСтрока Цикл
+				ДобавитьСлово(СписокСлов, Элемент);
+			КонецЦикла;
+
+			Продолжить;
+		КонецЕсли;
+
+		Если СтрНайти(ТекущаяСтрока, """") <> 0 Или СтрНайти(ТекущаяСтрока, "|") <> 0 Тогда
+			ТекущаяСтрока = " " + ТекущаяСтрока;
+			
+			ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
+			ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
+			ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
+
+			МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
+
+			Цельный = Ложь;
+			Для Каждого Элемент Из МассивСтроки Цикл
+
+				Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
+					Продолжить;
+				КонецЕсли;
+
+				Если Цельный Тогда
+					ДобавитьСлово(СписокСлов, Элемент);
+				Иначе
+
+					Для Каждого Символ Из МассивСимволов Цикл
+						Элемент = СтрЗаменить(Элемент, Символ, "$");
+					КонецЦикла;
+
+					Пока СтрНайти(Элемент, "$$") <> 0 Цикл
+						Элемент = СтрЗаменить(Элемент, "$$", "$");
+					КонецЦикла;
+
+					МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
+					Для Каждого Дробный Из МассивЭлемента Цикл
+						ДобавитьСлово(СписокСлов, Дробный);
+					КонецЦикла;
+
+				КонецЕсли;
+
+				Цельный = Не Цельный;
+			КонецЦикла;
+			
+
+		КонецЕсли;
+		
+	КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьСлово(Список, Слово)
+	
+	Слово = СокрЛП(Слово);
+
+	Нормализовано = Ложь;
+	
+	Пока Не Нормализовано Цикл
+
+		ПервыйСимвол    = Ложь;
+		ПоследнийСимвол = Ложь;
+
+		Для Каждого Символ Из МассивСимволов Цикл
+
+			ПервыйСимвол    = СтрНачинаетсяС(Слово, Символ);
+			ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
+
+			Если ПервыйСимвол Или ПоследнийСимвол Тогда
+				Прервать;
+			КонецЕсли;
+
+		КонецЦикла;
+
+		Если ПервыйСимвол Тогда
+			Слово = Лев(Слово, СтрДлина(Слово) - 1);
+		КонецЕсли;
+
+		Если ПоследнийСимвол Тогда
+			Слово = Прав(Слово, СтрДлина(Слово) - 1);
+		КонецЕсли;
+
+		Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
+			Нормализовано = Истина;
+		КонецЕсли;
+
+	КонецЦикла;
+
+	Слово = СокрЛП(Слово);
+
+	Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
+		Возврат;
+	КонецЕсли;
+
+	СуществующееЗначение = Список.НайтиПоЗначению(Слово);
+
+	Если СуществующееЗначение = Неопределено Тогда
+		Список.Добавить(Слово, СтрДлина(Слово));
+	КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПолучитьАлфавит()
+
+	Алфавит = Новый Массив;
+	
+	Алфавит.Добавить("а");
+	Алфавит.Добавить("б");
+	Алфавит.Добавить("в");
+	Алфавит.Добавить("г");
+	Алфавит.Добавить("д");
+	Алфавит.Добавить("е");
+	Алфавит.Добавить("ё");
+	Алфавит.Добавить("ж");
+	Алфавит.Добавить("з");
+	Алфавит.Добавить("и");
+	Алфавит.Добавить("й");
+	Алфавит.Добавить("к");
+	Алфавит.Добавить("л");
+	Алфавит.Добавить("м");
+	Алфавит.Добавить("н");
+	Алфавит.Добавить("о");
+	Алфавит.Добавить("п");
+	Алфавит.Добавить("р");
+	Алфавит.Добавить("с");
+	Алфавит.Добавить("т");
+	Алфавит.Добавить("у");
+	Алфавит.Добавить("ф");
+	Алфавит.Добавить("х");
+	Алфавит.Добавить("ц");
+	Алфавит.Добавить("ч");
+	Алфавит.Добавить("ш");
+	Алфавит.Добавить("щ");
+	Алфавит.Добавить("ъ");
+	Алфавит.Добавить("ы");
+	Алфавит.Добавить("ь");
+	Алфавит.Добавить("э");
+	Алфавит.Добавить("ю");
+	Алфавит.Добавить("я");
+	
+КонецПроцедуры
+
+Процедура ПолучитьМассивСимволов()
+
+	МассивСимволов = Новый Массив();
+	МассивСимволов.Добавить(";");
+	МассивСимволов.Добавить(".");
+	МассивСимволов.Добавить(",");
+	МассивСимволов.Добавить(")");
+	МассивСимволов.Добавить("(");
+	МассивСимволов.Добавить("/");
+	МассивСимволов.Добавить("\");
+	МассивСимволов.Добавить("[");
+	МассивСимволов.Добавить("]");
+	МассивСимволов.Добавить("=");
+	МассивСимволов.Добавить("+");
+	МассивСимволов.Добавить("-");
+	МассивСимволов.Добавить("*");
+	МассивСимволов.Добавить("#");
+	МассивСимволов.Добавить(" ");
+	МассивСимволов.Добавить("""");
+	
+КонецПроцедуры
+
+Функция НайтиКириллицу(Знач Слово)
+
+	СловоНРег = НРег(Слово);
+
+	Для Каждого Буква Из Алфавит Цикл
+		Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
+			Возврат Истина;
+		КонецЕсли;
+	КонецЦикла;
+
+	Возврат Ложь;
+
+КонецФункции
+
+СоздатьСловари();
+
diff --git a/.github/workflows/os/opi_translate.os b/.github/workflows/os/opi_translate.os
new file mode 100644
index 0000000000..28e22d1b27
--- /dev/null
+++ b/.github/workflows/os/opi_translate.os
@@ -0,0 +1,37 @@
+
+Процедура СоздатьЛокализацию(Знач Язык)
+
+	КаталогИсточник = Новый Файл(".\ru\OPI");
+	КаталогПриемник = Новый Файл(".\" + Язык + "\OPI");
+
+	СкопироватьФайлы(КаталогИсточник.ПолноеИмя, КаталогПриемник.ПолноеИмя);
+	ФайлыМодулей  = НайтиФайлы("./" + Язык + "/", "*.bsl", Истина);
+
+	
+КонецПроцедуры
+
+Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
+	
+	Если Прав(КаталогИсточник, 1) <> "\" Тогда
+		КаталогИсточник = КаталогИсточник + "\";
+	КонецЕсли;	
+	Если Прав(КаталогПриемник, 1) <> "\" Тогда
+		КаталогПриемник = КаталогПриемник + "\";
+	КонецЕсли;	
+	
+	СоздатьКаталог(КаталогПриемник);
+	
+	МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
+	
+	Для Каждого Файл Из МассивФайлов Цикл
+		ПолноеИмяИсточник = Файл.ПолноеИмя;
+		ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
+		
+		Если Файл.ЭтоКаталог() Тогда
+			СоздатьКаталог(ПолноеИмяПриемник);	
+		Иначе
+			КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
+		КонецЕсли;
+	КонецЦикла;	
+	
+КонецПроцедуры
\ No newline at end of file
diff --git a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Obnovit-token.md b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Obnovit-token.md
index 6692477550..2c24a59d69 100644
--- a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Obnovit-token.md
+++ b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Obnovit-token.md
@@ -19,18 +19,18 @@ sidebar_position: 3
 
 ```bsl title="Пример кода"
 	
-    Ключ   = "oynqxds...";
-    Секрет = "tk2oewn...";
-    Рефреш = "MJIG2TBhD-kAAAAAAAAAAd3oNph_4iTy...";
+    КлючПриложения   = "oynqxds...";
+    СекретПриложения = "tk2oewn...";
+    РефрешТокен      = "oZFWg3DmZ_IAAAAAAAAAAWilOA0M1SjV...";
     
-    Результат = OPI_Dropbox.ОбновитьТокен(Ключ, Секрет, Рефреш);
+    Результат = OPI_Dropbox.ОбновитьТокен(КлючПриложения, СекретПриложения, РефрешТокен);
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ОбновитьТокен --appkey %appkey% --appsecret %appsecret% --refresh %refresh%
+  oint dropbox ОбновитьТокен --appkey "oynqxds..." --appsecret "tk2oewn..." --refresh "oZFWg3DmZ_IAAAAAAAAAAWilOA0M1SjV..."
 
 ```
 
diff --git a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-dannye-ispolzovaniya-prostranstva.md b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-dannye-ispolzovaniya-prostranstva.md
index 5e435052d2..aec26faa44 100644
--- a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-dannye-ispolzovaniya-prostranstva.md
+++ b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-dannye-ispolzovaniya-prostranstva.md
@@ -17,7 +17,7 @@ sidebar_position: 5
 
 ```bsl title="Пример кода"
 	
-    Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     
     Результат = OPI_Dropbox.ПолучитьДанныеИспользованияПространства(Токен);
 
@@ -26,7 +26,7 @@ sidebar_position: 5
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьДанныеИспользованияПространства --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..."
+  oint dropbox ПолучитьДанныеИспользованияПространства --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..."
 
 ```
 
diff --git a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-informatsiu-ob-akkaunte.md b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-informatsiu-ob-akkaunte.md
index 6576ede3c1..2cb647e5a0 100644
--- a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-informatsiu-ob-akkaunte.md
+++ b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-informatsiu-ob-akkaunte.md
@@ -18,7 +18,7 @@ sidebar_position: 4
 
 ```bsl title="Пример кода"
 	
-    Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     
     Результат = OPI_Dropbox.ПолучитьИнформациюОбАккаунте(Токен);
 
@@ -27,7 +27,7 @@ sidebar_position: 4
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьИнформациюОбАккаунте --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --account %account%
+  oint dropbox ПолучитьИнформациюОбАккаунте --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --account %account%
 
 ```
 
diff --git a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-ssylku-avtorizatsii.md b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-ssylku-avtorizatsii.md
index fa9309616b..36fdcd791f 100644
--- a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-ssylku-avtorizatsii.md
+++ b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-ssylku-avtorizatsii.md
@@ -17,15 +17,15 @@ sidebar_position: 1
 
 ```bsl title="Пример кода"
 	
-    Ключ      = "oynqxds...";
-    Результат = OPI_Dropbox.ПолучитьСсылкуАвторизации(Ключ);
+    КлючПриложения = "oynqxds...";
+    Результат      = OPI_Dropbox.ПолучитьСсылкуАвторизации(КлючПриложения);
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьСсылкуАвторизации --appkey %appkey%
+  oint dropbox ПолучитьСсылкуАвторизации --appkey "oynqxds..."
 
 ```
 
diff --git a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-token.md b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-token.md
index 3e7a818902..c09aba1f5e 100644
--- a/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-token.md
+++ b/docs/md/Dropbox/Akkaunt-i-avtorizatsiya/Poluchit-token.md
@@ -19,13 +19,18 @@ sidebar_position: 2
 
 ```bsl title="Пример кода"
 	
+    КлючПриложения   = "oynqxds...";
+    СекретПриложения = "tk2oewn...";
+    Код              = "bTCiUTzxe6kAAAAAAAAAMgkkeJxqxqAO0YhahYskSmo";
+
+    Результат = OPI_Dropbox.ПолучитьТокен(КлючПриложения, СекретПриложения, Код);
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьТокен --appkey %appkey% --appsecret %appsecret% --code %code%
+  oint dropbox ПолучитьТокен --appkey "oynqxds..." --appsecret "tk2oewn..." --code "bTCiUTzxe6kAAAAAAAAAMgkkeJxqxqAO0YhahYskSmo"
 
 ```
 
diff --git a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovateley-k-papke.md b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovateley-k-papke.md
index 007231bc79..ab4a01e13e 100644
--- a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovateley-k-papke.md
+++ b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovateley-k-papke.md
@@ -20,9 +20,9 @@ sidebar_position: 4
 
 ```bsl title="Пример кода"
 	
-    Токен  = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен  = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Почта  = "h5bk6ft62s@privaterelay.appleid.com";
-    Папка  = "4999224241"; // shared_folder_id
+    Папка  = "5008139809"; // shared_folder_id
     
     Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почта, Ложь);
 
@@ -31,7 +31,7 @@ sidebar_position: 4
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ДобавитьПользователейКПапке --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --folder %folder% --emails %emails% --readonly %readonly%
+  oint dropbox ДобавитьПользователейКПапке --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --folder %folder% --emails %emails% --readonly %readonly%
 
 ```
 
diff --git a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovatelya-k-faylu.md b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovatelya-k-faylu.md
index 2816a2713b..9b36953254 100644
--- a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovatelya-k-faylu.md
+++ b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Dobavit-polzovatelya-k-faylu.md
@@ -20,7 +20,7 @@ sidebar_position: 3
 
 ```bsl title="Пример кода"
 	
-    Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Почта = "h5bk6ft62s@privaterelay.appleid.com";
     Файл  = "kJU6-a-pT48AAAAAAAAABw";
     
@@ -31,7 +31,7 @@ sidebar_position: 3
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ДобавитьПользователейКФайлу --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --fileid %fileid% --emails %emails% --readonly %readonly%
+  oint dropbox ДобавитьПользователейКФайлу --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --fileid %fileid% --emails %emails% --readonly %readonly%
 
 ```
 
diff --git a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Opublikovat-papku.md b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Opublikovat-papku.md
index aa5799c661..3418e43e0e 100644
--- a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Opublikovat-papku.md
+++ b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Opublikovat-papku.md
@@ -18,7 +18,7 @@ sidebar_position: 1
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New"; 
    
     Результат = OPI_Dropbox.ОпубликоватьПапку(Токен, Путь);
@@ -28,7 +28,7 @@ sidebar_position: 1
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ОпубликоватьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
+  oint dropbox ОпубликоватьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-fayla.md b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-fayla.md
index f783361c8c..345130f1b2 100644
--- a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-fayla.md
+++ b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-fayla.md
@@ -18,13 +18,17 @@ sidebar_position: 6
 
 ```bsl title="Пример кода"
 	
+    Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
+    Файл  = "kJU6-a-pT48AAAAAAAAABw";
+    
+    Результат = OPI_Dropbox.ОтменитьПубликациюФайла(Токен, Файл);
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ОтменитьПубликациюФайла --token %token% --fileid %fileid%
+  oint dropbox ОтменитьПубликациюФайла --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --fileid %fileid%
 
 ```
 
diff --git a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-papki.md b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-papki.md
index 43b7fab9e4..3325099435 100644
--- a/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-papki.md
+++ b/docs/md/Dropbox/Nastroyki-sovmestnogo-dostupa/Otmenit-publikatsiu-papki.md
@@ -18,17 +18,25 @@ sidebar_position: 2
 
 ```bsl title="Пример кода"
 	
-    Токен  = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
-    Папка  = "4999224241";
+    Токен  = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
+    Папка  = "5008139809";
  
-    Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
+    Результат     = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
+    ТекущийСтатус = "in_progress";
+    IDРаботы      = Результат["async_job_id"];
+    
+    Пока ТекущийСтатус = "in_progress" Цикл
+        Результат     = OPI_Dropbox.ПолучитьСтатусАсинхронногоИзменения(Токен, IDРаботы);
+        ТекущийСтатус = Результат[".tag"];
+        OPI_Инструменты.Пауза(3);
+    КонецЦикла;
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ОтменитьПубликациюПапки --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --folder %folder%
+  oint dropbox ОтменитьПубликациюПапки --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --folder %folder%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Kopirovat-obekt.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Kopirovat-obekt.md
index ff64d366a1..6a1054ea67 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Kopirovat-obekt.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Kopirovat-obekt.md
@@ -21,7 +21,7 @@ sidebar_position: 8
 	
     Оригинал  = "/New/pic.png";
     Копия     = "/New/pic_copy.png";  
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     
     Результат = OPI_Dropbox.КопироватьОбъект(Токен, Оригинал, Копия);
 
@@ -30,7 +30,7 @@ sidebar_position: 8
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox КопироватьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --form %form% --to %to%
+  oint dropbox КопироватьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --form %form% --to %to%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Peremestit-obekt.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Peremestit-obekt.md
index 1883e690a8..9bca226d3a 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Peremestit-obekt.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Peremestit-obekt.md
@@ -21,7 +21,7 @@ sidebar_position: 9
 	
     ОригиналныйПуть  = "/New/pic.png";
     ЦелевойПуть      = "/pic.png";  
-    Токен            = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен            = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     
     Результат = OPI_Dropbox.ПереместитьОбъект(Токен, ОригиналныйПуть, ЦелевойПуть);
 
@@ -30,7 +30,7 @@ sidebar_position: 9
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПереместитьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --form %form% --to %to%
+  oint dropbox ПереместитьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --form %form% --to %to%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-informatsiu-ob-obekte.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-informatsiu-ob-obekte.md
index 6ea4c8d72e..d042c14e54 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-informatsiu-ob-obekte.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-informatsiu-ob-obekte.md
@@ -20,7 +20,7 @@ sidebar_position: 1
 ```bsl title="Пример кода"
 	
     Путь      = "/New/pic.png";  
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
      
     Результат = OPI_Dropbox.ПолучитьИнформациюОбОбъекте(Токен, Путь, Истина);
 
@@ -29,7 +29,7 @@ sidebar_position: 1
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьИнформациюОбОбъекте --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --detail %detail%
+  oint dropbox ПолучитьИнформациюОбОбъекте --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --detail %detail%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-prevu.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-prevu.md
index 5b1ecb2fbb..8713d08911 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-prevu.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-prevu.md
@@ -18,7 +18,7 @@ sidebar_position: 3
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New/mydoc.docx"; 
     
     Результат = OPI_Dropbox.ПолучитьПревью(Токен, Путь);
@@ -28,7 +28,7 @@ sidebar_position: 3
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьПревью --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
+  oint dropbox ПолучитьПревью --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-faylov-papki.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-faylov-papki.md
index 9fcc9e621e..3537625320 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-faylov-papki.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-faylov-papki.md
@@ -21,7 +21,7 @@ sidebar_position: 2
 ```bsl title="Пример кода"
 	
     Путь      = "/New";  
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
      
     Результат = OPI_Dropbox.ПолучитьСписокФайловПапки(Токен, Путь, Истина);
 
@@ -30,7 +30,7 @@ sidebar_position: 2
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьСписокФайловПапки --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --detail %detail% --cursor %cursor%
+  oint dropbox ПолучитьСписокФайловПапки --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --detail %detail% --cursor %cursor%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-versiy-obekta.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-versiy-obekta.md
index ea30b330d8..f55e0d4796 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-versiy-obekta.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-spisok-versiy-obekta.md
@@ -19,7 +19,7 @@ sidebar_position: 13
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New/pic.png"; 
     
     Результат = OPI_Dropbox.ПолучитьСписокВерсийОбъекта(Токен, Путь, 1);
@@ -29,7 +29,7 @@ sidebar_position: 13
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьСписокВерсийОбъекта --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --amount %amount%
+  oint dropbox ПолучитьСписокВерсийОбъекта --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --amount %amount%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-status-zagruzki-po-url.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-status-zagruzki-po-url.md
index bf2117300c..83d06bd0a6 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-status-zagruzki-po-url.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Poluchit-status-zagruzki-po-url.md
@@ -18,8 +18,8 @@ sidebar_position: 6
 
 ```bsl title="Пример кода"
 	
-    Токен    = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
-    ИДРаботы = "kwvJIcRS7eAAAAAAAAAAAQ";
+    Токен    = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
+    ИДРаботы = "mTzF6hWsswAAAAAAAAAAAQ";
     Статус   = "in_progress";    
     
     Пока Статус = "in_progress" Цикл 
@@ -38,7 +38,7 @@ sidebar_position: 6
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ПолучитьСтатусЗагрузкиПоURL --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --job %job%
+  oint dropbox ПолучитьСтатусЗагрузкиПоURL --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --job %job%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-fayl.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-fayl.md
index 65088b57c9..0ac5f8b605 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-fayl.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-fayl.md
@@ -18,7 +18,7 @@ sidebar_position: 11
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New/pic.png"; 
     
     Результат = OPI_Dropbox.СкачатьФайл(Токен, Путь);
@@ -28,7 +28,7 @@ sidebar_position: 11
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox СкачатьФайл --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
+  oint dropbox СкачатьФайл --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-papku.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-papku.md
index 43c6458089..aec1c1439b 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-papku.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Skachat-papku.md
@@ -18,7 +18,7 @@ sidebar_position: 12
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New";
     
     Результат = OPI_Dropbox.СкачатьПапку(Токен, Путь);
@@ -28,7 +28,7 @@ sidebar_position: 12
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox СкачатьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
+  oint dropbox СкачатьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Sozdat-papku.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Sozdat-papku.md
index 0d3136f34e..3d1e9b6d0f 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Sozdat-papku.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Sozdat-papku.md
@@ -18,7 +18,7 @@ sidebar_position: 10
 
 ```bsl title="Пример кода"
 	
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/Новый каталог";
     
     Результат = OPI_Dropbox.СоздатьПапку(Токен, Путь);
@@ -28,7 +28,7 @@ sidebar_position: 10
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox СоздатьПапку --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path%
+  oint dropbox СоздатьПапку --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Udalit-obekt.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Udalit-obekt.md
index 57dfeba09c..d629d2c9fa 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Udalit-obekt.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Udalit-obekt.md
@@ -20,7 +20,7 @@ sidebar_position: 7
 ```bsl title="Пример кода"
 	
     Путь      = "/New/pic.png";  
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";  
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";  
     
     Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
 
@@ -29,7 +29,7 @@ sidebar_position: 7
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox УдалитьОбъект --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --permanently %permanently%
+  oint dropbox УдалитьОбъект --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --permanently %permanently%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Vosstanovit-obekt-k-versii.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Vosstanovit-obekt-k-versii.md
index 1ef3afac0b..01833c9a25 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Vosstanovit-obekt-k-versii.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Vosstanovit-obekt-k-versii.md
@@ -19,13 +19,18 @@ sidebar_position: 14
 
 ```bsl title="Пример кода"
 	
+    Версия    = "016196bc6e08dda00000001295a2bc1";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
+    Путь      = "/New/pic.png";  
+    
+    Результат = OPI_Dropbox.ВосстановитьОбъектКВерсии(Токен, Путь, Версия);
 
 	
 ```
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ВосстановитьОбъектКВерсии --token %token% --path %path% --rev %rev%
+  oint dropbox ВосстановитьОбъектКВерсии --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --rev "016196bc6e08dda00000001295a2bc1"
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl-po-url.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl-po-url.md
index 2f582f637e..a1dfcdc554 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl-po-url.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl-po-url.md
@@ -20,7 +20,7 @@ sidebar_position: 5
 ```bsl title="Пример кода"
 	
     Путь  = "/New/url_doc.docx";  
-    Токен = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     URL   = "https://openintegrations.dev/test_data/document.docx";
     
     Результат = OPI_Dropbox.ЗагрузитьФайлПоURL(Токен, URL, Путь);
@@ -30,7 +30,7 @@ sidebar_position: 5
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ЗагрузитьФайлПоURL --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --url %url% --path %path%
+  oint dropbox ЗагрузитьФайлПоURL --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --url %url% --path %path%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl.md b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl.md
index 35d40f80de..2ad18ea057 100644
--- a/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl.md
+++ b/docs/md/Dropbox/Rabota-s-faylami-i-katalogami/Zagruzit-fayl.md
@@ -21,7 +21,7 @@ sidebar_position: 4
 ```bsl title="Пример кода"
 	
     Путь      = "/New/pic.png";  
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Картинка  = "https://openintegrations.dev/test_data/picture.jpg";
     
     КартинкаПуть = ПолучитьИмяВременногоФайла("png");
@@ -34,7 +34,7 @@ sidebar_position: 4
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ЗагрузитьФайл --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --file %file% --path %path% --overwrite %overwrite%
+  oint dropbox ЗагрузитьФайл --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --file %file% --path %path% --overwrite %overwrite%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-tegami/Dobavit-teg.md b/docs/md/Dropbox/Rabota-s-tegami/Dobavit-teg.md
index a4e3641443..3521895585 100644
--- a/docs/md/Dropbox/Rabota-s-tegami/Dobavit-teg.md
+++ b/docs/md/Dropbox/Rabota-s-tegami/Dobavit-teg.md
@@ -20,7 +20,7 @@ sidebar_position: 2
 ```bsl title="Пример кода"
 	
     Тег       = "Важное";
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New/mydoc.docx";  
     
     Результат = OPI_Dropbox.ДобавитьТег(Токен, Путь, Тег);
@@ -30,7 +30,7 @@ sidebar_position: 2
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox ДобавитьТег --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --tag %tag%
+  oint dropbox ДобавитьТег --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --tag %tag%
 
 ```
 
diff --git a/docs/md/Dropbox/Rabota-s-tegami/Udalit-teg.md b/docs/md/Dropbox/Rabota-s-tegami/Udalit-teg.md
index c0c88cb208..e6de7728aa 100644
--- a/docs/md/Dropbox/Rabota-s-tegami/Udalit-teg.md
+++ b/docs/md/Dropbox/Rabota-s-tegami/Udalit-teg.md
@@ -20,7 +20,7 @@ sidebar_position: 3
 ```bsl title="Пример кода"
 	
     Тег       = "Важное";
-    Токен     = "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT...";
+    Токен     = "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c...";
     Путь      = "/New/mydoc.docx";  
     
     Результат = OPI_Dropbox.УдалитьТег(Токен, Путь, Тег);
@@ -30,7 +30,7 @@ sidebar_position: 3
 
 ```sh title="Пример команд CLI"
     
-  oint dropbox УдалитьТег --token "sl.B17cqxbDyPFFIOUOnGtEqpFGF9gIqUvxX70TTaWmpA1BudA7xI0IR4UK3WuJkeHL7f229VtvwT..." --path %path% --tag %tag%
+  oint dropbox УдалитьТег --token "sl.B2PZ-Sk7vWqtAfWKI0CKnYNapuN4bH-a4_tTsbN02eoxT1dlQ9Vs_vcf30ZAAl9h-m3xg5uz5c..." --path %path% --tag %tag%
 
 ```
 
diff --git a/docs/md/Telegram/Administrirovanie/Otkrepit-soobschenie.md b/docs/md/Telegram/Administrirovanie/Otkrepit-soobschenie.md
index 2ded700939..a470055862 100644
--- a/docs/md/Telegram/Administrirovanie/Otkrepit-soobschenie.md
+++ b/docs/md/Telegram/Administrirovanie/Otkrepit-soobschenie.md
@@ -21,7 +21,7 @@ sidebar_position: 5
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     IDКанала    = "@testsichee";
-    IDСообщения = "4606";
+    IDСообщения = "4494";
     
     Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
 
@@ -30,7 +30,7 @@ sidebar_position: 5
 
 ```sh title="Пример команд CLI"
     
-  oint telegram ОткрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4606"
+  oint telegram ОткрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4494"
 
 ```
 
diff --git a/docs/md/Telegram/Administrirovanie/Zakrepit-soobschenie.md b/docs/md/Telegram/Administrirovanie/Zakrepit-soobschenie.md
index f953dd2476..4b705a8666 100644
--- a/docs/md/Telegram/Administrirovanie/Zakrepit-soobschenie.md
+++ b/docs/md/Telegram/Administrirovanie/Zakrepit-soobschenie.md
@@ -21,7 +21,7 @@ sidebar_position: 4
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     IDКанала    = "@testsichee";
-    IDСообщения = "4606";
+    IDСообщения = "4494";
     
     Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
 
@@ -30,7 +30,7 @@ sidebar_position: 4
 
 ```sh title="Пример команд CLI"
     
-  oint telegram ЗакрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4606"
+  oint telegram ЗакрепитьСообщение --token "6129457865:AAFyzNYOAFbu..." --chat %chat% --message "4494"
 
 ```
 
diff --git a/docs/md/Telegram/Otpravka-dannyh/Pereslat-soobschenie.md b/docs/md/Telegram/Otpravka-dannyh/Pereslat-soobschenie.md
index 5cf15cfab7..897630b08b 100644
--- a/docs/md/Telegram/Otpravka-dannyh/Pereslat-soobschenie.md
+++ b/docs/md/Telegram/Otpravka-dannyh/Pereslat-soobschenie.md
@@ -23,7 +23,7 @@ sidebar_position: 11
     Токен       = "6129457865:AAFyzNYOAFbu...";
     IDЧата      = "461699897";
     IDКанала    = "@testsichee";
-    IDСообщения = "4606";
+    IDСообщения = "4494";
     
     Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
 
diff --git a/docs/md/Telegram/Poluchenie-dannyh-i-nastroyka/Skachat-fayl.md b/docs/md/Telegram/Poluchenie-dannyh-i-nastroyka/Skachat-fayl.md
index 16507a0a56..bc5866eb71 100644
--- a/docs/md/Telegram/Poluchenie-dannyh-i-nastroyka/Skachat-fayl.md
+++ b/docs/md/Telegram/Poluchenie-dannyh-i-nastroyka/Skachat-fayl.md
@@ -18,7 +18,7 @@ sidebar_position: 5
 
 ```bsl title="Пример кода"
 	
-    IDФайла = "CQACAgIAAx0EcNsaZQACEgRmVgMIOr9Q0NEt9l4OXJuwUgbl-wAC3kYAAnFFsUp2dLSNM3JeRjUE";
+    IDФайла = "CQACAgIAAx0EcNsaZQACEZRmUbbz_bhDX_wPiSnMclSID6CD7wACC00AAoaTiEpOTiNykV_72zUE";
     Токен   = "6129457865:AAFyzNYOAFbu...";
 
     Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
@@ -28,7 +28,7 @@ sidebar_position: 5
 
 ```sh title="Пример команд CLI"
     
-  oint telegram СкачатьФайл --token "6129457865:AAFyzNYOAFbu..." --fileid "CQACAgIAAx0EcNsaZQACEgRmVgMIOr9Q0NEt9l4OXJuwUgbl-wAC3kYAAnFFsUp2dLSNM3JeRjUE"
+  oint telegram СкачатьФайл --token "6129457865:AAFyzNYOAFbu..." --fileid "CQACAgIAAx0EcNsaZQACEZRmUbbz_bhDX_wPiSnMclSID6CD7wACC00AAoaTiEpOTiNykV_72zUE"
 
 ```
 
diff --git a/docs/md/Telegram/Rabota-s-temami-foruma/Izmenit-temu-foruma.md b/docs/md/Telegram/Rabota-s-temami-foruma/Izmenit-temu-foruma.md
index ead8ee93b0..57963f3351 100644
--- a/docs/md/Telegram/Rabota-s-temami-foruma/Izmenit-temu-foruma.md
+++ b/docs/md/Telegram/Rabota-s-temami-foruma/Izmenit-temu-foruma.md
@@ -23,7 +23,7 @@ sidebar_position: 3
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     Чат         = "-1001971186208";
-    Тема        = "2402";
+    Тема        = "2325";
     НовоеИмя    = "Новый тестовый заголовок";
     НовяИконка  = "5310132165583840589";
 
diff --git a/docs/md/Telegram/Rabota-s-temami-foruma/Ochistit-spisok-zakreplennyh-soobscheniy-temy.md b/docs/md/Telegram/Rabota-s-temami-foruma/Ochistit-spisok-zakreplennyh-soobscheniy-temy.md
index 8c9faf5a99..aee2e57861 100644
--- a/docs/md/Telegram/Rabota-s-temami-foruma/Ochistit-spisok-zakreplennyh-soobscheniy-temy.md
+++ b/docs/md/Telegram/Rabota-s-temami-foruma/Ochistit-spisok-zakreplennyh-soobscheniy-temy.md
@@ -21,7 +21,7 @@ sidebar_position: 10
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     Чат         = "-1001971186208";
-    Тема        = "2402";
+    Тема        = "2325";
     
     Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
     
diff --git a/docs/md/Telegram/Rabota-s-temami-foruma/Otkryt-temu-foruma.md b/docs/md/Telegram/Rabota-s-temami-foruma/Otkryt-temu-foruma.md
index 27562d2e22..18d9a83a27 100644
--- a/docs/md/Telegram/Rabota-s-temami-foruma/Otkryt-temu-foruma.md
+++ b/docs/md/Telegram/Rabota-s-temami-foruma/Otkryt-temu-foruma.md
@@ -21,7 +21,7 @@ sidebar_position: 5
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     Чат         = "-1001971186208";
-    Тема        = "2402";
+    Тема        = "2325";
 
     Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат);       // Открывает главную тему
     
diff --git a/docs/md/Telegram/Rabota-s-temami-foruma/Udalit-temu-foruma.md b/docs/md/Telegram/Rabota-s-temami-foruma/Udalit-temu-foruma.md
index 8013416cf1..20a960b244 100644
--- a/docs/md/Telegram/Rabota-s-temami-foruma/Udalit-temu-foruma.md
+++ b/docs/md/Telegram/Rabota-s-temami-foruma/Udalit-temu-foruma.md
@@ -21,7 +21,7 @@ sidebar_position: 6
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     Чат         = "-1001971186208";
-    Тема        = "2402";
+    Тема        = "2325";
     
     Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
 
diff --git a/docs/md/Telegram/Rabota-s-temami-foruma/Zakryt-temu-foruma.md b/docs/md/Telegram/Rabota-s-temami-foruma/Zakryt-temu-foruma.md
index a2342fea8b..b8182e8515 100644
--- a/docs/md/Telegram/Rabota-s-temami-foruma/Zakryt-temu-foruma.md
+++ b/docs/md/Telegram/Rabota-s-temami-foruma/Zakryt-temu-foruma.md
@@ -21,7 +21,7 @@ sidebar_position: 4
 	
     Токен       = "6129457865:AAFyzNYOAFbu...";
     Чат         = "-1001971186208";
-    Тема        = "2402";
+    Тема        = "2325";
 
     
     Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат);       // Закрывает главную тему
diff --git a/docs/md/VK/Rabota-s-gruppoy/Sohranit-kartinku-v-albom.md b/docs/md/VK/Rabota-s-gruppoy/Sohranit-kartinku-v-albom.md
index 041357b383..b12478de7a 100644
--- a/docs/md/VK/Rabota-s-gruppoy/Sohranit-kartinku-v-albom.md
+++ b/docs/md/VK/Rabota-s-gruppoy/Sohranit-kartinku-v-albom.md
@@ -22,14 +22,14 @@ sidebar_position: 8
 	
     Параметры        = ПолучитьПараметрыВК();
     ОписаниеКартинки = "Картинка автотест";
-    ИДАльбома        = "304369700";
+    ИДАльбома        = "304440188";
     
     Картинка  = "https://openintegrations.dev/test_data/picture.jpg";       // URL, Путь к файлу или Двоичные данные
     ИВФ       = ПолучитьИмяВременногоФайла("png");
     КопироватьФайл(Картинка, ИВФ);
+    
     Картинка  = Новый ДвоичныеДанные(ИВФ);
     
-
     Результат = OPI_VK.СохранитьКартинкуВАльбом(ИДАльбома, Картинка, ОписаниеКартинки, Параметры);
     
     OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СохранитьКартинкуВАльбом", "VK");
diff --git a/docs/md/VK/Rabota-s-gruppoy/Sozdat-post.md b/docs/md/VK/Rabota-s-gruppoy/Sozdat-post.md
index e8b6ae24ae..8237d0b206 100644
--- a/docs/md/VK/Rabota-s-gruppoy/Sozdat-post.md
+++ b/docs/md/VK/Rabota-s-gruppoy/Sozdat-post.md
@@ -40,7 +40,6 @@ sidebar_position: 1
     OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост", "VK");
 
     
-    
     Результат = OPI_VK.СоздатьПост(Текст, Картинка, Ложь  ,    , Параметры);
 
 	
diff --git a/docs/md/VK/Rabota-s-gruppoy/Udalit-albom.md b/docs/md/VK/Rabota-s-gruppoy/Udalit-albom.md
index 3c8593a16e..e74d1f4c14 100644
--- a/docs/md/VK/Rabota-s-gruppoy/Udalit-albom.md
+++ b/docs/md/VK/Rabota-s-gruppoy/Udalit-albom.md
@@ -19,7 +19,7 @@ sidebar_position: 6
 ```bsl title="Пример кода"
 	
     Параметры = ПолучитьПараметрыВК();
-    ИДАльбома = "304369700";
+    ИДАльбома = "304440188";
     
     Результат = OPI_VK.УдалитьАльбом(ИДАльбома, Параметры);
 
diff --git a/docs/md/VK/Rabota-s-gruppoy/Udalit-kartinku.md b/docs/md/VK/Rabota-s-gruppoy/Udalit-kartinku.md
index 7280f9b9ed..7c15cd9db5 100644
--- a/docs/md/VK/Rabota-s-gruppoy/Udalit-kartinku.md
+++ b/docs/md/VK/Rabota-s-gruppoy/Udalit-kartinku.md
@@ -19,7 +19,7 @@ sidebar_position: 9
 ```bsl title="Пример кода"
 	
     Параметры  = ПолучитьПараметрыВК();
-    ИДКартинки = "457243771";
+    ИДКартинки = "457243842";
     
     Результат  = OPI_VK.УдалитьКартинку(ИДКартинки, Параметры);
 
diff --git a/docs/md/VK/Rabota-s-gruppoy/Udalit-post.md b/docs/md/VK/Rabota-s-gruppoy/Udalit-post.md
index e174c9f56c..7c7e646b21 100644
--- a/docs/md/VK/Rabota-s-gruppoy/Udalit-post.md
+++ b/docs/md/VK/Rabota-s-gruppoy/Udalit-post.md
@@ -19,7 +19,7 @@ sidebar_position: 3
 ```bsl title="Пример кода"
 	
     Параметры = ПолучитьПараметрыВК();
-    ИДПоста   = "2021";
+    ИДПоста   = "2045";
     
     Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры);
 
diff --git a/docs/md/VK/Rabota-s-obsuzhdeniyami/Napisat-v-obsuzhdenie.md b/docs/md/VK/Rabota-s-obsuzhdeniyami/Napisat-v-obsuzhdenie.md
index 796e17330f..404969ac37 100644
--- a/docs/md/VK/Rabota-s-obsuzhdeniyami/Napisat-v-obsuzhdenie.md
+++ b/docs/md/VK/Rabota-s-obsuzhdeniyami/Napisat-v-obsuzhdenie.md
@@ -20,7 +20,7 @@ sidebar_position: 4
 ```bsl title="Пример кода"
 	
     Параметры    = ПолучитьПараметрыВК();
-    ИДОбсуждения = "51136513";
+    ИДОбсуждения = "51167955";
     Сообщение    = "Мне больше нравится желтый";
     
     Результат = OPI_VK.НаписатьВОбсуждение(ИДОбсуждения, Сообщение, Параметры);
diff --git a/docs/md/VK/Rabota-s-obsuzhdeniyami/Otkryt-obsuzhdenie.md b/docs/md/VK/Rabota-s-obsuzhdeniyami/Otkryt-obsuzhdenie.md
index 581e11866f..87c468f92c 100644
--- a/docs/md/VK/Rabota-s-obsuzhdeniyami/Otkryt-obsuzhdenie.md
+++ b/docs/md/VK/Rabota-s-obsuzhdeniyami/Otkryt-obsuzhdenie.md
@@ -19,7 +19,7 @@ sidebar_position: 3
 ```bsl title="Пример кода"
 	
     Параметры    = ПолучитьПараметрыВК();
-    ИДОбсуждения = "51136513";
+    ИДОбсуждения = "51167955";
     Результат    = OPI_VK.ОткрытьОбсуждение(ИДОбсуждения, Параметры);
 
 	
diff --git a/docs/md/VK/Rabota-s-obsuzhdeniyami/Zakryt-obsuzhdenie.md b/docs/md/VK/Rabota-s-obsuzhdeniyami/Zakryt-obsuzhdenie.md
index 319492e9ca..fb0b35cc1c 100644
--- a/docs/md/VK/Rabota-s-obsuzhdeniyami/Zakryt-obsuzhdenie.md
+++ b/docs/md/VK/Rabota-s-obsuzhdeniyami/Zakryt-obsuzhdenie.md
@@ -20,7 +20,7 @@ sidebar_position: 2
 ```bsl title="Пример кода"
 	
     Параметры    = ПолучитьПараметрыВК();
-    ИДОбсуждения = "51136513";
+    ИДОбсуждения = "51167955";
     Результат    = OPI_VK.ЗакрытьОбсуждение(ИДОбсуждения, Ложь, Параметры);
 
 	
diff --git a/en/OPI/.project b/en/OPI/.project
new file mode 100644
index 0000000000..304a6b8660
--- /dev/null
+++ b/en/OPI/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>OPI</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
+	</natures>
+</projectDescription>
diff --git a/en/OPI/.settings/org.eclipse.core.resources.prefs b/en/OPI/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..99f26c0203
--- /dev/null
+++ b/en/OPI/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/en/OPI/DT-INF/PROJECT.PMF b/en/OPI/DT-INF/PROJECT.PMF
new file mode 100644
index 0000000000..690880282e
--- /dev/null
+++ b/en/OPI/DT-INF/PROJECT.PMF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Runtime-Version: 8.3.15
+Base-Project: OpenIntegrations
diff --git a/en/OPI/src/CommonModules/OPI_Airtable/Module.bsl b/en/OPI/src/CommonModules/OPI_Airtable/Module.bsl
new file mode 100644
index 0000000000..9a8f60d899
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Airtable/Module.bsl
@@ -0,0 +1,681 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Airtable.os
+// Библиотека: Airtable
+// Команда CLI: airtable
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСБазами
+
+// Получить список баз
+// Получает список доступных баз
+// 
+// Параметры:
+//  Токен  - Строка - Токен                                                              - token
+//  Отступ - Строка - Идентификатор следующей страницы списка баз из перыдудщего запроса - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable 
+Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ);
+    
+    URL        = "https://api.airtable.com/v0/meta/bases";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    Параметры  = Новый Структура;
+    
+    OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить таблицы базы
+// Получает схему таблиц базы
+// 
+// Параметры:
+//  Токен - Строка - Токен              - token
+//  База  - Строка - Идентификатор базы - base
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    
+    URL        = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать базу
+// Создает новую базу данных
+// 
+// Параметры:
+//  Токен               - Строка                    - Токен                                                - token
+//  РабочееПространство - Строка                    - Идентификатор рабочего пространства                  - ws
+//  Наименование        - Строка                    - Наименование новой базы                              - title
+//  КоллекцияТаблиц - Соответствие Из КлючИЗначение - Описание таблиц: Ключ > имя, Значение > массив полей - tablesdata
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц);
+    
+    Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура")
+        И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда
+        
+        ВызватьИсключение "Ошибка в данных коллекции таблиц";
+        
+    КонецЕсли;
+    
+    URL           = "https://api.airtable.com/v0/meta/bases";
+    Заголовки     = ПолучитьЗаголовокАвторизации(Токен);
+    МассивТаблиц  = Новый Массив;
+    
+    Для Каждого Таблица Из КоллекцияТаблиц Цикл
+        
+        Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение);
+        МассивТаблиц.Добавить(Описание);
+        
+    КонецЦикла;
+ 
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("name"       , Наименование       , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("tables"     , МассивТаблиц       , "Массив", Параметры);
+    OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры);
+     
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСТаблицами
+
+// Создать таблицу
+// Создает новую таблицу в базе
+// 
+// Параметры:
+//  Токен        - Строка              - Токен                      - token
+//  База         - Строка              - Идентификатор базы         - base
+//  Наименование - Строка              - Наименование новой таблицы - title
+//  МассивПолей  - Массив Из Структура - Массив описаний полей      - fieldsdata
+//  Описание     - Строка              - Описание таблицы           - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    
+    URL        = "https://api.airtable.com/v0/meta/bases/" + База + "/tables";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    Параметры  = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание); 
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить таблицу
+// Изменяет наименование и|или описание базы
+// 
+// Параметры:
+//  Токен        - Строка  - Токен                  - token
+//  База         - Строка  - Идентификатор базы     - base
+//  Таблица      - Строка  - Идентификатор таблицы  - table
+//  Наименование - Строка  - Новое наименование     - title
+//  Описание     - Строка  - Новое описание         - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    
+    URL        = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    Параметры  = Новый Структура; 
+    
+    OPI_Инструменты.ДобавитьПоле("name"       , Наименование, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("description", Описание    , "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСПолями
+
+// Создать поле
+// Создет новое поле в таблице
+// 
+// Параметры:
+//  Токен         - Строка                     - Токен                  - token
+//  База          - Строка                     - Идентификатор базы     - base
+//  Таблица       - Строка                     - Идентификатор таблицы  - table
+//  СтруктураПоля - Структура Из КлючИЗначение - Описание нового поля   - fielddata
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля);
+    
+    Если Не ТипЗнч(СтруктураПоля) = Тип("Структура")
+        И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда
+        
+        ВызватьИсключение "Ошибка в данных описания поля";
+        
+    КонецЕсли;
+    
+    URL        = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен); 
+        
+    Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить поле
+// Изменяет имя и|или описание существующего поля таблицы
+// 
+// Параметры:
+//  Токен        - Строка - Токен                   - token
+//  База         - Строка - Идентификатор базы База - base
+//  Таблица      - Строка - Идентификатор таблицы   - table
+//  Поле         - Строка - Идентификатор поля      - field
+//  Наименование - Строка - Новое наименование      - title
+//  Описание     - Строка - Новое описание          - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле);
+    
+    URL = "https://api.airtable.com/v0/meta/bases/" 
+        + База 
+        + "/tables/" 
+        + Таблица 
+        + "/fields/" 
+        + Поле;
+        
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("name"       , Наименование, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("description", Описание    , "Строка", Параметры);
+        
+    Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить поле (строковое)
+// Получает описание поля строкового типа
+// 
+// Параметры:
+//  Наименование - Строка - Наименование нового поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт
+    Возврат ОписаниеПримитивногоПоля(Наименование, "richText");
+КонецФункции
+
+// Получить поле (числовое)
+// Получает описание поля числового типа
+// 
+// Параметры:
+//  Наименование - Строка       - Наименование нового поля   - title
+//  Точность     - Число,Строка - Число знаков после запятой - precision
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность);
+    
+    СтруктураОпций = Новый Структура("precision", Точность);
+    Возврат ОписаниеПримитивногоПоля(Наименование, "number", СтруктураОпций);
+    
+КонецФункции
+
+// Получить поле (файл)
+// Получает описание поля файлового типа
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеВложения(Знач Наименование) Экспорт
+    Возврат ОписаниеПримитивногоПоля(Наименование, "multipleAttachments");
+КонецФункции
+
+// Получить поле (флажок)
+// Получает описание поля типа булево
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеФлажка(Знач Наименование) Экспорт
+    
+    СтруктураОпций = Новый Структура("icon,color", "check", "yellowBright");
+    Возврат ОписаниеПримитивногоПоля(Наименование, "checkbox", СтруктураОпций);
+    
+КонецФункции
+
+// Получить поле (дата)
+// Получает описание поля типа дата
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеДаты(Знач Наименование) Экспорт
+    
+    СтруктураФормата = Новый Структура("format,name", "YYYY-MM-DD", "iso");
+    СтруктураОпций   = Новый Структура("dateFormat", СтруктураФормата);
+    
+    Возврат ОписаниеПримитивногоПоля(Наименование, "date", СтруктураОпций);
+    
+КонецФункции
+
+// Получить поле (email)
+// Получает описание поля с электронной почтой
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеПочты(Знач Наименование) Экспорт
+    Возврат ОписаниеПримитивногоПоля(Наименование, "email");
+КонецФункции
+
+// Получить поле (телефон)
+// Получает описание поля с номером телефона
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеТелефона(Знач Наименование) Экспорт
+    Возврат ОписаниеПримитивногоПоля(Наименование, "phoneNumber");
+КонецФункции
+
+// Получить поле (url)
+// Получает описание поля с URL
+// 
+// Параметры:
+//  Наименование - Строка - Наименование поля - title
+// 
+// Возвращаемое значение:
+//  Структура -  Описание поля
+Функция ПолучитьПолеСсылки(Знач Наименование) Экспорт
+    Возврат ОписаниеПримитивногоПоля(Наименование, "url");
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСЗаписями
+
+// Получить список записей
+// Получает список записей выбранной таблицы
+// 
+// Параметры:
+//  Токен   - Строка - Токен                                                         - token
+//  База    - Строка - Идентификатор базы данных                                     - base
+//  Таблица - Строка - Идентификатор таблицы                                         - table
+//  Отступ  - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+     
+    Параметры  = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
+        
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить запись
+// Получает данные строки таблицы по идентификатору
+// 
+// Параметры:
+//  Токен   - Строка - Токен                          - token
+//  База    - Строка - Идентификатор базы данных      - base
+//  Таблица - Строка - Идентификатор таблицы          - table
+//  Запись  - Строка - Идентификатор записи в таблице - record
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт
+   
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Создать записи
+// Создает одну или массив записей по описанию или массиву описаний значений полей
+// 
+// Параметры:
+//  Токен   - Строка                         - Токен                                                            - token
+//  База    - Строка                         - Идентификатор базы данных                                        - base
+//  Таблица - Строка                         - Идентификатор таблицы                                            - table
+//  Данные  - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
+    
+    Параметры = Новый Структура();
+    ДобавитьОписаниеДанных(Данные, Параметры);    
+
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;    
+    
+КонецФункции
+
+// Удалить записи
+// Удаляет одну или массив записей по идентификаторам
+// 
+// Параметры:
+//  Токен   - Строка                   - Токен                                             - token
+//  База    - Строка                   - Идентификатор базы данных                         - base
+//  Таблица - Строка                   - Идентификатор таблицы                             - table
+//  Записи  - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьМассив(Записи);
+    
+    СтрокаЗаписей = "";
+    
+    Для Каждого Запись Из Записи Цикл
+        СтрокаЗаписей = СтрокаЗаписей
+            + ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?")
+            + "records[]="
+            + OPI_Инструменты.ЧислоВСтроку(Запись);    
+    КонецЦикла;
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+
+    Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;    
+       
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСКомментариями
+
+// Получить комментарии
+// Получает список комментариев к записи в таблице
+// 
+// Параметры:
+//  Токен   - Строка - Токен                                                         - token
+//  База    - Строка - Идентификатор базы данных                                     - base
+//  Таблица - Строка - Идентификатор таблицы                                         - table
+//  Запись  - Строка - Идентификатор записи в таблице                                - record
+//  Отступ  - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ПолучитьКомментарии(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Отступ = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+     
+    Параметры  = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
+        
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать комментарий
+// Создает комментарий к записи в таблице
+// 
+// Параметры:
+//  Токен   - Строка - Токен                           - token
+//  База    - Строка - Идентификатор базы данных       - base
+//  Таблица - Строка - Идентификатор таблицы           - table
+//  Запись  - Строка - Идентификатор записи в таблице  - record
+//  Текст   - Строка - Текст комментария               - text
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция СоздатьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Текст) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+     
+    Параметры  = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
+        
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Изменить комментарий
+// Изменяет текст существующего комментария
+// 
+// Параметры:
+//  Токен       - Строка - Токен                           - token
+//  База        - Строка - Идентификатор базы данных       - base
+//  Таблица     - Строка - Идентификатор таблицы           - table
+//  Запись      - Строка - Идентификатор записи в таблице  - record
+//  Комментарий - Строка - Идентификатор комментария       - comment
+//  Текст       - Строка - Новый текст комментария         - text
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
+Функция ИзменитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий, Знач Текст) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
+    
+    URL        = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+     
+    Параметры  = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("text", Текст, "Строка", Параметры);
+        
+    Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить комментарий
+// Удаляет комментарий к записи таблицы
+// 
+// Параметры:
+//  Токен       - Строка - Токен                           - token
+//  База        - Строка - Идентификатор базы данных       - base
+//  Таблица     - Строка - Идентификатор таблицы           - table
+//  Запись      - Строка - Идентификатор записи в таблице  - record
+//  Комментарий - Строка - Идентификатор комментария       - comment
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable 
+Функция УдалитьКомментарий(Знач Токен, Знач База, Знач Таблица, Знач Запись, Знач Комментарий) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
+    
+    URL       = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись + "/comments/" + Комментарий;
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+        
+    Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьЗаголовокАвторизации(Знач Токен)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization", "Bearer " + Токен);
+    
+    Возврат Заголовки;
+    
+КонецФункции
+
+Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей);
+    
+    ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей);
+    
+    OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы);
+    
+    Возврат ОписаниеТаблицы;
+    
+КонецФункции
+
+Функция ОписаниеПримитивногоПоля(Знач Наименование, Знач Тип, Знач Опции = "")
+    
+    СтруктураПоля = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("name"   , Наименование, "Строка"   , СтруктураПоля);
+    OPI_Инструменты.ДобавитьПоле("type"   , Тип         , "Строка"   , СтруктураПоля);
+    OPI_Инструменты.ДобавитьПоле("options", Опции       , "Коллекция", СтруктураПоля);
+    
+    Возврат СтруктураПоля;
+
+КонецФункции
+
+Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры)
+    
+    Если ТипЗнч(Данные) = Тип("Массив") Тогда
+        
+        МассивОтправки = Новый Массив;
+        
+        Для Каждого ОписаниеЗаписи Из Данные Цикл
+            МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи));    
+        КонецЦикла;
+        
+        OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры);
+        
+    Иначе
+       
+       OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры); 
+       
+    КонецЕсли;
+        
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_Airtable/OPI_Airtable.mdo b/en/OPI/src/CommonModules/OPI_Airtable/OPI_Airtable.mdo
new file mode 100644
index 0000000000..7dfa64ba1b
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Airtable/OPI_Airtable.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="457991ad-c2ad-49b8-a26a-9fc83c8a7d11">
+  <name>OPI_Airtable</name>
+  <synonym>
+    <key></key>
+    <value>OPI airtable</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Dropbox/Module.bsl b/en/OPI/src/CommonModules/OPI_Dropbox/Module.bsl
new file mode 100644
index 0000000000..5ee4262a40
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Dropbox/Module.bsl
@@ -0,0 +1,961 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
+// Библиотека: Dropbox
+// Команда CLI: dropbox
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область АккаунтИАвторизация
+
+// Получить ссылку авторизации
+// Генерирует ссылку авторизации для перехода в браузере
+// 
+// Параметры:
+//  КлючПриложения - Строка - Ключ приложения - appkey
+// 
+// Возвращаемое значение:
+//  Строка - URL для перехода в браузере
+Функция ПолучитьСсылкуАвторизации(Знач КлючПриложения) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючПриложения);
+    Возврат "https://www.dropbox.com/oauth2/authorize?client_id=" 
+        + КлючПриложения 
+        + "&response_type=code&token_access_type=offline";
+    
+КонецФункции
+
+// Получить токен
+// Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации
+// 
+// Параметры:
+//  КлючПриложения   - Строка - Ключ приложения             - appkey
+//  СекретПриложения - Строка - Секрет приложения           - appsecret
+//  Код              - Строка - Код со страницы авторизации - code
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач Код) Экспорт
+    
+    URL       = "https://api.dropbox.com/oauth2/token";
+    ТипДанных = "application/x-www-form-urlencoded; charset=utf-8";
+    
+    Параметры = Новый Структура;                  
+    OPI_Инструменты.ДобавитьПоле("code"      , Код                 , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("grant_type", "authorization_code", "Строка", Параметры);
+    
+    СтруктураURL  = OPI_Инструменты.РазбитьURL(URL);
+    Сервер        = СтруктураURL["Сервер"];
+    Адрес         = СтруктураURL["Адрес"];
+    
+    Запрос        = OPI_Инструменты.СоздатьЗапрос(Адрес, , ТипДанных);
+    Соединение    = OPI_Инструменты.СоздатьСоединение(Сервер, КлючПриложения, СекретПриложения);
+
+    СтрокаПараметров = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
+    Данные           = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
+
+    Запрос.УстановитьТелоИзСтроки(Данные);
+    
+    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
+    OPI_Инструменты.ОбработатьОтвет(Ответ);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Обновить токен
+// Получает новый токен на основе рефреш токена
+// 
+// Параметры:
+//  КлючПриложения   - Строка - Ключ приложения   - appkey
+//  СекретПриложения - Строка - Секрет приложения - appsecret
+//  РефрешТокен      - Строка - Рефреш токен      - refresh
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ОбновитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач РефрешТокен) Экспорт
+    
+    Строка_ = "Строка";
+    URL     = "https://api.dropbox.com/oauth2/token";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("refresh_token", РефрешТокен     , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("grant_type"   , "refresh_token" , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("client_id"    , КлючПриложения  , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("client_secret", СекретПриложения, Строка_, Параметры);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить информацию об аккаунте
+// Получает информацию об аккаунте
+// 
+// Параметры:
+//  Токен   - Строка - Токен                                                  - token
+//  Аккаунт - Строка - ID аккаунта. Текущий аккаунт токена, если не заполнено - account
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьИнформациюОбАккаунте(Знач Токен, Знач Аккаунт = "") Экспорт
+    
+    Если ЗначениеЗаполнено(Аккаунт) Тогда
+        Результат = ПолучитьАккаунт(Токен, Аккаунт);
+    Иначе
+        Результат = ПолучитьСвойАккаунт(Токен);
+    КонецЕсли;
+    
+    Возврат Результат;
+    
+КонецФункции
+
+// Получить данные использования пространства
+// Получает информацию о количестве использованного дискового пространства
+// 
+// Параметры:
+//  Токен - Строка - Токен - token 
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьДанныеИспользованияПространства(Знач Токен) Экспорт
+    
+    URL       = "https://api.dropboxapi.com/2/users/get_space_usage";
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    
+    Ответ = OPI_Инструменты.PostBinary(URL
+        , ПолучитьДвоичныеДанныеИзСтроки("null")
+        , Заголовки
+        , 
+        , "text/plain; charset=dropbox-cors-hack"); 
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСФайламиИКаталогами
+
+// Получить информацию об объекте
+// Получает информацию о файле или каталоге
+// 
+// Параметры:
+//  Токен    - Строка - Токен                                                    - token
+//  Путь     - Строка - Путь к объекту                                           - path
+//  Подробно - Булево - Добавляет дополнительные поля информации для медиафайлов - detail 
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox 
+Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Путь, Знач Подробно = Ложь) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/get_metadata"; 
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path"              , Путь    , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("include_media_info", Подробно, "Булево", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить список файлов папки
+// Получает список первых файлов каталога или продолжает получение следующих при указании курсора
+// 
+// Параметры:
+//  Токен    - Строка - Токен                                                                - token
+//  Путь     - Строка - Путь к каталогу. Необязателен, если указан курсор                    - path
+//  Подробно - Булево - Добавляет дополнительные поля информации для медиафайлов             - detail
+//  Курсор   - Строка - Курсор из предыдущего запроса для получения следующего набора файлов - cursor
+// 
+// Возвращаемое значение:
+//  HTTPОтвет - Получить список файлов папки
+Функция ПолучитьСписокФайловПапки(Знач Токен, Знач Путь = "", Знач Подробно = Ложь, Знач Курсор = "") Экспорт
+    
+    Если Не ЗначениеЗаполнено(Курсор) Тогда
+        
+        URL = "https://api.dropboxapi.com/2/files/list_folder";
+        
+        Параметры = Новый Структура;
+        OPI_Инструменты.ДобавитьПоле("path"              , Путь      , "Строка", Параметры);
+        OPI_Инструменты.ДобавитьПоле("include_media_info", Подробно  , "Булево", Параметры);
+    
+    Иначе
+        
+        URL = "https://api.dropboxapi.com/2/files/list_folder/continue";
+        
+        Параметры = Новый Структура;
+        OPI_Инструменты.ДобавитьПоле("cursor", Курсор, "Строка", Параметры); 
+        
+    КонецЕсли;
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить превью
+// Получает PDF или HTML превью объекта (только для токументов)
+// 
+// Параметры:
+//  Токен - Строка - Токен          - token
+//  Путь  - Строка - Путь к объекту - path
+// 
+// Возвращаемое значение:
+//  ДвоичныеДанные - превью документа 
+Функция ПолучитьПревью(Знач Токен, Знач Путь) Экспорт
+    
+    URL   = "https://content.dropboxapi.com/2/files/get_preview";
+    Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить файл
+// Загружает файл на облачный диск
+// 
+// Параметры:
+//  Токен          - Строка                 - Токен                                   - token
+//  Файл           - Строка, ДвоичныеДанные - Данные файл для загрузки                - file
+//  Путь           - Строка                 - Путь сохранения на Dropbox              - path
+//  Перезаписывать - Булево                 - Перезаписывать файл при конфликте путей - overwrite
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox 
+Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    
+    Режим     = ?(Перезаписывать, "overwrite", "add");
+    Размер    = Файл.Размер();
+    Граница   = 100000000;
+        
+    Если Размер > Граница Тогда
+        Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
+    Иначе
+        Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
+    КонецЕсли;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить файл по URL
+// Загружает файл на облачный диск, получая его по указанному URL 
+// 
+// Параметры:
+//  Токен    - Строка - Токен                      - token
+//  URLФайла - Строка - URL источник файла         - url
+//  Путь     - Строка - Путь сохранения на Dropbox - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ЗагрузитьФайлПоURL(Знач Токен, Знач URLФайла, Знач Путь) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/save_url"; 
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path", Путь     , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("url" , URLФайла , "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить статус загрузки по URL
+// Получает статус загрузки файла по URL
+// 
+// Параметры:
+//  Токен    - Строка - Токен                                              - token
+//  IDРаботы - Строка - ID асинхронной работы из ответа ЗагрузитьФайлПоURL - job 
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьСтатусЗагрузкиПоURL(Знач Токен, Знач IDРаботы) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/save_url/check_job_status"; 
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("async_job_id", IDРаботы, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить объект
+// Удаляет объект с облачного диска
+// 
+// Параметры:
+//  Токен        - Строка - Токен                                        - token
+//  Путь         - Строка - Путь к объекту удаления                      - path
+//  БезВозвратно - Строка - Удалить объект без возможности востановления - permanently
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач Безвозвратно = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Безвозвратно);
+    
+    Если Безвозвратно Тогда
+        URL = "https://api.dropboxapi.com/2/files/permanently_delete";
+    Иначе
+        URL = "https://api.dropboxapi.com/2/files/delete_v2";
+    КонецЕсли;
+    
+    Ответ = ОбработатьОбъект(Токен, URL, Путь);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Копировать объект
+// Копирует файл или каталог по выбранному пути
+// 
+// Параметры:
+//  Токен  - Строка - Токен                           - token
+//  Откуда - Строка - Путь к объекту оригинала        - form
+//  Куда   - Строка - Целевой путь для нового объекта - to
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция КопироватьОбъект(Знач Токен, Знач Откуда, Знач Куда) Экспорт
+   
+    URL = "https://api.dropboxapi.com/2/files/copy_v2";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("from_path", Откуда, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("to_path"  , Куда  , "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Переместить объект
+// Перемещает объект по выбранному пути
+// 
+// Параметры:
+//  Токен  - Строка - Токен                           - token
+//  Откуда - Строка - Путь к объекту оригинала        - form
+//  Куда   - Строка - Целевой путь для нового объекта - to
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПереместитьОбъект(Знач Токен, Знач Откуда, Знач Куда) Экспорт
+
+    URL = "https://api.dropboxapi.com/2/files/move_v2";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("from_path", Откуда, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("to_path"  , Куда  , "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+// Создать папку
+// Создает пустой каталог по выбранному пути
+// 
+// Параметры:
+//  Токен - Строка - Токен                          - token
+//  Путь  - Строка - Целевой путь создания каталога - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
+    
+    URL   = "https://api.dropboxapi.com/2/files/create_folder_v2";
+    Ответ = ОбработатьОбъект(Токен, URL, Путь);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Скачать файл
+// Скачивает файл по указанному пути или ID
+// 
+// Параметры:
+//  Токен - Строка - Токен             - token
+//  Путь  - Строка - Путь или ID файла - path
+// 
+// Возвращаемое значение:
+//  ДвоичныеДанные - двоичные данные файла
+Функция СкачатьФайл(Знач Токен, Знач Путь) Экспорт
+    
+    URL   = "https://content.dropboxapi.com/2/files/download";
+    Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Скачать папку
+// Скачивает zip архив с содержимым указанного каталога
+// 
+// Параметры:
+//  Токен - Строка - Токен                - token
+//  Путь  - Строка - Путь или ID каталога - path
+// 
+// Возвращаемое значение:
+//  ДвоичныеДанные - двоичные данные zip архива с содержимым каталога
+Функция СкачатьПапку(Знач Токен, Знач Путь) Экспорт
+    
+    URL   = "https://content.dropboxapi.com/2/files/download_zip";
+    Ответ = ОбработатьОбъект(Токен, URL, Путь, Истина);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить список версий объекта
+// Получает список версий (ревизий) объекта
+// 
+// Параметры:
+//  Токен      - Строка        - Токен                                          - token
+//  Путь       - Строка        - Путь к объекту                                 - path
+//  Количество - Строка, Число - Число последних версий объекта для отображения - amount
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьСписокВерсийОбъекта(Знач Токен, Знач Путь, Знач Количество = 10) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/list_revisions"; 
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path" , Путь      , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("limit", Количество, "Число" , Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Восстановить объект к версии
+// Восстанавливает состояние объекта к необходимой версии (ревизии)
+// 
+// Параметры:
+//  Токен  - Строка - Токен                                 - token
+//  Путь   - Строка - Путь к объекту                        - path
+//  Версия - Строка - ID версии (ревизии) для востановления - rev
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ВосстановитьОбъектКВерсии(Знач Токен, Знач Путь, Знач Версия) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/restore"; 
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path", Путь  , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("rev" , Версия, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСТегами
+
+// Получить список тегов
+// Получает список тегов выбранных файлов
+// 
+// Параметры:
+//  Токен - Строка                   - Токен                          - token
+//  Пути  - Строка, Массив Из Строка - Путь или набору путей к файлам - paths
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьСписокТегов(Знач Токен, Знач Пути) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/files/tags/get";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("paths", Пути, "Массив", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Добавить тег
+// Добавляет новый текстовый тег к файлу или каталогу
+// 
+// Параметры:
+//  Токен - Строка - Токен                                               - token
+//  Путь  - Строка - Путь к объекту, для которого необходимо создать тег - path
+//  Тег   - Строка - Текст тега                                          - tag
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ДобавитьТег(Знач Токен, Знач Путь, Знач Тег) Экспорт
+    
+    Возврат ОбработатьТег(Токен, Путь, Тег);
+    
+КонецФункции
+
+// Удалить тег
+// Удаляет текстовый тег файла или каталога
+// 
+// Параметры:
+//  Токен - Строка - Токен                                           - token
+//  Путь  - Строка - Путь к объекту, тег которого необходимо удалить - path
+//  Тег   - Строка - Текст тега                                      - tag
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция УдалитьТег(Знач Токен, Знач Путь, Знач Тег) Экспорт
+    
+    Возврат ОбработатьТег(Токен, Путь, Тег, Истина);
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область НастройкиСовместногоДоступа
+
+// Опубликовать папку
+// Переводит каталог в режим публичного доступа
+// 
+// Параметры:
+//  Токен - Строка - Токен                    - token
+//  Путь  - Строка - Путь к целевому каталогу - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ОпубликоватьПапку(Знач Токен, Знач Путь) Экспорт
+    
+    URL   = "https://api.dropboxapi.com/2/sharing/share_folder";
+    Ответ = ОбработатьОбъект(Токен, URL, Путь);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Отменить публикацию папки
+// Отменяет режим общего доступа для каталога
+// 
+// Параметры:
+//  Токен   - Строка - Токен                                     - token
+//  IDПапки - Строка - ID публичного каталога (shared folder ID) - folder
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ОтменитьПубликациюПапки(Знач Токен, Знач IDПапки) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/sharing/unshare_folder";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Добавить пользователя к файлу
+// Определяет доступ к файлу для стороннего пользователя
+// 
+// Параметры:
+//  Токен          - Строка                   - Токен                                                      - token
+//  IDФайла        - Строка                   - ID файла, к которому предоставляется доступ                - fileid
+//  АдресаПочты    - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей             - emails
+//  ТолькоПросмотр - Булево                   - Запрещает редактирование файла для стороннего пользователя - readonly
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ДобавитьПользователейКФайлу(Знач Токен, Знач IDФайла, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
+    
+    Строка_ = "Строка";
+    
+    OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр);
+    
+    Если Не СтрНачинаетсяС(IDФайла, "id:") Тогда
+        IDФайла = "id:" + IDФайла;
+    КонецЕсли;
+    
+    URL = "https://api.dropboxapi.com/2/sharing/add_file_member";
+    
+    МассивПользователей = Новый Массив;
+    
+    Для Каждого Адрес Из АдресаПочты Цикл
+             
+        ДанныеПользователя = Новый Соответствие;
+        OPI_Инструменты.ДобавитьПоле(".tag" , "email", Строка_, ДанныеПользователя);
+        OPI_Инструменты.ДобавитьПоле("email", Адрес  , Строка_, ДанныеПользователя);
+        
+        МассивПользователей.Добавить(ДанныеПользователя);
+
+    КонецЦикла;
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("file"   , IDФайла             , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("members", МассивПользователей , "Массив", Параметры);
+    
+    Режим = ?(ТолькоПросмотр, "viewer", "editor");
+    
+    OPI_Инструменты.ДобавитьПоле("access_level", Режим , Строка_, Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Добавить пользователей к папке
+// Предоставляет стороннии пользователям доступ к каталогу
+// 
+// Параметры:
+//  Токен          - Строка - Токен                                                            - token
+//  IDПапки        - Строка - ID публичного каталога (shared folder ID)                        - folder
+//  АдресаПочты    - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей - emails
+//  ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя       - readonly
+// 
+// Возвращаемое значение:
+//  Неопределено - пустой ответ
+Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
+    
+    Строка_ = "Строка";
+    
+    OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр);
+    Режим = ?(ТолькоПросмотр, "viewer", "editor");
+        
+    URL = "https://api.dropboxapi.com/2/sharing/add_folder_member";
+    
+    МассивПользователей = Новый Массив;
+    
+    Для Каждого Адрес Из АдресаПочты Цикл
+             
+        ДанныеПользователя = Новый Соответствие;
+        OPI_Инструменты.ДобавитьПоле(".tag" , "email", Строка_, ДанныеПользователя);
+        OPI_Инструменты.ДобавитьПоле("email", Адрес  , Строка_, ДанныеПользователя);
+        
+        СтруктураПользователя = Новый Структура("member,access_level", ДанныеПользователя, Режим); 
+        
+        МассивПользователей.Добавить(СтруктураПользователя);
+
+    КонецЦикла;
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки             , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("members"         , МассивПользователей , "Массив", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить статус асинхронного изменения
+// Получает статус асинхронной работы по изменению доступов
+// 
+// Параметры:
+//  Токен    - Строка - Токен                 - token
+//  IDРаботы - Строка - ID асинхронной работы - job
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ПолучитьСтатусАсинхронногоИзменения(Знач Токен, Знач IDРаботы) Экспорт
+    
+    URL = "https://api.dropboxapi.com/2/sharing/check_job_status";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("async_job_id", IDРаботы, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Отменить публикацию файла
+// Запрещает доступ к файлу для внешних пользователей
+// 
+// Параметры:
+//  Токен    - Строка - Токен                                       - token
+//  IDФайла  - Строка - ID файла, к которому предоставляется доступ - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
+Функция ОтменитьПубликациюФайла(Знач Токен, Знач IDФайла) Экспорт
+	
+	OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
+    
+    Если Не СтрНачинаетсяС(IDФайла, "id:") Тогда
+        IDФайла = "id:" + IDФайла;
+    КонецЕсли;
+    
+	URL = "https://api.dropboxapi.com/2/sharing/unshare_file";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("file", IDФайла, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ОбработатьОбъект(Знач Токен, Знач URL, Знач Путь, Знач ВЗаголовках = Ложь)
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Параметры);
+    
+    Если ВЗаголовках Тогда
+        Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
+        Ответ     = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
+    Иначе
+        Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+        Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    КонецЕсли;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ОбработатьТег(Знач Токен, Знач Путь, Знач Тег, Знач ЭтоУдаление = Ложь)
+
+    Если ЭтоУдаление Тогда
+        URL = "https://api.dropboxapi.com/2/files/tags/remove";
+    Иначе
+        URL = "https://api.dropboxapi.com/2/files/tags/add";
+    КонецЕсли;
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("path"     , Путь, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("tag_text" , Тег , "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+        
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization"  , "Bearer " + Токен);
+    
+    Если ЗначениеЗаполнено(Параметры) Тогда
+        
+        JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
+        JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
+
+        Заголовки.Вставить("Dropbox-API-Arg", JSON);
+    
+    КонецЕсли;
+    
+    Возврат Заголовки;
+    
+КонецФункции
+
+Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
+    
+    URL            = "https://content.dropboxapi.com/2/files/upload_session/append_v2"; 
+
+    РазмерЧасти    = 100000000;
+    ТекущаяПозиция = 0;
+    ПрочитаноБайт  = 0;
+    ОбщийРазмер    = Файл.Размер();   
+    Сессия         = ОткрытьСессию(Токен);
+    
+    Пока ПрочитаноБайт < ОбщийРазмер Цикл
+        
+        Отступ = ТекущаяПозиция;
+        Курсор = Новый Структура("offset,session_id", Отступ, Сессия);
+        
+        Параметры = Новый Структура("cursor", Курсор);
+        Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
+        
+        ЧтениеДанных     = Новый ЧтениеДанных(Файл);
+        ПрочитаноБайт    = ЧтениеДанных.Пропустить(ТекущаяПозиция);
+        Результат        = ЧтениеДанных.Прочитать(РазмерЧасти);
+        ТекущиеДанные    = Результат.ПолучитьДвоичныеДанные();
+        РазмерТекущих    = ТекущиеДанные.Размер();
+        СледующаяПозиция = ТекущаяПозиция + РазмерТекущих; 
+        
+        Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
+            Прервать;
+        КонецЕсли;
+
+        Ответ = OPI_Инструменты.PostBinary(URL, ТекущиеДанные, Заголовки);
+        
+        ТекущаяПозиция = СледующаяПозиция;
+        
+        // !OInt КБайт = 1024;
+        // !OInt МБайт = КБайт * КБайт;
+        // !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
+        
+        // !OInt ВыполнитьСборкуМусора();
+        // !OInt ОсвободитьОбъект(ТекущиеДанные);
+               
+    КонецЦикла;
+    
+    Ответ = ЗакрытьСессию(Токен, Путь, Режим, ОбщийРазмер, Сессия);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
+    
+    Булево_ = "Булево";
+    Строка_ = "Строка";
+    URL     = "https://content.dropboxapi.com/2/files/upload";
+    
+    Параметры = Новый Структура;
+        
+    OPI_Инструменты.ДобавитьПоле("autorename"     , Ложь , Булево_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("mode"           , Режим, Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("mute"           , Ложь , Булево_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("path"           , Путь , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("strict_conflict", Ложь , Булево_, Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
+
+    Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ОткрытьСессию(Знач Токен)
+    
+    SessionId = "session_id";
+    URL       = "https://content.dropboxapi.com/2/files/upload_session/start";
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    
+    Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки); 
+    
+    Возврат Ответ[SessionId];
+    
+КонецФункции
+
+Функция ЗакрытьСессию(Знач Токен, Знач Путь, Знач Режим, Знач ОбщийРазмер, Знач Сессия)
+
+    URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
+    
+    Коммит = Новый Структура();
+    OPI_Инструменты.ДобавитьПоле("mode", Режим, "Строка", Коммит);
+    OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Коммит);   
+    
+    Курсор = Новый Структура("offset,session_id", ОбщийРазмер, Сессия);
+     
+    Параметры = Новый Структура("commit,cursor", Коммит, Курсор);
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
+    
+    Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ПолучитьАккаунт(Знач Токен, Знач Аккаунт)
+    
+    URL = "https://api.dropboxapi.com/2/users/get_account";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("account_id", Аккаунт, "Строка", Параметры);
+    
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+Функция ПолучитьСвойАккаунт(Знач Токен)
+    
+    URL       = "https://api.dropboxapi.com/2/users/get_current_account";
+    Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
+    
+    Ответ = OPI_Инструменты.PostBinary(URL
+        , ПолучитьДвоичныеДанныеИзСтроки("null")
+        , Заголовки
+        , 
+        , "text/plain; charset=dropbox-cors-hack"); 
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_Dropbox/OPI_Dropbox.mdo b/en/OPI/src/CommonModules/OPI_Dropbox/OPI_Dropbox.mdo
new file mode 100644
index 0000000000..7902731e7c
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Dropbox/OPI_Dropbox.mdo
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66ce7792-41e5-47e4-bfad-2dcff1c96287">
+  <name>OPI_Dropbox</name>
+  <synonym>
+    <key></key>
+    <value>OPI dropbox</value>
+  </synonym>
+  <synonym>
+    <key>ru</key>
+    <value>Drop box</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_GoogleCalendar/Module.bsl b/en/OPI/src/CommonModules/OPI_GoogleCalendar/Module.bsl
new file mode 100644
index 0000000000..a67673021c
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleCalendar/Module.bsl
@@ -0,0 +1,631 @@
+// Расположение OS: ./OInt/core/Modules/OPI_GoogleCalendar.os
+// Библиотека: Google Calendar
+// Команда CLI: gcalendar
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСМетаданнымиКалендарей
+
+// Создать календарь
+// Создает пустой календарь
+// 
+// Параметры:
+//  Токен        - Строка - Токен                                - token
+//  Наименование - Строка - Наименование создаваемого календаря  - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/calendars";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("summary" , Наименование);
+    Параметры.Вставить("timeZone", "Europe/Moscow");
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить календарь
+// Получает информацию о календаре по ID
+// 
+// Параметры:
+//  Токен     - Строка - Токен        - token
+//  Календарь - Строка - ID календаря - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;    
+    Ответ     = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить календарь
+// Изменяет свойства существуещего календаря
+// 
+// Параметры:
+//  Токен        - Строка - Токен                      - token
+//  Календарь    - Строка - ID календаря               - calendar
+//  Наименование - Строка - Новое наименование         - title
+//  Описание     - Строка - Новое описание календаря   - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ИзменитьМетаданныеКалендаря(Знач Токен
+    , Знач Календарь
+    , Знач Наименование = ""
+    , Знач Описание = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Наименование) Тогда
+        Параметры.Вставить("summary", Наименование);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Описание) Тогда
+        Параметры.Вставить("description", Описание);
+    КонецЕсли;
+      
+    Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Очистить основной календарь
+// Очищает список событий основного календаря
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";    
+    Ответ     = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить календарь
+// Удаляет календарь по ID
+// 
+// Параметры:
+//  Токен     - Строка - Токен         - token
+//  Календарь - Строка - ID календаря  - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;       
+    Ответ     = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСоСпискомКалендарей
+
+// Получить список календарей
+// Получает массив календарей аккаунта
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий данных календарей
+Функция ПолучитьСписокКалендарей(Знач Токен) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки        = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    МассивКалендарей = Новый Массив;
+    
+    ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей);
+    
+    Возврат МассивКалендарей;
+    
+КонецФункции
+
+// Добавить календарь в список
+// Добавляет существующий календарь в список пользователя
+// 
+// Параметры:
+//  Токен     - Строка - Токен        - token
+//  Календарь - Строка - ID календаря - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ДобавитьКалендарьВСписок(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("id", Календарь);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить календарь списка
+// Получает календарь из списка пользователя по ID
+// 
+// Параметры:
+//  Токен     - Строка - Токен        - token
+//  Календарь - Строка - ID календаря - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
+    Ответ     = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить календарь из списка
+// Удаляет календарь из списка пользователя
+// 
+// Параметры:
+//  Токен     - Строка - Токен         - token
+//  Календарь - Строка - ID календаря  - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
+    Ответ     = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить календарь списка
+// Изменяет свойства календаря из списка пользователей
+// 
+// Параметры:
+//  Токен              - Строка - Токен                                   - token
+//  Календарь          - Строка - ID календаря                            - calendar
+//  ОсновнойЦвет       - Строка - HEX основного цвета (#ffffff)           - primary
+//  ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff)     - secondary
+//  Скрытый            - Булево - Скрытый календарь                       - hidden
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ИзменитьКалендарьСписка(Знач Токен
+    , Знач Календарь
+    , Знач ОсновнойЦвет
+    , Знач ДополнительныйЦвет
+    , Знач Скрытый = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ОсновнойЦвет);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ДополнительныйЦвет);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытый);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
+    
+    Параметры = Новый Соответствие;
+    Параметры.Вставить("hidden"         , Скрытый);
+    Параметры.Вставить("foregroundColor", ОсновнойЦвет);
+    Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
+    
+    Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаССобытиями
+
+// Получить описание события !NOCLI
+// 
+// Возвращаемое значение:
+// Соответствие Из КлючИЗначение - Пустой макет события
+Функция ПолучитьОписаниеСобытия() Экспорт
+    
+    ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
+    Час         = 3600;
+    Событие     = Новый Соответствие;
+                       
+    Событие.Вставить("Описание"               , "");                          // Описание события
+    Событие.Вставить("Заголовок"              , "Новое событие");             // Заголовок события
+    Событие.Вставить("МестоПроведения"        , "");                          // Строка описание места проведения
+    Событие.Вставить("ДатаНачала"             , ТекущаяДата);                 // Дата начала события
+    Событие.Вставить("ДатаОкончания"          , ТекущаяДата + Час);           // Дата окончания события
+    Событие.Вставить("МассивURLФайловВложений", Новый Соответствие);          // Ключ - название, Значение - URL к файлу
+    Событие.Вставить("ОтправлятьУведомления"  , Истина);                      // Признак отправки уведомлений участникам
+
+    Возврат Событие;
+    
+КонецФункции
+
+// Получить список событий
+// Получает список всех событий календаря
+// 
+// Параметры:
+//  Токен     - Строка - Токен         - token
+//  Календарь - Строка - ID календаря  - calendar
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий событий
+Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    
+    Заголовки     = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    МассивСобытий = Новый Массив;
+    
+    ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
+    
+    Возврат МассивСобытий;
+    
+КонецФункции
+
+// Получить событие
+// Получает событие по ID
+// 
+// Параметры:
+//  Токен     - Строка - Токен        - token
+//  Календарь - Строка - ID календаря - calendar
+//  Событие   - Строка - ID события   - event
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
+    
+    Заголовки   = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL         = "https://www.googleapis.com/calendar/v3/calendars/" 
+        + Календарь 
+        + "/events/"
+        + Событие; 
+        
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Создать событие
+// Создает новое событие
+// 
+// Параметры:
+//  Токен           - Строка                        - Токен            - token         
+//  Календарь       - Строка                        - ID календаря     - calendar
+//  ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события - props
+// 
+// Возвращаемое значение:
+//  Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
+Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт    
+    Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
+КонецФункции
+
+// Переместить событие
+// Перемещает событие в другой календарь
+// 
+// Параметры:
+//  Токен             - Строка - Токен                            - token
+//  КалендарьИсточник - Строка - ID календаря источника           - from
+//  КалендарьПриемник - Строка - ID календаря приемника           - to
+//  Событие           - Строка - ID события календаря источника   - event
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьИсточник);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(КалендарьПриемник);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
+    
+    Заголовки   = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL         = "https://www.googleapis.com/calendar/v3/calendars/" 
+        + КалендарьИсточник 
+        + "/events/"
+        + Событие
+        + "/move?destination="
+        + КалендарьПриемник; 
+        
+    Ответ = OPI_Инструменты.Post(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить событие
+// Изменяет существующее событие
+// 
+// Параметры:
+//  Токен           - Строка - Токен                    - token
+//  Календарь       - Строка - ID календаря             - calendar
+//  ОписаниеСобытия - Строка - Новое описание события   - props
+//  Событие         - Строка - ID события               - event
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
+    Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
+КонецФункции
+
+// Удалить событие
+// Удаляет событие по ID
+// 
+// Параметры:
+//  Токен     - Строка - Токен         - token
+//  Календарь - Строка - ID календаря  - calendar
+//  Событие   - Строка - ID события    - event
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
+    
+    Заголовки   = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL         = "https://www.googleapis.com/calendar/v3/calendars/" 
+        + Календарь 
+        + "/events/"
+        + Событие; 
+        
+    Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПреобразоватьДату(Знач Дата)
+    
+    OPI_ПреобразованиеТипов.ПолучитьДату(Дата);
+    
+    СтруктураДаты = Новый Структура;
+    
+    Если Не ТипЗнч(Дата) = Тип("Дата") Тогда
+        Возврат Неопределено;
+    КонецЕсли;
+    
+    Если Дата = НачалоДня(Дата) Тогда
+        ФорматДаты = "ДФ=yyyy-MM-dd";
+        Поле       = "date";
+    Иначе
+        ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
+        Поле       = "dateTime";
+    КонецЕсли;
+    
+    Дата = Формат(Дата, ФорматДаты);
+    СтруктураДаты.Вставить(Поле      , Дата);
+    СтруктураДаты.Вставить("timeZone", "Europe/Moscow");
+    
+    Возврат СтруктураДаты;
+    
+КонецФункции
+
+Функция ПреобразоватьВложения(Знач Вложения)
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Вложения);
+    
+    МассивВложений = Новый Массив;
+    
+    Если ТипЗнч(Вложения) = Тип("Соответствие") Или ТипЗнч(Вложения) = Тип("Структура") Тогда
+        
+        Для Каждого Вложение Из Вложения Цикл
+            
+            ТекущеВложение = Новый Структура;
+            ТекущеВложение.Вставить("title"  , Вложение.Ключ);
+            ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
+            
+            МассивВложений.Добавить(ТекущеВложение);
+            
+        КонецЦикла;
+        
+    КонецЕсли;
+    
+    Если МассивВложений.Количество() > 0 Тогда
+        Возврат МассивВложений;
+    Иначе
+        Возврат Неопределено;
+    КонецЕсли;
+
+КонецФункции
+
+Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Календарь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Событие);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеСобытия);
+    
+    Заголовки    = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    Существующее = ЗначениеЗаполнено(Событие);
+    URL          = "https://www.googleapis.com/calendar/v3/calendars/" 
+        + Календарь 
+        + "/events"
+        + ?(Существующее, "/" + Событие, ""); 
+    
+    Дата0       = ОписаниеСобытия["ДатаНачала"];
+    Дата1       = ОписаниеСобытия["ДатаОкончания"];
+    Вложения    = ОписаниеСобытия["МассивURLФайловВложений"];
+    Вложения    = ПреобразоватьВложения(Вложения);
+    Уведомления = ?(ОписаниеСобытия["ОтправлятьУведомления"] = Неопределено
+        , Ложь
+        , ОписаниеСобытия["ОтправлятьУведомления"]);
+        
+    Параметры   = Новый Структура;
+    Параметры.Вставить("summary"    , ОписаниеСобытия["Заголовок"]);
+    Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
+    Параметры.Вставить("location"   , ОписаниеСобытия["МестоПроведения"]);
+    Параметры.Вставить("start"      , ПреобразоватьДату(Дата0));
+    Параметры.Вставить("end"        , ПреобразоватьДату(Дата1));
+    Параметры.Вставить("attachments", Вложения);  
+    
+    ПараметрыURL = Новый Структура;    
+    ПараметрыURL.Вставить("sendUpdates"         , ?(Уведомления, "all", "none"));
+    ПараметрыURL.Вставить("supportsAttachments" , ?(ЗначениеЗаполнено(Вложения), "true", "false"));
+    
+    URL   = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
+    
+    OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);
+    
+    Если Существующее Тогда
+        Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
+    Иначе
+        Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
+    КонецЕсли;
+    
+    Возврат Ответ;
+
+КонецФункции
+
+Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "") 
+    
+    Items     = "items";
+    NPT       = "nextPageToken";
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Страница) Тогда
+        Параметры.Вставить("pageToken", Страница);
+    КонецЕсли;
+    
+    Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
+        , Параметры
+        , Заголовки);
+        
+    Календари = Результат[Items];
+    Страница  = Результат[NPT];
+        
+    Для Каждого Календарь Из Календари Цикл
+        МассивКалендарей.Добавить(Календарь);    
+    КонецЦикла;    
+    
+    Если Календари.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
+        ПолучитьСписокКалендарейРекурсивно(Заголовки, МассивКалендарей, Страница); 
+    КонецЕсли;
+          
+КонецПроцедуры
+
+Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "") 
+    
+    Items     = "items";
+    NPT       = "nextPageToken";
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Страница) Тогда
+        Параметры.Вставить("pageToken", Страница);
+    КонецЕсли;
+    
+    Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
+        , Параметры
+        , Заголовки);
+        
+    События  = Результат[Items];
+    Страница = Результат[NPT];
+        
+    Для Каждого Событие Из События Цикл
+        МассивСобытий.Добавить(Событие);    
+    КонецЦикла;    
+    
+    Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
+        ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница); 
+    КонецЕсли;
+          
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_GoogleCalendar/OPI_GoogleCalendar.mdo b/en/OPI/src/CommonModules/OPI_GoogleCalendar/OPI_GoogleCalendar.mdo
new file mode 100644
index 0000000000..3d38018f54
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleCalendar/OPI_GoogleCalendar.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d27d4ffb-31c2-4362-bd6d-d785ce171b49">
+  <name>OPI_GoogleCalendar</name>
+  <synonym>
+    <key></key>
+    <value>OPI google calendar</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_GoogleDrive/Module.bsl b/en/OPI/src/CommonModules/OPI_GoogleDrive/Module.bsl
new file mode 100644
index 0000000000..cb8511f9f0
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleDrive/Module.bsl
@@ -0,0 +1,719 @@
+// Расположение OS: ./OInt/core/Modules/OPI_GoogleDrive.os
+// Библиотека: Google Drive
+// Команда CLI: gdrive
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСФайламиИКаталогами
+
+// Получить информацию об объекте
+// Получает информацию о папке или файле по ID
+// 
+// Параметры:
+//  Токен         - Строка - Токен                            - token
+//  Идентификатор - Строка - Идентификатор файла или каталога - object
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьИнформациюОбОбъекте(Знач Токен, Знач Идентификатор) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + Идентификатор; 
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("fields", "*");
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список каталогов
+// Получает список каталогов диска
+// 
+// Параметры:
+//  Токен       - Строка - Токен                                     - token
+//  ИмяСодержит - Строка - Отбор по имени                            - querry
+//  Подробно    - Булево - Добавляет список файлов к полям каталога  - depth
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий каталогов
+Функция ПолучитьСписокКаталогов(Знач Токен, Знач ИмяСодержит = "", Знач Подробно = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Подробно);
+    
+    Заголовки      = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    МассивОбъектов = Новый Массив;
+    Отбор          = Новый Массив;
+    
+    Отбор.Добавить("mimeType = 'application/vnd.google-apps.folder'");
+    
+    Если ЗначениеЗаполнено(ИмяСодержит) Тогда
+        Отбор.Добавить("name contains '" + ИмяСодержит + "'");
+    КонецЕсли;
+    
+    ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор);
+    
+    Если Подробно Тогда
+        РазложитьОбъектыПодробно(Токен, МассивОбъектов);    
+    КонецЕсли;
+    
+    Возврат МассивОбъектов;
+    
+КонецФункции
+
+// Получить список файлов
+// Получает список файлов
+// 
+// Параметры:
+//  Токен       - Строка - Токен                          - token
+//  ИмяСодержит - Строка - Отбор по имени                 - querry
+//  Каталог     - Строка - Отбор по ID каталога родителя  - catalog
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий файлов
+Функция ПолучитьСписокФайлов(Знач Токен, Знач ИмяСодержит = "", Знач Каталог = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяСодержит);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Каталог);
+    
+    Заголовки      = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    МассивОбъектов = Новый Массив;
+    Отбор          = Новый Массив;
+    
+    Отбор.Добавить("mimeType != 'application/vnd.google-apps.folder'");
+    
+    Если ЗначениеЗаполнено(ИмяСодержит) Тогда
+        Отбор.Добавить("name contains '" + ИмяСодержит + "'");
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Каталог) Тогда
+        Отбор.Добавить("'" + Каталог + "' in parents");
+    КонецЕсли;
+    
+    ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, , Отбор);
+    
+    Возврат МассивОбъектов;
+
+КонецФункции
+
+// Загрузить файл
+// Загружает файл на диск
+// 
+// Параметры:
+//  Токен     - Строка                        - Токен                     - token
+//  Файл      - ДвоичныеДанные,Строка         - Загружаемый файл          - file
+//  Описание  - Соответствие Из КлючИЗначение - См. ПолучитьОписаниеФайла - props - JSON описания или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Описание) Экспорт
+    Возврат УправлениеФайлом(Токен, Файл, Описание);   
+КонецФункции
+
+// Создать папку
+// Создает пустой каталог на диске
+// 
+// Параметры:
+//  Токен    - Строка - Токен      - token
+//  Имя      - Строка - Имя папки  - title
+//  Родитель - Строка - Родитель   - catalog
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция СоздатьПапку(Знач Токен, Знач Имя, Знач Родитель = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
+    
+    Описание = Новый Соответствие;
+    Описание.Вставить("MIME"    , "application/vnd.google-apps.folder");
+    Описание.Вставить("Имя"     , Имя);
+    Описание.Вставить("Описание", "");
+    Описание.Вставить("Родитель", ?(ЗначениеЗаполнено(Родитель), Родитель, "root"));
+    
+    Возврат УправлениеФайлом(Токен, , Описание);
+    
+КонецФункции
+
+// Скачать файл
+// Получает файл по ID
+// 
+// Параметры:
+//  Токен          - Строка - Токен                 - token
+//  Идентификатор  - Строка - Идентификатор файла   - object
+//  ПутьСохранения - Строка - Путь сохранения файла - out 
+// 
+// Возвращаемое значение:
+//  ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
+Функция СкачатьФайл(Знач Токен, Знач Идентификатор, Знач ПутьСохранения = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;  
+    
+    Параметры = Новый Соответствие;
+    Параметры.Вставить("alt", "media");
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры , Заголовки, ПутьСохранения);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Скоприровать объект
+// Копирует файл или каталог
+// 
+// Параметры:
+//  Токен         - Строка - Токен                     - token
+//  Идентификатор - Строка - Идентификатор объекта     - object
+//  НовоеИмя      - Строка - Новое имя объекта         - title
+//  НовыйРодитель - Строка - Новый каталог размещения  - catalog
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция СкопироватьОбъект(Знач Токен, Знач Идентификатор, Знач НовоеИмя = "", Знач НовыйРодитель = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйРодитель);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/copy";    
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(НовоеИмя) Тогда
+        Параметры.Вставить("name", НовоеИмя);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(НовыйРодитель) Тогда
+        
+        МассивРодителей = Новый Массив;
+        МассивРодителей.Добавить(НовыйРодитель);
+        Параметры.Вставить("parents", МассивРодителей);
+        
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры , Заголовки, Истина);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Обновить файл
+// Обновляет двоичные данные файла
+// 
+// Параметры:
+//  Токен         - Строка - Токен                                     - token
+//  Идентификатор - Строка - Идентификатор обновляемого объекта        - object
+//  Файл          - ДвоичныеДанные,Строка - Файл источник обновления   - file
+//  НовоеИмя      - Строка - Новое имя файла (если необходимо)         - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ОбновитьФайл(Знач Токен, Знач Идентификатор, Знач Файл, Знач НовоеИмя = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(НовоеИмя);
+    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+    
+    Если ЗначениеЗаполнено(НовоеИмя) Тогда
+        Описание = Новый Соответствие;
+        Описание.Вставить("Имя", НовоеИмя);
+    Иначе
+        Описание = "";
+    КонецЕсли;
+    
+    Возврат УправлениеФайлом(Токен, Файл, Описание, Идентификатор);
+        
+КонецФункции
+
+// Удалить объект
+// Удаляет файл или каталог по ID
+// 
+// Параметры:
+//  Токен         - Строка - Токен                               - token
+//  Идентификатор - Строка - Идентификатор объекта для удаления  - object
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьОбъект(Знач Токен, Знач Идентификатор) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + Идентификатор;    
+    Ответ     = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить описание файла !NOCLI
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Описание файла
+Функция ПолучитьОписаниеФайла() Экспорт
+    
+    Описание = Новый Соответствие;
+    Описание.Вставить("MIME"        , "image/jpeg");       // MIME-тип загружаемого файла
+    Описание.Вставить("Имя"         , "Новый файл.jpg");   // Имя файла с расширением
+    Описание.Вставить("Описание"    , "Это новый файл");   // Описание файла
+    Описание.Вставить("Родитель"    , "root");             // ID каталога загрузки или "root" для загрузки в корень
+    
+    Возврат Описание;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСКомментариями
+
+// Создать комментарий
+// Создает комментарий к файлу или каталогу
+// 
+// Параметры:
+//  Токен         - Строка - Токен                                                     - token
+//  Идентификатор - Строка - Идентификатор объекта, для которого необходим комментарий - object  
+//  Комментарий   - Строка - Текст комментария                                         - text
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция СоздатьКомментарий(Знач Токен, Знач Идентификатор, Знач Комментарий) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Комментарий);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + Идентификатор + "/comments?fields=*"; 
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("content", Комментарий);
+    
+    Ответ = OPI_Инструменты.POST(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить комментарий
+// Получает комментарий по ID
+// 
+// Параметры:
+//  Токен         - Строка - Токен                                                   - token
+//  ИДОбъекта     - Строка - Идентификатор файла или каталога размещения комментария - object
+//  ИДКомментария - Строка - Идентификатор комментария                               - comment
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; 
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("fields", "*");
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список комментариев
+// Получает список всех комментариев объекта
+// 
+// Параметры:
+//  Токен     - Строка - Токен                  - token
+//  ИДОбъекта - Строка - Идентификатор объекта  - object
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьСписокКомментариев(Знач Токен, Знач ИДОбъекта) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments"; 
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("fields", "*");
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить комментарий
+// Удаляет комментарий по ID
+// 
+// Параметры:
+//  Токен         - Строка - Токен                                                    - token
+//  ИДОбъекта     - Строка - Идентификатор файла или каталога размещения комментария  - object
+//  ИДКомментария - Строка - Идентификатор комментария                                - comment
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьКомментарий(Знач Токен, Знач ИДОбъекта, Знач ИДКомментария) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДОбъекта);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДКомментария);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://www.googleapis.com/drive/v3/files/" + ИДОбъекта + "/comments/" + ИДКомментария; 
+    
+    Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПолучитьСписокОбъектовРекурсивно(Знач Заголовки, МассивОбъектов, Подробно = Ложь, Отбор = "", Страница = "") 
+    
+    URL       = "https://www.googleapis.com/drive/v3/files";
+    Files     = "files";
+    NPT       = "nextPageToken";
+    Параметры = Новый Структура;
+    Параметры.Вставить("fields", "*");
+    
+    Если ЗначениеЗаполнено(Страница) Тогда
+        Параметры.Вставить("pageToken", Страница);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Отбор) И ТипЗнч(Отбор) = Тип("Массив") Тогда     
+        ОтборСтрока = СтрСоединить(Отбор, " and ");
+        Параметры.Вставить("q", ОтборСтрока);       
+    КонецЕсли;
+    
+    Результат = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+        
+    Объекты  = Результат[Files];
+    Страница = Результат[NPT];
+        
+    Для Каждого ТекущийОбъект Из Объекты Цикл
+         МассивОбъектов.Добавить(ТекущийОбъект);
+    КонецЦикла;    
+    
+    Если Объекты.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
+        ПолучитьСписокОбъектовРекурсивно(Заголовки, МассивОбъектов, Подробно, Отбор, Страница); 
+    КонецЕсли;
+          
+КонецПроцедуры
+
+Процедура РазложитьОбъектыПодробно(Знач Токен, МассивОбъектов) 
+       
+    Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
+        
+        МассивФайлов = Новый Массив;
+        ТекущийИД    = ТекущийОбъект["id"];
+        
+        Результат    = ПолучитьСписокФайлов(Токен, , ТекущийИД);
+        
+        Для Каждого Файл Из Результат Цикл
+            МассивФайлов.Добавить(Файл);    
+        КонецЦикла;
+        
+        ТекущийОбъект.Вставить("files", МассивФайлов);
+         
+    КонецЦикла;
+       
+КонецПроцедуры
+
+Процедура СформироватьПараметрыЗагрузкиФайла(Описание)
+    
+    СформированноеОписание = Новый Соответствие;
+    OPI_Инструменты.УдалитьПустыеПоляКоллекции(Описание);
+
+    СоответствиеПолей = Новый Соответствие;
+    СоответствиеПолей.Вставить("MIME"      , "mimeType");
+    СоответствиеПолей.Вставить("Имя"       , "name");
+    СоответствиеПолей.Вставить("Описание"  , "description");
+    СоответствиеПолей.Вставить("Родитель"  , "parents");
+    СоответствиеПолей.Вставить("Расширение", "fileExtension");
+    
+    Для Каждого Элемент Из Описание Цикл
+        
+        Если Элемент.Ключ = "Родитель" Тогда
+            
+            ТекущееЗначение = Новый Массив;
+            ТекущееЗначение.Добавить(Элемент.Значение);
+            
+        Иначе
+            
+            ТекущееЗначение = Элемент.Значение;
+            
+        КонецЕсли;
+        
+        ИмяПоля = СоответствиеПолей.Получить(Элемент.Ключ);
+        СформированноеОписание.Вставить(ИмяПоля, ТекущееЗначение);
+        
+    КонецЦикла;
+    
+    Описание = СформированноеОписание;
+    
+КонецПроцедуры
+
+Функция УправлениеФайлом(Знач Токен, Знач Файл = "", Знач Описание = "", Знач Идентификатор = "") 
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    
+    Если ЗначениеЗаполнено(Описание) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Описание);
+    КонецЕсли;
+    
+    MimeType = "mimeType";
+    
+    Если ЗначениеЗаполнено(Идентификатор) Тогда
+        MIME = ПолучитьИнформациюОбОбъекте(Токен, Идентификатор)[MimeType];
+    Иначе
+        MIME = Описание["MIME"];
+    КонецЕсли;    
+    
+    Если Не ЗначениеЗаполнено(Описание) Тогда
+        Описание = Новый Соответствие;
+    КонецЕсли;
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    СформироватьПараметрыЗагрузкиФайла(Описание);
+    ОписаниеJSON  = OPI_Инструменты.JSONСтрокой(Описание);
+    
+    СоответствиеФайла = Новый Соответствие;
+    
+    Если ЗначениеЗаполнено(Файл) Тогда
+        
+        РазмерЧасти = 268435457;      
+        Размер      = OPI_Инструменты.ПреобразоватьДанныеСПолучениемРазмера(Файл, РазмерЧасти);
+   
+        СоответствиеФайла.Вставить(Файл, MIME);
+        
+        Если Размер < РазмерЧасти И ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
+            Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор);
+        Иначе
+            Ответ = ЗагрузитьБольшойФайл(Описание, СоответствиеФайла, Заголовки, Идентификатор);
+        КонецЕсли;
+        
+    Иначе
+       Ответ = ЗагрузитьМалыйФайл(ОписаниеJSON, СоответствиеФайла, Заголовки, Идентификатор); 
+    КонецЕсли;
+         
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ЗагрузитьМалыйФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
+    
+    URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
+    
+    Если ЗначениеЗаполнено(Идентификатор) Тогда
+        URL   = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
+        Ответ = OPI_Инструменты.PatchMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
+    Иначе
+        Ответ = OPI_Инструменты.PostMultipartRelated(URL, Описание, СоответствиеФайла, Заголовки);
+    КонецЕсли;
+
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ЗагрузитьБольшойФайл(Знач Описание, Знач СоответствиеФайла, Знач Заголовки, Знач Идентификатор = "")
+    
+    Для Каждого Файл Из СоответствиеФайла Цикл
+        Двоичные = Файл.Ключ;
+        Прервать;
+    КонецЦикла;
+    
+    URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
+    
+    Если ЗначениеЗаполнено(Идентификатор) Тогда
+        URL   = СтрЗаменить(URL, "/files", "/files/" + Идентификатор);
+        Ответ = OPI_Инструменты.Patch(URL, Описание, Заголовки, Истина, Истина);
+    Иначе
+        Ответ = OPI_Инструменты.Post(URL, Описание, Заголовки, Истина, Истина);
+    КонецЕсли;
+         
+    АдресЗагрузки = Ответ.Заголовки["Location"];
+    
+    Если Не ЗначениеЗаполнено(АдресЗагрузки) Тогда
+        OPI_Инструменты.ОбработатьОтвет(Ответ);
+        Возврат Ответ;
+    КонецЕсли;
+       
+	ОтветЗагрузки = ЗагрузитьФайлЧастями(Двоичные, АдресЗагрузки);
+	Ответ         = ?(ЗначениеЗаполнено(ОтветЗагрузки), ОтветЗагрузки, Ответ);
+    
+    OPI_Инструменты.ОбработатьОтвет(Ответ);
+    Возврат Ответ;
+   
+КонецФункции
+
+Функция ЗагрузитьФайлЧастями(Знач Двоичные, Знач АдресЗагрузки)
+	
+	Ответ            = "";
+	РазмерЧасти      = 268435456;
+	ПрочитаноБайт    = 0;
+    ТекущаяПозиция   = 0;
+    ОбщийРазмер      = Двоичные.Размер();
+    СтрОбщийРазмер   = OPI_Инструменты.ЧислоВСтроку(ОбщийРазмер);
+    ЧтениеДанных     = Новый ЧтениеДанных(Двоичные);
+    ИсходныйПоток    = ЧтениеДанных.ИсходныйПоток();
+    
+    Пока ПрочитаноБайт < ОбщийРазмер Цикл
+            
+        ПрочитаноБайт    = ИсходныйПоток.ТекущаяПозиция();
+        Результат        = ЧтениеДанных.Прочитать(РазмерЧасти);
+        ТекущиеДанные    = Результат.ПолучитьДвоичныеДанные();
+        РазмерТекущих    = ТекущиеДанные.Размер();
+        СледующаяПозиция = ТекущаяПозиция + РазмерТекущих - 1; 
+        
+        Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
+            Прервать;
+        КонецЕсли;
+        
+        ЗаголовокПотока = "bytes "
+            + OPI_Инструменты.ЧислоВСтроку(ТекущаяПозиция)
+            + "-" 
+            + OPI_Инструменты.ЧислоВСтроку(СледующаяПозиция) 
+            + "/" 
+            + СтрОбщийРазмер;
+            
+        ДопЗаголовки     = Новый Соответствие;
+        ДопЗаголовки.Вставить("Content-Length", OPI_Инструменты.ЧислоВСтроку(РазмерТекущих));
+        ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока); 
+        ДопЗаголовки.Вставить("Content-Type"  , "application/octet-stream");
+        
+        Ответ = OPI_Инструменты.Put(АдресЗагрузки, ТекущиеДанные, ДопЗаголовки, Ложь, Истина);
+        
+		РезультатПроверки = ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция);
+		
+		Если ЗначениеЗаполнено(РезультатПроверки) Тогда
+			Возврат РезультатПроверки;
+		КонецЕсли;
+        
+        // !OInt КБайт = 1024;
+        // !OInt МБайт = КБайт * КБайт;
+		// !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
+        
+        // !OInt ВыполнитьСборкуМусора();
+        // !OInt ОсвободитьОбъект(ТекущиеДанные);
+        
+    КонецЦикла;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ПроверитьЗагрузкуЧасти(Ответ, СтрОбщийРазмер, ДопЗаголовки, АдресЗагрузки, ТекущаяПозиция)
+	
+    НачалоКодовОшибок = 400;
+    КонецКодовПадений = 600;
+    НачалоКодовУспеха = 200;
+    КонецКодовУспеха  = 300;
+    Перенаправление   = 308;
+    
+    Если Ответ.КодСостояния >= НачалоКодовОшибок И Ответ.КодСостояния < КонецКодовПадений Тогда
+         
+        ЗаголовокПотока = "bytes */" + СтрОбщийРазмер;
+        ДопЗаголовки.Вставить("Content-Range" , ЗаголовокПотока);
+        
+        ОтветПроверки = OPI_Инструменты.Put(АдресЗагрузки, "", ДопЗаголовки, Ложь, Истина);
+        
+        Если ОтветПроверки.КодСостояния >= НачалоКодовУспеха И ОтветПроверки.КодСостояния < КонецКодовУспеха Тогда
+        	
+            OPI_Инструменты.ОбработатьОтвет(ОтветПроверки);
+            Возврат ОтветПроверки;
+            
+        ИначеЕсли ОтветПроверки.КодСостояния = Перенаправление Тогда
+        	
+            ЗагруженныеДанные = Ответ.Заголовки["Range"];
+            
+        Иначе
+        	
+            OPI_Инструменты.ОбработатьОтвет(Ответ);
+        	Возврат Ответ;
+        	
+        КонецЕсли;
+        
+    Иначе
+        ЗагруженныеДанные = Ответ.Заголовки["Range"];
+    КонецЕсли;
+        
+    Если Не ЗначениеЗаполнено(ЗагруженныеДанные) Тогда
+        OPI_Инструменты.ОбработатьОтвет(Ответ);
+        Возврат Ответ;
+    КонецЕсли;
+    
+    ЗагруженныеДанные = СтрЗаменить(ЗагруженныеДанные, "bytes=", "");
+    МассивИнформации  = СтрРазделить(ЗагруженныеДанные, "-", Ложь);
+    НеобходимоЧастей  = 2;
+    
+    Если Не МассивИнформации.Количество() = НеобходимоЧастей Тогда
+    	OPI_Инструменты.ОбработатьОтвет(Ответ);
+        Возврат Ответ;
+    КонецЕсли;
+    
+    ТекущаяПозиция = Число(МассивИнформации[1]) + 1;
+    
+    Возврат "";
+        
+КонецФункции
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_GoogleDrive/OPI_GoogleDrive.mdo b/en/OPI/src/CommonModules/OPI_GoogleDrive/OPI_GoogleDrive.mdo
new file mode 100644
index 0000000000..696a3a5326
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleDrive/OPI_GoogleDrive.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3bf39c90-a263-4300-b800-7fd85f7c6d40">
+  <name>OPI_GoogleDrive</name>
+  <synonym>
+    <key></key>
+    <value>OPI google drive</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl b/en/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl
new file mode 100644
index 0000000000..966de01568
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl
@@ -0,0 +1,409 @@
+// Расположение OS: ./OInt/core/Modules/OPI_GoogleSheets.os
+// Библиотека: Google Sheets
+// Команда CLI: gsheets
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСКнигами
+
+// Создать книгу
+// Создает новую книгу
+// 
+// Параметры:
+//  Токен            - Строка           - Токен                                           - token
+//  Наименование     - Строка           - Наименование                                    - title
+//  МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://sheets.googleapis.com/v4/spreadsheets";
+   
+    Свойства  = Новый Структура("title" , Наименование);
+    Листы     = Новый Массив;
+    
+    ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
+    OPI_Инструменты.ДобавитьПоле("sheets"    , Листы   , "Коллекция", Параметры);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить книгу
+// Получает информацию о книге по ID
+// 
+// Параметры:
+//  Токен         - Строка - Токен               - token
+//  Идентификатор - Строка - Идентификатор книги - spreadsheet
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); 
+    
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
+    
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить наименование книги
+// Изменяет наименование существующей книги
+// 
+// Параметры:
+//  Токен        - Строка - Токен              - token
+//  Книга        - Строка - ID книги           - spreadsheet
+//  Наименование - Строка - Новое наименование - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    
+    Заголовки    = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL          = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
+    
+    Изменение       = Новый Структура("title", Наименование);
+    ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
+    Запрос          = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
+    
+    МассивЗапросов  = Новый Массив;
+    МассивЗапросов.Добавить(Запрос);
+    
+    Параметры = Новый Структура("requests", МассивЗапросов);
+        
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСЛистами
+
+// Добавить лист
+// Добавляет новый лист в книгу
+// 
+// 
+// Параметры:
+//  Токен        - Строка - Токен                     - token
+//  Книга        - Строка - Идентификатор книги       - spreadsheet
+//  Наименование - Строка - Наименование нового листа - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+        
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
+    Лист      = СоздатьЛист(Наименование);
+    
+    Запросы   = Новый Массив;
+    Изменение = Новый Структура("addSheet", Лист);
+    Запросы.Добавить(Изменение);
+    
+    Параметры = Новый Структура("requests", Запросы);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить лист
+// Удаляет лист из книги
+// 
+// Параметры:
+//  Токен   - Строка - Токен                          - token
+//  Книга   - Строка - Идентификатор книги            - spreadsheet
+//  Лист    - Строка - Идентификатор удаляемого листа - sheet
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
+        
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
+    
+    Запросы   = Новый Массив;
+    Лист      = Новый Структура("sheetId"    , Лист);
+    Изменение = Новый Структура("deleteSheet", Лист);
+    Запросы.Добавить(Изменение);
+    
+    Параметры = Новый Структура("requests", Запросы);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Копировать лист
+// Копирует лист из одной книги в другую
+// 
+// Параметры:
+//  Токен  - Строка - Токен - token
+//  Откуда - Строка - ID книги источника   - from
+//  Куда   - Строка - ID книги приемника   - to
+//  Лист   - Строка - ID копируемого листа - sheet
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
+        
+    Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL       = "https://sheets.googleapis.com/v4/spreadsheets/"
+        + Откуда
+        + "/sheets/"
+        + Лист
+        + ":copyTo";
+    
+    Параметры = Новый Структура("destinationSpreadsheetId", Куда);  
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+   
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСДанными
+
+// Установить значения ячеек
+// Устанавливает значения ячеек листа
+// 
+// Параметры:
+//  Токен                - Строка                        - Токен    - token
+//  Книга                - Строка                        - ID книги - spreadsheet 
+//  СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1   - data
+//  Лист                 - Строка                        - Имя листа (первый лист по умолчанию) - sheetname
+//  ОсновноеИзмерение    - Строка                        - Основное измерение при заполнении диапазона массивом - dim
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция УстановитьЗначенияЯчеек(Знач Токен
+    , Знач Книга
+    , Знач СоответствиеЗначений
+    , Знач Лист = ""
+    , Знач ОсновноеИзмерение = "COLUMNS") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
+    
+    Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
+        И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
+        Возврат "Не удалось привести структуру значений к коллекции";
+    КонецЕсли;
+    
+    Заголовки    = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL          = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
+    МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
+
+    Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Очистить ячейки
+// Очищает значение в ячейках
+// 
+// Параметры:
+//  Токен       - Строка           - Токен                                - token
+//  Книга       - Строка           - ID книги                             - spreadsheet
+//  МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки     - cells
+//  Лист        - Строка           - Имя листа (первый лист по умолчанию) - sheetname
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
+    
+    Заголовки    = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL          = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
+    
+    СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
+        
+    Параметры = Новый Структура("ranges", МассивЯчеек);
+    Ответ     = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить значения ячеек
+// Получает значения ячеек таблицы
+// 
+// Параметры:
+//  Токен       - Строка           - Токен                                                              - token
+//  Книга       - Строка           - ID книги                                                           - spreadsheet
+//  МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено)  - cells
+//  Лист        - Строка           - Имя листа (первый лист по умолчанию)                               - sheetname
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
+      
+    Заголовки    = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
+    URL          = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
+  
+    Если ЗначениеЗаполнено(МассивЯчеек) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);  
+        СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
+        
+        Первый = Истина;
+        Для Каждого Ячейка Из МассивЯчеек Цикл
+            Разделитель = ?(Первый, "?", "&");
+            URL         = URL + Разделитель + "ranges=" + Ячейка;
+            Первый      = Ложь;
+        КонецЦикла;
+    Иначе
+        URL = URL + "?ranges='" + Лист + "'";
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
+    
+    Для Каждого ИмяЛиста Из МассивИмен Цикл
+        
+        Лист = СоздатьЛист(ИмяЛиста);
+        МассивЛистов.Добавить(Лист);
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
+    
+    Если ЗначениеЗаполнено(Лист) Тогда
+		Ячейка     = "'" + Лист + "'!" + Ячейка;
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Функция СоздатьЛист(Знач Наименование)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    
+    СвойстваЛиста = Новый Структура("title"     , Наименование);
+    Лист          = Новый Структура("properties", СвойстваЛиста);
+
+    Возврат Лист;
+    
+КонецФункции
+
+Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
+    
+    МассивДанных = Новый Массив;
+    
+    Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
+        
+        ТекущееЗначение = ДанныеЯчейки.Значение;
+        ТекущийКлюч     = ДанныеЯчейки.Ключ;
+        
+        ДобавитьИмяЛиста(ТекущийКлюч, Лист);
+        
+        OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
+        
+        ТекущиеДанные   = Новый Соответствие;
+        ТекущийМассив   = Новый Массив;
+        
+        ТекущийМассив.Добавить(ТекущееЗначение);
+        
+        OPI_Инструменты.ДобавитьПоле("range"         , ТекущийКлюч      , "Строка", ТекущиеДанные);
+        OPI_Инструменты.ДобавитьПоле("values"        , ТекущийМассив    , "Массив", ТекущиеДанные);
+        OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
+        
+        МассивДанных.Добавить(ТекущиеДанные);
+        
+    КонецЦикла;
+    
+    Возврат МассивДанных;
+    
+КонецФункции
+
+Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
+
+   OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); 
+   
+   Для Н = 0 По МассивИмен.ВГраница() Цикл       
+       ДобавитьИмяЛиста(МассивИмен[Н], Лист);
+   КонецЦикла;
+       
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_GoogleSheets/OPI_GoogleSheets.mdo b/en/OPI/src/CommonModules/OPI_GoogleSheets/OPI_GoogleSheets.mdo
new file mode 100644
index 0000000000..c26710fdc3
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleSheets/OPI_GoogleSheets.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3890523a-552f-495c-ae7d-2991df8bb175">
+  <name>OPI_GoogleSheets</name>
+  <synonym>
+    <key></key>
+    <value>OPI google sheets</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_GoogleWorkspace/Module.bsl b/en/OPI/src/CommonModules/OPI_GoogleWorkspace/Module.bsl
new file mode 100644
index 0000000000..44b81bdde2
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleWorkspace/Module.bsl
@@ -0,0 +1,173 @@
+// Расположение OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os
+// Библиотека: Google Workspace
+// Команда CLI: google
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+// Сформировать ссылку получения кода
+// Возвращает URL для авторизации в браузере
+// 
+// Параметры:
+//  ClientID - Строка - Client ID                      - id
+//  Calendar - Булево - разрешение на методы Calendar  - calendar
+//  Drive    - Булево - разрешение на методы Drive     - drive
+//  Sheets   - Булево - разрешение на методы Sheets    - sheets
+// 
+// Возвращаемое значение:
+//  Строка - Ссылка получения кода
+Функция СформироватьСсылкуПолученияКода(Знач ClientID
+    , Знач Calendar = Истина
+    , Знач Drive = Истина
+    , Знач Sheets = Истина) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
+    
+    URL = "https://accounts.google.com/o/oauth2/auth";
+    
+    ПараметрыURL = Новый Структура;
+    ПараметрыURL.Вставить("response_type", "code");
+    ПараметрыURL.Вставить("client_id"    , ClientID);
+    ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
+    ПараметрыURL.Вставить("access_type"  , "offline");
+    ПараметрыURL.Вставить("scope"        , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
+    
+    URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
+    
+    Возврат URL;
+    
+КонецФункции
+
+// Получить токен по коду
+// Получает токен по коду из авторизации в бразуере
+// 
+// Параметры:
+//  ClientID     - Строка - Client ID        - id
+//  ClientSecret - Строка - Client secret    - secret
+//  Code         - Строка - Code из браузера - code
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
+    
+    URL = "https://accounts.google.com/o/oauth2/token";
+           
+    ПараметрыURL = Новый Структура;
+    ПараметрыURL.Вставить("grant_type"   , "authorization_code");
+    ПараметрыURL.Вставить("client_id"    , ClientID);
+    ПараметрыURL.Вставить("client_secret", ClientSecret);
+    ПараметрыURL.Вставить("redirect_uri" , "http://localhost");  
+    ПараметрыURL.Вставить("code"         , Code);
+    
+    Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Обновить токен
+// Обновляет токен по Refresh token
+// 
+// Параметры:
+//  ClientID     - Строка - Client ID     - id
+//  ClientSecret - Строка - Client secret - secret
+//  RefreshToken - Строка - Refresh token - refresh
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
+Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
+    
+    URL = "https://accounts.google.com/o/oauth2/token";
+           
+    ПараметрыURL = Новый Структура;
+    ПараметрыURL.Вставить("grant_type"   , "refresh_token");
+    ПараметрыURL.Вставить("client_id"    , ClientID);
+    ПараметрыURL.Вставить("client_secret", ClientSecret);  
+    ПараметрыURL.Вставить("refresh_token", RefreshToken);
+    
+    Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization", "Bearer " + Токен);
+    
+    Возврат Заголовки;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИфункции
+
+Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
+    
+    МассивРазрешений = Новый Массив;
+    
+    Если Calendar Тогда
+        МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
+    КонецЕсли;
+    
+    Если Drive Тогда
+        МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
+    КонецЕсли;
+    
+    Если Sheets Тогда
+        МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
+    КонецЕсли;
+        
+    Возврат СтрСоединить(МассивРазрешений, " ");
+    
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_GoogleWorkspace/OPI_GoogleWorkspace.mdo b/en/OPI/src/CommonModules/OPI_GoogleWorkspace/OPI_GoogleWorkspace.mdo
new file mode 100644
index 0000000000..45fb1957ce
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_GoogleWorkspace/OPI_GoogleWorkspace.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5bf1867-4c83-4724-91f2-931150325ea0">
+  <name>OPI_GoogleWorkspace</name>
+  <synonym>
+    <key></key>
+    <value>OPI google workspace</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Notion/Module.bsl b/en/OPI/src/CommonModules/OPI_Notion/Module.bsl
new file mode 100644
index 0000000000..85adf32b33
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Notion/Module.bsl
@@ -0,0 +1,889 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Notion.os
+// Библиотека: Notion
+// Команда CLI: notion
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:NumberOfOptionalParams-off
+// BSLLS:UsingServiceTag-off
+
+// @skip-check method-too-many-params
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСоСтраницами
+
+// Создать страницу
+// Создает дочернюю страницу над другой страницей-родителем
+// 
+// Параметры:
+//  Токен     - Строка - Токен                  - token
+//  Родитель  - Строка - ID Родителя            - page
+//  Заголовок - Строка - Заголовок страницы     - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция СоздатьСтраницу(Знач Токен, Знач Родитель, Знач Заголовок) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);   
+    Свойства  = Новый Структура;
+    Параметры = Новый Структура;
+    
+    ДобавитьЗаголовокСтраницы(Заголовок, Свойства);
+    ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры);
+    
+    Параметры.Вставить("properties", Свойства);
+    
+    Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать страницу в базу
+// Создает страницу в базе-родителе
+// 
+// Параметры:
+//  Токен    - Строка                        - Токен                - token 
+//  Родитель - Строка                        - ID родительской базы - base
+//  Данные   - Соответствие Из КлючИЗначение - Соответствие свойств - data
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция СоздатьСтраницуВБазу(Знач Токен, Знач Родитель, Знач Данные) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
+    
+    Заголовки  = СоздатьЗаголовкиЗапроса(Токен);
+    Параметры  = Новый Структура;
+    
+    ДобавитьРодителяСтраницы(Родитель, Истина, Параметры);
+
+    Свойства = ЗаполнитьДанныеПоСхеме(Родитель, Данные, Токен);    
+    Параметры.Вставить("properties", Свойства);
+    
+    Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить страницу
+// Получает информацию о странице по ID
+// 
+// Параметры:
+//  Токен    - Строка - Токен        - token
+//  Страница - Строка - ID страницы  - page 
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ПолучитьСтраницу(Знач Токен, Знач Страница) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Страница);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    ПреобразоватьИД(Страница);  
+    
+    Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Страница, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Изменить свойства страницы.
+// 
+// Параметры:
+//  Токен        - Строка                        - Токен                                   - token
+//  Страница     - Строка                        - ID изменяемой страницы                  - page
+//  Данные       - Соответствие Из КлючИЗначение - Соответствие изменяемых параметров      - data
+//  Иконка       - Строка                        - URL картинки иконки страницы            - icon
+//  Обложка      - Строка                        - URL картинки обложки страницы           - cover
+//  Архивирована - Булево                        - Архивировать страницу или нет (булево)  - archive
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ИзменитьСвойстваСтраницы(Знач Токен
+    , Знач Страница
+    , Знач Данные = ""
+    , Знач Иконка = ""
+    , Знач Обложка = ""
+    , Знач Архивирована = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Страница);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Иконка);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Обложка);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Архивирована);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
+    
+    Заголовки  = СоздатьЗаголовкиЗапроса(Токен);
+    Параметры  = Новый Структура;
+    Files      = "files";
+    
+    Если ЗначениеЗаполнено(Данные) 
+        И (ТипЗнч(Данные) = Тип("Соответствие") Или ТипЗнч(Данные) = Тип("Структура")) Тогда
+        Свойства = ЗаполнитьДанныеПоСхеме(Страница, Данные, Токен, Ложь); 
+    Иначе 
+        Свойства = Новый Соответствие;
+    КонецЕсли;
+        
+    Если ЗначениеЗаполнено(Иконка) Тогда
+        СоответствиеИконки = Новый Соответствие;
+        СоответствиеИконки.Вставить("Icon", Иконка);
+        
+        ОбъектИконка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеИконки);
+        ОбъектИконка = ОбъектИконка[Files][0];
+        ОбъектИконка.Удалить("name");
+        
+        Параметры.Вставить("icon", ОбъектИконка);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Обложка) Тогда
+        СоответствиеОбложки = Новый Соответствие;
+        СоответствиеОбложки.Вставить("Cover", Обложка);
+
+        ОбъектОбложка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеОбложки);
+        ОбъектОбложка = ОбъектОбложка[Files][0];
+        ОбъектОбложка.Удалить("name");
+
+        Параметры.Вставить("cover", ОбъектОбложка);
+    КонецЕсли;
+
+    Параметры.Вставить("properties", Свойства);
+    Параметры.Вставить("archived"  , Архивирована);
+    
+    ПреобразоватьИД(Страница);
+
+    Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/pages/" + Страница, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСБазамиДанных
+
+// Создать базу данных
+// Создает базу данных
+// 
+// Параметры:
+//  Токен     - Строка              - Токен                    - token 
+//  Родитель  - Строка              - ID страницы родителя     - page
+//  Заголовок - Строка              - Заголовок базы данных    - title
+//  Свойства  - Структура Из Строка - Свойства базы данных     - props
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция СоздатьБазуДанных(Знач Токен, Знач Родитель, Знач Заголовок, Знач Свойства = "") Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Свойства);
+    
+    // Пример структуры/соответствия свойств
+    
+    // Имя        : title
+    // Описание   : rich_text
+    // В работе   : checkbox 
+    // Количество : number
+    // Дата       : date
+    // Статус     : Соответствие
+    //               Активный   : green
+    //               Неактивный : red
+    //               Архив      : yellow
+    
+    // Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя
+
+    Если Не ТипЗнч(Свойства) = Тип("Структура") И Не ТипЗнч(Свойства) = Тип("Соответствие") Тогда
+        Свойства = Новый Структура("Наименование", "title");
+    КонецЕсли;
+
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);     
+    Параметры = Новый Структура;
+    
+    ДобавитьРодителяБазы(Родитель, Ложь, Параметры);
+    ДобавитьЗаголовокБазы(Заголовок, Параметры);
+    ДобавитьСвойстваБазы(Свойства, Параметры);
+
+    Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/databases", Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить базу данных
+// Получить данные о базе данных
+// 
+// Параметры:
+//  Токен - Строка - Токен          - token
+//  База  - Строка - ID базы данных - base
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ПолучитьБазуДанных(Знач Токен, Знач База) Экспорт
+   
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    ПреобразоватьИД(База);  
+    
+    Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/databases/" + База, , Заголовки);
+    
+    Возврат Ответ; 
+    
+КонецФункции
+
+// Изменить свойства базы
+// Изменяет свойства существующей базы
+// 
+// Параметры:
+//  Токен     - Строка                        - Токен                                     - token
+//  База      - Строка                        - ID целевой базы                           - base
+//  Свойства  - Соответствие из КлючИЗначение - Новые или изменяемые свойства базы данных - props
+//  Заголовок - Строка                        - Новый заголовок базы                      - title
+//  Описание  - Строка                        - Новое описание базы                       - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ИзменитьСвойстваБазы(Знач Токен, Знач База, Знач Свойства = "", Знач Заголовок = "", Знач Описание = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Свойства);
+    
+    Параметры = Новый Структура;
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);  
+    ПреобразоватьИД(База); 
+    
+    Если ЗначениеЗаполнено(Заголовок) Тогда
+        ДобавитьЗаголовокБазы(Заголовок, Параметры);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Описание) Тогда
+        ДобавитьОписаниеБазы(Описание, Параметры);
+    КонецЕсли;
+    
+    Если ТипЗнч(Свойства) = Тип("Структура") Или ТипЗнч(Свойства) = Тип("Соответствие") Тогда
+        ДобавитьСвойстваБазы(Свойства, Параметры);
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/databases/" + База, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти 
+
+#Область РаботаСБлоками
+
+// Создать блок
+// Создает новый блок на основе существующего блока
+// 
+// Параметры:
+//  Токен         - Строка                               - Токен                                              - token
+//  Родитель      - Строка                               - ID родительского блока или страницы                - page
+//  Блок          - Строка,Соответствие Из КлючИЗначение - ID блока или сам блок образец                      - block
+//  ВставитьПосле - Строка                               - ID блока, после которого необходимо встаивть новый - prev
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция СоздатьБлок(Знач Токен, Знач Родитель, Знач Блок, Знач ВставитьПосле = "") Экспорт
+  
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Родитель);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ВставитьПосле);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блок);
+    
+    Если ТипЗнч(Блок) = Тип("Массив") Тогда
+        Блок = Блок[0];
+    КонецЕсли;
+    
+    Заголовки    = СоздатьЗаголовкиЗапроса(Токен); 
+    ПреобразоватьИД(Родитель);
+    
+    Если ТипЗнч(Блок) = Тип("Строка") Тогда
+        ПреобразоватьИД(Блок);
+        Блок = ВернутьБлок(Токен, Блок);
+    КонецЕсли;
+    
+    МассивБлоков = Новый Массив;
+    МассивБлоков.Добавить(Блок);
+    
+    Параметры = Новый Соответствие;
+    Параметры.Вставить("children", МассивБлоков);
+    
+    Если ЗначениеЗаполнено(ВставитьПосле) Тогда
+        Параметры.Вставить("after", ВставитьПосле);
+    КонецЕсли;
+    
+    URL   = "https://api.notion.com/v1/blocks/" + Родитель + "/children";
+    Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+       
+КонецФункции
+
+// Вернуть блок.
+// 
+// Параметры:
+//  Токен        - Строка - Токен                                                         - token
+//  ИДБлока      - Строка - ID блока                                                      - block
+//  ТолькоОснова - Булево - Истина > служебные поля удаляются, остается только сам блок   - core
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ВернутьБлок(Знач Токен, Знач ИДБлока, Знач ТолькоОснова = Истина) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоОснова);
+    
+    ПреобразоватьИД(ИДБлока);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
+    
+    Если ТолькоОснова Тогда
+        УдалитьЛишниеПоляБлока(Ответ);    
+    КонецЕсли;
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+// Вернуть дочерние блоки
+// Созвращает список дочерних блоков блока-родителя
+// 
+// Параметры:
+//  Токен   - Строка - Токен             - token
+//  ИДБлока - Строка - ID блока родителя - block
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ВернутьДочерниеБлоки(Знач Токен, Знач ИДБлока) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
+    
+    ПреобразоватьИД(ИДБлока);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока + "/children", , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить блок
+// Удаляет блок по ID
+// 
+// Параметры:
+//  Токен   - Строка - Токен    - token
+//  ИДБлока - Строка - ID блока - block
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция УдалитьБлок(Знач Токен, Знач ИДБлока) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДБлока);
+    
+    ПреобразоватьИД(ИДБлока);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Delete("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+    
+#КонецОбласти
+
+#Область Пользователи
+
+// Список пользователей
+// Возвращает список пользователей рабочего пространства
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция СписокПользователей(Знач Токен) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Get("https://api.notion.com/v1/users", , Заголовки);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+// Получить данные пользователя
+// Получает данные пользователя по ID
+// 
+// Параметры:
+//  Токен          - Строка - Токен                     - token
+//  ИДПользователя - Строка - ID целевого пользователя  - user
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Notion
+Функция ПолучитьДанныеПользователя(Знач Токен, Знач ИДПользователя) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДПользователя);
+    
+    ПреобразоватьИД(ИДПользователя);
+    
+    Заголовки = СоздатьЗаголовкиЗапроса(Токен);
+    Ответ     = OPI_Инструменты.Get("https://api.notion.com/v1/users/" + ИДПользователя, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция СоздатьЗаголовкиЗапроса(Знач Токен)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization" , "Bearer " + Токен);
+    Заголовки.Вставить("Notion-Version", "2022-06-28");
+    
+    Возврат Заголовки;
+        
+КонецФункции
+
+Процедура ПреобразоватьИД(Идентификатор)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
+    
+    Идентификатор = СтрЗаменить(Идентификатор, "-", "");
+    
+КонецПроцедуры
+
+Процедура ДобавитьРодителяСтраницы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
+  
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(РодительБаза);
+    
+    ПреобразоватьИД(Родитель);
+  
+    ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
+    СтруктураРодителя  = Новый Структура(ПолеИдентификатора, Родитель);
+
+    ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
+     
+КонецПроцедуры
+
+Процедура ДобавитьРодителяБазы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
+  
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(РодительБаза);
+    
+    ПреобразоватьИД(Родитель);
+  
+    ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
+    
+    СтруктураРодителя  = Новый Структура();
+    СтруктураРодителя.Вставить("type"            , ПолеИдентификатора);
+    СтруктураРодителя.Вставить(ПолеИдентификатора, Родитель);
+
+    ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
+     
+КонецПроцедуры
+
+Процедура ДобавитьЗаголовокСтраницы(Знач Заголовок, ОсновнаяСтруктура) 
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    
+    ПодчиненнаяСтруктура = Новый Структура;
+    СтруктураДанных      = Новый Структура;
+    СтруктураТекста      = Новый Структура;
+    МассивДанных         = Новый Массив;
+    Title                = "title";
+    
+    СтруктураТекста.Вставить("content", Заголовок);
+    СтруктураТекста.Вставить("link"   , Неопределено);
+   
+    СтруктураДанных.Вставить("text", СтруктураТекста);
+    СтруктураДанных.Вставить("type", "text");
+    
+    МассивДанных.Добавить(СтруктураДанных);
+    
+    ПодчиненнаяСтруктура.Вставить("id"   , Title);
+    ПодчиненнаяСтруктура.Вставить("type" , Title);
+    ПодчиненнаяСтруктура.Вставить(Title  , МассивДанных);
+    
+    ОсновнаяСтруктура.Вставить(Title, ПодчиненнаяСтруктура);
+    
+КонецПроцедуры
+
+Процедура ДобавитьЗаголовокБазы(Знач Заголовок, ОсновнаяСтруктура)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    
+    Заголовок = ПреобразоватьЗаголовок(Заголовок);    
+    ОсновнаяСтруктура.Вставить("title", Заголовок["title"]);
+    
+КонецПроцедуры
+
+Процедура ДобавитьОписаниеБазы(Знач Описание, ОсновнаяСтруктура)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
+    
+    Заголовок = ПреобразоватьЗаголовок(Описание);    
+    ОсновнаяСтруктура.Вставить("description", Заголовок["title"]);
+    
+КонецПроцедуры
+
+Процедура ДобавитьСвойстваБазы(Знач Свойства, ОсновнаяСтруктура)
+    
+    Если Свойства.Количество() = 0 Тогда
+       ОсновнаяСтруктура.Вставить("properties", Новый Структура);
+       Возврат;      
+    КонецЕсли;
+    
+    СоответствиеПараметров = Новый Соответствие;
+    
+    Для Каждого Свойство Из Свойства Цикл
+        
+        Если ТипЗнч(Свойство.Значение) = Тип("Строка") Тогда
+            
+           СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура(Свойство.Значение, Новый Структура));
+           
+        ИначеЕсли ТипЗнч(Свойство.Значение) = Тип("Структура") 
+            Или ТипЗнч(Свойство.Значение) = Тип("Соответствие") Тогда
+                
+            ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
+            СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения));
+            
+        Иначе
+            
+            СоответствиеПараметров.Вставить(Свойство.Ключ, Свойство.Значение);
+            
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+    ОсновнаяСтруктура.Вставить("properties", СоответствиеПараметров);
+    
+КонецПроцедуры
+
+Функция СформироватьЗначенияВыбора(Знач СтруктураВариантов)
+    
+    МассивВариантов = Новый Массив;
+    
+    Для Каждого Вариант Из СтруктураВариантов Цикл
+        
+        СоответствиеВарианта = Новый Соответствие;
+        СоответствиеВарианта.Вставить("name" , Вариант.Ключ);
+        СоответствиеВарианта.Вставить("color", Вариант.Значение);
+        
+        МассивВариантов.Добавить(СоответствиеВарианта);
+                
+    КонецЦикла;
+    
+    Возврат Новый Структура("options", МассивВариантов);
+        
+КонецФункции
+
+Функция ЗаполнитьДанныеПоСхеме(Знач Схема, Знач Данные, Знач Токен, Знач ЭтоБаза = Истина)
+    
+    Если ЭтоБаза Тогда
+        ДанныеСхемы = ПолучитьБазуДанных(Токен, Схема);
+    Иначе
+        ДанныеСхемы = ПолучитьСтраницу(Токен, Схема);    
+    КонецЕсли;
+    
+    ПоляБазы   = ДанныеСхемы["properties"];
+    Свойства   = Новый Соответствие;
+    
+    Если ЗначениеЗаполнено(ПоляБазы) Тогда
+        
+        Для Каждого Поле Из ПоляБазы Цикл
+            
+            ДанныеПоля = Поле.Значение;
+            ТипПоля    = ДанныеПоля["type"];
+            
+            ЗаполняемыеДанные = Данные.Получить(Поле.Ключ);
+            
+            Если ЗаполняемыеДанные = Неопределено Тогда
+                Продолжить;
+            КонецЕсли;
+            
+            ПреобразованныеДанные = ПреобразоватьЗначениеПоТипу(ТипПоля, ЗаполняемыеДанные);
+            
+            Если ПреобразованныеДанные = Неопределено Тогда
+                Продолжить;
+            КонецЕсли;
+            
+            Свойства.Вставить(ДанныеПоля["id"], ПреобразованныеДанные); 
+            
+        КонецЦикла;
+        
+    КонецЕсли;
+
+    Возврат Свойства;
+
+КонецФункции
+
+Процедура УдалитьЛишниеПоляБлока(Знач Блок)
+    
+    МассивЛишних = Новый Массив;
+    МассивЛишних.Добавить("request_id");
+    МассивЛишних.Добавить("archived");
+    МассивЛишних.Добавить("created_by");
+    МассивЛишних.Добавить("last_edited_time");
+    МассивЛишних.Добавить("created_time");
+    МассивЛишних.Добавить("has_children");
+    МассивЛишних.Добавить("parrent");
+    МассивЛишних.Добавить("last_edited_by");
+    МассивЛишних.Добавить("id");
+    
+    Для Каждого Поле Из МассивЛишних Цикл
+        
+        Если Не Блок.Получить(Поле) = Неопределено Тогда
+            Блок.Удалить(Поле);
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+КонецПроцедуры
+
+#Область ПреобразованиеТипов
+
+Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
+    
+    Если Тип = "title" Тогда
+        Возврат ПреобразоватьЗаголовок(Значение);
+    ИначеЕсли Тип = "rich_text" Тогда
+        Возврат ПреобразоватьТекст(Значение);
+    ИначеЕсли Тип = "number" Тогда
+        Возврат ПреобразоватьЧисло(Значение);
+    ИначеЕсли Тип = "select" Тогда
+        Возврат ПреобразоватьВариантВыбора(Значение);
+    ИначеЕсли Тип = "multi_select" Тогда
+        Возврат ПреобразоватьМножественныйВыбор(Значение);
+    ИначеЕсли Тип = "status" Тогда
+        Возврат ПреобразоватьСтатус(Значение);
+    ИначеЕсли Тип = "date" Тогда
+        Возврат ПреобразоватьДату(Значение);
+    ИначеЕсли Тип = "relation" Тогда
+        Возврат ПреобразоватьСвязь(Значение);
+    ИначеЕсли Тип = "people" Тогда
+        Возврат ПреобразоватьПользователей(Значение);
+    ИначеЕсли Тип = "files" Тогда
+        Возврат ПреобразоватьФайлы(Значение);
+    ИначеЕсли Тип = "checkbox" Тогда
+        Возврат ПреобразоватьБулево(Значение);
+    ИначеЕсли Тип = "url" Тогда
+        Возврат ПреобразоватьСсылку(Значение);
+    ИначеЕсли Тип = "email" Тогда
+        Возврат ПреобразоватьПочту(Значение);
+    ИначеЕсли Тип = "phone_number" Тогда
+        Возврат ПреобразоватьТелефон(Значение);
+    Иначе 
+        Возврат Неопределено;
+    КонецЕсли;
+    
+КонецФункции
+
+Функция ПреобразоватьЗаголовок(Знач Заголовок) 
+    
+    СтруктураДанных      = Новый Структура;
+    СтруктураТекста      = Новый Структура;
+    МассивДанных         = Новый Массив;
+    
+    СтруктураТекста.Вставить("content", Заголовок);
+    СтруктураТекста.Вставить("link"   , Неопределено);
+    
+    СтруктураДанных.Вставить("type", "text");
+    СтруктураДанных.Вставить("text", СтруктураТекста);
+       
+    МассивДанных.Добавить(СтруктураДанных);
+
+    Возврат Новый Структура("title", МассивДанных);
+    
+КонецФункции
+
+Функция ПреобразоватьТекст(Знач Текст)
+    
+    МассивТекста    = Новый Массив;
+    СтруктураТекста = Новый Структура;
+    
+    СтруктураТекста.Вставить("type", "text");
+    СтруктураТекста.Вставить("text", Новый Структура("content", Текст));
+    
+    МассивТекста.Добавить(СтруктураТекста);
+    
+    Возврат Новый Структура("rich_text", МассивТекста);
+    
+КонецФункции
+
+Функция ПреобразоватьЧисло(Знач Число)
+    Возврат Новый Структура("number", Число);
+КонецФункции
+
+Функция ПреобразоватьВариантВыбора(Знач Вариант)
+    
+    СтруктураВыбора = Новый Структура;
+    СтруктураВыбора.Вставить("select", Новый Структура("name", Вариант));
+    
+    Возврат СтруктураВыбора;
+    
+КонецФункции
+
+Функция ПреобразоватьСтатус(Знач Статус)
+    
+    СтруктураСтатуса = Новый Структура;
+    СтруктураСтатуса.Вставить("status", Новый Структура("name", Статус));
+    
+    Возврат СтруктураСтатуса;
+    
+КонецФункции
+
+Функция ПреобразоватьМножественныйВыбор(Знач МассивВариантов)
+    
+    МассивВариантовВыбора = Новый Массив;
+    
+    Для Каждого Вариант Из МассивВариантов Цикл
+        МассивВариантовВыбора.Добавить(Новый Структура("name", Вариант));
+    КонецЦикла;
+    
+    Возврат Новый Структура("multi_select", МассивВариантовВыбора);
+    
+КонецФункции
+
+Функция ПреобразоватьДату(Знач Дата)
+    
+    СтруктураДаты = Новый Структура;
+    
+    Если Дата = НачалоДня(Дата) Тогда
+        ФорматДаты = "ДФ=yyyy-MM-dd";
+    Иначе
+        ФорматДаты = "ДФ=yyyy-MM-ddThh:mm:ssZ";
+    КонецЕсли;
+    
+    Дата = Формат(Дата, ФорматДаты);
+    СтруктураДаты.Вставить("start", Дата);
+    
+    Возврат Новый Структура("date", СтруктураДаты);
+    
+КонецФункции
+
+Функция ПреобразоватьСвязь(Знач Идентификатор) 
+    
+    МассивСвязи = Новый Массив;
+    МассивСвязи.Добавить(Новый Структура("id", Идентификатор));
+    
+    Возврат Новый Структура("relation", МассивСвязи);
+    
+КонецФункции
+
+Функция ПреобразоватьПользователей(Знач МассивИД)
+    
+    Если Не ТипЗнч(МассивИД) = Тип("Массив") Тогда
+        МассивИД_ = Новый Массив;
+        МассивИД_.Добавить(МассивИД);
+        МассивИД = МассивИД_;
+    КонецЕсли;
+    
+    МассивПользователей = Новый Массив;
+    
+    Для Каждого Идентификатор Из МассивИД Цикл
+        
+        СтруктураПользователя = Новый Структура;
+        СтруктураПользователя.Вставить("object", "user");
+        СтруктураПользователя.Вставить("id"    , Идентификатор);
+        МассивПользователей.Добавить(СтруктураПользователя);
+        
+    КонецЦикла;
+    
+    Возврат Новый Структура("people", МассивПользователей);
+    
+КонецФункции
+
+Функция ПреобразоватьФайлы(Знач СоответствиеФайлов)
+        
+    МассивФайлов = Новый Массив;
+    
+    Для Каждого Файл Из СоответствиеФайлов Цикл
+        
+        СтруктураФайла = Новый Структура;
+        СтруктураФайла.Вставить("type"    , "external");
+        СтруктураФайла.Вставить("name"    , Файл.Ключ);
+        СтруктураФайла.Вставить("external", Новый Структура("url", Файл.Значение));
+        
+        МассивФайлов.Добавить(СтруктураФайла);
+        
+    КонецЦикла;
+
+    Возврат Новый Структура("files", МассивФайлов);
+    
+КонецФункции
+
+Функция ПреобразоватьБулево(Знач Булево)
+    Возврат Новый Структура("checkbox", Булево);
+КонецФункции
+
+Функция ПреобразоватьСсылку(Знач URL)
+    Возврат Новый Структура("url", URL);
+КонецФункции
+
+Функция ПреобразоватьПочту(Знач Почта)
+    Возврат Новый Структура("email", Почта);
+КонецФункции
+
+Функция ПреобразоватьТелефон(Знач Телефон)
+    Возврат Новый Структура("phone_number", Телефон);
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_Notion/OPI_Notion.mdo b/en/OPI/src/CommonModules/OPI_Notion/OPI_Notion.mdo
new file mode 100644
index 0000000000..2af4fd559d
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Notion/OPI_Notion.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1bef723b-a2a4-4547-b29f-63cf9c78d813">
+  <name>OPI_Notion</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы работы с Notion (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Slack/Module.bsl b/en/OPI/src/CommonModules/OPI_Slack/Module.bsl
new file mode 100644
index 0000000000..46d6ffc006
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Slack/Module.bsl
@@ -0,0 +1,1055 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Slack.os
+// Библиотека: Slack
+// Команда CLI: slack
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:Typo-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область УправлениеИНастройки
+
+// Получить информацию о боте
+// Получает основную информацию о боте
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack 
+Функция ПолучитьИнформациюОБоте(Знач Токен) Экспорт
+    
+    URL       = "https://slack.com/api/auth.test";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Ответ = OPI_Инструменты.Get(URL, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список рабочих областей
+// Получает список рабочих областей, в которых подключен бот
+// 
+// Параметры:
+//  Токен  - Строка - Токен бота                                                    - token
+//  Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокРабочихОбластей(Знач Токен, Знач Курсор = "") Экспорт
+    
+    URL   = "https://slack.com/api/auth.teams.list";
+    Ответ = ПолучениеОбщихДанных(Токен, URL, Курсор);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список пользователей
+// Получает список пользователей рабочей области
+// 
+// Параметры:
+//  Токен  - Строка - Токен бота                                                    - token
+//  Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокПользователей(Знач Токен, Знач Курсор = "") Экспорт
+    
+    URL   = "https://slack.com/api/users.list";
+    Ответ = ПолучениеОбщихДанных(Токен, URL, Курсор);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаССообщениями
+
+// Отправить сообщение
+// Отправляет сообщение в выбранный час
+// 
+// Параметры:
+//  Токен        - Строка - Токен бота                              - token
+//  Канал        - Строка - Идентификатор канала                    - channel
+//  Текст        - Строка - Текст сообщения                         - text
+//  ДатаОтправки - Дата   - Дата отправки для отложенного сообщения - date 
+//  Блоки        - Массив Из Структура - Массив описаний блоков     - blocks - JSON массива описаний блоков
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ОтправитьСообщение(Знач Токен, Знач Канал, Знач Текст = "", Знач ДатаОтправки = "", Знач Блоки = "") Экспорт
+      
+    Строка_   = "Строка";
+    ЕстьДата  = ЗначениеЗаполнено(ДатаОтправки); 
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Если ЗначениеЗаполнено(Блоки) И ТипЗнч(Блоки) = Тип(Строка_) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блоки);
+        
+        Если ТипЗнч(Блоки) = Тип("Массив") Тогда
+            
+            Для Н = 0 По Блоки.ВГраница() Цикл
+                OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блоки[Н]);                    
+            КонецЦикла;
+            
+        КонецЕсли;
+
+    КонецЕсли;
+        
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал, Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("text"   , Текст, Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("blocks" , Блоки, "Массив"   , Параметры);
+
+    Если ЕстьДата Тогда
+        
+        URL      = "https://slack.com/api/chat.scheduleMessage";
+        OPI_Инструменты.ДобавитьПоле("post_at", ДатаОтправки, "Дата", Параметры); 
+        
+    Иначе
+        
+        URL = "https://slack.com/api/chat.postMessage";
+        
+    КонецЕсли;
+          
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Отправить эфемерное сообщение
+// Отправляет сообщение, которое приходит в канал, но видно 
+// только конкретному пользователю
+// 
+// Параметры:
+//  Токен        - Строка - Токен бота                              - token
+//  Канал        - Строка - Идентификатор канала                    - channel
+//  Текст        - Строка - Текст сообщения                         - text
+//  Пользователь - Строка - ID пользователя                         - user 
+//  Блоки        - Массив Из Структура - Массив описаний блоков     - blocks - JSON массива описаний блоков
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ОтправитьЭфемерноеСообщение(Знач Токен
+    , Знач Канал
+    , Знач Текст = ""
+    , Знач Пользователь = ""
+    , Знач Блоки = "") Экспорт
+    
+    Строка_ = "Строка";
+    
+    Если ЗначениеЗаполнено(Блоки) И Не ТипЗнч(Блоки) = Тип(Строка_) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьМассив(Блоки);
+    КонецЕсли;
+    
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал       , Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("text"   , Текст       , Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("user"   , Пользователь, Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("blocks" , Блоки       , "Коллекция", Параметры);
+        
+    URL = "https://slack.com/api/chat.postEphemeral";
+        
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Изменить сообщение
+// Изменяет состав существующего сообщения
+// 
+// Параметры:
+//  Токен        - Строка - Токен бота                          - token
+//  Канал        - Строка - Идентификатор канала                - channel
+//  Отметка      - Строка - Временная отметка сообщения         - stamp
+//  Текст        - Строка - Новый текст сообщения               - text
+//  МассивБлоков - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ИзменитьСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач Текст = "", Знач МассивБлоков = "") Экспорт
+    
+    Строка_   = "Строка";
+    URL       = "https://slack.com/api/chat.update";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал       , Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("text"   , Текст       , Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("ts"     , Отметка     , Строка_    , Параметры);
+    OPI_Инструменты.ДобавитьПоле("blocks" , МассивБлоков, "Коллекция", Параметры);
+        
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить сообщение
+// Удаляет сообщение канала по timestamp
+// 
+// Параметры:
+//  Токен         - Строка - Токен бота                             - token
+//  Канал         - Строка - Идентификатор канала                   - channel
+//  Отметка       - Строка - Временная отметка или ID сообщения     - stamp
+//  ЭтоОтложенное - Булево - Признак удаления отложенного сообщения - issheduled
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция УдалитьСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач ЭтоОтложенное = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоОтложенное);
+    
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+        
+    Если ЭтоОтложенное Тогда
+        URL         = "https://slack.com/api/chat.deleteScheduledMessage";
+        ПолеОтметки = "scheduled_message_id";       
+    Иначе
+        URL         = "https://slack.com/api/chat.delete";
+        ПолеОтметки = "ts";
+    КонецЕсли;
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel"  , Канал  , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле(ПолеОтметки, Отметка, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список отложенных сообщений
+// Получает список отложенных сообщений канала
+// 
+// Параметры:
+//  Токен  - Строка - Токен бота                                                    - token
+//  Канал  - Строка - Идентификатор канала                                          - channel
+//  Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокОтложенныхСообщений(Знач Токен, Знач Канал, Знач Курсор = "") Экспорт
+    
+    URL       = "https://slack.com/api/chat.scheduledMessages.list";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+   
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить ссылку на сообщение
+// Получает постоянный UTL к сообщению канала
+// 
+// Параметры:
+//  Токен         - Строка - Токен бота                             - token
+//  Канал         - Строка - Идентификатор канала                   - channel
+//  Отметка       - Строка - Временная отметка или ID сообщения     - stamp
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСсылкуНаСообщение(Знач Токен, Знач Канал, Знач Отметка) Экспорт
+    
+    URL       = "https://slack.com/api/chat.getPermalink";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel"   , Канал  , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_ts", Отметка, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить список ответов на сообщение
+// Получает массив сообщений, которые являются ответом на указанное
+// 
+// Параметры:
+//  Токен         - Строка - Токен бота                                                    - token
+//  Канал         - Строка - Идентификатор канала                                          - channel
+//  Отметка       - Строка - Временная отметка или ID сообщения                            - stamp
+//  Курсор        - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокОтветовНаСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач Курсор = "") Экспорт
+    
+    Строка_   = "Строка";
+    URL       = "https://slack.com/api/conversations.replies";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+   
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал  , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("cursor" , Курсор , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("ts"     , Отметка, Строка_, Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСКаналами
+
+// Получить список каналов
+// Получает список доступных каналов
+// 
+// Параметры:
+//  Токен                   - Строка - Токен бота                                                    - token
+//  ИсключатьАрхивированные - Булево - Признак исключения архивированных каналов                     - notarchived 
+//  Курсор                  - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокКаналов(Знач Токен, Знач ИсключатьАрхивированные = Ложь, Знач Курсор = "") Экспорт
+    
+    URL       = "https://slack.com/api/conversations.list";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("exclude_archived", ИсключатьАрхивированные, "Булево", Параметры);
+    OPI_Инструменты.ДобавитьПоле("cursor"          , Курсор                 , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить список пользователей канала
+// Получает список пользователей указанного канала
+// 
+// Параметры:
+//  Токен         - Строка - Токен бота                                                    - token
+//  Канал         - Строка - Идентификатор канала                                          - channel
+//  Курсор        - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокПользователейКанала(Знач Токен, Знач Канал, Знач Курсор = "") Экспорт
+    
+    URL       = "https://slack.com/api/conversations.members";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Создать канал
+// Создает новый канал
+// 
+// Параметры:
+//  Токен     - Строка - Токен бота              - token
+//  Название  - Строка - Наименование канала     - title
+//  Приватный - Булево - Создать канал приватным - private
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция СоздатьКанал(Знач Токен, Знач Название, Знач Приватный = Ложь) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.create";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("name"      , Название , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("is_private", Приватный, "Булево", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Архивировать канал
+// Архивирует активный канал
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+//  Канал - Строка - ID канала  - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция АрхивироватьКанал(Знач Токен, Знач Канал) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.archive";
+    Ответ = УправлениеДиалогом(Токен, Канал, URL);
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить канал
+// Получает информацию о канале
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+//  Канал - Строка - ID канала  - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьКанал(Знач Токен, Знач Канал) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.info";
+    Ответ = УправлениеДиалогом(Токен, Канал, URL, "GET");
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить историю канала
+// Получает информацию событиях канала
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+//  Канал - Строка - ID канала  - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьИсториюКанала(Знач Токен, Знач Канал) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.history";
+    Ответ = УправлениеДиалогом(Токен, Канал, URL, "GET");
+    Возврат Ответ;
+
+КонецФункции
+
+// Пригласить пользователей в канал
+// Добавляет указанных пользователей в канал
+// 
+// Параметры:
+//  Токен               - Строка           - Токен бота              - token
+//  Канал               - Строка           - ID канала               - channel
+//  МассивПользователей - Массив Из Строка - Массив ID пользователей - users
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПригласитьПользователейВКанал(Знач Токен, Знач Канал, Знач МассивПользователей) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.invite";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПользователей);
+    МассивПользователей = СтрСоединить(МассивПользователей, ",");
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал              , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("users"  , МассивПользователей, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Выгнать пользователя из канала
+// Удаляет указанного пользователя из канала
+// 
+// Параметры:
+//  Токен        - Строка - Токен бота      - token
+//  Канал        - Строка - ID канала       - channel
+//  Пользователь - Строка - ID пользователя - user
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ВыгнатьПользователяИзКанала(Знач Токен, Знач Канал, Знач Пользователь) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.kick";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+        
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал       , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("user"   , Пользователь, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Вступить в канал
+// Добавляет текущего бота в канал
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+//  Канал - Строка - ID канала  - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ВступитьВКанал(Знач Токен, Знач Канал) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.join";
+    Ответ = УправлениеДиалогом(Токен, Канал, URL);
+    Возврат Ответ;
+
+КонецФункции
+
+// Покинуть канал
+// Удаляет текущего бота из канала
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+//  Канал - Строка - ID канала  - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПокинутьКанал(Знач Токен, Знач Канал) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.leave";
+    Ответ = УправлениеДиалогом(Токен, Канал, URL);
+    Возврат Ответ;
+
+КонецФункции
+
+// Установить тему канала
+// Устанавливает тему канала
+// 
+// Параметры:
+//  Токен - Строка - Токен бота  - token
+//  Канал - Строка - ID канала   - channel
+//  Тема  - Строка - Тема канала - theme
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция УстановитьТемуКанала(Знач Токен, Знач Канал, Знач Тема) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.setTopic";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("topic"  , Тема  , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Установить цель канала
+// Устанавливает цель (описание) канала
+// 
+// Параметры:
+//  Токен - Строка - Токен бота  - token
+//  Канал - Строка - ID канала   - channel
+//  Цель  - Строка - Цель канала - purpose
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция УстановитьЦельКанала(Знач Токен, Знач Канал, Знач Цель) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.setPurpose";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("purpose", Цель  , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Переименовать канал
+// Изменяет название канала
+// 
+// Параметры:
+//  Токен     - Строка - Токен бота            - token
+//  Канал     - Строка - ID канала             - channel
+//  Название  - Строка - Новое название канала - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПереименоватьКанал(Знач Токен, Знач Канал, Знач Название) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.rename";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал   , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("name"   , Название, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСДиалогами
+
+// Открыть диалог
+// Открывает новый диалог с одним или несколькими пользователями
+// 
+// Параметры:
+//  Токен               - Строка           - Токен бота              - token
+//  МассивПользователей - Массив из Строка - Массив ID пользователей - users
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ОткрытьДиалог(Знач Токен, Знач МассивПользователей) Экспорт
+    
+    URL       = "https://slack.com/api/conversations.open";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПользователей);
+    МассивПользователей = СтрСоединить(МассивПользователей, ",");
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("users", МассивПользователей, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Закрыть диалог
+// Закрывает существующий диалог
+// 
+// Параметры:
+//  Токен  - Строка - Токен бота - token
+//  Диалог - Строка - ID диалога - conv
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ЗакрытьДиалог(Знач Токен, Знач Диалог) Экспорт
+    
+    URL   = "https://slack.com/api/conversations.close";
+    Ответ = УправлениеДиалогом(Токен, Диалог, URL);
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСФайлами
+
+// Получить список файлов
+// Получает список файлов бота или канала
+// 
+// Параметры:
+//  Токен          - Строка        - Токен бота       - token
+//  Канал          - Строка        - Канал для отбора - channel 
+//  НомерСтраницы  - Число, Строка - Номер страницы   - page
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокФайлов(Знач Токен, Знач Канал = "", Знач НомерСтраницы = 1) Экспорт
+    
+    URL       = "https://slack.com/api/files.list";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал        , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("page"   , НомерСтраницы, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить файл
+// Загружает файл на сервера Slack
+// 
+// Параметры:
+//  Токен     - Строка                - Токен бота              - token
+//  Файл      - Строка,ДвоичныеДанные - Файл для загрузки       - file
+//  ИмяФайла  - Строка                - Имя файла с расширением - filename
+//  Заголовок - Строка                - Имя файла в Slack       - title
+//  Канал     - Строка                - ID канала               - channel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач ИмяФайла, Знач Заголовок, Знач Канал = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяФайла);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
+    
+    Строка_    = "Строка";
+    Upload_url = "upload_url";
+    File_id    = "file_id";
+    URL        = "https://slack.com/api/files.getUploadURLExternal";
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    Размер     = Файл.Размер();
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("filename", ИмяФайла, Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("length"  , Размер  , Строка_, Параметры);
+
+    Ответ         = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    URL           = Ответ[Upload_url];
+    Идентификатор = Ответ[File_id];
+    
+    Если Не ЗначениеЗаполнено(URL) Или Не ЗначениеЗаполнено(Идентификатор) Тогда
+        Возврат Ответ;
+    КонецЕсли;
+    
+    Файлы = Новый Соответствие;
+    Файлы.Вставить(ИмяФайла, Файл);
+    
+    Ответ     = OPI_Инструменты.PostMultipart(URL, , Файлы, , Заголовки);
+    URL       = "https://slack.com/api/files.completeUploadExternal"; 
+    ФайлСлак  = Новый Структура("id, title", Идентификатор, Заголовок);   
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("filename"  , ИмяФайла, Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("channel_id", Канал   , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("files"     , ФайлСлак, "Массив", Параметры);
+
+    Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить данные файла
+// Получает информацию о файле
+// 
+// Параметры:
+//  Токен              - Строка - Токен бота          - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьДанныеФайла(Знач Токен, Знач ИдентификаторФайла) Экспорт
+    
+    URL   = "https://slack.com/api/files.info";
+    Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL, "GET");
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить файл
+// Удаляет файл на Slack
+// 
+// Параметры:
+//  Токен              - Строка - Токен бота          - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция УдалитьФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
+    
+    URL   = "https://slack.com/api/files.delete";
+    Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
+    
+    Возврат Ответ;
+  
+КонецФункции
+
+// Сделать файл публичным
+// Создает публичный URL для файла. Требует токен пользователя
+// 
+// Параметры:
+//  Токен              - Строка - Токен пользователя  - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция СделатьФайлПубличным(Знач Токен, Знач ИдентификаторФайла) Экспорт
+    
+    URL   = "https://slack.com/api/files.sharedPublicURL";
+    Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
+    
+    Возврат Ответ;
+  
+КонецФункции
+
+// Сделать файл приватным
+// Удаляет публичный URL у файла. Требует токен пользователя
+// 
+// Параметры:
+//  Токен              - Строка - Токен пользователя  - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция СделатьФайлПриватным(Знач Токен, Знач ИдентификаторФайла) Экспорт
+    
+    URL   = "https://slack.com/api/files.revokePublicURL";
+    Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
+    
+    Возврат Ответ;
+  
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСУдаленнымиФайлами
+
+// Получить список внешних файлов
+// Получает список внешних файлов пользователя или канала
+// 
+// Параметры:
+//  Токен  - Строка - Токен бота                                                    - token
+//  Канал  - Строка - Канал для отбора                                              - channel 
+//  Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьСписокВнешнихФайлов(Знач Токен, Знач Канал = "", Знач Курсор = "") Экспорт
+    
+    URL       = "https://slack.com/api/files.remote.list";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить внешний файл
+// Получает информацию о внешнем файле
+// 
+// Параметры:
+//  Токен              - Строка - Токен бота          - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ПолучитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
+  
+    URL   = "https://slack.com/api/files.remote.info";
+    Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL);
+    
+    Возврат Ответ;
+      
+КонецФункции
+
+// Добавить внешний файл
+// Добавляет новый внешний файл
+// 
+// Параметры:
+//  Токен     - Строка - Токен бота                - token
+//  URL       - Строка - URL к внешнему файлу      - url
+//  Заголовок - Строка - Заголовок файла для Slack - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ДобавитьВнешнийФайл(Знач Токен, Знач URL, Знач Заголовок) Экспорт
+    
+    Строка_   = "Строка";
+    URL       = "https://slack.com/api/files.remote.add";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    UID       = Строка(Новый УникальныйИдентификатор());
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("external_url", URL          , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("external_id" , UID          , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("title"       , Заголовок    , Строка_, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Отправить внешний файл
+// Отправляет внейшний файл по списку каналов
+// 
+// Параметры:
+//  Токен              - Строка           - Токен бота                  - token
+//  ИдентификаторФайла - Строка           - Идентификатор файла         - fileid
+//  МассивКаналов      - Массив Из Строка - Массив каналов для отправки - channels
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция ОтправитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла, Знач МассивКаналов) Экспорт
+    
+    URL       = "https://slack.com/api/files.remote.share";
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКаналов);
+    МассивКаналов = СтрСоединить(МассивКаналов, ",");
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("file"    , ИдентификаторФайла , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("channels", МассивКаналов      , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить внешний файл
+// Удаляет внешний файл из Slack
+// 
+// Параметры:
+//  Токен              - Строка - Токен бота          - token
+//  ИдентификаторФайла - Строка - Идентификатор файла - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
+Функция УдалитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
+  
+    URL   = "https://slack.com/api/files.remote.remove";
+    Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL);
+    
+    Возврат Ответ;
+      
+КонецФункции
+
+#КонецОбласти
+
+#Область ФормированиеБлоков
+
+// Сформировать блок картинку
+// Формирует блок с картинкой для добавления в массив блоков сообщения
+// 
+// Параметры:
+//  URL                 - Строка - URL картинки                   - picture
+//  АльтернативныйТекст - Строка - Альтернативный текст картинки  - alt
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение -  Блок картинки
+Функция СформироватьБлокКартинку(Знач URL, Знач АльтернативныйТекст = "") Экспорт
+    
+    Строка_ = "Строка";
+    
+    Блок = Новый Соответствие;
+    OPI_Инструменты.ДобавитьПоле("type"     , "image"              , Строка_, Блок);
+    OPI_Инструменты.ДобавитьПоле("image_url", URL                  , Строка_, Блок);
+    OPI_Инструменты.ДобавитьПоле("alt_text" , АльтернативныйТекст  , Строка_, Блок);
+    
+    Возврат Блок;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьЗаголовокАвторизации(Знач Токен)
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization", "Bearer " + Токен);
+    Возврат Заголовки;
+        
+КонецФункции
+
+Функция УправлениеДиалогом(Знач Токен, Знач Канал, Знач URL, Знач ВидЗапроса = "POST")
+    
+    Заголовки  = ПолучитьЗаголовокАвторизации(Токен);
+    ВидЗапроса = вРег(ВидЗапроса);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("channel", Канал, "Строка", Параметры);
+
+    Если ВидЗапроса = "POST" Тогда
+        Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    Иначе
+        Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    КонецЕсли;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция УправлениеФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL, Знач ВидЗапроса = "POST")
+    
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    ВидЗапроса = вРег(ВидЗапроса);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры);
+
+    Если ВидЗапроса = "POST" Тогда
+        Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
+    Иначе
+        Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    КонецЕсли;
+
+    Возврат Ответ;
+
+КонецФункции
+
+Функция ПолучениеОбщихДанных(Знач Токен, Знач URL, Знач Курсор)
+    
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("cursor", Курсор, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция УправлениеВнешнимФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL)
+    
+    Заголовки = ПолучитьЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_Slack/OPI_Slack.mdo b/en/OPI/src/CommonModules/OPI_Slack/OPI_Slack.mdo
new file mode 100644
index 0000000000..10c2bd2efb
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Slack/OPI_Slack.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="21b89e7a-e792-4a4c-9d01-c630225fe48a">
+  <name>OPI_Slack</name>
+  <synonym>
+    <key>ru</key>
+    <value>Slack</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Telegram/Module.bsl b/en/OPI/src/CommonModules/OPI_Telegram/Module.bsl
new file mode 100644
index 0000000000..8db134d5ac
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Telegram/Module.bsl
@@ -0,0 +1,1253 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Telegram.os
+// Библиотека: Telegram
+// Команда CLI: telegram
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:Typo-off
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UnreachableCode-off
+// BSLLS:CommentedCode-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область ПолучениеДанныхИНастройка
+
+// Получить информацию о боте
+// Выполняет запрос /getMe, возвращающий базовую информацию о боте: имя, id, возможность добавлять бота в группы и т.д.
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ПолучитьИнформациюБота(Знач Токен) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL   = "api.telegram.org/bot" + Токен + "/getMe";
+    Ответ = OPI_Инструменты.Get(URL);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить обновления
+// Выполняет запрос /getUpdates, возвращающий информацию о событиях бота. Используется при работе в polling режиме
+//
+// Параметры:
+//  Токен    - Строка       - Токен бота                             - token
+//  Таймаут  - Строка,Число - Время ожидания новых событий           - timeout
+//  Смещение - Строка,Число - Смещение в списке получаемых сообщений - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ПолучитьОбновления(Знач Токен, Знач Таймаут = 0, Знач Смещение = "") Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL   = "api.telegram.org/bot" + Токен + "/getUpdates";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("timeout", Таймаут , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("offset" , Смещение, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    Возврат Ответ;
+
+КонецФункции
+
+// Установить Webhook
+// Устанавливает URL обработчика событий бота для работы в режиме Webhook 
+//          
+// Параметры:
+//  Токен - Строка - Токен бота                                      - token
+//  URL   - Строка - Адрес обработки запросов от Telegram (с https:) - url
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("url", URL, "Строка", Параметры);
+
+    URL   = "api.telegram.org/bot" + Токен + "/setWebHook";
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить Webhook
+// Удаляет URL обработчика событий бота для работы в режиме Webhook
+// 
+// Параметры:
+//  Токен - Строка - Токен бота - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция УдалитьWebhook(Знач Токен) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL   = "api.telegram.org/bot" + Токен + "/deleteWebHook";
+    Ответ = OPI_Инструменты.Get(URL);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Скачать файл
+// Скачивает файл с серверов Telegram
+// 
+// Параметры:
+//  Токен   - Строка - Токен                   - token
+//  IDФайла - Строка - ID файла для скачивания - fileid
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция СкачатьФайл(Знач Токен, Знач IDФайла) Экспорт
+
+    Result = "result";
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); 
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);    
+            
+    Параметры = Новый Структура("file_id", IDФайла);
+
+    URL   = "api.telegram.org/bot" + Токен + "/getFile";
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Путь = Ответ[Result]["file_path"];
+    
+    Если Не ЗначениеЗаполнено(Путь) Тогда
+        Возврат Ответ;
+    КонецЕсли;
+    
+    URL   = "api.telegram.org/file/bot" + Токен + "/" + Путь;
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Возврат Ответ;   
+    
+КонецФункции
+
+// ОбработатьДанные Telegram Mini App
+// Обрабатывает данные TMA и опредеяет их достоверность
+// 
+// Параметры:
+//  СтрокаДанных - Строка - querry из Telegram.WebApp.initData
+//  Токен        - Строка - Токен бота
+// 
+// Возвращаемое значение:
+//  Соответствие из Строка - Соответствие данных с результатом проверки в поле passed
+Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаДанных);
+    
+    СтрокаДанных    = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
+    СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
+    Ключ            = "WebAppData";
+    Хэш             = "";
+    КлючДвоичные    = ПолучитьДвоичныеДанныеИзСтроки(Ключ);
+
+    Результат = OPI_Криптография.HMACSHA256(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен));
+
+    ТЗнач = Новый ТаблицаЗначений;
+    ТЗнач.Колонки.Добавить("Ключ");
+    ТЗнач.Колонки.Добавить("Значение");
+
+    Для Каждого Данные Из СтруктураДанных Цикл
+
+        НоваяСтрока             = ТЗнач.Добавить();
+        НоваяСтрока.Ключ        = Данные.Ключ;
+        НоваяСтрока.Значение    = Данные.Значение;
+
+    КонецЦикла;
+
+    ТЗнач.Сортировать("Ключ");
+
+    СоответствиеВозврата = Новый Соответствие;
+    DCS                  = "";
+
+    Для Каждого СтрокаТЗ Из ТЗнач Цикл
+
+        Если СтрокаТЗ.Ключ <> "hash" Тогда
+            DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
+            СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
+        Иначе
+            Хэш = СтрокаТЗ.Значение;
+        КонецЕсли;
+
+    КонецЦикла;
+
+    DCS     = Лев(DCS, СтрДлина(DCS) - 1);
+    Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
+
+    Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
+
+    Если Финал = вРег(Хэш) Тогда
+        Ответ = Истина;
+    Иначе
+        Ответ = Ложь;
+    КонецЕсли;
+
+    СоответствиеВозврата.Вставить("passed", Ответ);
+
+    Возврат СоответствиеВозврата;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область ОтправкаДанных
+
+// Отправить текстовое сообщение
+// Отправляет текстовое сообщение в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка       - Токен бота                                        - token
+//  IDЧата     - Строка,Число - ID целевого чата или IDЧата*IDТемы                - chat
+//  Текст      - Строка       - Текст сообщения                                   - text
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка       - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьТекстовоеСообщение(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);    
+    OPI_Инструменты.ЗаменитьСпецСимволы(Текст, Разметка);
+            
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"  , Разметка  , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("text"        , Текст     , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры);
+    
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+    
+    URL   = "api.telegram.org/bot" + Токен + "/sendMessage";
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Отправить картинку
+// Отправляет картинку в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  Картинка   - ДвоичныеДанные,Строка - Файл картинки                             - picture
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьКартинку(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Картинка
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура, Разметка);
+
+КонецФункции
+
+// Отправить видео
+// Отправляет видео в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  Видео      - ДвоичныеДанные,Строка - Файл видео                                - video
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьВидео(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Видео
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура, Разметка);
+
+КонецФункции
+
+// Отправить аудио
+// Отправляет аудиофайл в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  Аудио      - ДвоичныеДанные,Строка - Файл аудио                                - audio
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьАудио(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Аудио
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура, Разметка);
+
+КонецФункции
+
+// Отправить документ
+// Отправляет документ в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  Документ   - ДвоичныеДанные,Строка - Файл документа                            - doc
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьДокумент(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Документ
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура, Разметка);
+
+КонецФункции
+
+// Отправить гифку
+// Отправляет гифку в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  Гифка      - ДвоичныеДанные,Строка - Файл гифки                                - gif
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьГифку(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач Гифка
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+
+    Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура, Разметка);
+
+КонецФункции
+
+// Отправить группу медиафайлов
+// Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Текст      - Строка                - Текст сообщения                           - text
+//  СоответствиеФайлов - Соответствие из Строка - Коллекция файлов  - media - JSON файлов или путь к .json
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+//  Разметка   - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьМедиагруппу(Знач Токен
+	, Знач IDЧата
+	, Знач Текст
+	, Знач СоответствиеФайлов
+	, Знач Клавиатура = ""
+	, Знач Разметка = "Markdown") Экспорт
+    
+    // СоответствиеФайлов
+    // Ключ - Файл, Значение - Тип
+    // Типы: audio, document, photo, video
+    // Нельзя замешивать разные типы!
+
+	Строка_ = "Строка";
+	
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов);
+    
+    OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
+
+    URL             = "api.telegram.org/bot" + Токен + "/sendMediaGroup";
+    СтруктураФайлов = Новый Структура;
+    Медиа           = Новый Массив;
+    Параметры       = Новый Структура;
+    
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+    СформироватьМассивМедиа(СоответствиеФайлов, Текст, СтруктураФайлов, Медиа);
+    
+    OPI_Инструменты.ДобавитьПоле("parse_mode"  , Разметка  , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("caption"     , Текст     , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("media"       , Медиа     , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры);
+
+    Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СтруктураФайлов, "mixed");
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Отправить местоположение
+// Отправляет местоположение по географической широте и долготе в чат или канал
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Широта     - Строка,Число          - Географическая широта                     - lat
+//  Долгота    - Строка,Число          - Географическая долгота                    - long
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьМестоположение(Знач Токен, Знач IDЧата, Знач Широта, Знач Долгота, Знач Клавиатура = "") Экспорт
+
+	Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    
+    URL = "api.telegram.org/bot" + Токен + "/sendLocation";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"  , "Markdown" , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("latitude"    , Широта     , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("longitude"   , Долгота    , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура , "СтрокаФайла", Параметры);
+    
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Отправить контакт
+// Отправляет контакт с именем и номером телефона
+// 
+// Параметры:
+//  Токен      - Строка                - Токен бота                                - token
+//  IDЧата     - Строка,Число          - ID целевого чата или IDЧата*IDТемы        - chat
+//  Имя        - Строка                - Имя контакта                              - name
+//  Фамилия    - Строка                - Фамилия контакта                          - surname
+//  Телефон    - Строка                - Телефон контакта                          - phone
+//  Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьКонтакт(Знач Токен, Знач IDЧата, Знач Имя, Знач Фамилия, Знач Телефон, Знач Клавиатура = "") Экспорт
+
+	Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    
+    URL = "api.telegram.org/bot" + Токен + "/sendContact";
+
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"  , "Markdown", Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("first_name"  , Имя       , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("last_name"   , Фамилия   , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("phone_number", Телефон   , Строка_      , Параметры);
+    OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры);
+    
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Отправить опрос
+// Отправляет опрос с вариантами ответа
+// 
+// Параметры:
+//  Токен         - Строка                - Токен бота                                 - token
+//  IDЧата        - Строка,Число          - ID целевого чата или IDЧата*IDТемы         - chat
+//  Вопрос        - Строка                - Вопрос опроса                              - question
+//  МассивОтветов - Массив из Строка      - Массив вариантов ответа                    - options
+//  Анонимный     - Булево                - Анонимность опроса                         - anonymous
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОтправитьОпрос(Знач Токен, Знач IDЧата, Знач Вопрос, Знач МассивОтветов, Знач Анонимный = Истина) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивОтветов);
+
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Анонимный);
+    
+    URL = "api.telegram.org/bot" + Токен + "/sendPoll";
+
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown"   , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("question"  , Вопрос       , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("options"   , МассивОтветов, "СтрокаФайла", Параметры);
+    
+    Параметры.Вставить("is_anonymous", ?(Анонимный, 1, 0));   
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Переслать сообщение
+// Пересылает сообщение между чатами или в рамках одного чата
+// 
+// Параметры:
+//  Токен         - Строка       - Токен бота                         - token
+//  IDОригинала   - Строка,Число - ID оригинального сообщения         - message
+//  ОткудаID      - Строка,Число - ID чата оригинального сообщения    - from
+//  КудаID        - Строка,Число - ID целевого чата или IDЧата*IDТемы - to
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ПереслатьСообщение(Знач Токен, Знач IDОригинала, Знач ОткудаID, Знач КудаID) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОригинала);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ОткудаID);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(КудаID);
+    
+    URL = "api.telegram.org/bot" + Токен + "/forwardMessage";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("from_chat_id", ОткудаID   , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_id"  , IDОригинала, "Строка", Параметры);
+
+    ДобавитьИдентификаторЧата(КудаID, Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Сформировать клавиатуру по массиву кнопок
+// Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели
+// 
+// Параметры:
+//  МассивКнопок  - Массив из Строка - Массив кнопок                                        - buttons 
+//  ПодСообщением - Булево           - Клавиатура под сообщением или на нижней панели       - under
+//  ОднаПодОдной  - Булево           - Истина > кнопки выводятся в столбик, Ложь > в строку - column
+// 
+// Возвращаемое значение:
+//  Строка -  JSON клавиатуры
+Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
+    , Знач ПодСообщением = Ложь
+    , Знач ОднаПодОдной = Истина) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ПодСообщением);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ОднаПодОдной);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
+    
+    Если ОднаПодОдной Тогда
+        Строки = СоздатьВысокуюКлавиатуру(МассивКнопок);
+    Иначе
+        Строки = СоздатьДлиннуюКлавиатуру(МассивКнопок);
+    КонецЕсли;
+
+    Если ПодСообщением Тогда
+        СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
+    Иначе
+        СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
+    КонецЕсли;
+
+    Клавиатура = OPI_Инструменты.JSONСтрокой(СтруктураПараметра);
+
+    Возврат Клавиатура;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Администрирование
+
+// Бан
+// Банит пользователя в выбранном чате
+// 
+// Параметры:
+//  Токен          - Строка       - Токен бота                         - token
+//  IDЧата         - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat
+//  IDПользователя - Строка,Число - ID целевого пользователя           - user
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция Бан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
+
+	Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/banChatMember";
+
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown"    , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"   , IDЧата        , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("user_id"   , IDПользователя, Строка_, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Разбан
+// Разбанивает забаненного ранее пользователя
+// 
+// Параметры:
+//  Токен          - Строка       - Токен бота                         - token
+//  IDЧата         - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat
+//  IDПользователя - Строка,Число - ID целевого пользователя           - user
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция Разбан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
+
+	Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/unbanChatMember";
+
+    Параметры = Новый Структура;   
+    OPI_Инструменты.ДобавитьПоле("parse_mode"    , "Markdown"    , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"       , IDЧата        , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("user_id"       , IDПользователя, Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("only_if_banned", Ложь          , "Булево", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Создать ссылку-приглашение
+// Создает ссылку для вступления в закрытый чат
+// 
+// Параметры:
+//  Токен              - Строка         - Токен бота                                               - token
+//  IDЧата             - Строка,Число   - ID целевого чата или IDЧата*IDТемы                       - chat
+//  Заголовок          - Строка         - Заголовок приглашения                                    - title
+//  ДатаИстечения      - Дата           - Дата окончания жизни ссылки (безсрочно, если не указано) - expire
+//  ЛимитПользователей - Число          - Лимит пользователей (бесконечно, если не указано)        - limit
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция СоздатьСсылкуПриглашение(Знач Токен
+    , Знач IDЧата
+    , Знач Заголовок = ""
+    , Знач ДатаИстечения = ""
+    , Знач ЛимитПользователей = 0) Экспорт
+
+	Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/createChatInviteLink";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"    , "Markdown"        , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"       , IDЧата            , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("name"          , Заголовок         , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("member_limit"  , ЛимитПользователей, Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("expire_date"   , ДатаИстечения     , "Дата"  , Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Закрепить сообщение
+// Закрепляет сообщение в шапке чата
+// 
+// Параметры:
+//  Токен       - Строка       - Токен                 - token
+//  IDЧата      - Строка,Число - ID целевого чата      - chat
+//  IDСообщения - Строка,Число - ID целевого сообщения - message
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ЗакрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
+    
+    Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/pinChatMessage";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"          , "Markdown" , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"             , IDЧата     , Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_id"          , IDСообщения, Строка_ , Параметры);
+    OPI_Инструменты.ДобавитьПоле("disable_notification", Ложь       , "Булево", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Открепить сообщение
+// Открепляет сообщение в шапке чата
+// 
+// Параметры:
+//  Токен       - Строка       - Токен бота            - token
+//  IDЧата      - Строка,Число - ID целевого чата      - chat
+//  IDСообщения - Строка,Число - ID целевого сообщения - message
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОткрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
+    
+    Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/unpinChatMessage";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"   , IDЧата     , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_id", IDСообщения, Строка_, Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить число участников
+// Получает общее число участников чата
+// 
+// Параметры:
+//  Токен  - Строка       - Токен бота       - token
+//  IDЧата - Строка,Число - ID целевого чата - chat
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ПолучитьЧислоУчастников(Знач Токен, Знач IDЧата) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/getChatMemberCount";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"   , IDЧата     , "Строка", Параметры);
+
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСТемамиФорума
+
+// Получить список иконок-аватаров
+// Получает соответствие ID Emoji для установки в качестве иконок тем форума
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Ключ > ID, Значение > Emoji
+Функция ПолучитьСписокИконокАватаров(Знач Токен) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Result    = "result";
+    URL       = "api.telegram.org/bot" + Токен + "/getForumTopicIconStickers";     
+    Ответ     = OPI_Инструменты.Get(URL);    
+    Иконки    = Ответ[Result];
+    
+    Если Не ЗначениеЗаполнено(Иконки) Тогда
+    	Возврат Ответ;
+    КонецЕсли; 
+    
+    Коллекция = Новый Соответствие;
+    
+    Для Каждого Иконка Из Иконки Цикл
+        Коллекция.Вставить(Иконка["custom_emoji_id"], Иконка["emoji"]);
+    КонецЦикла;
+       
+    Возврат Коллекция;
+
+КонецФункции
+
+// Создать тему форума
+// Создает новую тему в группе с включенным функционалом тем
+// 
+// Параметры:
+//  Токен     - Строка       - Токен                            - token
+//  IDЧата    - Строка,Число - ID чата создания темы            - forum
+//  Заголовок - Строка       - Заголовок темы                   - title
+//  IDИконки  - Строка       - См. ПолучитьСписокИконокАватаров - icon
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция СоздатьТемуФорума(Знач Токен, Знач IDЧата, Знач Заголовок, Знач IDИконки = "") Экспорт
+    Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки);
+КонецФункции
+
+// Изменить тему форума
+// Создает новую тему в группе с включенным функционалом тем
+// 
+// Параметры:
+//  Токен     - Строка       - Токен                            - token
+//  IDЧата    - Строка,Число - ID чата создания темы            - forum
+//  IDТемы    - Строка,Число - ID темы                          - topic
+//  Заголовок - Строка       - Новый заголовок                  - title
+//  IDИконки  - Строка       - См. ПолучитьСписокИконокАватаров - icon
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ИзменитьТемуФорума(Знач Токен
+    , Знач IDЧата
+    , Знач IDТемы
+    , Знач Заголовок = Неопределено
+    , Знач IDИконки = Неопределено) Экспорт   
+     
+    Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки, IDТемы);
+КонецФункции
+
+// Закрыть тему форума
+// Закрывает тему для новых сообщений
+// 
+// Параметры:
+//  Токен  - Строка       - Токен        - token
+//  IDЧата - Строка,Число - ID чата темы - forum
+//  IDТемы - Строка,Число - ID темы      - topic
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ЗакрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
+    Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 2, IDТемы);    
+КонецФункции
+
+// Открыть тему форума
+// Повторно открывает ранее закрытую тему форума
+// 
+// Параметры:
+//  Токен  - Строка       - Токен        - token
+//  IDЧата - Строка,Число - ID чата темы - forum
+//  IDТемы - Строка,Число - ID темы      - topic
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОткрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
+    Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 1, IDТемы);    
+КонецФункции
+
+// Удалить тему форума
+// Удаляет тему форума
+// 
+// Параметры:
+//  Токен  - Строка       - Токен        - token
+//  IDЧата - Строка,Число - ID чата темы - forum
+//  IDТемы - Строка,Число - ID темы      - topic
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция УдалитьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
+    Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 3, IDТемы);    
+КонецФункции
+
+// Скрыть главную тему форума
+// Скрывает главную тему форума
+// 
+// Параметры:
+//  Токен  - Строка       - Токен        - token
+//  IDЧата - Строка,Число - ID чата темы - forum
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция СкрытьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
+    Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Истина);
+КонецФункции
+
+// Показать главную тему форума
+// Показывает ранее скрытую главную тему форума
+// 
+// Параметры:
+//  Токен  - Строка       - Токен        - token
+//  IDЧата - Строка,Число - ID чата темы - forum
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ПоказатьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
+    Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Ложь);
+КонецФункции
+
+// Изменить имя главной темы форума
+// Изменяет имя главной темы форума
+// 
+// Параметры:
+//  Токен     - Строка       - Токен                   - token
+//  IDЧата    - Строка,Число - ID чата темы            - forum
+//  Заголовок - Строка       - Новое имя главной темы  - title
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ИзменитьИмяГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Заголовок) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    URL = "api.telegram.org/bot" + Токен + "/editGeneralForumTopic";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("chat_id", IDЧата   , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("name"   , Заголовок, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Очистить список закрепленных сообщений темы
+// Очищает список закрепленных сообщений в теме форума
+// 
+// Параметры:
+//  Токен  - Строка       - Токен                               - token
+//  IDЧата - Строка,Число - ID чата темы                        - forum
+//  IDТемы - Строка,Число - ID темы. Главная, если не заполнено - topic
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
+Функция ОчиститьСписокЗакрепленныхСообщенийТемы(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDТемы);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("chat_id"          , IDЧата, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_thread_id", IDТемы, "Строка", Параметры);
+    
+    Если ЗначениеЗаполнено(IDТемы) Тогда
+        Метод = "/unpinAllForumTopicMessages";
+    Иначе
+        Метод = "/unpinAllGeneralForumTopicMessages";
+    КонецЕсли;
+        
+    URL   = "api.telegram.org/bot" + Токен + Метод;
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ОтправитьФайл(Знач Токен, Знач IDЧата, Знач Текст, Знач Файл, Знач Вид, Знач Клавиатура, Знач Разметка)
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Вид);
+
+    Расширение  = "";
+    Метод       = "";
+    
+    ОпределитьМетодОтправки(Вид, Метод, Расширение);
+    ПреобразоватьДанныеФайла(Файл, Расширение, Вид);
+    OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("parse_mode"  , Разметка  , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("caption"     , Текст     , "Строка"     , Параметры);
+    OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры);
+    
+    ДобавитьИдентификаторЧата(IDЧата, Параметры);
+
+    СтруктураФайлов = Новый Структура;
+    СтруктураФайлов.Вставить(Вид + Расширение, Файл);
+
+    URL   = "api.telegram.org/bot" + Токен + Метод;
+    Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СтруктураФайлов, "mixed");
+
+    Возврат Ответ;
+
+КонецФункции
+
+Функция УправлениеТемойФорума(Знач Токен
+    , Знач IDЧата
+    , Знач Заголовок = Неопределено
+    , Знач IDИконки = Неопределено
+    , Знач IDТемы = "")
+    
+    Строка_ = "Строка";
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("name"                , Заголовок, Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("chat_id"             , IDЧата   , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("icon_custom_emoji_id", IDИконки , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_thread_id"   , IDТемы   , Строка_, Параметры);
+    
+    Если ЗначениеЗаполнено(IDТемы) Тогда
+        Метод  = "/editForumTopic";    
+    Иначе    
+        Метод = "/createForumTopic";    
+    КонецЕсли;
+    
+    OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);       
+    Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+Функция УправлениеСостояниемТемыФорума(Знач Токен, Знач IDЧата, Знач Статус, Знач IDТемы = "") 
+        
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Если ЗначениеЗаполнено(IDТемы) Тогда
+        Форум = "Forum";
+    Иначе
+        Форум = "GeneralForum";
+    КонецЕсли;
+    
+    Метод     = ОпределитьМетодУправленияФорумом(Статус, Форум);
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("chat_id"          , IDЧата, "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("message_thread_id", IDТемы, "Строка", Параметры);
+   
+    URL   = "api.telegram.org/bot" + Токен + Метод;
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция УправлениеВидимостьюГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Скрыть)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Скрыть);
+
+    Если Скрыть Тогда
+        Метод = "/hideGeneralForumTopic";
+    Иначе
+        Метод = "/unhideGeneralForumTopic";
+    КонецЕсли;
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("chat_id", IDЧата, "Строка", Параметры);
+    
+    URL   = "api.telegram.org/bot" + Токен + Метод;
+    Ответ = OPI_Инструменты.Get(URL, Параметры);
+    
+    Возврат Ответ;
+
+КонецФункции                 
+
+Функция ОпределитьМетодУправленияФорумом(Знач Статус, Знач Форум) 
+    
+    Открыть = 1;
+    Закрыть = 2;
+    Удалить = 3;
+    
+    Если Статус = Открыть Тогда 
+        Метод = "/reopen" + Форум + "Topic";
+    ИначеЕсли Статус = Закрыть Тогда
+        Метод = "/close" + Форум + "Topic";
+    ИначеЕсли Статус = Удалить Тогда
+        Метод = "/deleteForumTopic";
+    Иначе 
+        ВызватьИсключение "Некорректный статус управления форумом";
+    КонецЕсли;
+    
+    Возврат Метод;
+
+КонецФункции
+
+Функция СоздатьВысокуюКлавиатуру(Знач МассивКнопок)
+    
+    Строки = Новый Массив;
+    
+    Для Каждого Кнопка Из МассивКнопок Цикл
+        Кнопки = Новый Массив;
+        Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
+        Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
+        Строки.Добавить(Кнопки);
+    КонецЦикла;
+
+    Возврат Строки;
+    
+КонецФункции
+
+Функция СоздатьДлиннуюКлавиатуру(Знач МассивКнопок)
+    
+    Строки = Новый Массив;
+    Кнопки = Новый Массив;
+    
+    Для Каждого Кнопка Из МассивКнопок Цикл
+        Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
+        Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
+    КонецЦикла;
+    
+    Строки.Добавить(Кнопки);
+    
+    Возврат Строки;
+
+КонецФункции
+
+Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа)
+    
+    Счетчик = 0;
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    
+    Если ТипЗнч(СоответствиеФайлов) <> Тип("Соответствие") Тогда
+        // !OInt ВызватьИсключение("Не удалось получить информацию из json медиа!");
+        Возврат;
+    КонецЕсли;
+   
+    Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
+        
+        Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
+            
+            Двоичные = ТекущийФайл.Ключ;
+            OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Двоичные);
+            
+            ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);           
+            ИмяМедиа = ТекущийФайл.Значение 
+                + Строка(Счетчик) 
+                + ?(ТекущийФайл.Значение = "document", ЭтотФайл.Расширение, "");
+                
+            ПолноеИмяМедиа  = СтрЗаменить(ИмяМедиа, ".", "___");
+            
+        Иначе
+            Двоичные        = ТекущийФайл.Ключ;
+            ИмяМедиа        = ТекущийФайл.Значение + Строка(Счетчик);
+            ПолноеИмяМедиа  = ИмяМедиа;
+        КонецЕсли;
+        
+        СтруктураФайлов.Вставить(ПолноеИмяМедиа, Двоичные);
+        
+        СтруктураМедиа = Новый Структура;
+        СтруктураМедиа.Вставить("type" , ТекущийФайл.Значение);
+        СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
+        
+        Если Счетчик = 0 Тогда
+            СтруктураМедиа.Вставить("caption", Текст);
+        КонецЕсли;
+        
+        Медиа.Добавить(СтруктураМедиа);
+        
+        Счетчик = Счетчик + 1;
+        
+    КонецЦикла;
+
+    Медиа = OPI_Инструменты.JSONСтрокой(Медиа);
+    
+КонецПроцедуры
+
+Процедура ДобавитьИдентификаторЧата(Знач IDЧата, Параметры)
+    
+    IDЧата     = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+    МассивЧата = СтрРазделить(IDЧата, "*", Ложь);
+    
+    Если МассивЧата.Количество() > 1 Тогда
+        
+        IDЧата = МассивЧата[0];
+        IDТемы = МассивЧата[1];
+        
+        Параметры.Вставить("message_thread_id", IDТемы);
+        
+    КонецЕсли;
+    
+    Параметры.Вставить("chat_id", IDЧата);
+
+КонецПроцедуры
+
+Процедура ОпределитьМетодОтправки(Знач Вид, Метод, Расширение)
+    
+    Если Вид = "photo" Тогда
+        Метод = "/sendPhoto";
+    ИначеЕсли Вид = "video" Тогда
+        Метод = "/sendVideo";
+    ИначеЕсли Вид = "audio" Тогда
+        Метод = "/sendAudio";
+    ИначеЕсли Вид = "document" Тогда
+        Метод = "/sendDocument";
+    ИначеЕсли Вид = "animation" Тогда
+        Метод = "/sendAnimation";
+        Расширение = ".gif";
+    Иначе
+        ВызватьИсключение "Некорректный вид отправки";
+    КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПреобразоватьДанныеФайла(Файл, Расширение, Вид)
+    
+    Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
+        
+        ТекущийФайл = Новый Файл(Файл);
+        Расширение  = ?(Вид = "document", ТекущийФайл.Расширение, Расширение);
+        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+        
+    КонецЕсли;
+
+    Расширение = СтрЗаменить(Расширение, ".", "___");
+    
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_Telegram/OPI_Telegram.mdo b/en/OPI/src/CommonModules/OPI_Telegram/OPI_Telegram.mdo
new file mode 100644
index 0000000000..cc233a0791
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Telegram/OPI_Telegram.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fe603e76-e34a-40fd-977d-ee3c2dbc6620">
+  <name>OPI_Telegram</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы интеграции с Telegram (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Twitter/Module.bsl b/en/OPI/src/CommonModules/OPI_Twitter/Module.bsl
new file mode 100644
index 0000000000..6b7e460aa0
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Twitter/Module.bsl
@@ -0,0 +1,682 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Twitter.os
+// Библиотека: Twitter
+// Команда CLI: twitter
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+// Если в не знаете с чего начать, то стоит найти метод ПолучитьСтандартныеПараметры()
+// и почитать комментарии
+
+// BSLLS:Typo-off
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:NumberOfOptionalParams-off
+// BSLLS:UsingServiceTag-off
+
+//@skip-check method-too-many-params
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область ДанныеИНастройка
+
+// Получить ссылку для авторизации
+// Формирует ссылку для авторизации через браузер
+// 
+// Параметры:
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Строка -  URL для перехода в браузере
+Функция ПолучитьСсылкуАвторизации(Параметры = "") Экспорт
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    
+    ПараметрыURL = Новый Структура;
+        
+    ПараметрыURL.Вставить("response_type"        , "code");
+    ПараметрыURL.Вставить("client_id"            , Параметры_["client_id"]);
+    ПараметрыURL.Вставить("redirect_uri"         , Параметры_["redirect_uri"]);
+    ПараметрыURL.Вставить("scope"                , Параметры_["scope"]);
+    ПараметрыURL.Вставить("state"                , "state");
+    ПараметрыURL.Вставить("code_challenge"       , "challenge");
+    ПараметрыURL.Вставить("code_challenge_method", "plain");
+        
+    ПараметрыURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
+    Линк = "https://twitter.com/i/oauth2/authorize" + ПараметрыURL;
+        
+    Возврат Линк;
+    
+КонецФункции
+
+// Получить токен
+// Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации
+// 
+// Параметры:
+//  Код        - Строка              - Код, полученный из авторизации См.ПолучитьСсылкуАвторизации - code
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция ПолучитьТокен(Знач Код, Знач Параметры = "") Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Код);
+        
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+
+    ПараметрыЗапроса = Новый Структура;
+    ПараметрыЗапроса.Вставить("code"         , Код);
+    ПараметрыЗапроса.Вставить("grant_type"   , "authorization_code");
+    ПараметрыЗапроса.Вставить("client_id"    , Параметры_["client_id"]);
+    ПараметрыЗапроса.Вставить("redirect_uri" , Параметры_["redirect_uri"]);
+    ПараметрыЗапроса.Вставить("code_verifier", "challenge");
+    
+    Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
+        , ПараметрыЗапроса, , Ложь);
+        
+    Возврат Ответ;
+    
+КонецФункции
+
+// Обновить токен 
+// Обновляет v2 токен при помощи refresh_token
+// 
+// Параметры:
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция ОбновитьТокен(Знач Параметры = "") Экспорт
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Refresh    = "refresh_token";
+    
+    ПараметрыЗапроса = Новый Структура;
+    ПараметрыЗапроса.Вставить(Refresh        , Параметры_[Refresh]);
+    ПараметрыЗапроса.Вставить("grant_type"   , Refresh);
+    ПараметрыЗапроса.Вставить("client_id"    , Параметры_["client_id"]);
+    
+    Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
+    , ПараметрыЗапроса, , Ложь);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// !NOCLI
+// Метод для вставки в http-сервис, адрес которого указывается в redirect_uri
+// Вызывает метод получения токена, так как для получения токена из кода, приходящего
+// на redirect_uri после авторизации через браузер есть всего 30 секунд
+// 
+// Параметры:
+//  Запрос - HTTPСервисЗапрос - Запрос, приходящий на http-сервис
+// 
+// Возвращаемое значение:
+//  HTTPОтвет, Произвольный, ДвоичныеДанные - Результат чтения JSON ответа сервера
+Функция ОбработкаВходящегоЗапросаПослеАвторизации(Запрос) Экспорт
+    
+    Код         = Запрос.ПараметрыЗапроса["code"];    
+    ОтветТокен  = ПолучитьТокен(Код);
+    
+    // BSLLS:CommentedCode-off
+    // Предпочтительное хранение токенов
+    // Константы.TwitterRefresh.Установить(ОтветТокен["refresh_token"]);
+    // Константы.TwitterToken.Установить(ОтветТокен["access_token"]);
+    // BSLLS:CommentedCode-on
+    
+    Возврат ОтветТокен;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Твиты
+
+// !NOCLI
+// Создать произвольный твит
+// 
+// Параметры:
+//  Текст - Строка        -  Текст твита
+//  МассивМедиа           -  Массив из Строка,ДвоичныеДанные -  Массив двоичных данных или путей к файлам
+//  МассивВариантовОпроса - Массив из Строка -  Массив вариантов опроса, если необходимо
+//  ДлительностьОпроса    - Строка,Число -  Длительность опроса, если необходимо (опрос без длительности не создается)
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьПроизвольныйТвит(Знач Текст = ""
+    , Знач МассивМедиа = ""
+    , Знач МассивВариантовОпроса = ""
+    , Знач ДлительностьОпроса = ""
+    , Знач Параметры = "") Экспорт 
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ДлительностьОпроса);
+    
+    Если ЗначениеЗаполнено(МассивМедиа) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивМедиа);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(МассивВариантовОпроса) Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивВариантовОпроса);
+    КонецЕсли;
+    
+    Параметры_         = ПолучитьСтандартныеПараметры(Параметры);
+    URL                = "https://api.twitter.com/2/tweets";
+    Массив             = "Массив";    
+    Поля               = Новый Соответствие;
+    
+    Если ЗначениеЗаполнено(Текст) Тогда
+        Поля.Вставить("text", Текст);
+    КонецЕсли;
+    
+    Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
+        
+        ДлительностьОпроса = Число(ДлительностьОпроса);
+        
+        Если МассивВариантовОпроса.Количество() > 0 Тогда
+        	
+        	СтруктураВарианта = Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса);
+            Поля.Вставить("poll", СтруктураВарианта);
+            
+        КонецЕсли;
+        
+    КонецЕсли;
+    
+    Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
+        Если МассивМедиа.Количество() > 0 Тогда
+            Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
+        КонецЕсли;
+    КонецЕсли;
+    
+    Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
+    Ответ       = OPI_Инструменты.Post(URL, Поля, Авторизация);
+
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать текстовый твит
+// Создает твит без вложений
+// 
+// Параметры:
+//  Текст      - Строка              - Текст твита                     - text
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт
+    Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры);    
+КонецФункции
+
+// Создать твит картинки
+// Создает твит с картинкой вложением
+// 
+// Параметры:
+//  Текст          - Строка                          - Текст твита            - text
+//  МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив файлов картинок - pictures
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт
+    
+    МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "tweet_image", Параметры);
+    Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);    
+    
+КонецФункции
+
+// Создать твит гифки
+// Создает твит с вложением-гифкой
+// 
+// Параметры:
+//  Текст       - Строка                          - Текст твита         - text
+//  МассивГифок - Массив из Строка,ДвоичныеДанные - Массив файлов гифок - gifs
+//  Параметры   - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт
+    
+    МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "tweet_gif", Параметры);
+    Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);    
+    
+КонецФункции
+
+// Создать твит видео
+// Создает твит с видеовложением
+// 
+// Параметры:
+//  Текст       - Строка                          - Текст твита         - text
+//  МассивВидео - Массив из Строка,ДвоичныеДанные - Массив файлов видео - videos
+//  Параметры   - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт
+    
+    МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "tweet_video", Параметры);
+    Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
+    
+КонецФункции
+
+// Создать твит опрос
+// Создает твит с опросом
+// 
+// Параметры:
+//  Текст           - Строка           - Текст твита               - text
+//  МассивВариантов - Массив из Строка - Массив вариантов опроса   - options
+//  Длительность    - Строка,Число     - Длительность опроса       - duration
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Twitter
+Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт
+    Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры);    
+КонецФункции
+
+// Загрузить массив вложений !NOCLI
+// Загружает файлы на сервер и возвращает их ID
+// 
+// Параметры:
+//  МассивФайлов - Массив из Строка, ДвоичныеДанные -  Массив файлов
+//  ТипВложений  - Строка -  Тип вложений
+//  Параметры    - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Массив Из Строка -  Массив ID медиа
+Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипВложений);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивФайлов);
+    
+    МассивМедиа = Новый Массив;
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    MIS         = "media_id_string";
+    
+    Если ЗначениеЗаполнено(МассивФайлов) Тогда
+                 
+        Для Каждого ФайлОтправки Из МассивФайлов Цикл
+                       
+            OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ФайлОтправки);
+            
+            Ответ   = ЗагрузитьМедиафайл(ФайлОтправки, ТипВложений, Параметры_);
+            IDМедиа = Ответ[MIS];
+            
+            Если Не ЗначениеЗаполнено(IDМедиа) Тогда
+                Возврат Ответ;
+            КонецЕсли;
+            
+            МассивМедиа.Добавить(IDМедиа);
+            
+        КонецЦикла;
+    
+    КонецЕсли;
+        
+    Возврат МассивМедиа;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры) 
+   
+    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+   
+    ВидЗапроса = "POST";    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    URL        = "https://upload.twitter.com/1.1/media/upload.json";
+     
+    Если Тип = "tweet_image" Тогда 
+        
+        Поля = Новый Структура;
+        Поля.Вставить("media_data"    , Base64Строка(Файл));
+        Поля.Вставить("media_category", Тип);
+        
+        Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);        
+        Ответ       = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
+        
+    Иначе
+        
+        Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_);
+        
+    КонецЕсли;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры)
+    
+    Единица          = 1024;
+    Количество       = 4;
+    MediaKey         = "media_key";
+    MIS              = "media_id_string";
+    Command          = "command";
+    Размер           = Файл.Размер();
+    
+    СоответствиеMIME = Новый Соответствие;
+    СоответствиеMIME.Вставить("tweet_image", "image/jpeg");
+    СоответствиеMIME.Вставить("tweet_video", "video/mp4");
+    СоответствиеMIME.Вставить("tweet_gif"  , "image/gif");
+    
+    РазмерЧасти  = Количество * Единица * Единица;
+    МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);
+    
+    Поля = Новый Структура;
+    Поля.Вставить(Command          , "INIT");
+    Поля.Вставить("total_bytes"    , OPI_Инструменты.ЧислоВСтроку(Размер));
+    Поля.Вставить("media_type"     , СоответствиеMIME.Получить(Тип));
+    Поля.Вставить("media_category" , Тип);
+    
+    Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);
+
+    ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
+    KeyИнициализации   = ОтветИнициализации[MediaKey];
+    IDИнициализации    = ОтветИнициализации[MIS];
+    
+    Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
+        Возврат ОтветИнициализации;     
+    КонецЕсли;
+    
+    Счетчик = 0;
+    
+    Для Каждого Часть Из МассивЧтения Цикл
+        
+        Поля = Новый Структура;
+        Поля.Вставить(Command           , "APPEND");
+        Поля.Вставить("media_key"       , KeyИнициализации);
+        Поля.Вставить("segment_index"   , OPI_Инструменты.ЧислоВСтроку(Счетчик));
+        Поля.Вставить("media"           , Часть);
+
+        Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);
+        
+        OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
+        
+        Счетчик = Счетчик + 1;
+        
+    КонецЦикла;
+    
+    Поля = Новый Структура;
+    Поля.Вставить(Command   , "FINALIZE");
+    Поля.Вставить("media_id", IDИнициализации);
+    
+    СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL);
+    
+    Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
+        Возврат СтатусОбработки;
+    КонецЕсли;
+            
+    Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры);
+    
+    Возврат Ответ;
+        
+КонецФункции
+
+Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры)
+    
+    ProcessingInfo   = "processing_info";
+    Command          = "command";
+    Поля             = Новый Структура;
+    
+    Поля.Вставить(Command   , "STATUS");
+    Поля.Вставить("media_id", IDИнициализации);
+
+    Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
+         
+        Авторизация     = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);        
+        Ответ           = OPI_Инструменты.Get(URL, Поля, Авторизация);     
+        Информация      = Ответ[ProcessingInfo];
+
+        Если Не ЗначениеЗаполнено(Информация) Тогда
+            Возврат Ответ;
+        КонецЕсли;
+        
+        СтатусОбработки = Информация["state"];
+        
+        Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
+            Возврат Ответ;
+        КонецЕсли;
+       
+    КонецЦикла;
+    
+    Если СтатусОбработки = "failed" Тогда
+        ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
+    КонецЕсли;
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
+    
+    // Здесь собрано определение данных, необходимых для работы.
+    // Для Twitter это довольно значительный набор, что обсуловлено наличием сразу 2-х API,
+    // которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга.
+    // Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то,
+    // что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести
+    // механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать 
+    // на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1,
+    // но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные
+    
+    // Мировая гигокорпорация Илона Маска, кстати, напоминаю ;)
+    
+    // P.S Далее часто упоминается "страница настроек Twitter Developer" - это 
+    // https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем)
+    
+    Параметры_ = Новый Соответствие; 
+    Разрешения = "tweet.read tweet.write tweet.moderate.write users.read "
+        + "follows.read follows.write offline.access space.read mute.read "
+        + "mute.write like.read like.write list.read list.write block.read "
+        + "block.write bookmark.read bookmark.write";    
+               
+    // Данные для API v2
+        
+    // redirect_uri  - URL вашего http-сервиса (или другого обработчика запросов) для авторизации
+    // scope         - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен
+    // client_id     - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
+    // client_secret - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
+    // access_token  - ПолучитьСсылкуАвторизации() -> Браузер -> code придет на redirect_uri -> ПолучитьТокен(code)
+    // refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч)
+    //                 Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token. 
+    //                 При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить 
+    //                 не получится (access_token тоже не получится) 
+    
+    //           |--> ОбновитьТокен() ->|access_token  --> Используется в т-нии 2-х часов для запросов
+    //           |                      |refresh_token --|
+    //           |--------[через 2 ч.]-------------------|
+     
+    // Данные для API v1.1
+    
+    // oauth_token           - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer 
+    // oauth_token_secret    - Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
+    // oauth_consumer_key    - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
+    // oauth_consumer_secret - Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer
+    
+    // Эти токены обновлять не надо
+    
+    Параметры_.Вставить("redirect_uri"         , "");
+    Параметры_.Вставить("scope"                , Разрешения);
+    Параметры_.Вставить("client_id"            , "");
+    Параметры_.Вставить("client_secret"        , "");
+    Параметры_.Вставить("access_token"         , ""); // Должно быть нечто вроде Константы.TwitterToken.Получить()
+    Параметры_.Вставить("refresh_token"        , ""); // Должно быть нечто вроде Константы.TwitterRefresh.Получить()
+    Параметры_.Вставить("oauth_token"          , "");
+    Параметры_.Вставить("oauth_token_secret"   , "");
+    Параметры_.Вставить("oauth_consumer_key"   , "");
+    Параметры_.Вставить("oauth_consumer_secret", "");
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
+    
+    Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
+        Для Каждого ПереданныйПараметр Из Параметры Цикл
+            Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
+        КонецЦикла;
+    КонецЕсли;
+
+    Возврат Параметры_;
+
+КонецФункции
+
+Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
+    
+    ТекущаяДата          = OPI_Инструменты.ПолучитьТекущуюДату();
+    ЗаголовокАвторизации = "";
+    МетодХэширования     = "HMAC-SHA1";
+    ВерсияАпи            = "1.0";
+    СтрокаСигнатуры      = "";
+    Подпись              = "";
+    OCK                  = "oauth_consumer_key";
+    OTK                  = "oauth_token";
+    ТекущаяДатаUNIX      = OPI_Инструменты.UNIXTime(ТекущаяДата);
+    ТекущаяДатаUNIX      = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
+    ТаблицаПараметров    = Новый ТаблицаЗначений;
+    ТаблицаПараметров.Колонки.Добавить("Ключ");
+    ТаблицаПараметров.Колонки.Добавить("Значение");
+        
+    Для Каждого Поле Из Поля Цикл 
+        
+        НоваяСтрока = ТаблицаПараметров.Добавить();    
+        НоваяСтрока.Ключ     = Поле.Ключ;
+        НоваяСтрока.Значение = Поле.Значение;
+        
+    КонецЦикла;
+    
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = OCK;
+    НоваяСтрока.Значение = Параметры[OCK];
+    
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = OTK;
+    НоваяСтрока.Значение = Параметры[OTK];
+    
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = "oauth_version";
+    НоваяСтрока.Значение = ВерсияАпи;
+    
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = "oauth_signature_method";
+    НоваяСтрока.Значение = МетодХэширования;
+
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = "oauth_timestamp";
+    НоваяСтрока.Значение = ТекущаяДатаUNIX;
+
+    НоваяСтрока = ТаблицаПараметров.Добавить();
+    НоваяСтрока.Ключ     = "oauth_nonce";
+    НоваяСтрока.Значение = ТекущаяДатаUNIX;
+
+    Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
+        
+        СтрокаТаблицы.Ключ     = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
+        СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
+        
+    КонецЦикла;
+    
+    ТаблицаПараметров.Сортировать("Ключ");
+    
+    Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
+        
+        СтрокаСигнатуры = СтрокаСигнатуры 
+            + СтрокаТаблицы.Ключ 
+            + "="
+            + СтрокаТаблицы.Значение
+            + "&";
+            
+    КонецЦикла;
+    
+    СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
+    СтрокаСигнатуры = вРег(ВидЗапроса) 
+        + "&" 
+        + КодироватьСтроку(URL, СпособКодированияСтроки.КодировкаURL)
+        + "&"
+        + КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
+        
+    Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL)
+        + "&" 
+        + КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
+             
+    Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
+        , ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
+        , ХешФункция.SHA1
+        , 64);
+        
+    Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
+    
+    Разделитель          = """,";
+    ЗаголовокАвторизации = ЗаголовокАвторизации 
+        + "OAuth "
+        + "oauth_consumer_key="""      + Параметры[OCK]        + Разделитель
+        + "oauth_token="""             + Параметры[OTK]        + Разделитель
+        + "oauth_signature_method="""  + МетодХэширования      + Разделитель
+        + "oauth_timestamp="""         + ТекущаяДатаUNIX       + Разделитель
+        + "oauth_nonce="""             + ТекущаяДатаUNIX       + Разделитель
+        + "oauth_version="""           + ВерсияАпи             + Разделитель
+        + "oauth_signature="""         + Сигнатура;
+        
+        СоответствиеЗаголовка = Новый Соответствие;
+        СоответствиеЗаголовка.Вставить("authorization", ЗаголовокАвторизации);
+        
+    Возврат СоответствиеЗаголовка;
+        
+КонецФункции
+
+Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
+    
+    СоответствиеВозврата = Новый Соответствие;
+    СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]);
+    
+    Возврат СоответствиеВозврата;
+    
+КонецФункции
+
+Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL)
+
+	ProcessingInfo   = "processing_info";
+    Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL);
+    
+    Ответ      = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);  
+    Информация = Ответ[ProcessingInfo];
+    
+    Если Не ЗначениеЗаполнено(Информация) Тогда
+    	Возврат Ответ;
+    КонецЕсли;
+    
+    СтатусОбработки = Информация["state"];
+    
+    Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
+    	Возврат Ответ;
+    Иначе
+    	Возврат СтатусОбработки;
+    КонецЕсли;	
+    
+КонецФункции
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_Twitter/OPI_Twitter.mdo b/en/OPI/src/CommonModules/OPI_Twitter/OPI_Twitter.mdo
new file mode 100644
index 0000000000..759025a8c6
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Twitter/OPI_Twitter.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="748f90c6-8251-482b-a249-b0372df0c72e">
+  <name>OPI_Twitter</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы работы с Twitter (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_VK/Module.bsl b/en/OPI/src/CommonModules/OPI_VK/Module.bsl
new file mode 100644
index 0000000000..7c31e644de
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_VK/Module.bsl
@@ -0,0 +1,2190 @@
+// Расположение OS: ./OInt/core/Modules/OPI_VK.os
+// Библиотека: VK
+// Команда CLI: vk
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.        
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+// Если в не знаете с чего начать, то стоит найти метод ПолучитьСтандартныеПараметры()
+// и почитать комментарии
+
+// BSLLS:NumberOfOptionalParams-off
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:NumberOfOptionalParams-off
+// BSLLS:UsingServiceTag-off
+// BSLLS:UnusedLocalVariable-off
+
+//@skip-check method-too-many-params
+//@skip-check wrong-string-literal-content
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область ПолучениеТокена
+
+// Создать ссылку получения токена
+// Получение ссылки для интерактивного получения токена (access_token), который необходим
+// для дальнейших действий
+// 
+// Параметры:
+//  app_id - Строка,Число - app_id из настроек приложения - app
+// 
+// Возвращаемое значение:
+//  Строка - URL, по которому необходимо перейти в браузере 
+Функция СоздатьСсылкуПолученияТокена(Знач App_id) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(App_id);
+    
+    // access_token нужно будет забрать из параметра в строке адреса браузера
+    Возврат "https://oauth.vk.com/authorize?client_id=" + App_id
+        + "&scope=offline,wall,groups,photos,stats,stories,ads,market,video"
+        + "&v=5.131&response_type=token&redirect_uri=https://api.vk.com/blank.html";
+        
+КонецФункции
+ 
+#КонецОбласти
+
+#Область РаботаСГруппой
+
+// Создать пост
+// Создает пост с картинками
+// 
+// Параметры:
+//  Текст              - Строка                          - Текст поста                           - text
+//  МассивКартинок     - Массив из Строка,ДвоичныеДанные - Массив картинок                       - pictures  
+//  Реклама            - Булево                          - Признак ""Это реклама""               - ad
+//  СсылкаПодЗаписью   - Строка                          - Ссылка (URL) под записью              - url
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьПост(Знач Текст
+    , Знач МассивКартинок
+    , Знач Реклама = Ложь
+    , Знач СсылкаПодЗаписью = ""
+    , Знач Параметры = "") Экспорт
+        
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКартинок);
+ 
+    Параметры_      = ПолучитьСтандартныеПараметры(Параметры);
+    МассивВложений  = Новый Массив;    
+        
+    Для Каждого КартинкаПоста Из МассивКартинок Цикл
+        
+        Параметры_        = ПолучитьСтандартныеПараметры(Параметры);
+        ОтветСоответствие = ПолучитьСоответствиеКартинки(КартинкаПоста, Параметры_, "Пост");
+        
+        OwnerId  = ОтветСоответствие.Получить("owner_id");
+        ObjectId = ОтветСоответствие.Получить("id");
+        
+        Если Не ЗначениеЗаполнено(OwnerId) Или Не ЗначениеЗаполнено(ObjectId) Тогда
+        	Возврат ОтветСоответствие;
+        КонецЕсли;
+        
+        OwnerId  = OPI_Инструменты.ЧислоВСтроку(OwnerId);
+        ObjectId = OPI_Инструменты.ЧислоВСтроку(ObjectId);
+        
+        ФотоID = "photo" + OwnerId + "_" + ObjectId; 
+
+        МассивВложений.Добавить(ФотоID);
+        
+    КонецЦикла;
+
+    Ответ = СоздатьСоставнойПост(Текст, МассивВложений, Реклама, СсылкаПодЗаписью, Параметры);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать составной пост
+// Создает пост на основе массива идетификаторов объектов (картинок, видео и др.)
+// 
+// Параметры:
+//  Текст            - Строка           - Текст поста                              - text
+//  Объекты          - Массив из Строка - Массив идентификаторов вида photo123_123 - objects  
+//  Реклама          - Булево           - Признак ""Это реклама""                  - ad
+//  СсылкаПодЗаписью - Строка           - Ссылка (URL) под записью                 - url
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьСоставнойПост(Знач Текст
+    , Знач Объекты
+    , Знач Реклама = Ложь
+    , Знач СсылкаПодЗаписью = ""
+    , Знач Параметры = "") Экспорт
+   
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаПодЗаписью);   
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Реклама);
+    
+    Параметры      = ПолучитьСтандартныеПараметры(Параметры);
+    СтрокаВложений = СтрСоединить(Объекты, ",");   
+    СтрокаВложений = СтрокаВложений + СсылкаПодЗаписью;
+    
+    Параметры.Вставить("message"            , Текст);
+    Параметры.Вставить("attachments"        , СтрокаВложений);
+    Параметры.Вставить("mark_as_ads"        , ?(Реклама, 1, 0));
+    Параметры.Вставить("close_comments"     , ?(Реклама, 1, 0));
+
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Удалить пост
+// Удаляет пост по id
+//
+// Параметры:
+//  IDПоста    - Строка,Число - ID поста - post
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьПост(Знач IDПоста, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);    
+    Параметры_.Вставить("post_id", IDПоста);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.delete", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать опрос
+// Создает опрос с вариантами ответа
+//
+// Параметры:
+//  Вопрос        - Строка                - Вопрос опроса              - question
+//  МассивОтветов - Массив из Строка      - Массив вариантов ответа    - options
+//  Картинка      - Строка,ДвоичныеДанные - Картинка опроса            - picture
+//  Параметры  - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьОпрос(Знач Вопрос, Знач МассивОтветов, Знач Картинка = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Вопрос);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивОтветов);
+    
+    Параметры_    = ПолучитьСтандартныеПараметры(Параметры);
+    Response      = "response";
+
+    Если ЗначениеЗаполнено(Картинка) Тогда
+        
+        Ответ  = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Опрос");
+        
+        Фото   = Ответ.Получить(Response);
+        
+        Если ЗначениеЗаполнено(Фото) Тогда
+        	
+        	IDФото = Фото["id"];
+        	
+        	Если Не ЗначениеЗаполнено(IDФото) Тогда
+            	Возврат Ответ;
+        	КонецЕсли;
+        	
+        Иначе
+            Возврат Ответ;
+        КонецЕсли;
+    
+    КонецЕсли;
+    
+    Параметры_.Вставить("is_anonymous", 1);
+    Параметры_.Вставить("is_multiple" , 0);
+        
+    Ответы = СтрСоединить(МассивОтветов, """,""");
+    Ответы = "[""" + Ответы + """]";    
+        
+    Параметры_.Вставить("add_answers", Ответы);
+    Параметры_.Вставить("photo_id"   , OPI_Инструменты.ЧислоВСтроку(IDФото));
+    Параметры_.Вставить("question"   , Вопрос);
+    
+    Опрос             = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_);
+    ОпросСоответствие = Опрос.Получить(Response);
+    
+    Если Не ЗначениеЗаполнено(ОпросСоответствие) Тогда
+    	Возврат Опрос;
+    КонецЕсли;
+    
+    OwnerId  = ОпросСоответствие.Получить("owner_id");
+    ObjectId = ОпросСоответствие.Получить("id");
+    
+    Если Не ЗначениеЗаполнено(OwnerId) Или Не ЗначениеЗаполнено(ObjectId) Тогда
+        Возврат Опрос;
+    КонецЕсли;
+    
+    ОпросID = "poll"
+    + OPI_Инструменты.ЧислоВСтроку(OwnerId)
+    + "_" 
+    + OPI_Инструменты.ЧислоВСтроку(ObjectId);
+ 
+    Параметры_.Вставить("attachments", ОпросID);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать альбом
+// Создает альбом для хранения картинок
+//
+// Параметры:
+//  Наименование - Строка - Наименование альбома - title
+//  Описание     - Строка - Описание альбома     - description
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьАльбом(Знач Наименование, Знач Описание = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    
+    Параметры_.Вставить("title"                , Наименование);
+    Параметры_.Вставить("description"          , Описание);
+    Параметры_.Вставить("upload_by_admins_only", 1);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.createAlbum", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить альбом
+// Удаляет ранее созданный альбом
+//
+// Параметры:
+//  IDАльбома - Строка,Число        - ID альбома - album
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьАльбом(Знач IDАльбома, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАльбома);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);    
+    Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(IDАльбома));
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.deleteAlbum", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать историю
+// Создает историю из картинки
+//
+// Параметры:
+//  Картинка     - Строка,ДвоичныеДанные - Фон истории                           - picture
+//  URL          - Строка                - URL для кнопки под историей           - url
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьИсторию(Знач Картинка, Знач URL = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("link_text"  , "more");
+    Параметры_.Вставить("link_url"   , URL);
+    Параметры_.Вставить("add_to_news", "1");
+    
+    Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "История");    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Сохранить картинку в альбом
+// Сохраняет картинку в альбом сообщества
+//
+// Параметры:
+//  IDАльбома - Строка,Число          - ID альбома        - album                           
+//  Картинка  - ДвоичныеДанные,Строка - Файл картинки     - picture
+//  Описание  - Строка                - Описание картинки - description
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СохранитьКартинкуВАльбом(Знач IDАльбома, Знач Картинка, Знач Описание = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАльбома);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
+    
+    Параметры_      = ПолучитьСтандартныеПараметры(Параметры);
+    
+    Параметры_.Вставить("album_id", IDАльбома);
+    Параметры_.Вставить("caption" , Описание);
+          
+    Возврат ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Альбом");
+    
+КонецФункции
+
+// Удалить картинку
+// Удалить картинку из альбома
+//
+// Параметры:
+//  IDКартинки - Строка,Число       - ID картинки - pictureid 
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьКартинку(Знач IDКартинки, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКартинки);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("photo_id", IDКартинки);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.delete", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить видео на сервер
+// Загружает видео в группу с возможностью его дальнейшего использования
+// 
+// Параметры:
+//  Видео        - Строка, ДвоичныеДанные - Файл видео                  - file
+//  Наименование - Строка                 - Наименование видео          - title
+//  Описание     - Строка                 - Описание видео              - description
+//  Альбом       - Строка                 - ID альбома, если необходимо - album
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция ЗагрузитьВидеоНаСервер(Знач Видео
+    , Знач Наименование
+    , Знач Описание = ""
+    , Знач Альбом = ""
+    , Знач Параметры = "") Экспорт
+	
+	Строка_   = "Строка";
+	Параметры = ПолучитьСтандартныеПараметры(Параметры);
+	
+	OPI_Инструменты.ДобавитьПоле("name"       , Наименование, Строка_, Параметры);
+	OPI_Инструменты.ДобавитьПоле("description", Описание    , Строка_, Параметры);
+	OPI_Инструменты.ДобавитьПоле("album_id"   , Альбом      , Строка_, Параметры);
+	
+	Ответ = OPI_Инструменты.Get("api.vk.com/method/video.save", Параметры);
+    
+    Результат = Ответ["response"];
+    
+    Если Не ЗначениеЗаполнено(Результат) Тогда
+		Возврат Ответ;
+    КонецЕсли;
+    
+	URL = Результат["upload_url"];
+	
+	Если Не ЗначениеЗаполнено(URL) Тогда
+		Возврат Ответ;
+	КонецЕсли;
+    
+    СоответствиеФайлов = Новый Соответствие;
+    OPI_Инструменты.ДобавитьПоле("video_file.mp4", Видео, "ДвоичныеДанные", СоответствиеФайлов);
+    
+    РазмерДанных = СоответствиеФайлов["video_file.mp4"].Размер();
+    РазмерДанных = OPI_Инструменты.ЧислоВСтроку(РазмерДанных);
+    
+    Ответ = OPI_Инструменты.PostMultipart(URL, , СоответствиеФайлов, "video/mp4");
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить фото на сервер
+// Загружает фото на сервер для его дальнейшего использования
+// 
+// Параметры:
+//  Картинка  - Строка, ДвоичныеДанные - Файл картинки                   - file
+//  Параметры - Структура из Строка    - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+//  Вид       - Строка                 - Вид загрузки (Пост, Товар, История, Опрос, Прочее) - type
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция ЗагрузитьФотоНаСервер(Знач Картинка, Знач Параметры = "", Знач Вид = "Пост") Экспорт
+       
+    Параметры  = ПолучитьСтандартныеПараметры(Параметры);
+    Метод      = ОпределитьМетодЗагрузкиИзображений(Вид);
+    Файлы      = Новый Соответствие;
+    
+    Response   = "response";
+    URL        = "api.vk.com/method/";
+    Загрузка   = URL + Метод["Загрузка"];
+    Сохранение = URL + Метод["Сохранение"];
+    
+    Если ТипЗнч(Картинка) = Тип("Строка") Тогда
+        КлючКартинка        = СтрЗаменить(Картинка, ".", "___");
+        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
+    Иначе
+        КлючКартинка        = "image___jpeg";
+    КонецЕсли;
+    
+    Файлы.Вставить(КлючКартинка, Картинка);
+    
+    Для Н = 1 По 5 Цикл
+        
+        Ответ     = OPI_Инструменты.Get(Загрузка, Параметры);  
+        Результат = Ответ[Response];
+        
+        Если ЗначениеЗаполнено(Результат) Тогда
+            
+            URL = Результат["upload_url"];
+            
+            Если Не ЗначениеЗаполнено(URL) Тогда
+                Возврат Ответ;
+            КонецЕсли;
+            
+        Иначе
+            Возврат Ответ;
+        КонецЕсли;
+        
+        Параметры.Вставить("upload_url", URL);
+        Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы);
+        
+        Если ТипЗнч(Ответ) = Тип("Соответствие") Тогда
+            Прервать;
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+    Если ТипЗнч(Ответ) <> Тип("Соответствие") Тогда
+        Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ);
+    КонецЕсли;
+
+    ЗаполнитьПараметрыЗагрузкиФото(Метод, Ответ, Параметры);
+        
+    Ответ = OPI_Инструменты.Get(Сохранение, Параметры);
+          
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСОбсуждениями
+
+// Создать обсуждение
+// Создает новое обсуждение
+//
+// Параметры:
+//  Наименование          - Строка  - Наименование обсуждения - title
+//  ТекстПервогоСообщения - Строка  - Текст первого сообщения - text
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьОбсуждение(Знач Наименование, Знач ТекстПервогоСообщения, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстПервогоСообщения);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("title", Наименование);
+    Параметры_.Вставить("text" , ТекстПервогоСообщения);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/board.addTopic", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Закрыть обсуждение
+// Закрывает или удаляет обсуждение
+//
+// Параметры:
+//  IDОбсуждения     - Строка,Число - ID обсуждения                                          - topic
+//  УдалитьПолностью - Булево       -  Удалить полностью (Истина) или закрыть                - remove
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ЗакрытьОбсуждение(Знач IDОбсуждения, Знач УдалитьПолностью = Ложь, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(УдалитьПолностью);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("topic_id", IDОбсуждения);
+    
+    Метод = ?(УдалитьПолностью, "deleteTopic", "closeTopic");   
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/board." + Метод, Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Открыть обсуждение
+// Открывает ранее закрытое обсуждение
+//
+// Параметры:
+//  IDОбсуждения - Строка,Число - ID обсуждения - topic
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ОткрытьОбсуждение(Знач IDОбсуждения, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("topic_id", IDОбсуждения);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/board.openTopic", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Написать в обсуждение
+// Добавляет сообщение в обсуждение от имени группы
+//
+// Параметры:
+//  IDОбсуждения - Строка,Число - ID обсуждения   - topic
+//  Текст        - Строка       - Текст сообщения - text
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция НаписатьВОбсуждение(Знач IDОбсуждения, Знач Текст, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("topic_id", IDОбсуждения);
+    Параметры_.Вставить("message" , Текст);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/board.createComment", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область ИнтерактивныеДействия
+
+// Поставить лайк
+// Ставит лайк на пост
+//
+// Параметры:
+//  IDПоста   - Строка,Число - ID поста                    - post
+//  IDСтены   - Строка,Число - ID стены расположения поста - wall
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПоставитьЛайк(Знач IDПоста, Знач IDСтены = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
+    
+    Параметры_      = ПолучитьСтандартныеПараметры(Параметры);
+    IDСтены         = ?(ЗначениеЗаполнено(IDСтены), IDСтены, Параметры_["owner_id"]);
+    ОбъектВК        = "wall" + IDСтены + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста);
+    
+    Параметры_.Вставить("type"        , "post");
+    Параметры_.Вставить("object"      , ОбъектВК);
+    Параметры_.Вставить("item_id"     , OPI_Инструменты.ЧислоВСтроку(IDПоста));
+    Параметры_.Вставить("owner_id"    , OPI_Инструменты.ЧислоВСтроку(IDСтены));
+    Параметры_.Вставить("from_group"  , 0);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/likes.add", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Сделать репост
+// Делает репост записи
+//
+// Параметры:
+//  IDПоста      - Строка,Число - ID поста                      - post
+//  IDСтены      - Строка,Число -  ID стены расположения поста  - from
+//  ЦелеваяСтена - Строка,Число -  ID целевой стены или группы  - to
+//  Рекламный    - Булево -  Признак рекламного поста           - ad
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СделатьРепост(Знач IDПоста
+    , Знач IDСтены = ""
+    , Знач ЦелеваяСтена = ""
+    , Знач Рекламный = Ложь
+    , Знач Параметры = "") Экспорт
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    GroupId    = Параметры_["group_id"];
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦелеваяСтена);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Рекламный);
+       
+    Источник    = ?(ЗначениеЗаполнено(IDСтены), IDСтены, GroupId);       
+    Приемник    = ?(ЗначениеЗаполнено(ЦелеваяСтена), ЦелеваяСтена, GroupId);
+
+    Параметры_.Вставить("object"          , "wall" + Источник + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста));
+    Параметры_.Вставить("group_id"        , СтрЗаменить(Приемник, "-", ""));
+    Параметры_.Вставить("mark_as_ads"     , ?(Рекламный, 1, 0));
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.repost", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Написать сообщение
+// Написать сообщение пользователю в диалоге сообщества
+//
+// Параметры:
+//  Текст          - Строка - Текст сообщения                                                 - text
+//  IDПользователя - Строка - ID пользователя адресата                                        - user
+//  Communitytoken - Строка - Токен бота чата сообщества, котрый можно получить в настройках  - ct
+//  Клавиатура     - Строка - JSON клавиатуры. См.СформироватьКлавиатуру                      - keyboard
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция НаписатьСообщение(Знач Текст
+    , Знач IDПользователя
+    , Знач Communitytoken
+    , Знач Клавиатура = ""
+    , Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Communitytoken);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Клавиатура);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("access_token", Communitytoken);
+    
+    Параметры_.Вставить("user_id"     , IDПользователя);
+    Параметры_.Вставить("peer_id"     , IDПользователя);
+    Параметры_.Вставить("parse_mode"  , "Markdown"); 
+    Параметры_.Вставить("random_id"   , 0);
+    Параметры_.Вставить("message"     , Текст);
+    
+    Если ЗначениеЗаполнено(Клавиатура) Тогда
+        Параметры_.Вставить("keyboard", Клавиатура);
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/messages.send", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Написать комментарий
+// Создает комментарий под выбранной записью
+//
+// Параметры:
+//  IDПоста   - Строка,Число - ID целевого поста            - post
+//  IDСтены   - Строка,Число -  ID стены расположения поста - wall
+//  Текст     - Строка       - Текст комментария            - text
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция НаписатьКомментарий(Знач IDПоста, Знач IDСтены, Знач Текст, Знач Параметры = "") Экспорт
+
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    GroupId    = Параметры_["group_id"];
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+       
+    Параметры_.Вставить("owner_id"   , IDСтены); 
+    Параметры_.Вставить("from_group" , GroupId);
+    Параметры_.Вставить("post_id"    , IDПоста);
+    Параметры_.Вставить("message"    , Текст);
+    
+    Параметры_.Удалить("group_id");
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.createComment", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Сократить ссылку
+// Создает сокращенный URL из обычного
+//
+// Параметры:
+//  URL       - Строка - URL для сокращения - url
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+// Строка - Сокращенный URL 
+Функция СократитьСсылку(Знач URL, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
+    
+    Response   = "response";
+    Параметры_ = Новый Структура;
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);    
+    Параметры_.Вставить("url", URL);
+    
+    Ответ     = OPI_Инструменты.Get("https://api.vk.com/method/utils.getShortLink", Параметры_);
+    Результат = Ответ[Response];
+    
+    Если ЗначениеЗаполнено(Результат) Тогда
+    	
+    	URL = Результат["short_url"];
+    	
+    	Если ЗначениеЗаполнено(URL) Тогда
+    		Возврат URL;
+    	Иначе
+    		Возврат Ответ;
+    	КонецЕсли;
+    	
+    Иначе
+    	Возврат Ответ;
+    КонецЕсли;
+      
+КонецФункции
+
+#КонецОбласти
+
+#Область Статистика
+
+// Получить статистику
+// Получает общую статистику сообщества за период
+//
+// Параметры:
+//  ДатаНачала    - Дата - Дата начала периода    - datefrom
+//  ДатаОкончания - Дата - Дата окончания периода - dateto
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПолучитьСтатистику(Знач ДатаНачала, Знач ДатаОкончания, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьДату(ДатаНачала);
+    OPI_ПреобразованиеТипов.ПолучитьДату(ДатаОкончания);
+    
+    Параметры_         = ПолучитьСтандартныеПараметры(Параметры);
+    
+    ДатаНачала         = OPI_Инструменты.UNIXTime(ДатаНачала);
+    ДатаОкончания      = OPI_Инструменты.UNIXTime(ДатаОкончания);
+    
+    Параметры_.Вставить("timestamp_from", ДатаНачала);
+    Параметры_.Вставить("timestamp_to"  , ДатаОкончания);
+    Параметры_.Вставить("stats_groups"  , "visitors, reach, activity");
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/stats.get", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить статистику по постам
+// Получает статистику в разрезе постов
+//
+// Параметры:
+//  МассивИДПостов - Массив из Строка,Число - Массив ID постов - posts
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Массив из Произвольный -  Массив данных статистики по постам
+Функция ПолучитьСтатистикуПостов(Знач МассивИДПостов, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИДПостов);
+    
+    Параметры_       = ПолучитьСтандартныеПараметры(Параметры);
+    МассивОтветов    = Новый Массив;
+    МассивНабора     = Новый Массив;
+    МаксимумПостов   = 30;
+    Response         = "response";
+    
+    Для Каждого Пост Из МассивИДПостов Цикл
+        
+        МассивНабора.Добавить(OPI_Инструменты.ЧислоВСтроку(Пост));
+        
+        Если МассивНабора.Количество() = МаксимумПостов Тогда
+            
+            СтрокаНомеров = СтрСоединить(МассивНабора, ",");
+            Параметры_.Вставить("post_ids", СтрокаНомеров);
+            
+            Статистика             = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
+            МассивСтатистики       = Статистика[Response];
+            
+            Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
+                МассивОтветов.Добавить(ЭлементСтатистики);
+            КонецЦикла;
+            
+            МассивНабора = Новый Массив;
+            
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+    СтрокаНомеров = СтрСоединить(МассивНабора, ",");
+    Параметры_.Вставить("post_ids", СтрокаНомеров);
+    
+    Статистика       = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
+    МассивСтатистики = Статистика[Response];
+    
+    Если ТипЗнч(МассивСтатистики) = Тип("Массив") Тогда
+        Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
+            МассивОтветов.Добавить(ЭлементСтатистики);
+        КонецЦикла;
+    КонецЕсли;
+
+    Возврат МассивОтветов;
+    
+КонецФункции
+        
+#КонецОбласти
+
+#Область РаботаСРекламнымКабинетом
+
+// Создать рекламную кампанию
+// Создает кампанию в выбранном рекламном кабинете
+//
+// Параметры:
+//  IDКабинета   - Строка,Число - ID рекламного кабинета - cabinet
+//  Наименование - Строка       - Наименование кампании - title
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьРекламнуюКампанию(Знач IDКабинета, Знач Наименование, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
+    
+    ТекущаяДата  = OPI_Инструменты.ПолучитьТекущуюДату();
+    КонечнаяДата = ДобавитьМесяц(ТекущаяДата, 24);
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);    
+    Параметры_.Вставить("account_id", IDКабинета);
+    
+    МассивСтруктур = Новый Массив;
+    ДатаСтарт      = OPI_Инструменты.UNIXTime(ТекущаяДата);
+    ДатаСтоп       = OPI_Инструменты.UNIXTime(КонечнаяДата);
+    
+    СтруктураКампании = Новый Структура;
+    СтруктураКампании.Вставить("type"            , "promoted_posts");
+    СтруктураКампании.Вставить("name"            , Наименование);
+    СтруктураКампании.Вставить("day_limit"       , 0);
+    СтруктураКампании.Вставить("all_limit"       , 0);
+    СтруктураКампании.Вставить("start_time"      , ДатаСтарт);
+    СтруктураКампании.Вставить("stop_time"       , ДатаСтоп);
+    СтруктураКампании.Вставить("status"          , 1);
+    
+    МассивСтруктур.Добавить(СтруктураКампании);
+    
+    JSONДата = OPI_Инструменты.JSONСтрокой(МассивСтруктур);
+    
+    Параметры_.Вставить("data", JSONДата);
+    
+    Ответ    = OPI_Инструменты.Get("api.vk.com/method/ads.createCampaigns", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать рекламное объявление
+// Создает рекламное объявление на основе поста
+//
+// Параметры:
+//  НомерКампании  - Строка,Число - ID рекламной кампании                         - campaign
+//  ДневнойЛимит   - Строка,Число - Дневной лимит в рублях                        - limit
+//  НомерКатегории - Строка,Число - Номер рекламной категории                     - category
+//  IDПоста        - Строка,Число - ID поста, используемого в качетсве рекламы    - post
+//  IDКабинета     - Строка,Число - ID рекламного кабинета                        - cabinet
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьРекламноеОбъявление(Знач НомерКампании
+    , Знач ДневнойЛимит
+    , Знач НомерКатегории
+    , Знач IDПоста
+    , Знач IDКабинета
+    , Знач Параметры = "") Экспорт
+    
+    Параметры_  = ПолучитьСтандартныеПараметры(Параметры);   
+    GroupId     = Параметры_["group_id"];
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(НомерКампании);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ДневнойЛимит);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(НомерКатегории);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
+    
+    Линк = "https://vk.com/wall-" + GroupId + "_" + IDПоста;
+    
+    МассивСтруктур        = Новый Массив;    
+    СтруктураКампании     = Новый Структура;
+    СтруктураКампании.Вставить("campaign_id"                , НомерКампании);
+    СтруктураКампании.Вставить("ad_format"                  , 9);
+    СтруктураКампании.Вставить("conversion_event_id"        , 1);
+    СтруктураКампании.Вставить("autobidding"                , 1);
+    СтруктураКампании.Вставить("cost_type"                  , 3);
+    СтруктураКампании.Вставить("goal_type"                  , 2);
+    СтруктураКампании.Вставить("ad_platform"                , "all");
+    СтруктураКампании.Вставить("publisher_platforms"        , "vk");
+    СтруктураКампании.Вставить("publisher_platforms_auto"   , "1");
+    СтруктураКампании.Вставить("day_limit"                  , ДневнойЛимит);
+    СтруктураКампании.Вставить("all_limit"                  , "0");
+    СтруктураКампании.Вставить("category1_id"               , НомерКатегории);
+    СтруктураКампании.Вставить("age_restriction"            , 0);
+    СтруктураКампании.Вставить("status"                     , 1);
+    СтруктураКампании.Вставить("name"                       , "Объявление");
+    СтруктураКампании.Вставить("link_url"                   , Линк);
+    
+    МассивСтруктур.Добавить(СтруктураКампании);
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(МассивСтруктур, Истина);
+    
+    Параметры_.Вставить("data"        , МассивСтруктур);
+    Параметры_.Вставить("account_id"  , IDКабинета);
+    
+    Ответ    = OPI_Инструменты.Get("api.vk.com/method/ads.createAds", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Приостановить рекламное объявление
+// Приостанавливает показ рекламного объявления
+//
+// Параметры:
+//  IDКабинета   - Строка,Число - ID рекламного кабинета - cabinet
+//  IDОбъявления - Строка,Число - ID объявления          - adv 
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПриостановитьРекламноеОбъявление(Знач IDКабинета, Знач IDОбъявления, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбъявления);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+
+    Параметры_.Вставить("account_id", IDКабинета);
+    
+    МассивСтруктур    = Новый Массив;    
+    СтруктураКампании = Новый Структура;
+    
+    СтруктураКампании.Вставить("ad_id"  , IDОбъявления);
+    СтруктураКампании.Вставить("status" , 0);
+    
+    МассивСтруктур.Добавить(СтруктураКампании);
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(МассивСтруктур, Истина);
+    
+    Параметры_.Вставить("data", МассивСтруктур);
+        
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.updateAds", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить список рекламных категорий
+// Получает список id рекламных категорий для создания рекламного объявления
+//
+// Параметры:
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПолучитьСписокРекламныхКатегорий(Знач Параметры = "") Экспорт
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Ответ      = OPI_Инструменты.Get("api.vk.com/method/ads.getCategories", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСТоварами
+
+// Получить список категорий товаров
+// Получает список ID товарных категорий для указания при создании товара
+//
+// Параметры:
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из Строка - Ключ - ID, Значение - Имя
+Функция ПолучитьСписокКатегорийТоваров(Знач Параметры = "") Экспорт
+    
+    Response   = "response";
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Ответ      = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);
+    Результат  = Ответ[Response];
+    
+    Если ЗначениеЗаполнено(Результат) Тогда
+    	
+    	Количество = Результат["count"];
+    	
+    	Если Не ЗначениеЗаполнено(Количество) Тогда
+    		Возврат Ответ;
+    	КонецЕсли;
+    	
+    Иначе
+    	Возврат Ответ;
+    КонецЕсли;
+    
+    Параметры_.Вставить("count", Количество);
+    Ответ      = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);   
+    Результат  = Ответ[Response]; 
+    
+    Если ЗначениеЗаполнено(Результат) Тогда
+    	
+    	Категории  = Результат["items"];
+    	
+    	Если Не ЗначениеЗаполнено(Категории) Тогда
+    		Возврат Ответ;
+    	КонецЕсли;
+    	
+    Иначе
+    	Возврат Ответ;
+    КонецЕсли;
+       
+    СоответствиеКатегорий = Новый Соответствие;
+    
+    Для Каждого Категория Из Категории Цикл      
+        СоответствиеКатегорий.Вставить(Категория["id"], Категория["name"]);
+    КонецЦикла;
+       
+    Возврат СоответствиеКатегорий;
+    
+КонецФункции
+
+// Получить список товаров
+// Получает список товаров сообщества
+//
+// Параметры:
+//  Подборка  - Строка,Число        - ID подборки, если нужен отбор - sel
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий товаров
+Функция ПолучитьСписокТоваров(Знач Подборка = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("count"        , 200);
+    Параметры_.Вставить("extended"     , 1);
+    Параметры_.Вставить("with_disabled", 1);
+    
+    Если ЗначениеЗаполнено(Подборка) Тогда
+        Параметры_.Вставить("album_id", Подборка);  
+    КонецЕсли;
+    
+    МассивТоваров = Новый Массив;
+    ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры_);
+    
+    Возврат МассивТоваров;
+    
+КонецФункции
+
+// Получить товары по ID
+// Получает информацию о товарах по массиву ID
+//
+// Параметры:
+//  Товары    - Строка, Массив Из Строка - Массив ID товаров - items 
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПолучитьТоварыПоИД(Знач Товары, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Товары);
+    
+    Параметры_    = ПолучитьСтандартныеПараметры(Параметры);
+    СтрокаТоваров = "";
+    Owner         = "owner_id";
+    
+    Для Каждого Товар Из Товары Цикл       
+        ТекущийТовар  = Параметры_[Owner] + "_" + Товар;
+        ТекущийТовар  = OPI_Инструменты.ЧислоВСтроку(ТекущийТовар);
+        СтрокаТоваров = СтрокаТоваров + ТекущийТовар + ",";
+    КонецЦикла;
+    
+    СтрокаТоваров = Лев(СтрокаТоваров, СтрДлина(СтрокаТоваров) - 1);
+    Параметры_.Вставить("item_ids", СтрокаТоваров);
+    Параметры_.Вставить("extended", 1);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getById", Параметры_);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Добавить товар
+// Добавляет новый товар в каталог сообщества
+//
+// Параметры:
+//  ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь
+//  Подборка       - Строка - ID подборка для помещения товара, если необходимо - sel
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ДобавитьТовар(Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт        
+    Возврат УправлениеТоваром(ОписаниеТовара, , Подборка, Параметры);    
+КонецФункции
+
+// Изменить товар
+// Изменяет ранее созданный товар
+//
+// Параметры:
+//  Товар - Число,Строка - Идентификатор изменяемого товара - item
+//  ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь
+//  Подборка - Строка - Идентификатор новой подборки, если необходимо - sel 
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ИзменитьТовар(Знач Товар, Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт
+    Возврат УправлениеТоваром(ОписаниеТовара, Товар, Подборка, Параметры);    
+КонецФункции
+
+// Удалить товар
+// Удаляет ранее созданный товар
+//
+// Параметры:
+//  Товар - Строка,Число - ID товара - item
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьТовар(Знач Товар, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Товар);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("item_id", Товар);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.delete", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Сгруппировать товары
+// Группирует товары на основе одинаковых наборов свойств
+//
+// Параметры:
+//  МассивТоваров      - Массив Из Строка - Массив ID товаров                       - items
+//  СуществующаяГруппа - Строка           - ID существующей группы, если необходимо - sellgroup
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СгруппироватьТовары(Знач МассивТоваров, Знач СуществующаяГруппа = "", Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СуществующаяГруппа);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивТоваров);
+    
+    Параметры_     = ПолучитьСтандартныеПараметры(Параметры);
+    МассивТоваров_ = Новый Массив;
+    
+    Для Каждого Товар Из МассивТоваров Цикл
+        МассивТоваров_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар));
+    КонецЦикла;
+    
+    Товары = СтрСоединить(МассивТоваров_, ",");
+    
+    Параметры_.Вставить("item_ids", Товары);
+    
+    Если ЗначениеЗаполнено(СуществующаяГруппа) Тогда
+        Параметры_.Вставить("item_group_id", СуществующаяГруппа);
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.groupItems", Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить описание товара. !NOCLI
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Пустое описание товара:
+//  *Имя - Строка - Имя товара
+//  *Описание - Строка - Описание товара
+//  *Категория - Строка - См. ПолучитьСписокКатегорийТоваров
+//  *Цена - Число - Цена товара
+//  *СтараяЦена - Число - Для отображения скидки/изменения цены
+//  *ОсновноеФото - Строка,ДвоичныеДанные - Двоичные данные или путь к фото
+//  *URL - Строка - Ссылка на страницу сайта магазина
+//  *ДополнительныеФото - Массив Из Строка - Двоичные данные или пути к фото
+//  *ЗначенияСвойств - Массив Из Строка - См.ДобавитьВариантСвойстваТовара
+//  *ГлавныйВГруппе - Булево - Главный в группе, если есть в группе
+//  *Ширина - Число - Ширина товара в мм.
+//  *Высота - Число - Высота товара в мм.
+//  *Глубина - Число - Глубина товара в мм.
+//  *Вес - Число - Вес в гр.
+//  *SKU - Строка - SKU
+//  *ДоступныйОстаток - Число - Остаток. -1 - не ограничено
+Функция ПолучитьОписаниеТовара() Экспорт
+     
+    Товар = Новый Соответствие();
+    Товар.Вставить("Имя"                , "Новый товар");     // Имя товара
+    Товар.Вставить("Описание"           , "Описание товара"); // Описание товара
+    Товар.Вставить("Категория"          , "20173");           // См ПолучитьСписокКатегорийТоваров()
+    Товар.Вставить("Цена"               , 1);                 // Цена.
+    Товар.Вставить("СтараяЦена"         , Неопределено);      // Для отражения изменения цены 
+    Товар.Вставить("ОсновноеФото"       , Неопределено);      // ДД или путь к осн. фото
+    Товар.Вставить("URL"                , Неопределено);      // Ссылка на страницу магазина
+    Товар.Вставить("ДополнительныеФото" , Новый Массив);      // Массив путей или ДД для доп. фото
+    Товар.Вставить("ЗначенияСвойств"    , Новый Массив);      // Значения свойств (варианты). Максимум 2
+    Товар.Вставить("ГлавныйВГруппе"     , Ложь);              // Сделать главным в своей группе  
+    Товар.Вставить("Ширина"             , Неопределено);      // В миллиметрах
+    Товар.Вставить("Высота"             , Неопределено);      // В миллиметрах
+    Товар.Вставить("Глубина"            , Неопределено);      // В миллиметрах
+    Товар.Вставить("Вес"                , Неопределено);      // В граммах
+    Товар.Вставить("SKU"                , Неопределено);      // Артикул
+    Товар.Вставить("ДоступныйОстаток"   , 1);
+    
+    Возврат Товар;
+     
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСПодборкамиТоваров
+
+// Получить список подборок
+// Получает список подборок товаров
+//
+// Параметры:
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - Массив соответствий подборок
+Функция ПолучитьСписокПодборок(Знач Параметры = "") Экспорт
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("count", 100);
+    
+    МассивАльбомов = Новый Массив;
+    ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры_);
+    
+    Возврат МассивАльбомов;
+    
+КонецФункции
+
+// Получить подборки по ID
+// Получить список подборок по массиву ID
+//
+// Параметры:
+//  Подборки  - Строка, Массив Из Строка - ID подборок - sels
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ПолучитьПодборкиПоИД(Знач Подборки, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Подборки);
+    
+    Параметры_     = ПолучитьСтандартныеПараметры(Параметры);    
+    Подборки_      = Новый Массив;
+    СтрокаПодборок = "";
+      
+    Для Каждого Подборка Из Подборки Цикл
+        Подборки_.Добавить(OPI_Инструменты.ЧислоВСтроку(Подборка));    
+    КонецЦикла;    
+    
+    СтрокаПодборок = СтрСоединить(Подборки_, ",");
+        
+    Параметры_.Вставить("album_ids", СтрокаПодборок);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbumById", Параметры_);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Создать подборку товаров
+// Создает пустую подборку товаров
+//
+// Параметры:
+//  Название  - Строка                - Название подборки - title
+//  Картинка  - Строка,ДвоичныеДанные - Файл картинки     - picture
+//  Основная  - Булево                - Основная          - main
+//  Скрытая   - Булево                - Скрытая           - hidden
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция СоздатьПодборкуТоваров(Знач Название
+    , Знач Картинка
+    , Знач Основная = Ложь
+    , Знач Скрытая = Ложь
+    , Знач Параметры = "") Экспорт
+    
+    Возврат УправлениеПодборкой(Название, Картинка, , Основная, Скрытая, Параметры);
+    
+КонецФункции
+
+// Изменить подборку товаров
+// Изменяет свойства подборки товаров
+//
+// Параметры:
+//  Название - Строка                - Новое название подборки         - title
+//  Подборка - Строка                - ID подборки					   - sel
+//  Картинка - Строка,ДвоичныеДанные - Новая картинка подборки         - picture
+//  Основная - Булево                - Основная                        - main
+//  Скрытая  - Булево                - Скрытая                         - hidden
+//  Параметры - Структура из Строка  - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ИзменитьПодборкуТоваров(Знач Название
+    , Знач Подборка
+    , Знач Картинка = ""
+    , Знач Основная = Ложь
+    , Знач Скрытая = Ложь
+    , Знач Параметры = "") Экспорт
+    
+    Возврат УправлениеПодборкой(Название, Картинка, Подборка, Основная, Скрытая, Параметры);
+    
+КонецФункции
+
+// Добавить товар в подборку
+// Добавляет товар в подборку
+//
+// Параметры:
+//  МассивТоваров - Массив из Строка, Число - Массив товаров или товар - items
+//  Подборка      - Строка                  - ID подборки              - sel
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция ДобавитьТоварВПодборку(Знач МассивТоваров, Знач Подборка, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивТоваров);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
+    
+    Параметры_     = ПолучитьСтандартныеПараметры(Параметры);
+    МассивТоваров_ = Новый Массив;
+      
+    Для Каждого Товар Из МассивТоваров Цикл
+        МассивТоваров_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар));    
+    КонецЦикла;    
+    
+    СписокТоваров = СтрСоединить(МассивТоваров_, ",");
+    
+    Параметры_.Вставить("item_ids" , СписокТоваров);
+    Параметры_.Вставить("album_ids", Подборка);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addToAlbum", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить товар из подборки
+// Удаляет ранее добавленный товар из подборки
+// 
+// Параметры:
+//  Товар     - Строка - ID товара   - item
+//  Подборка  - Строка - ID подборки - sel
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьТоварИзПодборки(Знач Товар, Знач Подборка, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Товар);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
+
+    Параметры_   = ПолучитьСтандартныеПараметры(Параметры);
+    
+    Параметры_.Вставить("item_id"  , Товар);
+    Параметры_.Вставить("album_ids", Подборка);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.removeFromAlbum", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить подборку
+// Удаляет подборку по ID
+//
+// Параметры:
+//  Подборка  - Строка              - ID подборки - sel
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
+Функция УдалитьПодборку(Знач Подборка, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("album_id", Подборка);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteAlbum", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСоСвойствамиТоваров
+
+// Получить список свойств
+// Получает список свойств товаров группы
+// 
+// Параметры:
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция ПолучитьСписокСвойств(Знач Параметры = "") Экспорт
+    
+    Response   = "response";
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    
+    Ответ      = OPI_Инструменты.Get("api.vk.com/method/market.getProperties", Параметры_);
+    Свойства   = Ответ[Response]["items"];
+    
+    Возврат Свойства;
+    
+КонецФункции
+
+// Создать свойство товара
+// Создает новое свойство для использования в товарах
+// 
+// Параметры:
+//  Название  - Строка              - Название свойства               - title
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция СоздатьСвойствоТовара(Знач Название, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("title", Название);
+        
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addProperty", Параметры_);   
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Изменить свойство товара
+// Изменяет существующее свойство товара
+// 
+// Параметры:
+//  Название  - Строка              - Новое название                  - title
+//  Свойство  - Строка,Число        - ID свойства                     - prop
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция ИзменитьСвойствоТовара(Знач Название, Знач Свойство, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("title"      , Название);
+    Параметры_.Вставить("property_id", Свойство);
+    Параметры_.Вставить("type"       , "text");
+        
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editProperty", Параметры_);   
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить свойство товара
+// Удаляет существующее свойство товара
+// 
+// Параметры:
+//  Свойство  - Строка,Число        - ID свойства                     - prop
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция УдалитьСвойствоТовара(Знач Свойство, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("property_id", Свойство);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteProperty", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Добавить вариант свойства товара
+// Добавляет вариант для существующего свойства
+// 
+// Параметры:
+//  Значение  - Строка              - Значение свойства                      - value
+//  Свойство  - Строка,Число        - ID свойства, куда добавляется вариант  - prop
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK    
+Функция ДобавитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("property_id", Свойство);
+    Параметры_.Вставить("title"      , Значение);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addPropertyVariant", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Изменить вариант свойства товара
+// Изменяет значение варианта существующего свойства товара
+// 
+// Параметры:
+//  Значение  - Строка              - Новое значение свойства         - value
+//  Свойство  - Строка,Число        - ID свойства                     - prop
+//  Вариант   - Строка,Число        - ID варианта                     - option
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK      
+Функция ИзменитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Вариант, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Вариант);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("property_id", Свойство);
+    Параметры_.Вставить("variant_id" , Вариант);
+    Параметры_.Вставить("title"      , Значение);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editPropertyVariant", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Удалить вариант свойства товара
+// Удаляет ранее созданный вариант свойства
+// 
+// Параметры:
+//  Вариант   - Строка,Число        - ID варианта - option
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK     
+Функция УдалитьВариантСвойстваТовара(Знач Вариант, Знач Параметры = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Вариант);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("variant_id", Вариант);
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deletePropertyVariant", Параметры_);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область РаботаСЗаказами
+
+// Получить список заказов
+// Возвращает список заказов сообщества
+// 
+// Параметры:
+//  Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK 
+Функция ПолучитьСписокЗаказов(Знач Параметры = "") Экспорт
+    
+    Параметры = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры.Вставить("count", 50);
+    
+    МассивЗаказов = Новый Массив;
+    ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры);
+    
+    Возврат МассивЗаказов;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область Прочие
+
+// Сформировать клавиатуру
+// Формирует клавиатуру по массиву кнопок
+// 
+// Параметры:
+//  МассивКнопок - Массив из Строка - Массив заголовков кнопок - buttons
+// 
+// Возвращаемое значение:
+//  Строка -  JSON клавиатуры
+Функция СформироватьКлавиатуру(Знач МассивКнопок) Экспорт
+      
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);  
+    
+    Клавиатура          = Новый Структура;
+    МассивКлавиатуры    = Новый Массив;
+    МассивБлока         = Новый Массив;
+    
+    Для Каждого Действие Из МассивКнопок Цикл
+        
+        Кнопка      = Новый Структура;
+        Выражение   = Новый Структура;                        
+        
+        Выражение.Вставить("type" , "text");
+        Выражение.Вставить("label", Действие);
+        
+        Кнопка.Вставить("action", Выражение);
+        МассивБлока.Добавить(Кнопка);
+        
+    КонецЦикла;
+    
+    МассивКлавиатуры.Добавить(МассивБлока);
+    
+    Клавиатура.Вставить("buttons" , МассивКлавиатуры);   
+    Клавиатура.Вставить("one_time", Ложь);
+    
+    Возврат OPI_Инструменты.JSONСтрокой(Клавиатура);
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
+    
+    // Здесь собрано определение данных для работы с VK API
+    // Вы можете переопределять их, передавая в качестве параметра
+    // Совпадающие поля будут перезаписаны с приоритетом параметра функции
+    
+    Параметры_ = Новый Структура;
+    
+    // access_token - можно получить в браузере по URL из функции СоздатьСсылкуПолученияТокена()
+    // from_group   - действия будут выполняться от лица группы
+    // owner_id     - id группы с "-" в начале. Можно найти в настройках группы ВК или в ее URL, если не был
+    //               установлен свой
+    // app_id       - id приложения, которое необходимо создать в профиле на странице для разработчиков
+    // group_id     - owner_id, но без "-"
+    
+    Параметры_.Вставить("access_token"  , "");
+    Параметры_.Вставить("from_group"    , "1");
+    Параметры_.Вставить("owner_id"      , "");
+    Параметры_.Вставить("v"             , "5.131");
+    Параметры_.Вставить("app_id"        , "");
+    Параметры_.Вставить("group_id"      , "");
+    
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
+    
+    Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
+        Для Каждого ПереданныйПараметр Из Параметры Цикл
+            Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
+        КонецЦикла;
+    КонецЕсли;
+
+    Возврат Параметры_;
+
+КонецФункции
+
+Функция ПолучитьИДКартинки(Знач Картинка, Знач Параметры, Знач Вид)
+	
+	Response  = "response";
+    Ответ     = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид);
+    Результат = Ответ[Response];
+
+    Если ЗначениеЗаполнено(Результат) Тогда
+    	ИДФото = Результат["photo_id"];
+    	
+    	Если Не ЗначениеЗаполнено(ИДФото) Тогда
+    		Возврат Ответ;	
+    	КонецЕсли;
+    	
+    Иначе
+    	Возврат Ответ;
+    КонецЕсли;
+    
+    ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
+    Возврат ИДФото;
+    
+КонецФункции
+
+Функция ПолучитьСоответствиеКартинки(Знач Картинка, Знач Параметры, Знач Вид)
+	
+	Ответ       = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид);   
+    ОтветМассив = Ответ.Получить("response");
+    
+    Если Не ЗначениеЗаполнено(ОтветМассив) Или Не ТипЗнч(ОтветМассив) = Тип("Массив") Тогда
+    	Возврат Ответ;
+    Иначе
+    	Если ОтветМассив.Количество() = 0 Тогда
+    		Возврат Ответ;
+    	Иначе
+    		ОтветСоответствие = ОтветМассив[0];
+    	КонецЕсли;
+    КонецЕсли;
+     
+    Возврат ОтветСоответствие;
+       
+КонецФункции
+
+Функция ПолучитьМассивПодборок(Знач Подборки, Знач Параметры = "")
+	
+	Response   = "response";
+	Подборки   = ПолучитьПодборкиПоИД(Подборки, Параметры);
+    Результат  = Подборки[Response];
+    
+    Если ЗначениеЗаполнено(Результат) Тогда
+    	
+    	МассивПодборок = Результат["items"];
+    	
+    	Если Не ЗначениеЗаполнено(МассивПодборок) Тогда
+    		Возврат Подборки;	
+    	КонецЕсли;
+    	
+	Иначе
+		Возврат Подборки;
+    КонецЕсли;
+    
+    Возврат МассивПодборок;
+            
+КонецФункции
+
+Функция ОпределитьМетодЗагрузкиИзображений(Знач Вид)
+    
+    СоответствиеМетодов = Новый Соответствие;
+    Загрузка            = "Загрузка";
+    Сохранение          = "Сохранение";
+    Способ              = "Способ";
+    Фото                = "Фото";
+    
+    Если Вид = "Пост" Тогда
+       
+        СоответствиеМетодов.Вставить(Загрузка  , "photos.getWallUploadServer");
+        СоответствиеМетодов.Вставить(Сохранение, "photos.saveWallPhoto");
+        СоответствиеМетодов.Вставить(Фото      , "photo");
+        СоответствиеМетодов.Вставить(Способ    , 1);
+        
+    ИначеЕсли Вид = "Товар" Тогда
+        
+        СоответствиеМетодов.Вставить(Загрузка  , "market.getProductPhotoUploadServer");
+        СоответствиеМетодов.Вставить(Сохранение, "market.saveProductPhoto");
+        СоответствиеМетодов.Вставить(Способ    , 2);
+        
+    ИначеЕсли Вид = "История" Тогда
+        
+        СоответствиеМетодов.Вставить(Загрузка  , "stories.getPhotoUploadServer");
+        СоответствиеМетодов.Вставить(Сохранение, "stories.save");
+        СоответствиеМетодов.Вставить(Способ    , 3);
+    
+    ИначеЕсли Вид = "Опрос" Тогда
+        
+        СоответствиеМетодов.Вставить(Загрузка  , "polls.getPhotoUploadServer");
+        СоответствиеМетодов.Вставить(Сохранение, "polls.savePhoto");
+        СоответствиеМетодов.Вставить(Фото      , "photo");
+        СоответствиеМетодов.Вставить(Способ    , 1);
+        
+    Иначе
+        
+        СоответствиеМетодов.Вставить(Загрузка  , "photos.getUploadServer");
+        СоответствиеМетодов.Вставить(Сохранение, "photos.save");
+        СоответствиеМетодов.Вставить(Фото      , "photos_list");
+        СоответствиеМетодов.Вставить(Способ    , 1);
+        
+    КонецЕсли;
+    
+    Возврат СоответствиеМетодов;
+    
+КонецФункции
+
+Функция ПолучитьСоответствиеПараметровТовара()
+    
+    Поля = Новый Соответствие();
+    Поля.Вставить("Имя"                , "name");     
+    Поля.Вставить("Описание"           , "description"); 
+    Поля.Вставить("Категория"          , "category_id");                 
+    Поля.Вставить("Цена"               , "price");                 
+    Поля.Вставить("СтараяЦена"         , "old_price");  
+    Поля.Вставить("URL"                , "url");
+    Поля.Вставить("ГлавныйВГруппе"     , "is_main_variant"); 
+    Поля.Вставить("Ширина"             , "dimension_width");      
+    Поля.Вставить("Высота"             , "dimension_height");      
+    Поля.Вставить("Глубина"            , "dimension_length");      
+    Поля.Вставить("Вес"                , "weight");      
+    Поля.Вставить("SKU"                , "sku"); 
+    Поля.Вставить("ДоступныйОстаток"   , "stock_amount");
+       
+    Возврат Поля;
+
+КонецФункции
+
+Функция УправлениеТоваром(Знач ОписаниеТовара, Знач ИДТовара = "", Знач Подборка = "", Знач Параметры = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДТовара);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеТовара);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
+    Параметры_.Вставить("v", "5.199");
+    
+    Response = "response";
+    
+    ЗаполнитьПоляЗапросаТовара(ОписаниеТовара, Параметры_);
+    
+    Если ЗначениеЗаполнено(ИДТовара) Тогда       
+        Параметры_.Вставить("item_id", ИДТовара);
+        Метод = "edit";    
+    Иначе       
+        Метод = "add";
+    КонецЕсли;
+       
+    Ответ     = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);
+    Результат = Ответ[Response];
+    
+    Если Не ЗначениеЗаполнено(ИДТовара) И ЗначениеЗаполнено(Результат) Тогда 
+    	
+        ИДТовара = Результат["market_item_id"];
+        
+        Если Не ЗначениеЗаполнено(ИДТовара) Тогда
+        	Возврат Ответ;	
+        КонецЕсли;
+        
+    Иначе
+    	Возврат Ответ;
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Подборка) И ЗначениеЗаполнено(ИДТовара) Тогда
+        ДобавитьТоварВПодборку(ИДТовара, Подборка, Параметры_);
+    КонецЕсли;
+    
+    Возврат Ответ;
+
+КонецФункции
+
+Функция УправлениеПодборкой(Знач Название
+    , Знач Картинка   = ""
+    , Знач ИДПодборки = ""
+    , Знач Основная   = Ложь
+    , Знач Скрытая    = Ложь
+    , Знач Параметры  = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДПодборки);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Основная);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытая);
+    
+    Параметры_ = ПолучитьСтандартныеПараметры(Параметры);   
+    Ответ      = ДобавитьПараметрКартинки(Картинка, ИДПодборки, Параметры_);
+    
+    Если ЗначениеЗаполнено(Ответ) Тогда
+        Возврат Ответ;
+    КонецЕсли;
+      
+    Параметры_.Вставить("title"        , Название);
+    Параметры_.Вставить("main_album"   , ?(Основная, 1, 0));
+    Параметры_.Вставить("is_hidden"    , ?(Скрытая, 1, 0));
+    
+    Если ЗначениеЗаполнено(ИДПодборки) Тогда       
+        Параметры_.Вставить("album_id", ИДПодборки);
+        Метод = "editAlbum";    
+    Иначе       
+        Метод = "addAlbum";
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+Функция ДобавитьПараметрКартинки(Знач Картинка, Знач ИДПодборки, Параметры)
+    
+    PhotoID = "photo_id";
+    
+    Если ЗначениеЗаполнено(Картинка) Тогда
+        
+        ИДФото = ПолучитьИДКартинки(Картинка, Параметры, "Товар");
+        
+        Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
+            Возврат ИДФото; 
+        КонецЕсли;
+      
+        Параметры.Вставить(PhotoID, ИДФото);
+        
+    Иначе
+        
+        Если ЗначениеЗаполнено(ИДПодборки) Тогда
+            
+            Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры);
+            
+            Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда
+                Возврат Подборки;   
+            КонецЕсли;
+                                
+            Если Не Подборки.Количество() = 0 Тогда              
+                ИДФото = Подборки[0]["photo"]["id"];
+                OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото);
+                Параметры.Вставить(PhotoID, ИДФото);
+            КонецЕсли;
+            
+        КонецЕсли;
+        
+    КонецЕсли;
+    
+    Возврат "";
+    
+КонецФункции
+
+Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры)
+    
+    Response            = "response";
+    Способ              = Метод["Способ"];
+    СтандартныйСпособ   = 1;
+    НовыйСпособ         = 2;
+
+    Если Способ = СтандартныйСпособ Тогда
+        
+        Hash       = "hash";
+        Serv       = "server";
+        Aid        = "aid";
+        Фото       = Метод["Фото"];
+        
+        Параметры.Вставить(Hash, Ответ[Hash]);
+        Параметры.Вставить(Фото, Ответ[Фото]);
+        
+        СерверФото = Ответ.Получить(Serv);
+               
+        Если ЗначениеЗаполнено(СерверФото) Тогда
+            СерверФото = OPI_Инструменты.ЧислоВСтроку(СерверФото);
+            Параметры.Вставить(Serv, СерверФото);      
+        КонецЕсли;
+        
+        Идентификатор = Ответ.Получить(Aid);
+               
+        Если ЗначениеЗаполнено(Идентификатор) Тогда
+            Идентификатор = OPI_Инструменты.ЧислоВСтроку(Идентификатор);
+            Параметры.Вставить(Aid , Идентификатор);      
+        КонецЕсли;
+        
+    ИначеЕсли Способ = НовыйСпособ Тогда
+        
+        ОтветСтрокой = OPI_Инструменты.JSONСтрокой(Ответ);
+        Параметры.Вставить("upload_response", ОтветСтрокой);
+        
+    Иначе
+        
+        Параметры.Вставить("upload_results", Ответ[Response]["upload_result"]);
+        
+    КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ЗаполнитьПоляЗапросаТовара(Знач ОписаниеТовара, Параметры)
+    
+    Response     = "response";
+    ОсновноеФото = ОписаниеТовара["ОсновноеФото"];
+    ДопФото      = ОписаниеТовара["ДополнительныеФото"];
+    Свойства     = ОписаниеТовара["ЗначенияСвойств"];
+    
+    Если ЗначениеЗаполнено(ОсновноеФото) Тогда
+    	
+        Ответ     = ЗагрузитьФотоНаСервер(ОсновноеФото, Параметры, "Товар");
+        Результат = Ответ[Response];
+        
+        Если ЗначениеЗаполнено(Результат) Тогда
+        	ИДФото = Результат["photo_id"];
+        	
+        	Если Не ЗначениеЗаполнено(ИДФото) Тогда
+        		Возврат;	
+        	КонецЕсли;
+        	
+        Иначе
+        	Возврат;
+        КонецЕсли;
+        
+        ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
+        Параметры.Вставить("main_photo_id", ИДФото); 
+         
+    КонецЕсли;
+    
+    Если ТипЗнч(Свойства) = Тип("Массив") Тогда  
+        
+        Свойства_ = Новый Массив;
+        
+        Для Каждого Свойство Из Свойства Цикл
+            Свойства_.Добавить(OPI_Инструменты.ЧислоВСтроку(Свойство));   
+        КонецЦикла;
+        
+        Свойства = СтрСоединить(Свойства_, ","); 
+        
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Свойства) Тогда
+        Параметры.Вставить("variant_ids", OPI_Инструменты.ЧислоВСтроку(Свойства));    
+    КонецЕсли;
+    
+    ДобавитьДополнительныеФотоТовара(ДопФото, Параметры);
+    
+    Для Каждого Поле Из ПолучитьСоответствиеПараметровТовара() Цикл
+        
+        Значение = ОписаниеТовара[Поле.Ключ];
+        
+        Если Значение <> Неопределено Тогда
+            Параметры.Вставить(Поле.Значение, ОписаниеТовара[Поле.Ключ]);
+        КонецЕсли;
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьДополнительныеФотоТовара(Знач МассивФото, Параметры)
+    
+    Если ТипЗнч(МассивФото) = Тип("Массив") Тогда
+        Если МассивФото.Количество() > 0 Тогда
+            
+            СтрокаФотографий = "";
+            
+            Для Каждого Фото Из МассивФото Цикл
+                
+                ИДФото = ПолучитьИДКартинки(Фото, Параметры, "Товар");
+                
+		        Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
+		    		Возврат;	
+		    	КонецЕсли;
+
+                СтрокаФотографий = СтрокаФотографий + ИДФото + ","; 
+                
+            КонецЦикла;
+            
+            СтрокаФотографий = Лев(СтрокаФотографий, СтрДлина(СтрокаФотографий) - 1);
+            Параметры.Вставить("photo_ids", СтрокаФотографий);
+        КонецЕсли;
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг = 0)
+    
+    Response         = "response";
+    МаксимумВЗапросе = 200;
+    Ответ            = OPI_Инструменты.Get("api.vk.com/method/market.get", Параметры);
+    Товары           = Ответ[Response]["items"];
+    
+    Если Товары.Количество() = 0 Тогда
+        Возврат;
+    КонецЕсли;      
+    
+    Для Каждого Товар Из Товары Цикл
+        МассивТоваров.Добавить(Товар);
+    КонецЦикла;
+       
+    Сдвиг = Сдвиг + МаксимумВЗапросе;
+    Параметры.Вставить("offset", Сдвиг);
+    ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг);
+    
+КонецПроцедуры
+
+Процедура ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг = 0)
+    
+    Response         = "response";
+    МаксимумВЗапросе = 100;
+    Ответ            = OPI_Инструменты.Get("api.vk.com/method/market.getAlbums", Параметры);
+    Альбомы          = Ответ[Response]["items"];
+    
+    Если Альбомы.Количество() = 0 Тогда
+        Возврат;
+    КонецЕсли;      
+    
+    Для Каждого Альбом Из Альбомы Цикл
+        МассивАльбомов.Добавить(Альбом);
+    КонецЦикла;
+       
+    Сдвиг = Сдвиг + МаксимумВЗапросе;
+    Параметры.Вставить("offset", Сдвиг);
+    ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг);
+    
+КонецПроцедуры
+
+Процедура ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг = 0)
+    
+    Response         = "response";
+    МаксимумВЗапросе = 50;
+    Ответ            = OPI_Инструменты.Get("api.vk.com/method/market.getGroupOrders", Параметры);
+    Заказы           = Ответ[Response]["items"];
+    
+    Если Заказы.Количество() = 0 Тогда
+        Возврат;
+    КонецЕсли;      
+    
+    Для Каждого Заказ Из Заказы Цикл
+        МассивЗаказов.Добавить(Заказ);
+    КонецЦикла;
+       
+    Сдвиг = Сдвиг + МаксимумВЗапросе;
+    Параметры.Вставить("offset", Сдвиг);
+    ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг);
+    
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_VK/OPI_VK.mdo b/en/OPI/src/CommonModules/OPI_VK/OPI_VK.mdo
new file mode 100644
index 0000000000..f0ebc10c6b
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_VK/OPI_VK.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1ab0a76a-246d-4037-97c3-212d680aa589">
+  <name>OPI_VK</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы интеграции с VK (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Viber/Module.bsl b/en/OPI/src/CommonModules/OPI_Viber/Module.bsl
new file mode 100644
index 0000000000..583e0ec42d
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Viber/Module.bsl
@@ -0,0 +1,414 @@
+// Расположение OS: ./OInt/core/Modules/OPI_Viber.os
+// Библиотека: Viber
+// Команда CLI: viber
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+ 
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+#Область НастройкиИИнформация
+
+// Установить Webhook
+// ВАЖНО: Установка Webhook обязательна по правилам Viber. Для этого надо иметь свободный URL,
+// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
+// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
+// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
+// 
+// Параметры:
+//  Токен - Строка - Токен Viber               - token
+//  URL   - Строка - URL для установки Webhook - url
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("url"         , URL  , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("auth_token"  , Токен, "Строка", Параметры);
+ 
+    Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
+    
+КонецФункции
+
+// Получить информацию о канале
+// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
+// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
+    
+    URL = "https://chatapi.viber.com/pa/get_account_info";   
+    Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
+    
+КонецФункции
+
+// Получить данные пользователя
+// Получает информацию о пользователе по ID
+// 
+// Параметры:
+//  Токен          - Строка        - Токен                 - token
+//  IDПользователя - Строка, Число - ID пользователя Viber - user
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
+    
+    URL = "https://chatapi.viber.com/pa/get_user_details";
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
+
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить онлайн пользователей
+// Получает статус пользователя или нескольких пользователей по ID
+// 
+// Параметры:
+//  Токен           - Строка                              - Токен Viber                - token
+//  IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber  - users
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
+    
+    URL = "https://chatapi.viber.com/pa/get_online";
+        
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
+    
+    Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
+    
+    Возврат Ответ;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область ОтправкаСообщений
+
+// Отправить текстовое сообщение
+// Отправляет текстовое сообщение в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                               - token
+//  Текст          - Строка       - Текст сообщения                                                     - text
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
+//  ОтправкаВКанал - Булево       - Отправка в канал или в чат бота                                     - ischannel
+//  Клавиатура     - Структура из Строка -  См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьТекстовоеСообщение(Знач Токен
+    , Знач Текст
+    , Знач IDПользователя
+    , Знач ОтправкаВКанал
+    , Знач Клавиатура = "") Экспорт
+    
+    Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура); 
+    
+КонецФункции
+
+// Отправить картинку
+// Отправляет картинку в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                                - token
+//  URL            - Строка       - URL картинки                                                         - picture
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя  - user
+//  ОтправкаВКанал - булево       - Отправка в канал или в чат бота                                      - ischannel
+//  Описание       - Строка       - Аннотация к картинке                                                 - description
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
+    
+    Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
+    
+КонецФункции
+
+// Отправить файл
+// Отправляет файл (документ) в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                                - token
+//  URL            - Строка       - URL файла                                                            - file 
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя  - user   
+//  ОтправкаВКанал - Булево       - Отправка в канал или в чат бота                                      - ischannel
+//  Расширение     - Строка       - Расширение файла                                                     - ext
+//  Размер         - Число        - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьФайл(Знач Токен
+    , Знач URL
+    , Знач IDПользователя
+    , Знач ОтправкаВКанал
+    , Знач Расширение
+    , Знач Размер = "") Экспорт
+        
+    Если Не ЗначениеЗаполнено(Размер) Тогда
+        
+        Ответ  = OPI_Инструменты.Get(URL);
+        Размер = Ответ.Размер();
+        
+    КонецЕсли;
+    
+    Строка_    = "Строка";
+    Расширение = СтрЗаменить(Расширение, ".", "");
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("URL"       , URL       , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("Размер"    , Размер    , Строка_, Параметры);
+    OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
+    
+    Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
+    
+КонецФункции
+
+// Отправить контакт
+// Отправляет контакт с номером телефона в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                                - token
+//  ИмяКонтакта    - Строка       - Имя контакта                                                         - name
+//  НомерТелефона  - Строка       - Номер телефона                                                       - phone
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя  - user  
+//  ОтправкаВКанал - Булево       - Отправка в канал или в чат бота                                      - ischannel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьКонтакт(Знач Токен
+    , Знач ИмяКонтакта
+    , Знач НомерТелефона
+    , Знач IDПользователя
+    , Знач ОтправкаВКанал) Экспорт
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("name"        , ИмяКонтакта  , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
+    
+    Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры); 
+    
+КонецФункции
+
+// Отправить локацию
+// Отправляет географические координаты в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                                - token
+//  Широта         - Строка,Число - Географическая широта                                                - lat
+//  Долгота        - Строка,Число - Географическая долгота                                               - long
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя  - user  
+//  ОтправкаВКанал - Булево       - Отправка в канал или в чат бота                                      - ischannel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
+    
+    Параметры = Новый Структура;
+    OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
+    OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
+    
+    Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
+    
+КонецФункции
+
+// Отправить ссылку
+// Отправляет URL с предпросмотром в чат или канал
+// 
+// Параметры:
+//  Токен          - Строка       - Токен                                                                - token
+//  URL            - Строка       - Отправляемая ссылка                                                  - url
+//  IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя  - user  
+//  ОтправкаВКанал - Булево       - Отправка в канал или в чат бота                                      - ischannel
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
+Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
+    
+    Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
+    
+КонецФункции
+
+// Сформировать клавиатуру из массива кнопок
+// Возвращает структура клавиатуры для сообщений
+// 
+// Параметры:
+//  МассивКнопок - Массив из Строка - Массив кнопок                - buttons
+//  ЦветКнопок   - Строка           - HEX цвет кнопок с # в начале - color
+// 
+// Возвращаемое значение:
+//  Структура -  Сформировать клавиатуру из массива кнопок:
+// * Buttons - Массив из Структура - Массив сформированных кнопок 
+// * Type - Строка - Тип клавиатуры 
+Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
+    
+    МассивСтруктурКнопок = Новый Массив;
+    СтруктураКлавиатуры  = Новый Структура;
+    
+    Для Каждого ТекстКнопки Из МассивКнопок Цикл
+        
+        СтруктураКнопки = Новый Структура;
+        СтруктураКнопки.Вставить("ActionType", "reply");
+        СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
+        СтруктураКнопки.Вставить("Text"      , ТекстКнопки);
+        СтруктураКнопки.Вставить("BgColor"   , ЦветКнопок);
+        СтруктураКнопки.Вставить("Coloumns"  , 3);
+    
+        МассивСтруктурКнопок.Добавить(СтруктураКнопки);
+        
+    КонецЦикла;
+    
+    СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
+    СтруктураКлавиатуры.Вставить("Type"   , "keyboard");
+    
+    Возврат СтруктураКлавиатуры;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+// Отправить сообщение.
+// 
+// Параметры:
+//  Токен - Строка - Токен
+//  Тип - Строка -  Тип отправляемого сообщения
+//  IDПользователя - Строка,Число - ID пользователя Viber
+//  ЭтоКанал - Булево - Отправка в канал или чат с ботом
+//  Значение - Строка, Структура -  Значение:
+// * URL - Строка - При отправке  URL
+// * Размер - Число, Строка - Размер файла в случае отправке
+// * Расширение - Строка - Расширение файла в случае отправки
+//  Текст - Строка -  Текст сообщения
+//  Клавиатура - Структура из Строка -  Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок 
+// 
+// Возвращаемое значение:
+//  Произвольный, HTTPОтвет -  Отправить сообщение
+Функция ОтправитьСообщение(Знач Токен
+    , Знач Тип
+    , Знач IDПользователя
+    , Знач ЭтоКанал
+    , Знач Значение = ""
+    , Знач Текст = ""
+    , Знач Клавиатура = "")
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
+    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
+    
+    СтруктураПараметров = ВернутьСтандартныеПараметры();
+    СтруктураПараметров.Вставить("type", Тип);  
+    
+    Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
+        СтруктураПараметров.Вставить("text", Текст);
+    КонецЕсли;
+    
+    Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
+        СтруктураПараметров.Вставить("keyboard", Клавиатура);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Значение) Тогда
+        
+        Если Тип = "file" Тогда
+            СтруктураПараметров.Вставить("media"    , Значение["URL"]);
+            СтруктураПараметров.Вставить("size"     , Значение["Размер"]);
+            СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
+        ИначеЕсли Тип = "contact" Тогда
+            СтруктураПараметров.Вставить("contact"  , Значение);
+        ИначеЕсли Тип = "location" Тогда
+            СтруктураПараметров.Вставить("location" , Значение);
+        Иначе
+            СтруктураПараметров.Вставить("media"    , Значение);
+        КонецЕсли;
+        
+    КонецЕсли;
+    
+    Если ЭтоКанал Тогда
+        СтруктураПараметров.Вставить("from", IDПользователя);
+        URL = "https://chatapi.viber.com/pa/post";
+    Иначе   
+        СтруктураПараметров.Вставить("receiver", IDПользователя);
+        URL = "https://chatapi.viber.com/pa/send_message";
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
+    
+    Попытка
+        Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
+    Исключение
+        Возврат Ответ;
+    КонецПопытки;
+    
+КонецФункции
+
+Функция ВернутьСтандартныеПараметры() 
+    
+    СтруктураОтправителя = Новый Структура;
+    СтруктураОтправителя.Вставить("name"  , "Bot");
+    СтруктураОтправителя.Вставить("avatar", "");
+    
+    СтруктураПараметров  = Новый Структура;
+    СтруктураПараметров.Вставить("sender", СтруктураОтправителя);
+    СтруктураПараметров.Вставить("min_api_version", 1);
+    
+    Возврат СтруктураПараметров;
+    
+КонецФункции
+
+Функция ТокенВЗаголовки(Знач Токен)
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    СтруктураЗаголовков = Новый Соответствие;
+    СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
+    Возврат СтруктураЗаголовков;
+    
+КонецФункции
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_Viber/OPI_Viber.mdo b/en/OPI/src/CommonModules/OPI_Viber/OPI_Viber.mdo
new file mode 100644
index 0000000000..dc7840096f
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Viber/OPI_Viber.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ece78a60-71c0-4443-a6e4-63dd8a7b10d0">
+  <name>OPI_Viber</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы интеграции с Viber (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_YandexDisk/Module.bsl b/en/OPI/src/CommonModules/OPI_YandexDisk/Module.bsl
new file mode 100644
index 0000000000..84012779b9
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_YandexDisk/Module.bsl
@@ -0,0 +1,635 @@
+// Расположение OS: ./OInt/core/Modules/OPI_YandexDisk.os
+// Библиотека: Yandex Disk
+// Команда CLI: yadisk
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:NumberOfOptionalParams-off
+// BSLLS:UsingServiceTag-off
+
+//@skip-check method-too-many-params
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools" 
+
+#Область ПрограммныйИнтерфейс
+
+#Область РаботаСФайламиИПапками
+
+// Получить информацию о диске
+// Получает информацию о текущем диске
+// 
+// Параметры:
+//  Токен - Строка - Токен - token
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    Ответ     = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Создать папку
+// Создает каталог на диске
+// 
+// Параметры:
+//  Токен - Строка - Токен                     - token
+//  Путь  - Строка - Путь к созаваемой папке   - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    URL       = "https://cloud-api.yandex.net/v1/disk/resources";
+    Href      = "href";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("path", Путь);
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);    
+    Ответ     = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
+    
+    URLОтвета = Ответ[Href];  
+    
+    Если Не ЗначениеЗаполнено(URLОтвета) Тогда
+    	Возврат Ответ;	
+    КонецЕсли;
+     
+    Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Получить объект
+// Получает информацию об объекте диска по заданному пути
+// 
+// Параметры:
+//  Токен - Строка - Токен                  - token
+//  Путь  - Строка - Путь к папке или файлу - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    Параметры = Новый Структура;
+    Параметры.Вставить("path", Путь);
+    
+    Ответ     = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Удалить объект
+// Удаляет объект по заданному пути
+// 
+// Параметры:
+//  Токен    - Строка - Токен                              - token
+//  Путь     - Строка - Путь к удаляемой папке или файлу   - path
+//  ВКорзину - Булево - В корзину                          - can
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ВКорзину);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("path"       , Путь);
+    Параметры.Вставить("permanently", Не ВКорзину);
+    
+    Ответ     = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки);
+    
+    Возврат Ответ;
+
+КонецФункции
+
+// Создать копию объекта
+// Создает копию объекта по заданному пути и пути к оригиналу
+// 
+// Параметры:
+//  Токен          - Строка - Токен                                                   - token
+//  Оригинал       - Строка - Путь к оригинальному файлу или каталогу                 - from
+//  Путь           - Строка - Путь назначения для копии                               - to
+//  Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует  - rewrite
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция СоздатьКопиюОбъекта(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    URL       = "https://cloud-api.yandex.net/v1/disk/resources/copy";
+    Href      = "href";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("from"       , Оригинал);
+    Параметры.Вставить("path"       , Путь);
+    Параметры.Вставить("overwrite"  , Перезаписывать);
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); 
+    Ответ     = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
+    
+    URLОтвета = Ответ[Href]; 
+    
+    Если Не ЗначениеЗаполнено(URLОтвета) Тогда
+	    Возврат Ответ;	
+    КонецЕсли;
+           
+    Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить ссылку для скачивания
+// Получает ссылку для скачивания файла
+// 
+// Параметры:
+//  Токен - Строка - Токен                         - token
+//  Путь  - Строка  - Путь к файлу для скачивания  - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьСсылкуДляСкачивания(Знач Токен, Знач Путь) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("path", Путь);
+    
+    Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Параметры, Заголовки);
+    
+    Возврат Ответ;
+     
+КонецФункции
+
+// Скачать файл
+// Скачивает файл по указанному пути
+// 
+// Параметры:
+//  Токен          - Строка - Токен                        - token
+//  Путь           - Строка - Путь к файлу для скачивания  - path
+//  ПутьСохранения - Строка - Путь сохранения файла        - out 
+// 
+// Возвращаемое значение:
+//  ДвоичныеДанные,Строка - Двоичные данные или путь к файлу при указании параметра ПутьСохранения
+Функция СкачатьФайл(Знач Токен, Знач Путь, Знач ПутьСохранения = "") Экспорт
+	
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьСохранения);
+	Ответ  = ПолучитьСсылкуДляСкачивания(Токен, Путь);
+	URL    = Ответ["href"];
+	
+	Если Не ЗначениеЗаполнено(URL) Тогда
+		Возврат Ответ;
+	КонецЕсли;
+	
+	Ответ = OPI_Инструменты.Get(URL, , , ПутьСохранения);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить список файлов
+// Получает список файлов с или без отбора по типу
+// Список доступных типов: audio, backup, book, compressed, data, development, 
+//                         diskimage, document, encoded, executable, flash, font, 
+//                         mage, settings, spreadsheet, text, unknown, video, web
+//                                  
+// Параметры:
+//  Токен             - Строка       - Токен                                                - token
+//  Количество        - Число,Строка - Количество возвращаемых объектов                     - amount
+//  СмещениеОтНачала  - Число        - Смещение для получение объектов не из начала списка  - offset
+//  ОтборПоТипу       - Строка       - Отбор по типу файла                                  - type
+//  СортироватьПоДате - Булево       - Истина > сортировать по дате, Ложь > по алфавиту     - datesort
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьСписокФайлов(Знач Токен
+    , Знач Количество = 0
+    , Знач СмещениеОтНачала = 0
+    , Знач ОтборПоТипу = ""
+    , Знач СортироватьПоДате = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ОтборПоТипу);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(СортироватьПоДате);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Количество) Тогда
+        Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
+        Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(ОтборПоТипу) Тогда
+        Параметры.Вставить("media_type", ОтборПоТипу);
+    КонецЕсли;
+    
+    Если СортироватьПоДате Тогда
+        Назначение = "last-uploaded";
+    Иначе
+        Назначение = "files";
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Назначение, Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Переместить объект
+// Перемещает объект по заданному пути и пути к оригиналу
+// 
+// Параметры:
+//  Токен          - Строка - Токен                                                   - token
+//  Оригинал       - Строка - Путь к оригинальному файлу или папке                    - from
+//  Путь           - Строка - Путь назначение для перемещения                         - to
+//  Перезаписывать - Булево - Перезаписывать если файл с таким именем уже существует  - rewrite
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Оригинал);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    URL       = "https://cloud-api.yandex.net/v1/disk/resources/move";
+    Href      = "href";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("from"       , Оригинал);
+    Параметры.Вставить("path"       , Путь);
+    Параметры.Вставить("overwrite"  , Перезаписывать);
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); 
+    Ответ     = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);  
+    URLОтвета = Ответ[Href]; 
+    
+    Если Не ЗначениеЗаполнено(URLОтвета) Тогда
+    	Возврат Ответ;	
+    КонецЕсли;
+    
+    Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
+    
+    Возврат Ответ;
+  
+КонецФункции
+
+// Загрузить файл
+// Загружает файл на диск по заданному пути
+// 
+// Параметры:
+//  Токен          - Строка                - Токен                                                      - token
+//  Путь           - Строка                - Путь для сохранение файла на Диске                         - path
+//  Файл           - Строка,ДвоичныеДанные - Файл для загрузки                                          - file
+//  Перезаписывать - Булево                - Перезаписывать, если файл с таким именем уже существует    - rewrite
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex 
+Функция ЗагрузитьФайл(Знач Токен, Знач Путь, Знач Файл, Знач Перезаписывать = Ложь) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
+    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    Href      = "href";   
+    Файл      = Новый Структура("file", Файл);
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("path"       , Путь);
+    Параметры.Вставить("overwrite"  , Перезаписывать);
+    
+    Ответ  = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Параметры, Заголовки);
+    URL    = Ответ[Href];
+    
+    Если Не ЗначениеЗаполнено(URL) Тогда
+    	Возврат Ответ;	
+    КонецЕсли;
+        
+    Ответ  = OPI_Инструменты.PutMultipart(URL, Новый Структура(), Файл, "multipart", Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Загрузить файл по URL
+// Загружает файл на диск, забирая его по заданному URL
+// 
+// Параметры:
+//  Токен - Строка - Токен                               - token
+//  Путь  - Строка - Путь помещения загруженного файла   - path
+//  Адрес - Строка - URL файла                           - url
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ЗагрузитьФайлПоURL(Знач Токен, Знач Путь, Знач Адрес) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    URL       = "https://cloud-api.yandex.net/v1/disk/resources/upload";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.URLВКодировкеURL));
+    Параметры.Вставить("path", Путь);
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); 
+    Ответ     = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь);
+ 
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область УправлениеПубличнымДоступом
+
+// Опубликовать объект
+// Публикует объект диска в публичный доступ
+// 
+// Параметры:
+//  Токен - Строка - Токен                        - token
+//  Путь  - Строка - Путь к публикуемому объекту  - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex 
+Функция ОпубликоватьОбъект(Знач Токен, Знач Путь) Экспорт
+    Возврат ПереключениеОбщегоДоступа(Токен, Путь, Истина);   
+КонецФункции
+
+// Отменить публикацию объекта
+// Отменяет публикацию ранее опубликованного объекта
+// 
+// Параметры:
+//  Токен - Строка - Токен                                  - token
+//  Путь  - Строка - Путь к опубликованному ранее объекту   - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ОтменитьПубликациюОбъекта(Знач Токен, Знач Путь) Экспорт
+    Возврат ПереключениеОбщегоДоступа(Токен, Путь, Ложь);
+КонецФункции
+
+// Получить список опубликованных объектов.
+// Получает список опубликованных объектов
+// 
+// Параметры:
+//  Токен            - Строка - Токен                                               - token      
+//  Количество       - Число  - Количество возвращаемых объектов                    - amount
+//  СмещениеОтНачала - Число  - Смещение для получение объектов не из начала списка - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьСписокОпубликованныхОбъектов(Знач Токен, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Количество) Тогда
+        Параметры.Вставить("limit", Количество);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
+        Параметры.Вставить("offset", СмещениеОтНачала);
+    КонецЕсли;
+        
+    Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить публичный объект
+// Получает информацию об опубликованном объекте по его URL
+// 
+// Параметры:
+//  Токен            - Строка - Токен                                                           - token
+//  URL              - Строка - Адрес объекта                                                   - url 
+//  Количество       - Число  - Количество возвращаемых вложенных объектов (для каталога)       - amount
+//  СмещениеОтНачала - Число  - Смещение для получение вложенных объектов не из начала списка   - offset
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьПубличныйОбъект(Знач Токен, Знач URL, Знач Количество = 0, Знач СмещениеОтНачала = 0) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Количество);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(СмещениеОтНачала);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Количество) Тогда
+        Параметры.Вставить("limit", OPI_Инструменты.ЧислоВСтроку(Количество));
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(СмещениеОтНачала) Тогда
+        Параметры.Вставить("offset", OPI_Инструменты.ЧислоВСтроку(СмещениеОтНачала));
+    КонецЕсли;
+    
+    Параметры.Вставить("public_key", URL);
+        
+    Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Параметры, Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Получить ссылку скачивания публичного объекта
+// Получает прямую ссылку для скачивания публичного объекта
+// 
+// Параметры:
+//  Токен - Строка - Токен               - token
+//  URL   - Строка - Адрес объекта       - url
+//  Путь  - Строка - Путь внутри объекта - path
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Токен, Знач URL, Знач Путь = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    
+    Заголовки = ЗаголовокАвторизации(Токен);
+    
+    Параметры = Новый Структура;
+    
+    Если ЗначениеЗаполнено(Путь) Тогда
+        Параметры.Вставить("path", Путь);
+    КонецЕсли;
+        
+    Параметры.Вставить("public_key", URL);
+        
+    Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Параметры, Заголовки);
+    
+    Возврат Ответ; 
+    
+КонецФункции
+     
+// Сохранить публичный объект на диск
+// Сохраняет публичный объект на ваш диск
+// 
+// Параметры:
+//  Токен  - Строка - Токен                                               - token
+//  URL    - Строка - Адрес объекта                                       - url
+//  Откуда - Строка - Путь внутри публичного каталога (только для папок)  - from
+//  Куда   - Строка - Путь сохранения файла                               - to
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция СохранитьПубличныйОбъектНаДиск(Знач Токен, Знач URL, Откуда = "", Куда = "") Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
+    
+    Заголовки  = ЗаголовокАвторизации(Токен);
+    Адрес      = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
+    Href       = "href";
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("public_key", URL);
+    
+    Если ЗначениеЗаполнено(Откуда) Тогда
+        Параметры.Вставить("path", Откуда);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Куда) Тогда
+        Параметры.Вставить("save_path", Куда);
+    КонецЕсли;
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); 
+    Ответ     = OPI_Инструменты.Post(Адрес + Параметры, , Заголовки, Ложь);
+    
+    URLОтвета = Ответ[Href]; 
+    
+    Если Не ЗначениеЗаполнено(URLОтвета) Тогда
+        Возврат Ответ;	
+    КонецЕсли;
+        
+    Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+ 
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ЗаголовокАвторизации(Знач Токен)
+    
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Authorization", "OAuth " + Токен);
+    
+    Возврат Заголовки;
+    
+КонецФункции
+
+Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ) 
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
+    OPI_ПреобразованиеТипов.ПолучитьБулево(ОбщийДоступ);
+    
+    Заголовки  = ЗаголовокАвторизации(Токен);
+    Назначение = ?(ОбщийДоступ, "publish", "unpublish");
+    Href       = "href";
+  
+    URL       = "https://cloud-api.yandex.net/v1/disk/resources/" + Назначение;
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("path", Путь);
+    
+    Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); 
+    Ответ     = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь);
+    
+    URLОтвета = Ответ[Href];
+    
+    Если Не ЗначениеЗаполнено(URLОтвета) Тогда
+        Возврат Ответ;	
+    КонецЕсли;    
+     
+    Ответ     = OPI_Инструменты.Get(URLОтвета, , Заголовки);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_YandexDisk/OPI_YandexDisk.mdo b/en/OPI/src/CommonModules/OPI_YandexDisk/OPI_YandexDisk.mdo
new file mode 100644
index 0000000000..6846d3d51e
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_YandexDisk/OPI_YandexDisk.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="af0b34e8-10fa-414f-a643-915210c6289a">
+  <name>OPI_YandexDisk</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы работы с Yandex Disk (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_YandexID/Module.bsl b/en/OPI/src/CommonModules/OPI_YandexID/Module.bsl
new file mode 100644
index 0000000000..da3a55619f
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_YandexID/Module.bsl
@@ -0,0 +1,112 @@
+// Расположение OS: ./OInt/core/Modules/OPI_YandexID.os
+// Библиотека: Yandex ID
+// Команда CLI: yandex
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "../../tools"
+
+#Область ПрограммныйИнтерфейс
+
+// Получить код подтверждения
+// Получает код подтверждения и адрес страницы, на которой его необходимо ввести
+// 
+// Параметры:
+//  ClientId - Строка - Client id - id
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
+
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
+    
+    Параметры = Новый Структура("client_id", ClientId);
+    Ответ     = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Преобразовать код в токен
+// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
+// 
+// Параметры:
+//  ClientId      - Строка - Client id                                 - id
+//  ClientSecret  - Строка - Client secret                             - secret
+//  КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("grant_type"    , "device_code");
+    Параметры.Вставить("code"          , КодУстройства);
+    Параметры.Вставить("client_id"     , ClientId);
+    Параметры.Вставить("client_secret" , ClientSecret);
+    
+    Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+// Обновить токен
+// Обновляет токен по Refresh token
+// 
+// Параметры:
+//  ClientId     - Строка - Client id      - id
+//  ClientSecret - Строка - Client secret  - secret
+//  RefreshToken - Строка - Refresh token  - refresh
+// 
+// Возвращаемое значение:
+//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
+Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
+    
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
+    OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
+    
+    Параметры = Новый Структура;
+    Параметры.Вставить("grant_type"    , "refresh_token");
+    Параметры.Вставить("refresh_token" , RefreshToken);
+    Параметры.Вставить("client_id"     , ClientId);
+    Параметры.Вставить("client_secret" , ClientSecret);
+    
+    Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
+    
+    Возврат Ответ;
+    
+КонецФункции
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_YandexID/OPI_YandexID.mdo b/en/OPI/src/CommonModules/OPI_YandexID/OPI_YandexID.mdo
new file mode 100644
index 0000000000..7b8489440d
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_YandexID/OPI_YandexID.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="32379ca2-0f58-4143-9b34-cb552c54b962">
+  <name>OPI_YandexID</name>
+  <synonym>
+    <key>ru</key>
+    <value>Методы работы с Yandex ID (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Инструменты/Module.bsl b/en/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
new file mode 100644
index 0000000000..2ad213032a
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
@@ -0,0 +1,1229 @@
+// Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:Typo-off
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UnusedLocalVariable-off
+// BSLLS:UsingServiceTag-off
+// BSLLS:NumberOfOptionalParams-off
+
+//@skip-check module-unused-local-variable
+//@skip-check method-too-many-params
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+#Область HTTPМетоды
+
+#Область ЗапросыБезТела
+
+Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач ФайлОтвета = Неопределено) Экспорт
+    Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки, ФайлОтвета);
+КонецФункции
+
+Функция Delete(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач ФайлОтвета = Неопределено) Экспорт
+    Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки, ФайлОтвета);
+КонецФункции
+
+#КонецОбласти
+
+#Область ЗапросыСТелом
+
+Функция Post(Знач URL
+    , Знач Параметры = ""
+    , Знач ДопЗаголовки = ""
+    , Знач JSON = Истина
+    , Знач ПолныйОтвет = Ложь
+    , Знач ФайлОтвета = Неопределено) Экспорт
+    
+    Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
+    
+КонецФункции
+
+Функция Patch(Знач URL
+    , Знач Параметры = ""
+    , Знач ДопЗаголовки = ""
+    , Знач JSON = Истина
+    , Знач ПолныйОтвет = Ложь
+    , Знач ФайлОтвета = Неопределено) Экспорт
+    
+    Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
+    
+КонецФункции
+
+Функция Put(Знач URL
+    , Знач Параметры = ""
+    , Знач ДопЗаголовки = ""
+    , Знач JSON = Истина
+    , Знач ПолныйОтвет = Ложь
+    , Знач ФайлОтвета = Неопределено) Экспорт
+    
+    Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
+    
+КонецФункции
+
+Функция PostBinary(Знач URL
+    , Знач Тело
+    , Знач ДопЗаголовки
+    , Знач ПолныйОтвет = Ложь
+    , Знач ТипДанных = "application/octet-stream") Экспорт
+    
+    Возврат ВыполнитьЗапросСДвоичнымиДанными(URL, "POST", Тело, ДопЗаголовки, ПолныйОтвет, ТипДанных);
+    
+КонецФункции
+
+#КонецОбласти 
+
+#Область ЗапросыMultipart
+
+Функция PostMultipart(Знач URL
+    , Знач Параметры = ""
+    , Знач Файлы = ""
+    , Знач ТипКонтента = "image/jpeg"
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено) Экспорт
+
+    Возврат ВыполнитьЗапросМультипарт(URL, "POST", Параметры, Файлы, ТипКонтента, ДопЗаголовки, ФайлОтвета);
+
+КонецФункции
+
+Функция PutMultipart(Знач URL
+    , Знач Параметры = ""
+    , Знач Файлы = ""
+    , Знач ТипКонтента = "image/jpeg"
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено) Экспорт
+
+    Возврат ВыполнитьЗапросМультипарт(URL, "PUT", Параметры, Файлы, ТипКонтента, ДопЗаголовки, ФайлОтвета);
+
+КонецФункции
+
+Функция PostMultipartRelated(Знач URL
+    , Знач JSON = ""
+    , Знач Файлы = ""
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено) Экспорт
+       
+    Возврат ВыполнитьЗапросМультипартРелэйтед(URL, "POST", JSON, Файлы, ДопЗаголовки, ФайлОтвета);
+    
+КонецФункции
+
+Функция PatchMultipartRelated(Знач URL
+    , Знач JSON = ""
+    , Знач Файлы = ""
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено) Экспорт  
+     
+    Возврат ВыполнитьЗапросМультипартРелэйтед(URL, "PATCH", JSON, Файлы, ДопЗаголовки, ФайлОтвета);
+    
+КонецФункции
+
+#КонецОбласти
+
+#Область Прочее
+
+Процедура ОбработатьОтвет(Ответ, Знач ПолныйОтвет = Ложь) Экспорт 
+    
+    Если ПолныйОтвет Или ТипЗнч(Ответ) <> Тип("HTTPОтвет") Тогда
+        Возврат;
+    КонецЕсли;
+    
+    ФайлТела = Ответ.ПолучитьИмяФайлаТела();
+    
+    Если Не ФайлТела = Неопределено Тогда
+        Ответ = ФайлТела;
+        Возврат;
+    КонецЕсли;
+    
+    GZip = "gzip";        
+    НужнаРаспаковка = 
+        Ответ.Заголовки.Получить("Content-Encoding") = GZip 
+        Или Ответ.Заголовки.Получить("content-encoding") = GZip;
+    
+    Если НужнаРаспаковка Тогда
+        Ответ = РаспаковатьОтвет(Ответ);
+    КонецЕсли;
+    
+    Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
+    
+    Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
+        
+        Попытка
+            Ответ = JsonВСтруктуру(Ответ);
+        Исключение
+            Возврат;
+        КонецПопытки;
+        
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "") Экспорт
+      
+    Заголовки = Новый Соответствие;
+    Заголовки.Вставить("Accept-Encoding", "gzip");
+    Заголовки.Вставить("Accept"         , "*/*");
+    Заголовки.Вставить("Connection"     , "keep-alive");
+    Заголовки.Вставить("Accept-Charset" , "utf-8");
+   
+    Если ЗначениеЗаполнено(ТипДанных) Тогда
+        Заголовки.Вставить("Content-Type", ТипДанных);
+    КонецЕсли;
+       
+    Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
+        
+        Для Каждого Заголовок Из ДопЗаголовки Цикл
+            Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
+        КонецЦикла;
+        
+    КонецЕсли;
+    
+    НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
+    
+    Возврат НовыйЗапрос;
+    
+КонецФункции
+
+Функция СоздатьСоединение(Знач Сервер, Знач Пользователь = "", Знач Пароль = "") Экспорт
+    
+    Попытка 
+        SSL = Новый ЗащищенноеСоединениеOpenSSL;
+        Возврат Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000, SSL);
+    Исключение
+        Возврат Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000);
+    КонецПопытки;
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область Служебные
+
+Функция ПараметрыЗапросаВСтроку(Знач Параметры) Экспорт
+
+    Если Параметры.Количество() = 0 Тогда
+        Возврат "";
+    КонецЕсли;
+
+    СтрокаПараметров = "?";
+
+    Для Каждого Параметр Из Параметры Цикл
+        
+        ЗначениеПараметра = ПреобразоватьПараметрВСтроку(Параметр.Значение);
+        
+        СтрокаПараметров = СтрокаПараметров 
+            + Параметр.Ключ 
+            + "=" 
+            + ЗначениеПараметра
+            + "&";
+    КонецЦикла;
+
+    СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
+
+    Возврат СтрокаПараметров;
+
+КонецФункции
+
+Функция РазбитьURL(Знач URL) Экспорт
+
+    URL = СтрЗаменить(URL, "https://", "");
+    URL = СтрЗаменить(URL, "http://", "");
+    URL = СтрЗаменить(URL, ":443", "");
+
+    Адрес  = Прав(URL, СтрДлина(URL) - СтрНайти(URL, "/", НаправлениеПоиска.СНачала) + 1);
+    Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1);
+    
+    Попытка        
+        SSL = Новый ЗащищенноеСоединениеOpenSSL;   
+    Исключение
+        Сервер = "https://" + Сервер;
+    КонецПопытки;
+      
+    СтруктураВозврата = Новый Структура;
+    СтруктураВозврата.Вставить("Сервер", Сервер);
+    СтруктураВозврата.Вставить("Адрес" , Адрес);
+
+    Возврат СтруктураВозврата;
+
+КонецФункции
+
+Функция JsonВСтруктуру(Знач Текст) Экспорт
+
+    Если Не ЗначениеЗаполнено(Текст) Тогда
+        Возврат "";
+    КонецЕсли;
+    
+    Текст = ?(ТипЗнч(Текст) = Тип("ДвоичныеДанные"), ПолучитьСтрокуИзДвоичныхДанных(Текст), Текст);
+
+    ЧтениеJSON = Новый ЧтениеJSON;
+    ЧтениеJSON.УстановитьСтроку(Текст);
+
+    Данные = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
+    ЧтениеJSON.Закрыть();
+
+    Возврат Данные;
+
+КонецФункции
+
+Функция JSONСтрокой(Знач Данные, Знач Экранирование = "Нет") Экспорт
+
+    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows
+        , " "
+        , Истина
+        , ЭкранированиеСимволовJSON[Экранирование]
+        , Ложь
+        , Ложь
+        , Ложь
+        , Ложь);
+
+    Попытка
+        
+        ЗаписьJSON = Новый ЗаписьJSON;
+        ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
+    
+        ЗаписатьJSON(ЗаписьJSON, Данные);
+        Возврат ЗаписьJSON.Закрыть();
+    
+    Исключение      
+        Возврат "НЕ JSON: " + Строка(Данные);
+    КонецПопытки;
+
+КонецФункции
+
+Функция ЧислоВСтроку(Знач Число) Экспорт
+    Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
+КонецФункции
+
+Функция ПрочитатьJSONФайл(Знач Путь) Экспорт
+    
+    ЧтениеJSON = Новый ЧтениеJSON;
+    ЧтениеJSON.ОткрытьФайл(Путь);  
+    Значения = ПрочитатьJSON(ЧтениеJSON);
+    
+    ЧтениеJSON.Закрыть();
+    
+    Возврат Значения;
+    
+КонецФункции
+
+Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
+
+    СоответствиеВозврата = Новый Соответствие;
+    КоличествоЧастей     = 2;
+    МассивПараметров     = СтрРазделить(СтрокаПараметров, "&", Ложь);
+
+    Для Каждого Параметр Из МассивПараметров Цикл
+
+        МассивКлючЗначение = СтрРазделить(Параметр, "=");
+
+        Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда
+            СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]);
+        КонецЕсли;
+
+    КонецЦикла;
+
+    Возврат СоответствиеВозврата;
+
+КонецФункции
+
+Функция ПолучитьТекущуюДату() Экспорт
+    Возврат МестноеВремя(ТекущаяУниверсальнаяДата());    
+КонецФункции
+
+Функция UNIXTime(Знач Дата) Экспорт
+    
+    ОТД  = Новый ОписаниеТипов("Дата");
+    Дата = ОТД.ПривестиЗначение(Дата);
+    
+    UNIX = Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0");
+    UNIX = СтрЗаменить(UNIX, ",", "");
+    UNIX = Лев(UNIX, 10);
+    
+    Возврат UNIX;
+    
+КонецФункции
+
+Функция ИнформацияОПрогрессе(Знач Текущее, Знач Всего, Знач ЕдИзм, Знач Делитель = 1) Экспорт
+    
+    Целое   = 100;
+    Текущее = Окр(Текущее / Делитель, 2);
+    Всего   = Окр(Всего / Делитель, 2); 
+    Процент = Цел(Текущее / Всего * Целое);
+             
+    СтрТекущее = ЧислоВСтроку(Текущее);
+    СтрВсего   = ЧислоВСтроку(Всего);
+    СтрПроцент = ЧислоВСтроку(Процент);
+   
+    Информация = СтрТекущее + "/" + СтрВсего + " " + ЕдИзм + " ( " + СтрПроцент + "% )";
+    
+    Возврат Информация;
+    
+КонецФункции
+
+Функция ПреобразоватьДанныеСПолучениемРазмера(Данные, Знач МинимальныйРазмерДляПотока = 0) Экспорт
+    
+    Размер = 0;
+    
+    Если ТипЗнч(Данные) = Тип("Строка") Тогда
+        
+        ФайлНаДиске = Новый Файл(Данные);
+        
+        Если ФайлНаДиске.Существует() Тогда         
+            Размер = ФайлНаДиске.Размер(); 
+        Иначе
+            OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
+            Размер = Данные.Размер();
+        КонецЕсли;
+        
+    Иначе
+        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
+        Размер = Данные.Размер();
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(МинимальныйРазмерДляПотока) Тогда
+        Если Размер < МинимальныйРазмерДляПотока Тогда
+            OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
+        Иначе
+            OPI_ПреобразованиеТипов.ПолучитьДвоичныеИлиПоток(Данные);    
+        КонецЕсли;     
+    Иначе
+        OPI_ПреобразованиеТипов.ПолучитьДвоичныеИлиПоток(Данные);
+    КонецЕсли;
+    
+    Возврат Размер;
+    
+КонецФункции
+
+Процедура ЗначениеВМассив(Значение) Экспорт
+    
+    Значение_ = Новый Массив;
+    Значение_.Добавить(Значение);
+    Значение = Значение_;
+
+КонецПроцедуры
+
+Процедура ЗаменитьСпецСимволы(Текст, Разметка = "Markdown") Экспорт
+    
+    СоответствиеСимволов = Новый Соответствие;
+    
+    Если Разметка = "HTML" Тогда
+        
+        СоответствиеСимволов.Вставить("&", "&amp;");
+        
+    ИначеЕсли Разметка = "MarkdownV2" Тогда
+        
+        СоответствиеСимволов.Вставить("-", "\-");
+        СоответствиеСимволов.Вставить("+", "\+");
+        СоответствиеСимволов.Вставить("#", "\#");        
+        СоответствиеСимволов.Вставить("=", "\=");
+        СоответствиеСимволов.Вставить("{", "\{");        
+        СоответствиеСимволов.Вставить("}", "\}");        
+        СоответствиеСимволов.Вставить(".", "\.");
+      
+    Иначе
+        Возврат;
+    КонецЕсли;         
+
+    Для Каждого СимволМассива Из СоответствиеСимволов Цикл
+        Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение);
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура УдалитьПустыеПоляКоллекции(Коллекция) Экспорт
+    
+    ТипКоллекции        = ТипЗнч(Коллекция);
+    ВыходнаяКоллекция   = Новый(ТипКоллекции);
+    
+    Если ТипКоллекции = Тип("Соответствие") Или ТипКоллекции = Тип("Структура") Тогда
+        
+        УдалитьПустыеКлючиЗначения(Коллекция, ВыходнаяКоллекция);
+        
+    ИначеЕсли ТипКоллекции = Тип("Массив") Тогда
+        
+        УдалитьПустыеЭлементыМассива(Коллекция, ВыходнаяКоллекция);
+        
+    Иначе
+        
+        ВыходнаяКоллекция = Коллекция;
+        
+    КонецЕсли;
+    
+    Коллекция = ВыходнаяКоллекция;
+    
+КонецПроцедуры
+
+Процедура Пауза(Знач Секунды) Экспорт
+    
+    Соединение = Новый HTTPСоединение("1C.ru", 11111, , , , Секунды);
+    Попытка
+        Соединение.Получить(Новый HTTPЗапрос(""));
+    Исключение
+        Возврат;  
+    КонецПопытки;
+    
+КонецПроцедуры
+
+Процедура ДобавитьПоле(Знач Имя, Знач Значение, Знач Тип, Коллекция) Экспорт
+    
+    Заполнено = ЗначениеЗаполнено(Значение);
+    
+    Если Не Заполнено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Если Тип = "Дата" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьДату(Значение);
+        Значение = UNIXTime(Значение);
+        
+    ИначеЕсли Тип = "Коллекция" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение); 
+        
+    ИначеЕсли Тип = "Булево" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьБулево(Значение); 
+        
+    ИначеЕсли Тип = "СтрокаФайла" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение, Истина);
+        
+    ИначеЕсли Тип = "Массив" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьМассив(Значение);
+        
+    ИначеЕсли Тип = "ДвоичныеДанные" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Значение);
+        
+    ИначеЕсли Тип = "Число" Тогда
+        OPI_ПреобразованиеТипов.ПолучитьЧисло(Значение);
+        
+    Иначе
+        OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
+        
+    КонецЕсли;
+    
+    Коллекция.Вставить(Имя, Значение);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ВыполнитьЗапросСТелом(Знач URL
+    , Знач Вид
+    , Знач Параметры = ""
+    , Знач ДопЗаголовки = ""
+    , Знач JSON = Истина
+    , Знач ПолныйОтвет = Ложь
+    , Знач ФайлОтвета = Неопределено)
+    
+    Если Не ЗначениеЗаполнено(Параметры) Тогда
+        Параметры = Новый Структура;
+    КонецЕсли;
+    
+    ТипДанных     = ?(JSON, "application/json; charset=utf-8", "application/x-www-form-urlencoded; charset=utf-8");   
+    СтруктураURL  = РазбитьURL(URL);
+    Сервер        = СтруктураURL["Сервер"];
+    Адрес         = СтруктураURL["Адрес"];
+    
+    Запрос        = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
+    Соединение    = СоздатьСоединение(Сервер);
+    
+    УстановитьТелоЗапроса(Запрос, Параметры, JSON);
+
+    Если ЗначениеЗаполнено(ФайлОтвета) Тогда
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета);
+    Иначе
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+    КонецЕсли;
+     
+    Если ЭтоПереадресация(Ответ) Тогда  
+        Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"]
+            , Вид
+            , Параметры
+            , ДопЗаголовки
+            , JSON
+            , ПолныйОтвет
+            , ФайлОтвета);    
+    Иначе    
+        ОбработатьОтвет(Ответ, ПолныйОтвет);      
+    КонецЕсли;
+
+    Возврат Ответ;
+
+КонецФункции
+
+Функция ВыполнитьЗапросСДвоичнымиДанными(Знач URL
+    , Знач Вид
+    , Знач Данные
+    , Знач ДопЗаголовки
+    , Знач ПолныйОтвет
+    , Знач ТипДанных)
+    
+    СтруктураURL  = РазбитьURL(URL);
+    Сервер        = СтруктураURL["Сервер"];
+    Адрес         = СтруктураURL["Адрес"];
+    
+    Запрос        = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
+    Соединение    = СоздатьСоединение(Сервер);
+    
+    Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
+    
+    Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+
+    Если ЭтоПереадресация(Ответ) Тогда  
+        Ответ = ВыполнитьЗапросСДвоичнымиДанными(Ответ.Заголовки["Location"]
+            , Вид
+            , Данные
+            , ДопЗаголовки
+            , ПолныйОтвет
+            , ТипДанных);    
+    Иначе    
+        ОбработатьОтвет(Ответ, ПолныйОтвет);      
+    КонецЕсли;
+
+    Возврат Ответ;
+
+КонецФункции
+
+Функция ВыполнитьЗапросБезТела(Знач URL
+    , Знач Вид
+    , Знач Параметры = ""
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено)
+    
+    Если Не ЗначениеЗаполнено(Параметры) Тогда
+        Параметры = Новый Структура;
+    КонецЕсли;
+
+    СтруктураURL        = РазбитьURL(URL);
+    Сервер              = СтруктураURL["Сервер"];
+    Адрес               = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
+    
+    Запрос     = СоздатьЗапрос(Адрес, ДопЗаголовки);
+    Соединение = СоздатьСоединение(Сервер);  
+     
+    Если ЗначениеЗаполнено(ФайлОтвета) Тогда
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета);
+    Иначе
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+    КонецЕсли;
+      
+    Если ЭтоПереадресация(Ответ) Тогда  
+        Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, ФайлОтвета);    
+    Иначе    
+        ОбработатьОтвет(Ответ);      
+    КонецЕсли;
+
+    Возврат Ответ;
+    
+КонецФункции
+
+Функция ВыполнитьЗапросМультипарт(Знач URL
+    , Знач Вид
+    , Знач Параметры = ""
+    , Знач Файлы = ""
+    , Знач ТипКонтента = "image/jpeg"
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено)
+    
+    Если Не ЗначениеЗаполнено(Параметры) Тогда
+        Параметры = Новый Структура;
+    КонецЕсли;
+
+    Если Не ЗначениеЗаполнено(Файлы) Тогда
+        Файлы = Новый Соответствие;
+    КонецЕсли;
+
+    Переадресация    = 300;
+    Ошибка           = 400;
+    Boundary         = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    ТипДанных        = "multipart/form-data; boundary=" + Boundary;
+    СтруктураURL     = РазбитьURL(URL);
+    Сервер           = СтруктураURL["Сервер"];
+    Адрес            = СтруктураURL["Адрес"];
+    
+    Запрос        = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
+    Соединение    = СоздатьСоединение(Сервер);
+    
+    ТелоЗапроса  = ПолучитьИмяВременногоФайла();
+    ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса
+        , КодировкаТекста.UTF8
+        , ПорядокБайтов.LittleEndian
+        , ""
+        , Ложь
+        , ""
+        , Ложь);
+
+    ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры);
+    ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы);
+    
+    ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
+    ЗаписьТекста.Закрыть();
+
+    Запрос.УстановитьИмяФайлаТела(ТелоЗапроса);
+    
+    Если ЗначениеЗаполнено(ФайлОтвета) Тогда
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета);
+    Иначе
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+    КонецЕсли;
+        
+    ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
+   
+    Если ЭтоПереадресация Тогда  
+        Ответ = ВыполнитьЗапросМультипарт(Ответ.Заголовки["Location"]
+            , Вид
+            , Параметры
+            , Файлы
+            , ТипКонтента
+            , ДопЗаголовки
+            , ФайлОтвета);    
+    Иначе    
+        ОбработатьОтвет(Ответ);      
+    КонецЕсли;
+    
+    Запрос       = Неопределено;
+    ЗаписьТекста = Неопределено;
+    
+    УдалитьФайлы(ТелоЗапроса);
+    Возврат Ответ;
+       
+КонецФункции
+
+Функция ВыполнитьЗапросМультипартРелэйтед(Знач URL
+    , Знач Вид
+    , Знач JSON = ""
+    , Знач Файлы = ""
+    , Знач ДопЗаголовки = ""
+    , Знач ФайлОтвета = Неопределено) 
+    
+    Переадресация    = 300;
+    Ошибка           = 400;
+    Boundary         = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    ТипДанных        = "multipart/related; boundary=" + Boundary;
+    СтруктураURL     = РазбитьURL(URL);
+    Сервер           = СтруктураURL["Сервер"];
+    Адрес            = СтруктураURL["Адрес"];
+    
+    Запрос        = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
+    Соединение    = СоздатьСоединение(Сервер);
+    
+    ТелоЗапроса  = ПолучитьИмяВременногоФайла();
+    ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса
+        , КодировкаТекста.UTF8
+        , ПорядокБайтов.LittleEndian
+        , ""
+        , Ложь
+        , ""
+        , Ложь);
+    
+    ЗаписатьJSONМультипарт(ЗаписьТекста, Boundary, JSON);
+    ЗаписатьФайлыРелэйтед(ЗаписьТекста, Boundary, Файлы);        
+    
+    ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
+    ЗаписьТекста.Закрыть();
+    
+    ДобавитьContentLength(Запрос);
+    
+    Запрос.УстановитьИмяФайлаТела(ТелоЗапроса);
+    
+    Если ЗначениеЗаполнено(ФайлОтвета) Тогда
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос, ФайлОтвета);
+    Иначе
+        Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+    КонецЕсли;
+        
+    ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
+    
+    Если ЭтоПереадресация Тогда  
+        Ответ = ВыполнитьЗапросМультипартРелэйтед(Ответ.Заголовки["Location"]
+            , Вид
+            , JSON
+            , Файлы
+            , ДопЗаголовки
+            , ФайлОтвета);    
+    Иначе    
+        ОбработатьОтвет(Ответ);      
+    КонецЕсли;
+    
+    Запрос       = Неопределено;
+    ЗаписьТекста = Неопределено;
+
+    УдалитьФайлы(ТелоЗапроса);
+    Возврат Ответ;
+
+КонецФункции
+
+Функция ЭтоПереадресация(Знач Ответ)
+    
+    Переадресация  = 300;
+    Ошибка         = 400;
+
+    ЭтоПереадресация = Ответ.КодСостояния >= Переадресация 
+        И Ответ.КодСостояния < Ошибка
+        И ЗначениеЗаполнено(Ответ.Заголовки["Location"]);
+    
+    Возврат ЭтоПереадресация;
+    
+КонецФункции
+
+Функция ПреобразоватьПараметрВСтроку(Знач Значение)
+
+    Если ТипЗнч(Значение) = Тип("Массив") Тогда
+        Значение = СтрСоединить(Значение, ",");
+        Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
+        Значение = "[" + Значение + "]"; 
+    Иначе
+        Значение = ЧислоВСтроку(Значение);
+        Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
+    КонецЕсли;
+    
+    Возврат Значение;
+    
+КонецФункции
+
+Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
+    
+    Коллекция = ТипЗнч(Параметры) = Тип("Структура") 
+        Или ТипЗнч(Параметры) = Тип("Соответствие")
+        Или ТипЗнч(Параметры) = Тип("Массив");
+        
+    Если JSON Тогда
+        Данные           = JSONСтрокой(Параметры);
+    ИначеЕсли Не Коллекция Тогда
+        Данные = Параметры;
+    Иначе
+        СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
+        Данные           = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
+    КонецЕсли;
+    
+    Если ТипЗнч(Данные) = Тип("Строка") Тогда
+        Запрос.УстановитьТелоИзСтроки(Данные);
+    Иначе
+        //@skip-check wrong-type-expression
+        Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура ЗаписатьПараметрыМультипарт(ЗаписьТекста, Знач Boundary, Знач Параметры)
+    
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    
+    Для Каждого Параметр Из Параметры Цикл
+        
+        Если Параметр.Значение = Неопределено
+            Или Параметр.Значение = NULL Тогда
+            Продолжить;
+        КонецЕсли;
+        
+        ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
+        ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        
+        Если ТипЗнч(Параметр.Значение) = Тип("Строка") 
+            Или ТипЗнч(Параметр.Значение) = Тип("Число") Тогда
+            
+            ЗначениеСтрокой = ЧислоВСтроку(Параметр.Значение);
+            ЗаписьТекста.ЗаписатьСтроку(ЗначениеСтрокой);
+            
+        ИначеЕсли ТипЗнч(Параметр.Значение) = Тип("Булево") Тогда
+            
+            ЗаписьТекста.ЗаписатьСтроку(?(Параметр.Значение, "true", "false"));
+            
+        Иначе
+            
+            ЗаписьТекста.Записать(Параметр.Значение);
+            
+        КонецЕсли;
+        
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        
+    КонецЦикла;
+    
+КонецПроцедуры
+
+Процедура ЗаписатьФайлыМультипарт(ЗаписьТекста, Знач Boundary, Знач ТипКонтента, Знач Файлы)
+    
+    ТипКонтента      = СокрЛП(ТипКонтента);
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    ЗаменаТочки      = "___";
+    
+    Для Каждого Файл Из Файлы Цикл
+        
+        ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
+        
+        Если ТипКонтента = "image/jpeg" Тогда
+            ИмяФайлаОтправки = "photo";
+        Иначе
+            ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
+            ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
+            ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
+            ЗаменаТочки, "."));
+        КонецЕсли;
+        
+        ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
+        ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" 
+            + ИмяФайлаОтправки 
+            + """; filename=""" 
+            + ПутьФайл
+            + """");
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);      
+        
+        Если ЗначениеЗаполнено(ТипКонтента) Тогда
+            ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + ТипКонтента);
+        КонецЕсли;
+        
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Значение);
+        ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ЗаписатьФайлыРелэйтед(ЗаписьТекста, Знач Boundary, Знач Файлы)
+    
+    Если Не ЗначениеЗаполнено(Файлы) Тогда
+        Возврат;
+    КонецЕсли;
+    
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    
+    Если ТипЗнч(Файлы) = Тип("Соответствие") Тогда
+        Для Каждого Файл Из Файлы Цикл
+            
+            ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
+            ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + Файл.Значение);
+            ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+            ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+            ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Ключ);
+            ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+            ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+            
+        КонецЦикла;
+        
+    КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ЗаписатьДвоичныеДанные(ЗаписьДанных, Знач ДвоичныеДанные)
+    
+    РазмерЧасти      = 268435456;
+    ПрочитанноБайт   = 0;
+    ТекущаяПозиция   = 0;
+    ОбщийРазмер      = ДвоичныеДанные.Размер();
+
+    Пока ПрочитанноБайт < ОбщийРазмер Цикл
+        
+        ЧтениеДанных     = Новый ЧтениеДанных(ДвоичныеДанные);
+        ПрочитанноБайт   = ЧтениеДанных.Пропустить(ТекущаяПозиция);
+        Результат        = ЧтениеДанных.Прочитать(РазмерЧасти);
+        ТекущиеДанные    = Результат.ПолучитьДвоичныеДанные();
+        РазмерТекущих    = ТекущиеДанные.Размер();
+        
+        Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
+            Прервать;
+        КонецЕсли;
+
+        ЗаписьДанных.Записать(ТекущиеДанные);
+        
+        // !OInt ОсвободитьОбъект(ТекущиеДанные);
+        // !OInt ВыполнитьСборкуМусора();
+
+        ТекущаяПозиция = ТекущаяПозиция + РазмерТекущих;
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ЗаписатьJSONМультипарт(ЗаписьТекста, Знач Boundary, Знач JSON)
+    
+    Если Не ЗначениеЗаполнено(JSON) Тогда
+        Возврат;
+    КонецЕсли;
+    
+    РазделительСтрок = Символы.ВК + Символы.ПС;
+    
+    ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
+    ЗаписьТекста.ЗаписатьСтроку("Content-Type: application/json; charset=UTF-8");
+    ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+    ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+    ЗаписьТекста.ЗаписатьСтроку(JSON);
+    ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+    ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
+
+КонецПроцедуры
+
+Процедура ДобавитьContentLength(Запрос)
+    
+    ТелоЗапроса = Запрос.ПолучитьТелоКакДвоичныеДанные();
+    
+    Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
+        
+        Размер = ТелоЗапроса.Размер();
+        Запрос.Заголовки.Вставить("Content-Length", ЧислоВСтроку(Размер));
+        
+    КонецЕсли;
+
+КонецПроцедуры
+
+Процедура УдалитьПустыеКлючиЗначения(Знач Коллекция, ВыходнаяКоллекция)
+    
+    Для Каждого ЭлементКоллекции Из Коллекция Цикл
+        
+        Если Не ЭлементКоллекции.Значение = Неопределено И Не ЭлементКоллекции.Значение = NULL Тогда
+            ВыходнаяКоллекция.Вставить(ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение);
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+КонецПроцедуры
+
+Процедура УдалитьПустыеЭлементыМассива(Знач Коллекция, ВыходнаяКоллекция)
+    
+    Для Каждого ЭлементКоллекции Из Коллекция Цикл
+        
+        Если Не ЭлементКоллекции = Неопределено И Не ЭлементКоллекции = NULL Тогда
+            ВыходнаяКоллекция.Добавить(ЭлементКоллекции);
+        КонецЕсли;
+        
+    КонецЦикла;
+    
+КонецПроцедуры
+
+#Область GZip
+
+// Описание структур см. здесь https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
+// Источник: https://github.com/vbondarevsky/Connector 
+
+// Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
+//
+// Copyright 2017-2023 Vladimir Bondarevskiy
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+//
+//
+// URL:    https://github.com/vbondarevsky/Connector
+// e-mail: vbondarevsky@gmail.com
+// Версия: 2.4.8
+//
+// Требования: платформа 1С версии 8.3.10 и выше
+
+Функция РаспаковатьОтвет(Ответ)
+
+    Попытка
+        Возврат ПрочитатьGZip(Ответ.ПолучитьТелоКакДвоичныеДанные());
+    Исключение
+        Возврат Ответ;
+    КонецПопытки;
+
+КонецФункции
+
+Функция ПрочитатьGZip(СжатыеДанные) Экспорт
+
+    РазмерПрефиксаGZip  = 10;
+    РазмерПостфиксаGZip = 8;
+    
+    РазмерДД  = ZipРазмерDD();
+    РазмерСДХ = ZipРазмерCDH();
+    РазмерЕСД = ZipРазмерEOCD();
+    РазмерЛФХ = ZipРазмерLFH();
+
+    ЧтениеДанных = Новый ЧтениеДанных(СжатыеДанные);
+    ЧтениеДанных.Пропустить(РазмерПрефиксаGZip);
+    РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip;
+
+    ПотокZip     = Новый ПотокВПамяти(РазмерЛФХ 
+       + РазмерСжатыхДанных 
+       + РазмерДД 
+       + РазмерСДХ 
+       + РазмерЕСД);
+       
+    ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
+    ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH());
+    ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных);
+
+    ЗаписьДанных.Закрыть();
+    ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
+
+    CRC32 = ЧтениеДанных.ПрочитатьЦелое32();
+    РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32();
+    ЧтениеДанных.Закрыть();
+
+    ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
+    ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
+    ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных));
+    ЗаписьДанных.Закрыть();
+
+    Возврат ПрочитатьZip(ПотокZip);
+
+КонецФункции
+
+Функция ПрочитатьZip(СжатыеДанные, ТекстОшибки = Неопределено)
+
+    Каталог   = ПолучитьИмяВременногоФайла();
+    ЧтениеZip = Новый ЧтениеZipФайла(СжатыеДанные);
+    ИмяФайла  = ЧтениеZip.Элементы[0].Имя;
+    Попытка
+        ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
+    Исключение
+        // Игнорируем проверку целостности архива, просто читаем результат
+        ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+    КонецПопытки;
+    ЧтениеZip.Закрыть();
+
+    Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла);
+    УдалитьФайлы(Каталог);
+
+    Возврат Результат;
+
+КонецФункции
+
+Функция ZipРазмерLFH()
+
+    Возврат 34;
+
+КонецФункции
+
+Функция ZipРазмерDD()
+
+    Возврат 16;
+
+КонецФункции
+
+Функция ZipРазмерCDH()
+
+    Возврат 50;
+
+КонецФункции
+
+Функция ZipРазмерEOCD()
+
+    Возврат 22;
+
+КонецФункции
+
+Функция ZipLFH()
+    
+    // Local file header
+    Буфер = Новый БуферДвоичныхДанных(ZipРазмерLFH());
+    Буфер.ЗаписатьЦелое32(0, 67324752); // signature 0x04034b50
+    Буфер.ЗаписатьЦелое16(4, 20);       // version
+    Буфер.ЗаписатьЦелое16(6, 10);       // bit flags    
+    Буфер.ЗаписатьЦелое16(8, 8);        // compression method
+    Буфер.ЗаписатьЦелое16(10, 0);       // time
+    Буфер.ЗаписатьЦелое16(12, 0);       // date
+    Буфер.ЗаписатьЦелое32(14, 0);       // crc-32
+    Буфер.ЗаписатьЦелое32(18, 0);       // compressed size
+    Буфер.ЗаписатьЦелое32(22, 0);       // uncompressed size
+    Буфер.ЗаписатьЦелое16(26, 4);       // filename legth - "data"
+    Буфер.ЗаписатьЦелое16(28, 0);       // extra field length
+    Буфер.Записать(30, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь));
+
+    Возврат Буфер;
+
+КонецФункции
+
+Функция ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)
+    
+    // Data descriptor
+    Буфер = Новый БуферДвоичныхДанных(ZipРазмерDD());
+    Буфер.ЗаписатьЦелое32(0, 134695760);
+    Буфер.ЗаписатьЦелое32(4, CRC32);
+    Буфер.ЗаписатьЦелое32(8, РазмерСжатыхДанных);
+    Буфер.ЗаписатьЦелое32(12, РазмерНесжатыхДанных);
+
+    Возврат Буфер;
+
+КонецФункции
+
+Функция ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)
+    
+    // Central directory header
+    Буфер = Новый БуферДвоичныхДанных(ZipРазмерCDH());
+    Буфер.ЗаписатьЦелое32(0, 33639248);              // signature 0x02014b50
+    Буфер.ЗаписатьЦелое16(4, 798);                   // version made by
+    Буфер.ЗаписатьЦелое16(6, 20);                    // version needed to extract
+    Буфер.ЗаписатьЦелое16(8, 10);                    // bit flags
+    Буфер.ЗаписатьЦелое16(10, 8);                    // compression method
+    Буфер.ЗаписатьЦелое16(12, 0);                    // time
+    Буфер.ЗаписатьЦелое16(14, 0);                    // date
+    Буфер.ЗаписатьЦелое32(16, CRC32);                // crc-32
+    Буфер.ЗаписатьЦелое32(20, РазмерСжатыхДанных);   // compressed size
+    Буфер.ЗаписатьЦелое32(24, РазмерНесжатыхДанных); // uncompressed size
+    Буфер.ЗаписатьЦелое16(28, 4);                    // file name length
+    Буфер.ЗаписатьЦелое16(30, 0);                    // extra field length
+    Буфер.ЗаписатьЦелое16(32, 0);                    // file comment length
+    Буфер.ЗаписатьЦелое16(34, 0);                    // disk number start
+    Буфер.ЗаписатьЦелое16(36, 0);                    // internal file attributes
+    Буфер.ЗаписатьЦелое32(38, 2176057344);           // external file attributes
+    Буфер.ЗаписатьЦелое32(42, 0);                    // relative offset of local header
+    Буфер.Записать(46, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь));
+
+    Возврат Буфер;
+
+КонецФункции
+
+Функция ZipEOCD(РазмерСжатыхДанных)
+    
+    // End of central directory
+    РазмерCDH = 50;
+    Буфер = Новый БуферДвоичныхДанных(ZipРазмерEOCD());
+    Буфер.ЗаписатьЦелое32(0, 101010256); // signature 0x06054b50
+    Буфер.ЗаписатьЦелое16(4, 0); // number of this disk
+    Буфер.ЗаписатьЦелое16(6, 0); // number of the disk with the start of the central directory
+    Буфер.ЗаписатьЦелое16(8, 1); // total number of entries in the central directory on this disk
+    Буфер.ЗаписатьЦелое16(10, 1); // total number of entries in the central directory
+    Буфер.ЗаписатьЦелое32(12, РазмерCDH); // size of the central directory    
+    // offset of start of central directory with respect to the starting disk number
+    Буфер.ЗаписатьЦелое32(16, ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD());
+    Буфер.ЗаписатьЦелое16(20, 0); // the starting disk number
+
+    Возврат Буфер;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_Инструменты/OPI_Инструменты.mdo b/en/OPI/src/CommonModules/OPI_Инструменты/OPI_Инструменты.mdo
new file mode 100644
index 0000000000..14693fe85e
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Инструменты/OPI_Инструменты.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e810f1d2-6714-4c85-94b1-c3ce20788e78">
+  <name>OPI_Инструменты</name>
+  <synonym>
+    <key>ru</key>
+    <value>OPI инструменты</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Криптография/Module.bsl b/en/OPI/src/CommonModules/OPI_Криптография/Module.bsl
new file mode 100644
index 0000000000..a5001d217b
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Криптография/Module.bsl
@@ -0,0 +1,110 @@
+// Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UnusedLocalVariable-off
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+#Область БСП
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2019, ООО 1С-Софт
+// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
+// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
+// Текст лицензии доступен по ссылке:
+// https://creativecommons.org/licenses/by/4.0/legalcode
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
+    
+    Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
+    
+КонецФункции
+
+Функция Хеш(ДвоичныеДанные, Тип) Экспорт
+    
+    Хеширование = Новый ХешированиеДанных(Тип);
+    Хеширование.Добавить(ДвоичныеДанные);
+    
+    Возврат Хеширование.ХешСумма;
+        
+КонецФункции
+
+Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
+    
+    Дважды = 2;
+    
+    Если Ключ.Размер() > РазмерБлока Тогда
+        Ключ = Хеш(Ключ, Тип);
+    КонецЕсли;
+    
+    Если Ключ.Размер() <= РазмерБлока Тогда
+        Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
+        Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
+    КонецЕсли;
+    
+    Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
+    
+    Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
+    Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
+    
+    Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
+    Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
+    
+    Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
+    Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
+    
+    Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
+    
+КонецФункции
+
+Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
+    
+    МассивДвоичныхДанных = Новый Массив;
+    МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
+    МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
+    
+    Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
+    
+КонецФункции
+
+Функция ПовторитьСтроку(Строка, Количество) Экспорт
+    
+    Части = Новый Массив(Количество);
+    
+    Для К = 1 По Количество Цикл
+        Части.Добавить(Строка);
+    КонецЦикла;
+
+    Возврат СтрСоединить(Части, "");
+    
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_Криптография/OPI_Криптография.mdo b/en/OPI/src/CommonModules/OPI_Криптография/OPI_Криптография.mdo
new file mode 100644
index 0000000000..710fe257bf
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Криптография/OPI_Криптография.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="55bb3987-d7ac-4ed7-a6fd-aa4cfeb61c27">
+  <name>OPI_Криптография</name>
+  <synonym>
+    <key>ru</key>
+    <value>Криптография (OPI)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl b/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl
new file mode 100644
index 0000000000..30d315a7d2
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl
@@ -0,0 +1,470 @@
+// Расположение OS: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UsingHardcodePath-off
+// BSLLS:Typo-off
+// BSLLS:DeprecatedMessage-off
+// BSLLS:UsingServiceTag-off
+// BSLLS:ExecuteExternalCodeInCommonModule-off
+// BSLLS:DuplicateStringLiteral-off
+
+//@skip-check use-non-recommended-method
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать "./internal"
+// #Использовать asserts
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
+    
+    СтандартныеЗависимости = "[Decode, Build]";
+    ЗависимостиГугл        = "Testing-GoogleWorkspace";
+    
+    Разделы = Новый Структура;
+    Разделы.Вставить("Telegram"       , СтандартныеЗависимости);
+    Разделы.Вставить("VK"             , СтандартныеЗависимости);
+    Разделы.Вставить("Viber"          , СтандартныеЗависимости);
+    Разделы.Вставить("Twitter"        , СтандартныеЗависимости);
+    Разделы.Вставить("YandexDisk"     , СтандартныеЗависимости);
+    Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
+    Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);      
+    Разделы.Вставить("GoogleDrive"    , ЗависимостиГугл);
+    Разделы.Вставить("GoogleSheets"   , ЗависимостиГугл);
+    Разделы.Вставить("Notion"         , СтандартныеЗависимости);
+    Разделы.Вставить("Slack"          , СтандартныеЗависимости);
+    Разделы.Вставить("Airtable"       , СтандартныеЗависимости);
+    Разделы.Вставить("Dropbox"        , СтандартныеЗависимости);
+        
+    Возврат Разделы;
+    
+КонецФункции
+
+Функция ПолучитьТаблицуТестов() Экспорт
+    
+    Телеграм  = "Telegram";
+    ВКонтакте = "VK";
+    ЯДиск     = "YandexDisk";
+    Календарь = "GoogleCalendar";
+    Твиттер   = "Twitter";
+    Вайбер    = "Viber";
+    Драйв     = "GoogleDrive";
+    ВСпейс    = "GoogleWorkspace";
+    Ноушн     = "Notion";
+    Слак      = "Slack";
+    Таблицы   = "GoogleSheets";
+    АирТ      = "Airtable";
+    ДропБокс  = "Dropbox";
+    
+    ТаблицаТестов = Новый ТаблицаЗначений;
+    ТаблицаТестов.Колонки.Добавить("Метод");
+    ТаблицаТестов.Колонки.Добавить("Синоним");
+    ТаблицаТестов.Колонки.Добавить("Раздел");
+                                              
+    НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота"      , "Получить информацию бота"       , Телеграм);     
+    НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления"          , "Получить обновления"            , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook"           , "Установить Webhook"             , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение"  , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку"           , "Отправить картинку"             , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео"              , "Отправить видео"                , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио"              , "Отправить аудио"                , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент"           , "Отправить документ"             , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку"              , "Отправить гифку"                , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу"        , "Отправить медиагруппу"          , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение"     , "Отправить местоположение"       , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт"            , "Отправить контакт"              , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос"              , "Отправить опрос"                , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение"          , "Переслать сообщение"            , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан"                   , "Бан/Разбан"                     , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение"    , "Создать ссылку-приглашение"     , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение"  , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников"     , "Получить число участников"      , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума"    , "Создать/Удалить тему форума"    , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы"      , "Изменить имя главной темы"      , Телеграм);
+    НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему"   , "Скрыть/Показать главную тему"   , Телеграм);
+    
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена"               , "Создать ссылку получения токена", ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост"                , "Создать/Удалить пост"           , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост"              , "Создать/Удалить составной пост" , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос"                      , "Создать опрос"                  , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку"          , "Добавить/Удалить картинку"      , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию"                    , "Создать историю"                , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений"                  , "Действия с обсуждениями"        , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент"                 , "Лайк/Репост/Комментарий"        , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику"                , "Получить статистику"            , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов"          , "Получить статистику постов"     , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию"          , "Создать рекламную кампанию"     , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение"                , "Отправить сообщение"            , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров"          , "Получить категории товаров"     , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку"              , "Создать товар и подборку"       , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами"          , "Создать товар со свойствами"    , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров"             , "Получить список товаров"        , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок"            , "Получить список подборок"       , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств"             , "Получить список свойств"        , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов"             , "Получить список заказов"        , ВКонтакте);
+    НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео"                    , "Загрузить видео"                , ВКонтакте);
+    
+    НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске"       , "Получить информацию о диске"    , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку"                   , "Создать папку"                  , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить"    , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл"           , "Загрузить/Удалить файл"         , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта"            , "Создать копию объекта"          , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание"     , "Получить ссылку на скачивание"  , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов"           , "Получить список файлов"         , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект"              , "Переместить объект"             , ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов"      , "Действия с публичными объектами", ЯДиск);
+    НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных"   , "Получить список опубликованных" , ЯДиск);
+    
+    НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации"         , "Получить ссылку авторизации"    , ВСпейс);
+    НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен"                     , "Получить токен"                 , ВСпейс);
+    НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен"                     , "Обновить токен"                 , ВСпейс);
+    
+    НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей"          , "Получить список календарей"     , Календарь);
+    НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь"           , "Создать/Удалить календарь"      , Календарь);
+    НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие"             , "Создать/Удалить событие"        , Календарь);
+    НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий"             , "Получить список событий"        , Календарь);
+    
+    НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов"           , "Получить список каталогов"      , Драйв);
+    НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл"              , "Загрузить/Удалить Файл"         , Драйв);
+    НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий"         , "Создать/Удалить кооментарий"    , Драйв);
+    НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог"                    , "Создать/Удалить каталог"        , Драйв);
+    
+    НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу"                    , "Создать таблицу"                , Таблицы);
+    НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу"                   , "Получить таблицу"               , Таблицы);
+    НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки"           , "Заполнить/Очистить ячейки"      , Таблицы);
+    
+    НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации"    , "Получить ссылку авторизации"    , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен"                , "Обновить токен"                 , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит"         , "Текстовый твит"                 , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСКартинкой"        , "Твит с картинкой"               , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео"            , "Твит с видео"                   , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф"              , "Твит с гиф"                     , Твиттер);
+    НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом"          , "Твит с опросом"                 , Твиттер);
+    
+    НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале"     , "Получить информацию канала"     , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя"    , "Получить данные пользователя"   , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей"   , "Получить онлайн пользователей"  , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьТекстовоеСообщение"   , "Отправить текстовое сообщение"  , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКартинку"             , "Отправить картинку"             , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьФайл"                 , "Отправить файл"                 , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт"              , "Отправить контакт"              , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию"              , "Отправить локацию"              , Вайбер);
+    НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку"               , "Отправить ссылку"               , Вайбер);
+    
+    НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу"                , "Создать страницу"               , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу"            , "Создать/Изменить базу"          , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице"    , "Получить информацию о странице" , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОБазе"        , "Получить информацию о базе"     , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницуВБазу"           , "Создать страницу в базу"        , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_ИзменитьСвойстваСтраницы"       , "Изменить свойства страницы"     , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок"             , "Создать/Удалить блок"           , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей"          , "Получить пользователей"         , Ноушн);
+    НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя"     , "Получить данные пользователя"   , Ноушн);
+    
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте"         , "Получить информацию о боте"     , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей"     , "Получить список пользователей"  , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей"          , "Получить список областей"       , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьСообщение"       , "Отправить/Удалить сообщение"    , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьЭфемерное"       , "Отправить/Удалить эфемерное"    , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьОтложенныеСообщения"     , "Получить отложенные сообщения"  , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал"        , "Создать/Архивировать канал"     , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов"           , "Получить список каналов"        , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог"            , "Открыть/Закрыть диалог"         , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов"            , "Получить список файлов"         , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл"            , "Загрузить/Удалить файл"         , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ"                , "Получить список внеш. файлов"   , Слак);
+    НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ"              , "Загрузить/Удалить внеш. файл"   , Слак);
+    
+    НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу"                       , "Создать/Изменить базу"          , АирТ);
+    НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу"                    , "Создать/Изменить таблицу"       , АирТ);
+    НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле"                       , "Создать/Изменить поле"          , АирТ);
+    НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи"              , "Создать/Удалить записи"         , АирТ);
+    
+    НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен"       , "Получить/Обновить токен"        , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл"               , "Загрузить файл"                 , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL"          , "Загрузить файл по URL"          , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог"              , "Создать каталог"                , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег"           , "Создать/Удалить тег"            , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт"             , "Получить данные аккаунта"       , ДропБокс);
+    НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами"            , "Работа с доступами"             , ДропБокс);
+   
+    Возврат ТаблицаТестов;
+                                    
+КонецФункции                             
+
+Функция ОжидаетЧто(Значение) Экспорт
+    
+    Попытка
+        
+        Модуль  = ПолучитьОбщийМодуль("ЮТест");
+        Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
+        Возврат Модуль.ОжидаетЧто(Значение);  
+           
+    Исключение
+        Возврат Ожидаем.Что(Значение);
+    КонецПопытки;
+    
+КонецФункции
+
+Функция СформироватьТестыЯкс() Экспорт
+    
+    Модуль        = ПолучитьОбщийМодуль("ЮТТесты");
+    Разделы       = ПолучитьСоответствиеРазделовТестирования();
+    ТаблицаТестов = ПолучитьТаблицуТестов();
+    
+    Для Каждого Раздел Из Разделы Цикл
+        
+        ТекущийРаздел = Раздел.Ключ;
+        Отбор         = Новый Структура("Раздел", ТекущийРаздел);
+        ТестыРаздела  = ТаблицаТестов.НайтиСтроки(Отбор);
+        
+        Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
+        
+        Для Каждого Тест Из ТестыРаздела Цикл
+            Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
+        КонецЦикла;
+        
+    КонецЦикла;
+    
+    Возврат "";
+    
+КонецФункции
+
+Функция СформироватьТестыАссертс() Экспорт
+    
+   ТаблицаТестов = ПолучитьТаблицуТестов();
+   МассивТестов  = Новый Массив;
+   
+   Для Каждого Тест Из ТаблицаТестов Цикл     
+       МассивТестов.Добавить(Тест.Метод);
+   КонецЦикла;
+   
+   Возврат МассивТестов;
+   
+КонецФункции
+
+Функция ПолучитьПараметр(Параметр) Экспорт 
+
+    Путь = ПутьКФайлуДанных(); 
+    Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
+
+КонецФункции
+
+Функция ПолучитьДвоичные(Параметр) Экспорт
+    
+    Путь              = ПутьКФайлуДанных(); 
+    ПараметрЛокальный = Параметр + "Local";
+    ЗначениеОсновной  = ПолучитьЗначениеИзФайла(Параметр         , Путь);
+    ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
+    
+    ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
+    
+    Если ФайлЛокальный.Существует() Тогда
+        Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
+    Иначе
+        Значение = ЗначениеОсновной;
+    КонецЕсли;
+    
+    Если ТипЗнч(Значение) = Тип("Строка") Тогда
+        Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);    
+    КонецЕсли;
+    
+    Возврат Значение;
+    
+КонецФункции
+
+Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
+    
+    Если СтрНайти(Путь, "http") > 0 
+        Или СтрНайти(Путь, "www") > 0 Тогда
+        
+        ИВФ = ПолучитьИмяВременногоФайла();
+        КопироватьФайл(Путь, ИВФ);
+        Путь = ИВФ;
+        Двоичные = Новый ДвоичныеДанные(Путь);
+        
+        Если СохранятьЛокально Тогда
+            ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
+        Иначе
+            УдалитьФайлы(ИВФ);
+        КонецЕсли;
+        
+    Иначе
+        
+        Двоичные = Новый ДвоичныеДанные(Путь);
+        
+    КонецЕсли;
+    
+    Возврат Двоичные;
+    
+КонецФункции
+
+Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
+
+	Значение = ПолучитьПараметр(Параметр);
+	Коллекция.Вставить(Параметр, Значение);
+		
+КонецПроцедуры
+
+Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
+
+	Значение = ПолучитьДвоичные(Параметр);
+	Коллекция.Вставить(Параметр, Значение);
+		
+КонецПроцедуры
+
+Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
+    
+    Путь = ПутьКФайлуДанных(); 
+    ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
+   
+КонецПроцедуры
+
+Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
+    
+    Шапка    = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
+    
+    Попытка
+        Данные = OPI_Инструменты.JSONСтрокой(Результат);
+    Исключение
+        Данные = "Не JSON: " + Строка(Результат);
+    КонецПопытки;
+    
+    Данные   = "    " + Данные; 
+    
+    Сообщить(Шапка);
+    Сообщить(Символы.ПС);
+    Сообщить(Данные);
+    Сообщить(Символы.ПС);
+    Сообщить("---------------------------------");
+    Сообщить(Символы.ПС);
+    
+    Если ЗначениеЗаполнено(Библиотека) Тогда
+		ЗаписатьФайлЛога(Данные, Метод, Библиотека);
+	КонецЕсли;
+	
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьЗначениеИзФайла(Параметр, Путь) 
+        
+    Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);    
+    Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
+    
+КонецФункции
+
+Функция ПутьКФайлуДанных()
+    
+    Путь = "";
+    ВозможныеПути = Новый Массив;
+    ВозможныеПути.Добавить("./data.json");
+    ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
+    ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
+    
+    Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
+    	
+	    ФайлРепозитория = Новый Файл(ВозможныйПуть);
+	    
+	    Если ФайлРепозитория.Существует() Тогда
+	        Путь = ВозможныйПуть;
+	    КонецЕсли;    
+    
+    КонецЦикла;
+     
+    Возврат Путь;
+    
+КонецФункции
+
+Функция ПолучитьОбщийМодуль(Знач Имя)
+    УстановитьБезопасныйРежим(Истина);    
+    Модуль  = Вычислить(Имя);     
+    УстановитьБезопасныйРежим(Ложь);    
+    Возврат Модуль;    
+КонецФункции
+
+Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
+    
+    НовыйТест = ТаблицаЗначений.Добавить();
+    НовыйТест.Метод     = Метод;
+    НовыйТест.Синоним   = Синоним;
+    НовыйТест.Раздел    = Раздел;
+    
+КонецПроцедуры
+
+Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
+                      
+    Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
+    Значения.Вставить(Параметр, Значение);
+
+    Запись              = Новый ЗаписьJSON;
+    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
+    Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
+    ЗаписатьJSON(Запись, Значения);
+    Запись.Закрыть();
+
+КонецПроцедуры
+
+Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
+	
+	Попытка
+		
+		ПутьЛогов           = "./docs/results";
+		ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
+		
+		КаталогЛогов = Новый Файл(ПутьЛогов);
+		
+		Если Не КаталогЛогов.Существует() Тогда
+			СоздатьКаталог(ПутьЛогов);
+		КонецЕсли;
+		
+		КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
+        
+        Если Не КаталогЛоговБиблиотеки.Существует() Тогда
+            СоздатьКаталог(ПутьЛоговБиблиотеки);
+        КонецЕсли;
+		 
+		ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
+		ФайлЛога   = Новый Файл(ПутьКФайлу);
+		
+		Если Не ФайлЛога.Существует() Тогда
+			ДокументЛога = Новый ТекстовыйДокумент;
+			ДокументЛога.УстановитьТекст(Данные);
+			ДокументЛога.Записать(ПутьКФайлу);
+		КонецЕсли;
+		
+	Исключение
+		Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());	
+	КонецПопытки;
+	
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/OPI_ПолучениеДанныхТестов.mdo b/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/OPI_ПолучениеДанныхТестов.mdo
new file mode 100644
index 0000000000..cbe314eccc
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/OPI_ПолучениеДанныхТестов.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="546edcad-c9a0-4823-a44c-fefd7200de6c">
+  <name>OPI_ПолучениеДанныхТестов</name>
+  <synonym>
+    <key></key>
+    <value>OPI получение данных тестов</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/Module.bsl b/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/Module.bsl
new file mode 100644
index 0000000000..50c760d589
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/Module.bsl
@@ -0,0 +1,320 @@
+// Расположение OS: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UnusedLocalVariable-off
+
+// #Использовать "./internal"
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Попытка 
+        
+        Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
+            Возврат;
+        Иначе
+            
+            Файл = Новый Файл(Значение);
+            
+            Если Файл.Существует() Тогда
+                Значение = Новый ДвоичныеДанные(Значение);
+                
+            ИначеЕсли СтрНайти(Значение, "//") Тогда
+                                
+                Значение = OPI_Инструменты.Get(Значение);
+                
+            Иначе
+                
+                Значение = Base64Значение(Значение);
+                
+            КонецЕсли;
+                  
+        КонецЕсли;
+    
+    Исключение
+        ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
+    КонецПопытки;
+    
+КонецПроцедуры
+
+Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Если ТипЗнч(Значение) <> Тип("Строка") Тогда
+        ПолучитьДвоичныеДанные(Значение);
+        Возврат;
+    КонецЕсли;
+    
+    Файл = Новый Файл(Значение);
+    
+    Если Файл.Существует() Тогда
+        Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);     
+    Иначе
+        ПолучитьДвоичныеДанные(Значение);
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура ПолучитьКоллекцию(Значение) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Попытка 
+        
+        ИсходноеЗначение = Значение;
+        
+        Если ЭтоКоллекция(Значение) Тогда
+            Возврат;
+        Иначе
+            
+            Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
+                Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
+            Иначе
+                Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
+            КонецЕсли;
+            
+            Файл        = Новый Файл(Значение);
+            ЧтениеJSON  = Новый ЧтениеJSON;
+            
+            Если Файл.Существует() Тогда
+                
+                ЧтениеJSON.ОткрытьФайл(Значение);
+                
+           ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
+                
+                ИВФ = ПолучитьИмяВременногоФайла();
+                КопироватьФайл(Значение, ИВФ);
+                ЧтениеJSON.ОткрытьФайл(ИВФ);
+                ЧтениеJSON.Прочитать();
+                
+                УдалитьФайлы(ИВФ);
+                
+            Иначе
+                
+                ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
+                
+            КонецЕсли;
+            
+            Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
+            ЧтениеJSON.Закрыть();
+            
+            Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
+                
+                Значение = ИсходноеЗначение;
+                ПолучитьМассив(Значение);
+                
+            КонецЕсли;
+             
+        КонецЕсли;
+    
+    Исключение
+        
+        Значение = ИсходноеЗначение;
+    	ПолучитьМассив(Значение);	
+        
+    КонецПопытки;
+        
+КонецПроцедуры
+
+Процедура ПолучитьМассив(Значение) Экспорт
+    
+    Если ТипЗнч(Значение) = Тип("Массив") Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Если ТипЗнч(Значение) = Тип("Строка") 
+        И СтрНачинаетсяС(Значение, "[")
+        И СтрЗаканчиваетсяНа(Значение, "]") Тогда
+        	
+        ЗапятаяВКавычках = "','";
+    
+	    Значение = СтрЗаменить(Значение, "['"   , "");
+	    Значение = СтрЗаменить(Значение, "']"   , "");
+	    Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
+	    Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
+	    Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
+	
+	    Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
+	
+	    Для Н = 0 По Значение.ВГраница() Цикл
+	        Значение[Н] = СокрЛП(Значение[Н]);
+	    КонецЦикла;
+    
+    Иначе
+    	
+        Если ТипЗнч(Значение) = Тип("Число") Тогда
+            Значение = OPI_Инструменты.ЧислоВСтроку(Значение);    
+        КонецЕсли;
+        
+	    OPI_Инструменты.ЗначениеВМассив(Значение);
+	    
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура ПолучитьБулево(Значение) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Попытка 
+        
+        Если ТипЗнч(Значение) = Тип("Булево") Тогда
+            Возврат;
+        Иначе
+            Значение = Булево(Значение);
+        КонецЕсли;
+    
+    Исключение
+        ВызватьИсключение "Ошибка получения данных булево из параметра";
+    КонецПопытки;
+        
+КонецПроцедуры
+
+Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Попытка 
+        
+        Если ЭтоСимвольное(Значение) Тогда
+                
+            Если Не ИзИсточника Тогда
+                Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
+                Возврат;    
+            КонецЕсли;
+              
+            Значение = OPI_Инструменты.ЧислоВСтроку(Значение);  
+            Файл     = Новый Файл(Значение);
+            
+            Если Файл.Существует() Тогда
+                
+                ЧтениеТекста = Новый ЧтениеТекста(Значение);
+                Значение     = ЧтениеТекста.Прочитать();
+                ЧтениеТекста.Закрыть();
+                
+            ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
+                
+                ИВФ = ПолучитьИмяВременногоФайла();
+                КопироватьФайл(Значение, ИВФ);
+                
+                ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
+                Значение     = ЧтениеТекста.Прочитать();
+                ЧтениеТекста.Закрыть();
+                
+                УдалитьФайлы(ИВФ);
+                
+            Иначе
+                
+                Возврат;
+                
+            КонецЕсли;
+            
+        ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
+            
+            Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
+            
+        ИначеЕсли ЭтоКоллекция(Значение) Тогда
+                
+            Значение = OPI_Инструменты.JSONСтрокой(Значение); 
+            
+        Иначе
+            Возврат;
+        КонецЕсли;
+                  
+    Исключение
+        Значение = Строка(Значение);
+        Возврат;
+    КонецПопытки;
+    
+КонецПроцедуры
+
+Процедура ПолучитьДату(Значение) Экспорт
+    
+    Если Значение = Неопределено Тогда
+        Возврат;
+    КонецЕсли;
+    
+    Дата = "Дата";
+    
+    Попытка 
+        
+        Если ТипЗнч(Значение) = Тип(Дата) Тогда
+            Возврат;
+        Иначе         
+            Значение = XMLЗначение(Тип(Дата), Значение);                   
+        КонецЕсли;
+    
+    Исключение
+        ООД = Новый ОписаниеТипов(Дата);
+        Значение = ООД.ПривестиЗначение(Значение);
+    КонецПопытки;
+        
+КонецПроцедуры
+
+Процедура ПолучитьЧисло(Значение) Экспорт
+    
+    ОписаниеТипа = Новый ОписаниеТипов("Число");
+    Значение = ОписаниеТипа.ПривестиЗначение(Значение);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ЭтоКоллекция(Знач Значение)
+	
+	Возврат ТипЗнч(Значение) = Тип("Массив")
+            Или ТипЗнч(Значение) = Тип("Структура")
+            Или ТипЗнч(Значение) = Тип("Соответствие");
+            
+КонецФункции      
+
+Функция ЭтоСимвольное(Знач Значение)
+	
+	Возврат ТипЗнч(Значение) = Тип("Строка")
+            Или ТипЗнч(Значение) = Тип("Число") 
+            Или ТипЗнч(Значение) = Тип("Дата");
+            
+КонецФункции      
+
+#КонецОбласти
\ No newline at end of file
diff --git a/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/OPI_ПреобразованиеТипов.mdo b/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/OPI_ПреобразованиеТипов.mdo
new file mode 100644
index 0000000000..154515af34
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_ПреобразованиеТипов/OPI_ПреобразованиеТипов.mdo
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e15aee63-1565-4f37-ba54-4d4e79723fc5">
+  <name>OPI_ПреобразованиеТипов</name>
+  <synonym>
+    <key>ru</key>
+    <value>Преобразование типов (OPI)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/CommonModules/OPI_Тесты/Module.bsl b/en/OPI/src/CommonModules/OPI_Тесты/Module.bsl
new file mode 100644
index 0000000000..bb8d3bd26a
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Тесты/Module.bsl
@@ -0,0 +1,5307 @@
+// Расположение OS: ./OInt/tests/Modules/internal/OPI_Тесты.os
+
+// MIT License
+
+// Copyright (c) 2023 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// https://github.com/Bayselonarrend/OpenIntegrations
+
+// Набор тестов для YAxUnit
+
+// BSLLS:Typo-off
+// BSLLS:LatinAndCyrillicSymbolInWord-off
+// BSLLS:IncorrectLineBreak-off
+// BSLLS:UsingServiceTag-off
+// BSLLS:UnusedParameters-off
+// BSLLS:DuplicateStringLiteral-off
+
+// @skip-check undefined-variable
+// @skip-check wrong-string-literal-content
+
+// Раскомментировать, если выполняется OneScript
+// #Использовать oint
+// #Использовать asserts
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Для YaxUnit
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+    OPI_ПолучениеДанныхТестов.СформироватьТестыЯкс();
+
+КонецПроцедуры
+
+// Для Asserts
+
+Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
+
+   Возврат OPI_ПолучениеДанныхТестов.СформироватьТестыАссертс();
+
+КонецФункции
+
+#Область ЗапускаемыеТесты
+
+#Область Telegram
+
+Процедура Телеграм_ПолучитьИнформациюБота() Экспорт
+ 
+ 	ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token", ПараметрыТеста);
+ 	
+	Telegram_ПолучитьИнформациюБота(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура Телеграм_ПолучитьОбновления() Экспорт
+
+ 	ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token", ПараметрыТеста);
+ 	
+ 	Telegram_УдалитьWebhook(ПараметрыТеста);
+	Telegram_ПолучитьОбновления(ПараметрыТеста);
+	
+КонецПроцедуры
+
+Процедура Телеграм_УстановитьWebhook() Экспорт
+
+ 	ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token", ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_URL"  , ПараметрыТеста);
+
+	Telegram_УстановитьWebhook(ПараметрыТеста);
+	Telegram_УдалитьWebhook(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьТекстовоеСообщение() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+ 	
+	Telegram_ОтправитьТекстовоеСообщение(ПараметрыТеста);
+        
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьКартинку() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture"           , ПараметрыТеста);
+ 	
+	Telegram_ОтправитьКартинку(ПараметрыТеста);
+	Telegram_СкачатьФайл(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьВидео() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+ 	OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video"             , ПараметрыТеста);
+ 	
+	Telegram_ОтправитьВидео(ПараметрыТеста);
+	Telegram_СкачатьФайл(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьАудио() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Audio"             , ПараметрыТеста);
+    
+    Telegram_ОтправитьАудио(ПараметрыТеста);
+    Telegram_СкачатьФайл(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьДокумент() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Document"          , ПараметрыТеста);
+    
+    Telegram_ОтправитьДокумент(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьГифку() Экспорт
+
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("GIF"               , ПараметрыТеста);
+    
+    Telegram_ОтправитьГифку(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьМедиагруппу() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"            , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture"           , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video"             , ПараметрыТеста);
+    
+    Telegram_ОтправитьМеидагруппу(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьМестоположение() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Long"              , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Lat"               , ПараметрыТеста);
+    
+    Telegram_ОтправитьМестоположение(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьКонтакт() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Name"              , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Surname"           , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Phone"             , ПараметрыТеста);
+
+    Telegram_ОтправитьКонтакт(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ОтправитьОпрос() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    
+	Telegram_ОтправитьОпрос(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ПереслатьСообщение() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"           , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"          , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID"       , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelMessageID", ПараметрыТеста);
+
+	Telegram_ПереслатьСообщение(ПараметрыТеста);
+        
+КонецПроцедуры
+
+Процедура Телеграм_БанРазбан() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"           , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChatID"          , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID"       , ПараметрыТеста);
+    
+    Telegram_Бан(ПараметрыТеста);
+    Telegram_Разбан(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура Телеграм_СоздатьСсылкуПриглашение() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    
+	Telegram_СоздатьСсылкуПриглашение(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ЗакрепитьОткрепитьСообщение() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"           , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID"       , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelMessageID", ПараметрыТеста);
+        
+	Telegram_ЗакрепитьСообщение(ПараметрыТеста);
+	Telegram_ОткрепитьСообщение(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ПолучитьЧислоУчастников() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ChannelID", ПараметрыТеста);
+    
+    Telegram_ПолучитьЧислоУчастников(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ПолучитьСписокАватаровФорума() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token", ПараметрыТеста);
+    
+	Telegram_ПолучитьСписокАватаровФорума(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура Телеграм_СоздатьУдалитьТемуФорума() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"  , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ForumID", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture"         , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String"          , ПараметрыТеста);
+    
+	Telegram_СоздатьТемуФорума(ПараметрыТеста);
+	Telegram_ИзменитьТемуФорума(ПараметрыТеста);
+	Telegram_ЗакрытьТемуФорума(ПараметрыТеста);
+	Telegram_ОткрытьТемуФорума(ПараметрыТеста);
+	Telegram_ОчиститьСписокЗакрепленныхСообщенийТемы(ПараметрыТеста);
+	Telegram_УдалитьТемуФорума(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_СкрытьПоказатьГлавнуюТему() Экспорт
+ 
+ 	ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"  , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ForumID", ПараметрыТеста);
+
+	Telegram_СкрытьГлавнуюТемуФорума(ПараметрыТеста);
+	Telegram_ПоказатьГлавнуюТемуФорума(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура Телеграм_ИзменитьИмяГлавнойТемы() Экспорт
+ 
+ 	ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_Token"  , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Telegram_ForumID", ПараметрыТеста);
+
+	Telegram_ИзменитьИмяГлавнойТемыФорума(ПараметрыТеста);
+	
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область VK
+
+Процедура ВК_СоздатьСсылкуТокена() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("VK_AppID", ПараметрыТеста);
+
+    VK_СоздатьСсылкуПолученияТокена(ПараметрыТеста);  
+    
+КонецПроцедуры
+
+Процедура ВК_СоздатьУдалитьПост() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture2", ПараметрыТеста);
+    
+    VK_СоздатьПост(ПараметрыТеста);
+    VK_УдалитьПост(ПараметрыТеста);
+
+КонецПроцедуры
+
+Процедура ВК_СоздатьСоставнойПост() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video"   , ПараметрыТеста);
+    
+    VK_СоздатьСоставнойПост(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ВК_СоздатьОпрос() Экспорт
+ 
+    VK_СоздатьОпрос();
+       
+КонецПроцедуры
+
+Процедура ВК_СохранитьУдалитьКартинку() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
+    
+    VK_СоздатьАльбом(ПараметрыТеста);
+    VK_СохранитьКартинкуВАльбом(ПараметрыТеста);
+    VK_УдалитьКартинку(ПараметрыТеста);
+    VK_УдалитьАльбом(ПараметрыТеста);
+           
+КонецПроцедуры
+
+Процедура ВК_СоздатьИсторию() Экспорт
+ 
+    ПараметрыТеста = Новый Соответствие;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
+    
+    VK_СоздатьИсторию(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ВК_МетодыОбсуждений() Экспорт
+ 
+    ПараметрыТеста = Новый Структура;
+    Параметры      = ПолучитьПараметрыВК();
+    
+    VK_СоздатьОбсуждение(ПараметрыТеста);
+    VK_ЗакрытьОбсуждение(ПараметрыТеста);
+    VK_ОткрытьОбсуждение(ПараметрыТеста);
+    VK_НаписатьВОбсуждение(ПараметрыТеста);     
+       
+    OPI_VK.ЗакрытьОбсуждение(ПараметрыТеста["VK_ConvID"], Истина, Параметры);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура ВК_ЛайкРепостКоммент() Экспорт
+ 
+    Параметры       = ПолучитьПараметрыВК();
+    Текст           = "Пост из автотеста";
+    Сообщение       = "Сообщение из автотеста";
+    ТипСоответствие = Тип("Соответствие");
+    ТипЧисло        = Тип("Число");
+    Response        = "response";
+    
+    Результат = OPI_VK.СоздатьПост(Текст, Новый Массив, , , Параметры);
+    
+    ИДПоста   = Результат[Response]["post_id"];    
+    Результат = OPI_VK.ПоставитьЛайк(ИДПоста, , Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПоставитьЛайк");
+    
+    OPI_Инструменты.Пауза(5);
+      
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["likes"]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    ВнешнийПост  = 2571;
+    ВнешняяСтена = -218704372;
+        
+    Результат = OPI_VK.СделатьРепост(ВнешнийПост, ВнешняяСтена, , , Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СделатьРепост");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["success"]).ИмеетТип(ТипЧисло).Равно(1);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["wall_repost_count"]).ИмеетТип(ТипЧисло).Равно(1); 
+        
+    Результат  = OPI_VK.НаписатьКомментарий(ИДПоста, Параметры["owner_id"], Сообщение, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "НаписатьКомментарий");
+        
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["comment_id"]).ИмеетТип(ТипЧисло).Заполнено();
+   
+    OPI_VK.УдалитьПост(ИДПоста, Параметры);
+    OPI_VK.УдалитьПост(Результат[Response]["post_id"], Параметры);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСтатистику() Экспорт
+ 
+    ТекущаяДата     = OPI_Инструменты.ПолучитьТекущуюДату();
+    Параметры       = ПолучитьПараметрыВК();
+    Дата0           = НачалоДня(ТекущаяДата);
+    Дата1           = КонецДня(Дата0);
+    ТипСоответствие = Тип("Соответствие");
+     
+    Результат = OPI_VK.ПолучитьСтатистику(Дата0, Дата1, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтатистику");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"][0]["visitors"]).ИмеетТип(ТипСоответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"][0]["reach"]).ИмеетТип(ТипСоответствие).Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСтатистикуПостов() Экспорт
+ 
+    Параметры    = ПолучитьПараметрыВК();
+    
+    МассивПостов = Новый Массив;
+    МассивПостов.Добавить(214);
+    МассивПостов.Добавить(215);
+    
+    Результат = OPI_VK.ПолучитьСтатистикуПостов(МассивПостов, Параметры);
+
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтатистикуПостов");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Массив").ИмеетДлину(2);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ВК_СоздатьРекламнуюКампанию() Экспорт
+ 
+    Параметры       = ПолучитьПараметрыВК();
+    ИДКабинета      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_AdsCabinetID");
+    Наименование    = "Тестовая кампания";
+    ТипСоответствие = Тип("Соответствие");
+    ТипЧисло        = Тип("Число");
+    Response        = "response";
+    UID             = "id";
+        
+    Результат    = OPI_VK.СоздатьРекламнуюКампанию(ИДКабинета, Наименование, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьРекламнуюКампанию");
+    
+    Результат    = Результат[Response][0];
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["error_code"]).ИмеетТип(ТипЧисло).Равно(602);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[UID]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    ИДКампании  = Результат[UID];
+    ИДКатегории = 126;
+    Лимит       = 150;
+    
+    Результат = OPI_VK.СоздатьПост(Наименование, Новый Массив, , , Параметры); 
+    ИДПоста   = Результат[Response]["post_id"]; 
+        
+    Результат   = OPI_VK.СоздатьРекламноеОбъявление(ИДКампании
+        , Лимит
+        , ИДКатегории
+        , ИДПоста
+        , ИДКабинета
+        , Параметры);
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьРекламноеОбъявление");
+            
+    Результат   = Результат[Response][0];
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["error_code"]).ИмеетТип(ТипЧисло).Равно(602);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[UID]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    ИДОбъявления = Результат[UID];
+    Результат    = OPI_VK.ПриостановитьРекламноеОбъявление(ИДКабинета, ИДОбъявления, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПриостановитьРекламноеОбъявление");
+    
+    Результат    = Результат[Response][0];
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[UID]).ИмеетТип(ТипЧисло).Заполнено();
+ 
+    OPI_VK.УдалитьПост(ИДПоста, Параметры);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_ОтправитьСообщение() Экспорт
+ 
+    Параметры    = ПолучитьПараметрыВК();
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_UserID");
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_CommunityToken");
+    Текст        = "Сообщение из автотеста";
+    
+    МассивКнопок = Новый Массив;
+    МассивКнопок.Добавить("Кнопка 1");
+    МассивКнопок.Добавить("Кнопка 2"); 
+    
+    Клавиатура = OPI_VK.СформироватьКлавиатуру(МассивКнопок);
+    Результат  = OPI_VK.НаписатьСообщение(Текст, Пользователь, Токен, Клавиатура, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "НаписатьСообщение");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие"); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+  
+КонецПроцедуры
+
+Процедура ВК_ПолучитьКатегорииТоваров() Экспорт
+ 
+    Параметры = ПолучитьПараметрыВК();
+    Результат = OPI_VK.ПолучитьСписокКатегорийТоваров(Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокКатегорийТоваров");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат) 
+        .ИмеетТип("Соответствие")
+        .Заполнено();
+        
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_СоздатьТоварПодборку() Экспорт
+ 
+    Параметры       = ПолучитьПараметрыВК();
+    ТипСоответствие = Тип("Соответствие");
+    ТипЧисло        = Тип("Число");
+    Response        = "response";
+    Картинка        = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    ИВФ             = ПолучитьИмяВременногоФайла("png");   
+    Картинка.Записать(ИВФ);
+        
+    Результат = OPI_VK.СоздатьПодборкуТоваров("Тестовая подборка"
+        , Картинка
+        , Истина
+        , Ложь
+        , Параметры);  
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПодборкуТоваров");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["albums_count"]).ИмеетТип(ТипЧисло).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["market_album_id"]).ИмеетТип(ТипЧисло).Заполнено();
+             
+    ИДПодборки = Результат[Response]["market_album_id"];
+    
+    Результат  = OPI_VK.ИзменитьПодборкуТоваров("Измененная подборка", ИДПодборки, , , , Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьПодборкуТоваров");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]).ИмеетТип(ТипЧисло).Равно(1);
+ 
+    МассивКартинок = Новый Массив;
+    МассивКартинок.Добавить(OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture"));
+    МассивКартинок.Добавить(OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture2"));
+    
+    Товар = Новый Соответствие();
+    Товар.Вставить("Имя"                , "Тестовый товар");    
+    Товар.Вставить("Описание"           , "Описание товара");
+    Товар.Вставить("Категория"          , "20173");           
+    Товар.Вставить("Цена"               , 1);                
+    Товар.Вставить("СтараяЦена"         , 15);     
+    Товар.Вставить("ОсновноеФото"       , Картинка);                   
+    Товар.Вставить("URL"                , "https://github.com/Bayselonarrend/OpenIntegrations");     
+    Товар.Вставить("ДополнительныеФото" , МассивКартинок);     
+    Товар.Вставить("ГлавныйВГруппе"     , Истина);                 
+    Товар.Вставить("Ширина"             , 20);     
+    Товар.Вставить("Высота"             , 30);     
+    Товар.Вставить("Глубина"            , 40);     
+    Товар.Вставить("Вес"                , 100);
+    Товар.Вставить("SKU"                , "12345");
+    Товар.Вставить("ДоступныйОстаток"   , "10");
+    
+    Результат = OPI_VK.ДобавитьТовар(Товар, ИДПодборки, Параметры);                // Добавление товара
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьТовар");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["market_item_id"]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    ИДТовара  = Результат[Response]["market_item_id"];
+    
+    Товар = Новый Соответствие;
+    Товар.Вставить("Имя", "Тестовый товар измененный");
+    
+    Результат = OPI_VK.ИзменитьТовар(ИДТовара, Товар, , Параметры);                // Изменение товара
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьТовар");
+    
+    Проверка_ВКИстина(Результат);
+    
+    Результат = OPI_VK.ДобавитьТоварВПодборку(ИДТовара, ИДПодборки, Параметры);    // Добавление в подборку
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьТоварВПодборку");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    Результат = OPI_VK.УдалитьТоварИзПодборки(ИДТовара, ИДПодборки, Параметры);    // Удаляет из подборки
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьТоварИзПодборки");
+    
+    OPI_Инструменты.Пауза(5);
+    Проверка_ВКИстина(Результат);
+        
+    Результат = OPI_VK.УдалитьТовар(ИДТовара, Параметры);                          // Удаление товара
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьТовар");
+    
+    OPI_Инструменты.Пауза(5);
+    Проверка_ВКИстина(Результат);
+        
+    Результат = OPI_VK.УдалитьПодборку(ИДПодборки, Параметры);                     // Уадление подборки
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьПодборку");
+    
+    OPI_Инструменты.Пауза(5);
+    Проверка_ВКИстина(Результат);
+
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_СоздатьТоварСоСвойствами() Экспорт
+ 
+    Параметры       = ПолучитьПараметрыВК();
+    ТипСоответствие = Тип("Соответствие");
+    ТипЧисло        = Тип("Число");
+    MII             = "market_item_id";
+    Response        = "response";
+    Желтый          = "Желтый";
+    Красный         = "Красный";
+    Картинка        = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    ИВФ             = ПолучитьИмяВременногоФайла("png");   
+    Картинка.Записать(ИВФ);
+    
+    МассивВариантов = Новый Массив;
+    МассивВариантов.Добавить(Желтый);
+    МассивВариантов.Добавить("Синий");
+    МассивВариантов.Добавить(Красный);
+    
+    Результат = OPI_VK.СоздатьСвойствоТовара("Цвет", Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСвойствоТовара");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    Свойство  = Результат[Response]["property_id"];
+    Свойство  = OPI_Инструменты.ЧислоВСтроку(Свойство);
+     
+    СоответствиеСвойств = Новый Соответствие;
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["property_id"]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    Результат = OPI_VK.ИзменитьСвойствоТовара("Цвет (изм.)", Свойство, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьСвойствоТовара");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    Проверка_ВКИстина(Результат);
+   
+    Для Каждого Вариант Из МассивВариантов Цикл
+        
+        Результат = OPI_VK.ДобавитьВариантСвойстваТовара(Вариант, Свойство, Параметры);
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьВариантСвойстваТовара");
+        
+        OPI_Инструменты.Пауза(5);
+        
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["variant_id"]).ИмеетТип(ТипЧисло).Заполнено();
+            
+        ИДВарианта = Результат[Response]["variant_id"];
+        СоответствиеСвойств.Вставить(Вариант, ИДВарианта);
+        
+        Результат = OPI_VK.ИзменитьВариантСвойстваТовара(Вариант + Строка(Новый УникальныйИдентификатор())
+            , Свойство
+            , ИДВарианта
+            , Параметры);
+            
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьВариантСвойстваТовара");
+        
+    Проверка_ВКИстина(Результат);
+              
+    КонецЦикла;
+  
+    МассивКартинок = Новый Массив;
+    МассивКартинок.Добавить(ИВФ);
+    МассивКартинок.Добавить(Картинка);
+    
+    Товар = Новый Соответствие();
+    Товар.Вставить("Имя"                , "Тестовый товар (" + Желтый + ")");    
+    Товар.Вставить("Описание"           , "Описание товара");
+    Товар.Вставить("Категория"          , "20173");           
+    Товар.Вставить("Цена"               , 1);                
+    Товар.Вставить("СтараяЦена"         , 15);     
+    Товар.Вставить("ОсновноеФото"       , Картинка);                   
+    Товар.Вставить("URL"                , "https://github.com/Bayselonarrend/OpenIntegrations");     
+    Товар.Вставить("ДополнительныеФото" , МассивКартинок);     
+    Товар.Вставить("ГлавныйВГруппе"     , Истина);             
+    Товар.Вставить("НомерГруппы"        , Неопределено);      
+    Товар.Вставить("Ширина"             , 20);     
+    Товар.Вставить("Высота"             , 30);     
+    Товар.Вставить("Глубина"            , 40);     
+    Товар.Вставить("Вес"                , 100);
+    Товар.Вставить("SKU"                , 12345);
+    Товар.Вставить("ДоступныйОстаток"   , "10");
+    Товар.Вставить("ЗначенияСвойств"    , СоответствиеСвойств[Желтый]);
+    
+    Результат = OPI_VK.ДобавитьТовар(Товар, , Параметры);                // Добавление товара  
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьТовар");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    ИДЖелтого = Результат[Response]["market_item_id"];               
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response][MII]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    Товар.Вставить("Имя"            , "Тестовый товар (" + Красный + ")");
+    Товар.Вставить("ЗначенияСвойств", СоответствиеСвойств[Красный]);
+
+    Результат  = OPI_VK.ДобавитьТовар(Товар, , Параметры);                // Добавление товара
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьТовар");
+      
+    OPI_Инструменты.Пауза(5);
+    
+    ИДКрасного = Результат[Response][MII];               
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response][MII]).ИмеетТип(ТипЧисло).Заполнено();
+        
+    МассивТоваров = Новый Массив;
+    МассивТоваров.Добавить(ИДЖелтого);
+    МассивТоваров.Добавить(ИДКрасного);
+    
+    Результат = OPI_VK.ПолучитьТоварыПоИД(МассивТоваров, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТоварыПоИД");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["items"]).ИмеетТип("Массив").ИмеетДлину(2);
+        
+    Результат = OPI_VK.СгруппироватьТовары(МассивТоваров, , Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СгруппироватьТовары");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response]["item_group_id"]).ИмеетТип(ТипЧисло).Заполнено();
+       
+    OPI_VK.УдалитьТовар(ИДЖелтого , Параметры);
+    OPI_VK.УдалитьТовар(ИДКрасного, Параметры);
+    
+    Для Каждого Вариант Из СоответствиеСвойств Цикл
+        
+        Удаление = OPI_VK.УдалитьВариантСвойстваТовара(Вариант.Значение, Параметры);
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВариантСвойстваТовара");
+        
+        OPI_Инструменты.Пауза(5);
+        Проверка_ВКИстина(Удаление);
+        
+    КонецЦикла;
+        
+    Удаление = OPI_VK.УдалитьСвойствоТовара(Свойство, Параметры);
+   
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьСвойствоТовара");
+        
+    OPI_Инструменты.Пауза(5);
+    
+    Проверка_ВКИстина(Удаление);
+
+    УдалитьФайлы(ИВФ);
+    
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСписокТоваров() Экспорт
+ 
+    Параметры = ПолучитьПараметрыВК();
+    Картинка  = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture"); 
+    
+    МассивКартинок = Новый Массив;
+    МассивКартинок.Добавить(Картинка);
+    
+    Товар = Новый Соответствие();
+    Товар.Вставить("Имя"                , "Тестовый товар 2");    
+    Товар.Вставить("Описание"           , "Описание товара");
+    Товар.Вставить("Категория"          , "20173");           
+    Товар.Вставить("Цена"               , 1);                
+    Товар.Вставить("СтараяЦена"         , 15);     
+    Товар.Вставить("ОсновноеФото"       , Картинка);                   
+    Товар.Вставить("URL"                , "https://github.com/Bayselonarrend/OpenIntegrations");     
+    Товар.Вставить("ДополнительныеФото" , МассивКартинок);     
+    Товар.Вставить("ГлавныйВГруппе"     , Истина);             
+    Товар.Вставить("НомерГруппы"        , Неопределено);      
+    Товар.Вставить("Ширина"             , 20);     
+    Товар.Вставить("Высота"             , 30);     
+    Товар.Вставить("Глубина"            , 40);     
+    Товар.Вставить("Вес"                , 100);
+    Товар.Вставить("SKU"                , 12345);
+    Товар.Вставить("ДоступныйОстаток"   , "10");
+    
+    Результат = OPI_VK.ДобавитьТовар(Товар, , Параметры);
+    ИДТовара  = Результат["response"]["market_item_id"];
+    OPI_Инструменты.Пауза(5);
+    
+    Результат = OPI_VK.ПолучитьСписокТоваров(, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокТоваров");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат) 
+        .ИмеетТип("Массив").Заполнено();
+              
+    OPI_VK.УдалитьТовар(ИДТовара, Параметры);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСписокПодборок() Экспорт
+ 
+    Параметры = ПолучитьПараметрыВК();
+    Картинка  = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");    
+    Результат = OPI_VK.СоздатьПодборкуТоваров("Тестовая подборка"
+        , Картинка
+        , Истина
+        , Ложь
+        , Параметры); 
+     
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПодборкуТоваров");
+       
+    ИДПодборки = Результат["response"]["market_album_id"];      
+    Результат  = OPI_VK.ПолучитьСписокПодборок(Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокПодборок");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат) 
+        .ИмеетТип("Массив").Заполнено();
+        
+    OPI_VK.УдалитьПодборку(ИДПодборки, Параметры); 
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСписокСвойств() Экспорт
+ 
+    Параметры  = ПолучитьПараметрыВК();
+    Результат  = OPI_VK.ПолучитьСписокСвойств(Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокСвойств");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат) 
+        .ИмеетТип("Массив").Заполнено();
+        
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ВК_ПолучитьСписокЗаказов() Экспорт
+ 
+    Параметры  = ПолучитьПараметрыВК();
+    Результат  = OPI_VK.ПолучитьСписокЗаказов(Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗаказов");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат) 
+        .ИмеетТип("Массив").Заполнено();
+        
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ВК_ЗагрузитьВидео() Экспорт
+    
+    Параметры    = ПолучитьПараметрыВК();
+    Видео        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Video");
+    Наименование = "Новое видео";
+    Описание     = "Описание видео";
+    
+    Результат = OPI_VK.ЗагрузитьВидеоНаСервер(Видео, Наименование, Описание, , Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗаказов");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["video_id"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["video_hash"]).Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область YandexDisk
+
+Процедура ЯДиск_ПолучитьИнформациюОДиске() Экспорт
+ 
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Соответствие = "Соответствие";
+    
+    Результат = OPI_YandexDisk.ПолучитьИнформациюОДиске(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОДиске");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(Соответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["system_folders"]).ИмеетТип(Соответствие);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["user"]).ИмеетТип(Соответствие);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ЯДиск_СоздатьПапку() Экспорт
+ 
+   Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+   Путь  = "/" + Строка(Новый УникальныйИдентификатор);
+   
+   Результат = OPI_YandexDisk.СоздатьПапку(Токен, Путь);
+   
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПапку");
+   
+   OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+   OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("dir");
+   OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);
+        
+   OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь);
+  
+   OPI_Инструменты.Пауза(5);
+  
+КонецПроцедуры
+
+Процедура ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект() Экспорт
+ 
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Путь  = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    URL   = "https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/main/Media/logo.png";
+
+    OPI_YandexDisk.ЗагрузитьФайлПоURL(Токен, Путь, URL);
+    OPI_Инструменты.Пауза(5);
+        
+    Результат = OPI_YandexDisk.ПолучитьОбъект(Токен, Путь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьОбъект");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("file");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);
+
+     OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь);
+     
+     OPI_Инструменты.Пауза(5);
+     
+КонецПроцедуры
+
+Процедура ЯДиск_ЗагрузитьУдалитьФайл() Экспорт
+ 
+    Токен    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Путь     = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    Картинка = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    ИВФ      = ПолучитьИмяВременногоФайла("png");
+    Картинка.Записать(ИВФ);
+
+    Результат = OPI_YandexDisk.ЗагрузитьФайл(Токен, Путь, Картинка, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
+    
+    Проверка_Пусто(Результат);
+    OPI_Инструменты.Пауза(5);
+    
+    Результат = OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект");
+    
+    Проверка_Пусто(Результат);
+    
+    Результат = OPI_YandexDisk.ЗагрузитьФайл(Токен, Путь, ИВФ, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
+    
+    Проверка_Пусто(Результат);
+    OPI_Инструменты.Пауза(5);
+    
+    Результат = OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь); 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект");
+    
+    Проверка_Пусто(Результат);   
+
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ЯДиск_СоздатьКопиюОбъекта() Экспорт
+ 
+    Токен           = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    ПутьОригинала   = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    ПутьКопии       = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    URL             = "https://raw.githubusercontent.com/Bayselonarrend/"
+        + "OpenIntegrations/main/Media/logo.png";
+
+    OPI_YandexDisk.ЗагрузитьФайлПоURL(Токен, ПутьОригинала, URL);
+    OPI_Инструменты.Пауза(5);
+      
+    Результат = OPI_YandexDisk.СоздатьКопиюОбъекта(Токен, ПутьОригинала, ПутьКопии, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКопиюОбъекта");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("file");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Равно("disk:" + ПутьКопии);
+
+     OPI_YandexDisk.УдалитьОбъект(Токен, ПутьОригинала, Ложь);
+     OPI_YandexDisk.УдалитьОбъект(Токен, ПутьКопии, Ложь);
+     
+     OPI_Инструменты.Пауза(5);
+     
+КонецПроцедуры
+
+Процедура ЯДиск_ПолучитьСсылкуНаСкачивание() Экспорт
+ 
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Путь  = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    URL   = "https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/main/Media/logo.png";
+
+    OPI_YandexDisk.ЗагрузитьФайлПоURL(Токен, Путь, URL);
+    OPI_Инструменты.Пауза(5);
+       
+    Результат = OPI_YandexDisk.ПолучитьСсылкуДляСкачивания(Токен, Путь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуДляСкачивания");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["method"]).Равно("GET");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["href"]).ИмеетТип("Строка").Заполнено();
+    
+    URL = Результат["href"];
+    
+    Результат = OPI_YandexDisk.СкачатьФайл(Токен, Путь);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные").Заполнено();
+
+    OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь);
+
+КонецПроцедуры
+
+Процедура ЯДиск_ПолучитьСписокФайлов() Экспорт
+ 
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Количество = 2;
+    Отступ     = 1;
+    
+    Результат = OPI_YandexDisk.ПолучитьСписокФайлов(Токен, Количество, Отступ, "image");
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокФайлов");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["limit"]).Равно(Количество);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["offset"]).Равно(Отступ);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ЯДиск_ПереместитьОбъект() Экспорт
+ 
+    Токен           = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    ПутьОригинала   = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    ПутьКопии       = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    URL             = "https://raw.githubusercontent.com/Bayselonarrend/"
+        + "OpenIntegrations/main/Media/logo.png";
+
+    OPI_YandexDisk.ЗагрузитьФайлПоURL(Токен, ПутьОригинала, URL);
+    OPI_Инструменты.Пауза(15);
+      
+    Результат = OPI_YandexDisk.ПереместитьОбъект(Токен, ПутьОригинала, ПутьКопии, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереместитьОбъект");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("file");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Равно("disk:" + ПутьКопии);
+
+    OPI_YandexDisk.УдалитьОбъект(Токен, ПутьОригинала, Ложь);
+    OPI_YandexDisk.УдалитьОбъект(Токен, ПутьКопии, Ложь);
+    
+    OPI_Инструменты.Пауза(5);
+     
+КонецПроцедуры
+
+Процедура ЯДиск_ДействияПубличныхОбъектов() Экспорт
+ 
+    PUrl         = "public_url";
+    Соответствие = "Соответствие";
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Путь         = "/" + Строка(Новый УникальныйИдентификатор) + ".png";
+    URL          = "https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/main/Media/logo.png";
+    
+    OPI_YandexDisk.ЗагрузитьФайлПоURL(Токен, Путь, URL);
+    OPI_Инструменты.Пауза(5);
+    
+    МассивРезультатов = Новый Массив;
+    
+    МассивРезультатов.Добавить(OPI_YandexDisk.ОпубликоватьОбъект(Токен, Путь)); 
+    ПубличныйURL      = МассивРезультатов[0][PUrl];
+    
+    Результат  = OPI_YandexDisk.ПолучитьСсылкуСкачиванияПубличногоОбъекта(Токен, ПубличныйURL);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуСкачиванияПубличногоОбъекта");
+              
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(Соответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["method"]).Равно("GET");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["href"]).ИмеетТип("Строка").Заполнено();
+    
+    Результат   = OPI_YandexDisk.ПолучитьПубличныйОбъект(Токен, ПубличныйURL);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьПубличныйОбъект");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(Соответствие).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("file");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Равно("/");
+    
+    МассивРезультатов.Добавить(OPI_YandexDisk.СохранитьПубличныйОбъектНаДиск(Токен, ПубличныйURL));
+                
+    МассивРезультатов.Добавить(OPI_YandexDisk.ОтменитьПубликациюОбъекта(Токен, Путь));
+    
+    Счетчик = 0;
+    Для Каждого Результат Из МассивРезультатов Цикл
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Изменение публикации");
+            
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(Соответствие).Заполнено();
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["type"]).Равно("file");
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path"]).Заполнено();
+            
+        Если Счетчик = 0 Тогда   
+            OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[PUrl]).ИмеетТип("Строка").Заполнено();
+        Иначе
+            OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[PUrl]).ИмеетТип("Неопределено");
+        КонецЕсли;
+        
+        Счетчик = Счетчик + 1;
+        
+    КонецЦикла;
+     
+    OPI_YandexDisk.УдалитьОбъект(Токен, Путь, Ложь);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ЯДиск_ПолучитьСписокОпубликованных() Экспорт
+ 
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("YandexDisk_Token");
+    Количество = 2;
+    Отступ     = 1;
+    
+    Результат = OPI_YandexDisk.ПолучитьСписокОпубликованныхОбъектов(Токен, Количество, Отступ);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокОпубликованныхОбъектов");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["limit"]).Равно(Количество);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["offset"]).Равно(Отступ);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Viber
+
+Процедура Вайбер_ПолучитьИнформациюОКанале() Экспорт
+ 
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");    
+    Результат = OPI_Viber.ПолучитьИнформациюОКанале(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОКанале");
+        
+    Проверка_ВайберОк(Результат);
+
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура Вайбер_ПолучитьДанныеПользователя() Экспорт
+ 
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken"); 
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+    Результат    = OPI_Viber.ПолучитьДанныеПользователя(Токен, Пользователь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеПользователя");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["chat_hostname"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["status_message"]).Заполнено();
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура Вайбер_ПолучитьОнлайнПользователей() Экспорт
+ 
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken"); 
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Результат    = OPI_Viber.ПолучитьОнлайнПользователей(Токен, Пользователь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьОнлайнПользователей");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["users"]).ИмеетТип("Массив");
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьТекстовоеСообщение() Экспорт
+ 
+    Текст         = "Тестовое сообщение";
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+    
+    МассивКнопок  = Новый Массив;
+    МассивКнопок.Добавить("Кнопка 1");
+    МассивКнопок.Добавить("Кнопка 2");
+    МассивКнопок.Добавить("Кнопка 3");
+    
+    Клавиатура = OPI_Viber.СформироватьКлавиатуруИзМассиваКнопок(МассивКнопок);
+ 
+    Результат  = OPI_Viber.ОтправитьТекстовоеСообщение(ТокенБота, Текст, Пользователь, Ложь, Клавиатура);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьТекстовоеСообщение(ТокенКанал, Текст, Администратор, Истина, Клавиатура);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьКартинку() Экспорт
+
+    Текст         = "Тестовое сообщение";
+    Картинка      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture");
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+     
+    Результат  = OPI_Viber.ОтправитьКартинку(ТокенБота, Картинка, Пользователь, Ложь, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКартинку");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьКартинку(ТокенКанал, Картинка, Администратор, Истина, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКартинку");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьФайл() Экспорт
+  
+    Документ      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Document");
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+       
+    Результат  = OPI_Viber.ОтправитьФайл(ТокенБота, Документ, Пользователь, Ложь, "docx");
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьФайл");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьФайл(ТокенКанал, Документ, Администратор, Истина, "docx");
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьФайл");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьКонтакт() Экспорт
+ 
+    Имя           = "Петр Петров";
+    Телефон       = "+123456789";
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+         
+    Результат  = OPI_Viber.ОтправитьКонтакт(ТокенБота, Имя, Телефон, Пользователь, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКонтакт");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьКонтакт(ТокенКанал, Имя, Телефон, Администратор, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКонтакт");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьЛокацию() Экспорт
+
+    Широта        = "48.87373649724122";
+    Долгота       = "2.2954639195323967";
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+         
+    Результат  = OPI_Viber.ОтправитьЛокацию(ТокенБота, Широта, Долгота, Пользователь, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьЛокацию");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьЛокацию(ТокенКанал, Широта, Долгота, Администратор, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьЛокацию");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Вайбер_ОтправитьСсылку() Экспорт
+
+    URL           = "https://github.com/Bayselonarrend/OpenIntegrations";
+    ТокенКанал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelToken");
+    ТокенБота     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_Token");   
+    Пользователь  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_UserID");
+    Администратор = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Viber_ChannelAdminID");
+         
+    Результат  = OPI_Viber.ОтправитьСсылку(ТокенБота, URL, Пользователь, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСсылку");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    Результат  = OPI_Viber.ОтправитьСсылку(ТокенКанал, URL, Администратор, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСсылку");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_token"]).Заполнено();
+    Проверка_ВайберОк(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область GoogleWorkspace
+
+Процедура ГВ_ПолучитьСсылкуАвторизации() Экспорт
+ 
+    ClientID  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_ClientID");    
+    Результат = OPI_GoogleWorkspace.СформироватьСсылкуПолученияКода(ClientID);
+            
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат)
+        .ИмеетТип("Строка") 
+        .Заполнено();
+        
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Google_Link", Результат);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура ГВ_ПолучитьТокен() Экспорт
+ 
+    ClientID      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_ClientID");
+    ClientSecret  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_ClientSecret");
+    Code          = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Code");
+    
+    Результат = OPI_GoogleWorkspace.ПолучитьТокенПоКоду(ClientID, ClientSecret, Code);
+           
+    Если ЗначениеЗаполнено(Результат["access_token"])
+        И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда
+        
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Google_Token"  , Результат["access_token"]);
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Google_Refresh", Результат["refresh_token"]);
+    
+    КонецЕсли;
+    
+    OPI_Инструменты.Пауза(5);
+      
+КонецПроцедуры
+
+Процедура ГВ_ОбновитьТокен() Экспорт
+ 
+    ClientID      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_ClientID");
+    ClientSecret  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_ClientSecret");
+    RefreshToken  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Refresh");
+    
+    Результат = OPI_GoogleWorkspace.ОбновитьТокен(ClientID, ClientSecret, RefreshToken);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие");                
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["access_token"]).Заполнено();
+    
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Google_Token", Результат["access_token"]);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область GoogleCalendar
+
+Процедура ГК_ПолучитьСписокКалендарей() Экспорт
+ 
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");    
+    Результат = OPI_GoogleCalendar.ПолучитьСписокКалендарей(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокКалендарей");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат)
+        .ИмеетТип("Массив");
+
+    OPI_Инструменты.Пауза(5);
+            
+КонецПроцедуры
+
+Процедура ГК_СоздатьУдалитьКалендарь() Экспорт
+ 
+    Токен                   = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); 
+    Наименование            = "Тестовый календарь";
+    Описание                = "Тестовое описание";
+    НаименованиеИзмененное  = Наименование + " (изм.)";
+    ТипСоответствие         = Тип("Соответствие");
+    ТипСтрока               = Тип("Строка");
+    Summary                 = "summary";
+    Черный                  = "#000000";
+    Желтый                  = "#ffd800";
+    
+    Результат = OPI_GoogleCalendar.СоздатьКалендарь(Токен, Наименование); 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКалендарь");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Summary]).Равно(Наименование);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).ИмеетТип(ТипСтрока).Заполнено();
+        
+    Календарь = Результат["id"];
+    
+    Результат = OPI_GoogleCalendar.ИзменитьМетаданныеКалендаря(Токен
+        , Календарь
+        , НаименованиеИзмененное
+        , Описание);
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьМетаданныеКалендаря");
+    
+    Проверка_ГКОбъект(Результат, НаименованиеИзмененное, Описание);
+        
+    Результат = OPI_GoogleCalendar.ПолучитьМетаданныеКалендаря(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьМетаданныеКалендаря");  
+    
+    Проверка_ГКОбъект(Результат, НаименованиеИзмененное, Описание);
+
+    Результат = OPI_GoogleCalendar.ДобавитьКалендарьВСписок(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьКалендарьВСписок");
+    
+    Проверка_ГКОбъект(Результат, НаименованиеИзмененное, Описание);
+    
+    Результат = OPI_GoogleCalendar.ИзменитьКалендарьСписка(Токен, Календарь, Черный, Желтый, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьКалендарьСписка");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Summary]).Равно(НаименованиеИзмененное);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["foregroundColor"]).Равно(Черный);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["backgroundColor"]).Равно(Желтый);
+        
+    Результат = OPI_GoogleCalendar.ПолучитьКалендарьСписка(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьКалендарьСписка");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие); 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Summary]).Равно(НаименованиеИзмененное);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["foregroundColor"]).Равно(Черный);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["backgroundColor"]).Равно(Желтый);
+
+    Результат = OPI_GoogleCalendar.ОчиститьОсновнойКалендарь(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьОсновнойКалендарь");
+    
+    Проверка_Пусто(Результат);
+    
+    Результат = OPI_GoogleCalendar.УдалитьКалендарьИзСписка(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьКалендарьИзСписка");
+    
+    Проверка_Пусто(Результат);
+    
+    Результат = OPI_GoogleCalendar.УдалитьКалендарь(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьКалендарь");
+    
+    Проверка_Пусто(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ГК_СоздатьУдалитьСобытие() Экспорт
+ 
+    ТекущаяДата     = OPI_Инструменты.ПолучитьТекущуюДату();
+    Токен           = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); 
+    Календарь       = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_CalendarID");
+    Наименование    = "Новое событие";
+    Описание        = "Описание тестового события";
+    ОписаниеИзм     = "Описание тестового события (изм.)";
+    UID             = "id";
+    Час             = 3600;
+
+    Вложения        = Новый Соответствие;
+    
+    Вложения.Вставить("Картинка1"
+        , "https://opi.neocities.org/assets/images/logo_long-e8fdcca6ff8b32e679ea49a1ccdd3eac.png");
+    Вложения.Вставить("Картинка2"
+        , "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1");
+    
+    СоответствиеСобытия = Новый Соответствие;
+    СоответствиеСобытия.Вставить("Описание"                 , Описание);
+    СоответствиеСобытия.Вставить("Заголовок"                , Наименование);
+    СоответствиеСобытия.Вставить("МестоПроведения"          , "В офисе");
+    СоответствиеСобытия.Вставить("ДатаНачала"               , ТекущаяДата);
+    СоответствиеСобытия.Вставить("ДатаОкончания"            , СоответствиеСобытия["ДатаНачала"] + Час);
+    СоответствиеСобытия.Вставить("МассивURLФайловВложений"  , Вложения);
+    СоответствиеСобытия.Вставить("ОтправлятьУведомления"    , Истина);
+    
+    Результат = OPI_GoogleCalendar.СоздатьСобытие(Токен, Календарь, СоответствиеСобытия);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСобытие");
+    
+    Событие   = Результат[UID];
+    
+    Проверка_ГКОбъект(Результат, Наименование, Описание);
+      
+    СоответствиеСобытия = Новый Соответствие;  
+    СоответствиеСобытия.Вставить("Описание", ОписаниеИзм);
+    
+    Результат = OPI_GoogleCalendar.ИзменитьСобытие(Токен, Календарь, СоответствиеСобытия, Событие);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьСобытие");
+    
+    Проверка_ГКОбъект(Результат, Наименование, ОписаниеИзм);
+        
+    Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСобытие");
+    
+    Проверка_ГКОбъект(Результат, Наименование, ОписаниеИзм);
+
+    Результат = OPI_GoogleCalendar.ПереместитьСобытие(Токен, Календарь, Календарь, Событие);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереместитьСобытие");
+    
+    Проверка_ГКОбъект(Результат, Наименование, ОписаниеИзм);
+  
+    Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие); 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьСобытие");
+       
+    Проверка_Пусто(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ГК_ПолучитьСписокСобытий() Экспорт
+ 
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");    
+    Календарь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_CalendarID");
+
+    Результат = OPI_GoogleCalendar.ПолучитьСписокСобытий(Токен, Календарь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокСобытий");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Массив");
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область GoogleDrive
+
+Процедура ГД_ПолучитьСписокКаталогов() Экспорт
+ 
+    MimeType  = "mimeType";
+    Name      = "name";
+    Имя       = "Тестовая папка";
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Результат = OPI_GoogleDrive.ПолучитьСписокКаталогов(Токен, Имя, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокКаталогов");
+    
+    Результат = Результат[0];
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[MimeType]).Равно("application/vnd.google-apps.folder");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+    Идентификатор = Результат["id"];
+    
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("GD_Catalog", Идентификатор);
+    
+    Результат   = OPI_GoogleDrive.ПолучитьИнформациюОбОбъекте(Токен, Идентификатор);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОбОбъекте");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[MimeType]).Равно("application/vnd.google-apps.folder");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+
+КонецПроцедуры
+
+Процедура ГД_ЗагрузитьУдалитьФайл() Экспорт
+ 
+    ЛишниеБайты = 2;
+    
+    Kind      = "kind";
+    Content   = "content";
+    MIME      = "MIME";
+    MimeType  = "mimeType";
+    Name      = "name";
+    Id_       = "id";
+    
+    МассивУдаляемых = Новый Массив;
+    Токен           = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Картинка        = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    КартинкаЗамены  = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture2");
+    Каталог         = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GD_Catalog");
+    
+    Описание = OPI_GoogleDrive.ПолучитьОписаниеФайла();
+    Описание.Вставить("Родитель", Каталог);
+   
+    Результат = OPI_GoogleDrive.ЗагрузитьФайл(Токен, Картинка, Описание);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[MimeType]).Равно(Описание[MIME]);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Равно(Описание["Имя"]);
+
+    Идентификатор = Результат[Id_];
+    МассивУдаляемых.Добавить(Идентификатор);
+    
+    НовоеИмя  = "Скопированный файл.jpeg";
+    Результат = OPI_GoogleDrive.СкопироватьОбъект(Токен, Идентификатор, НовоеИмя, "root");
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкоприроватьОбъект");
+    
+    OPI_Инструменты.Пауза(5);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[MimeType]).Равно(Описание[MIME]);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Равно(НовоеИмя);
+       
+    МассивУдаляемых.Добавить(Результат[Id_]);
+    
+    Результат = OPI_GoogleDrive.СкачатьФайл(Токен, Идентификатор);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкачатьФайл");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат.Размер()).Равно(Картинка.Размер() + ЛишниеБайты);
+    OPI_Инструменты.Пауза(5);
+    
+    НовоеИмя  = "Обновленный файл.jpg";
+    Результат = OPI_GoogleDrive.ОбновитьФайл(Токен, Идентификатор, КартинкаЗамены, НовоеИмя);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбновитьФайл");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[MimeType]).Равно(Описание[MIME]);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Равно(НовоеИмя);
+
+    OPI_Инструменты.Пауза(5);
+    
+    Комментарий = "Yo";
+    Результат   = OPI_GoogleDrive.СоздатьКомментарий(Токен, Идентификатор, Комментарий);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКомментарий");
+  
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Content]).Равно(Комментарий);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Kind]).Равно("drive#comment");
+    
+    OPI_Инструменты.Пауза(5);
+     
+    Для Каждого Удаляемый Из МассивУдаляемых Цикл
+        Результат = OPI_GoogleDrive.УдалитьОбъект(Токен, Удаляемый);    
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект");
+      
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
+        OPI_Инструменты.Пауза(2);
+    КонецЦикла;
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура ГД_СоздатьУдалитьКомментарий() Экспорт
+    
+    Kind      = "kind";
+    Content   = "content";
+    Id_       = "id";
+    Comments  = "comments";
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Каталог   = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GD_Catalog");
+    Картинка  = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    
+    Описание  = OPI_GoogleDrive.ПолучитьОписаниеФайла();
+    Описание.Вставить("Родитель", Каталог);
+    
+    Результат     = OPI_GoogleDrive.ЗагрузитьФайл(Токен, Картинка, Описание);
+    Идентификатор = Результат[Id_];
+    
+    Комментарий         = "Новый комментарий";
+    МассивРезультатов   = Новый Массив;
+    Результат           = OPI_GoogleDrive.СоздатьКомментарий(Токен, Идентификатор, Комментарий);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКомментарий");
+    
+    ИДКомментария       = Результат[Id_];
+    
+    МассивРезультатов.Добавить(Результат);
+    
+    Результат = OPI_GoogleDrive.ПолучитьКомментарий(Токен, Идентификатор, ИДКомментария);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьКомментарий");
+    
+    МассивРезультатов.Добавить(Результат);
+    
+    Результат         = OPI_GoogleDrive.ПолучитьСписокКомментариев(Токен, Идентификатор);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокКомментариев");
+    
+    Комментарии       = Результат[Comments];
+    ОбъектКомментарий = Комментарии[Комментарии.ВГраница()];
+    
+    МассивРезультатов.Добавить(ОбъектКомментарий);
+    
+    Для Каждого Результат Из МассивРезультатов Цикл     
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Content]).Равно(Комментарий);
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Kind]).Равно("drive#comment");
+    КонецЦикла;
+    
+    Результат = OPI_GoogleDrive.УдалитьКомментарий(Токен, Идентификатор, ИДКомментария);    
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьКомментарий");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
+
+    OPI_GoogleDrive.УдалитьОбъект(Токен, Идентификатор);
+        
+КонецПроцедуры
+
+Процедура ГД_СоздатьКаталог() Экспорт
+    
+    Name       = "name";
+    Имя        = "Тестовая папка";
+    Токен      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Каталог    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GD_Catalog");
+    
+    МассивРезультатов = Новый Массив;
+    
+    МассивРезультатов.Добавить(OPI_GoogleDrive.СоздатьПапку(Токен, Имя));
+    МассивРезультатов.Добавить(OPI_GoogleDrive.СоздатьПапку(Токен, Имя, Каталог));
+    
+    Для Каждого Результат Из МассивРезультатов Цикл
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПапку");
+        
+        ИДКаталога = Результат["id"];
+                
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Name]).Равно(Имя);
+        
+        OPI_GoogleDrive.УдалитьОбъект(Токен, ИДКаталога);
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область GoogleSheets
+
+Процедура ГТ_СоздатьТаблицу() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Наименование = "Тестовая таблица";
+    
+    МассивЛистов = Новый Массив;
+    МассивЛистов.Добавить("Лист1");
+    МассивЛистов.Добавить("Лист2");
+    
+    Результат = OPI_GoogleSheets.СоздатьКнигу(Токен, Наименование, МассивЛистов);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКнигу");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование);
+
+    Для Н = 0 По МассивЛистов.ВГраница() Цикл
+        
+        ИмяЛиста = Результат["sheets"][Н]["properties"]["title"];
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИмяЛиста).Равно(МассивЛистов[Н]);
+        Лист = Результат["sheets"][Н]["properties"]["sheetId"];
+        Лист = OPI_Инструменты.ЧислоВСтроку(Лист);
+        
+    КонецЦикла;
+    
+    Книга   = Результат["spreadsheetId"];
+    
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("GS_Spreadsheet", Книга);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("GS_Sheet"      , Лист);
+    
+    Результат = OPI_GoogleSheets.СоздатьКнигу(Токен, Наименование, МассивЛистов);
+    Книга2  = Результат["spreadsheetId"];
+    
+    Результат = OPI_GoogleSheets.КопироватьЛист(Токен, Книга, Книга2, Лист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "КопироватьЛист");
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["title"]).Равно(ИмяЛиста + " (копия)");
+    
+    Наименование = "Тестовый лист";
+        
+    Результат = OPI_GoogleSheets.ДобавитьЛист(Токен, Книга, Наименование);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЛист");
+
+    НовыйЛист = Результат["replies"][0]["addSheet"]["properties"]["sheetId"];
+    НовыйЛист = OPI_Инструменты.ЧислоВСтроку(НовыйЛист);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); 
+
+    Результат = OPI_GoogleSheets.УдалитьЛист(Токен, Книга, НовыйЛист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЛист");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    
+    Наименование = "Тестовая таблица (изм.)";
+    
+    Результат    = OPI_GoogleSheets.ИзменитьНаименованиеКниги(Токен, Книга, Наименование);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьНаименованиеКниги");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    
+КонецПроцедуры
+
+Процедура ГТ_ПолучитьТаблицу() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Книга        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Spreadsheet");
+    Наименование = "Тестовая таблица (изм.)";
+
+    Результат = OPI_GoogleSheets.ПолучитьКнигу(Токен, Книга);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТаблицу");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование);
+
+КонецПроцедуры
+
+Процедура ГТ_ЗаполнитьОчиститьЯчейки() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token");
+    Книга        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Spreadsheet");
+    Лист         = "Лист2";
+
+    СтруктураЯчеек = Новый Соответствие;
+    СтруктураЯчеек.Вставить("A1", "Это A1");
+    СтруктураЯчеек.Вставить("A2", "Это A2");
+    СтруктураЯчеек.Вставить("B2", "Это B2");
+    СтруктураЯчеек.Вставить("B3", "Это B3");
+    СтруктураЯчеек.Вставить("A3", "Это A3");
+    СтруктураЯчеек.Вставить("A4", "Это A4");
+    СтруктураЯчеек.Вставить("B1", "Это B1");
+    СтруктураЯчеек.Вставить("B4", "Это B4");
+    
+    МассивЯчеек = Новый Массив;
+    МассивЯчеек.Добавить("B2");
+    МассивЯчеек.Добавить("A3");
+    МассивЯчеек.Добавить("B4");
+
+    Результат = OPI_GoogleSheets.УстановитьЗначенияЯчеек(Токен, Книга, СтруктураЯчеек, Лист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьЗначенияЯчеек");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["totalUpdatedCells"]).Равно(СтруктураЯчеек.Количество());
+    
+    Результат = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, МассивЯчеек, Лист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗначенияЯчеек");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["valueRanges"].Количество()).Равно(МассивЯчеек.Количество());
+    
+    Результат = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, , Лист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗначенияЯчеек");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    
+    МассивЯчеек = Новый Массив;
+    МассивЯчеек.Добавить("B2");
+    МассивЯчеек.Добавить("A3");
+    МассивЯчеек.Добавить("B4");
+
+    Результат = OPI_GoogleSheets.ОчиститьЯчейки(Токен, Книга, МассивЯчеек, Лист);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьЯчейки");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["clearedRanges"].Количество()).Равно(МассивЯчеек.Количество());
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Twitter
+
+Процедура Твиттер_ПолучитьСсылкуАвторизации() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Результат = OPI_Twitter.ПолучитьСсылкуАвторизации(Параметры);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();
+    
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Twitter_URL", Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Твиттер_ОбновитьТокен() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Результат = OPI_Twitter.ОбновитьТокен(Параметры);
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["access_token"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["refresh_token"]).Заполнено();
+        
+    Рефреш = Результат["refresh_token"];
+    Токен  = Результат["access_token"];
+    
+    Если ЗначениеЗаполнено(Рефреш) И Не Рефреш = "null" Тогда   
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Twitter_Refresh", Рефреш);
+    КонецЕсли;
+    
+    Если ЗначениеЗаполнено(Токен) И Не Токен = "null" Тогда
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Twitter_Token"  , Токен);
+    КонецЕсли;
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Твиттер_СоздатьТекстовыйТвит() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Текст     = "Тестовый твитт" + Строка(Новый УникальныйИдентификатор);
+    
+    Результат = OPI_Twitter.СоздатьТекстовыйТвит(Текст, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТекстовыйТвит");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Твиттер_СоздатьТвитСКартинкой() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Текст     = "Тестовый твитт" + Строка(Новый УникальныйИдентификатор);
+    Картинка  = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Picture");
+    ИВФ       = ПолучитьИмяВременногоФайла("png");
+    Картинка.Записать(ИВФ);
+   
+    Результат = OPI_Twitter.СоздатьТвитКартинки(Текст, Картинка, Параметры); 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитКартинки");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);    
+    
+    Результат = OPI_Twitter.СоздатьТвитКартинки(Текст, ИВФ, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитКартинки");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);
+    
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(20);
+    
+КонецПроцедуры
+
+Процедура Твиттер_СоздатьТвитСВидео() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Текст     = "Тестовый твитт" + Строка(Новый УникальныйИдентификатор);
+    Видео     = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Video");
+    ИВФ       = ПолучитьИмяВременногоФайла("mp4");
+    Видео.Записать(ИВФ);
+   
+    Результат = OPI_Twitter.СоздатьТвитВидео(Текст, Видео, Параметры);    
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитВидео");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);    
+    
+    Результат = OPI_Twitter.СоздатьТвитВидео(Текст, ИВФ, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитВидео");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);
+    
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(20);
+    
+КонецПроцедуры
+
+Процедура Твиттер_СоздатьТвитСГиф() Экспорт
+ 
+    Параметры = ПолучитьПараметрыТвиттер();
+    Текст     = "Тестовый твитт" + Строка(Новый УникальныйИдентификатор);
+    Гифка     = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("GIF");
+    ИВФ       = ПолучитьИмяВременногоФайла("gif");
+    Гифка.Записать(ИВФ);
+   
+    Результат = OPI_Twitter.СоздатьТвитГифки(Текст, Гифка, Параметры);   
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитГифки");
+     
+    Проверка_ТвиттерТекст(Результат, Текст);    
+    
+    Результат = OPI_Twitter.СоздатьТвитГифки(Текст, ИВФ, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитГифки");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);
+    
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(20);
+    
+КонецПроцедуры
+
+Процедура Твиттер_СоздатьТвитСОпросом() Экспорт
+ 
+    Параметры       = ПолучитьПараметрыТвиттер();
+    Текст           = "Тестовый твитт" + Строка(Новый УникальныйИдентификатор);
+    МассивОтветов   = Новый Массив;
+    МассивОтветов.Добавить("Вариант 1");
+    МассивОтветов.Добавить("Вариант 2");
+   
+    Результат = OPI_Twitter.СоздатьТвитОпрос(Текст, МассивОтветов, 60, Параметры);
+ 
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТвитОпрос");
+    
+    Проверка_ТвиттерТекст(Результат, Текст);
+    
+    OPI_Инструменты.Пауза(20);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Notion
+
+Процедура Ноушн_СоздатьСтраницу() Экспорт
+	
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Родитель  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Parent");
+	Заголовок = "Тестовый заголовок";
+	 
+	Результат = OPI_Notion.СоздатьСтраницу(Токен, Родитель, Заголовок);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСтраницу");
+    
+    Проверка_НоушнОбъект(Результат);
+
+КонецПроцедуры
+
+Процедура Ноушн_СоздатьИзменитьБазу() Экспорт
+	
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Родитель  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Parent");
+	Заголовок = "Тестовый заголовок";
+	
+	Свойства = Новый Соответствие;
+	Свойства.Вставить("Имя"            , "title");
+	Свойства.Вставить("Описание"       , "rich_text");
+	Свойства.Вставить("Номер"          , "number");
+	Свойства.Вставить("Статус"         , "status");
+	Свойства.Вставить("Дата создания"  , "date");
+	Свойства.Вставить("Картинка"       , "files");
+	Свойства.Вставить("Активен"        , "checkbox");
+	Свойства.Вставить("Сайт"           , "url");
+	Свойства.Вставить("Почта"          , "email");
+	Свойства.Вставить("Телефон"        , "phone_number");
+	Свойства.Вставить("Пользователь"   , "people");
+	
+	ВыборЗначения = Новый Соответствие;
+	ВыборЗначения.Вставить("Новый", "green");
+	ВыборЗначения.Вставить("В работе", "yellow");
+	ВыборЗначения.Вставить("Удаленный", "red");
+	Свойства.Вставить("Статус", ВыборЗначения);
+	
+	Результат = OPI_Notion.СоздатьБазуДанных(Токен, Родитель, Заголовок, Свойства); 
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных");
+    
+    Проверка_НоушнОбъект(Результат, "database");
+    
+    База      = Результат["id"];
+    Заголовок = "Тестовый заголовок";
+	Описание  = "Тестовое описание";
+	
+	Свойства = Новый Соответствие;
+	Свойства.Вставить("Почта", "rich_text"); // Тип поля "Почта" будет изменен с email на текст
+	Свойства.Вставить("Сайт");               // Поле "Сайт" будет удалено
+	
+	Результат = OPI_Notion.ИзменитьСвойстваБазы(Токен, База, Свойства, Заголовок, Описание);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьСвойстваБазы");
+    
+    Проверка_НоушнОбъект(Результат, "database");
+
+КонецПроцедуры
+
+Процедура Ноушн_ПолучитьИнформациюОСтранице() Экспорт
+	
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Страница  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Page");
+	
+	Результат = OPI_Notion.ПолучитьСтраницу(Токен, Страница);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтраницу");
+    
+    Проверка_НоушнОбъект(Результат);	
+    
+КонецПроцедуры
+
+Процедура Ноушн_ПолучитьИнформациюОБазе() Экспорт
+
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	База      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Base");
+		
+	Результат = OPI_Notion.ПолучитьБазуДанных(Токен, База);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьБазуДанных");
+    
+    Проверка_НоушнОбъект(Результат, "database");
+    
+КонецПроцедуры
+
+Процедура Ноушн_СоздатьСтраницуВБазу() Экспорт
+	
+	Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	База  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Base");
+	
+	Картинка = Новый Соответствие;
+	Картинка.Вставить("Лого", OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture"));
+	
+	Свойства = Новый Соответствие;
+	Свойства.Вставить("Имя"            , "ООО Вектор");
+	Свойства.Вставить("Описание"       , "Наш первый клиент");
+	Свойства.Вставить("Номер"          , 1);
+	Свойства.Вставить("Статус"         , "Обычный");
+	Свойства.Вставить("Дата создания"  , OPI_Инструменты.ПолучитьТекущуюДату());
+	Свойства.Вставить("Картинка"       , Картинка);
+	Свойства.Вставить("Активен"        , Истина);
+	Свойства.Вставить("Сайт"           , "https://vector.ru");
+	Свойства.Вставить("Почта"          , "mail@vector.ru");
+	Свойства.Вставить("Телефон"        , "88005553535");
+	Свойства.Вставить("Статус"	       , "Новый");
+	
+	Результат = OPI_Notion.СоздатьСтраницуВБазу(Токен, База, Свойства);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСтраницуВБазу");
+    
+    Проверка_НоушнОбъект(Результат);
+    
+    Родитель = СтрЗаменить(Результат["parent"]["database_id"], "-", "");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Родитель).Равно(База);
+       	 
+КонецПроцедуры
+
+Процедура Ноушн_ИзменитьСвойстваСтраницы() Экспорт
+	
+	Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Страница     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Page");
+	Иконка       = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture");
+	Обложка      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Picture2");
+	Архивировать = Ложь;
+	
+	Свойства = Новый Соответствие;
+	Свойства.Вставить("Активен"     , Ложь);
+	Свойства.Вставить("Почта"       , "vector@mail.ru");
+	
+	Результат = OPI_Notion.ИзменитьСвойстваСтраницы(Токен
+		, Страница
+		, Свойства
+		, Иконка
+		, Обложка
+		, Архивировать);
+          
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьСвойстваСтраницы");
+    
+    Проверка_НоушнОбъект(Результат);
+    
+КонецПроцедуры
+
+Процедура Ноушн_СоздатьУдалитьБлок() Экспорт
+	
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Родитель  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Parent");
+	Блок      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Block");
+	
+	Результат = OPI_Notion.ВернутьБлок(Токен, Блок);	
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВернутьБлок");
+    
+    Проверка_НоушнОбъект(Результат, "block");
+    
+	Результат = OPI_Notion.СоздатьБлок(Токен, Родитель, Результат);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБлок");
+    
+    Проверка_НоушнОбъект(Результат, "list");
+    
+    Блок      = Результат["results"][0]["id"];
+	Результат = OPI_Notion.ВернутьДочерниеБлоки(Токен, Блок);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВернутьДочерниеБлоки");
+    
+    Проверка_НоушнОбъект(Результат, "list");
+    
+	Результат = OPI_Notion.УдалитьБлок(Токен, Блок);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБлок");
+    
+    Проверка_НоушнОбъект(Результат, "block");
+    
+КонецПроцедуры
+
+Процедура Ноушн_ПолучитьПользователей() Экспорт
+	
+	Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Результат = OPI_Notion.СписокПользователей(Токен);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СписокПользователей");
+    
+    Проверка_НоушнОбъект(Результат, "list");
+    
+КонецПроцедуры
+
+Процедура Ноушн_ПолучитьДанныеПользователя() Экспорт
+	
+	Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_Token");
+	Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Notion_User"); 
+	Результат    = OPI_Notion.ПолучитьДанныеПользователя(Токен, Пользователь);
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеПользователя");
+    
+    Проверка_НоушнОбъект(Результат, "user");
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Slack
+
+Процедура Слак_ПолучитьИнформациюОБоте() Экспорт
+    
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Результат = OPI_Slack.ПолучитьИнформациюОБоте(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОБоте");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["bot_id"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["user_id"]).Заполнено();
+    
+КонецПроцедуры
+
+Процедура Слак_ПолучитьСписокПользователей() Экспорт
+    
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Результат = OPI_Slack.ПолучитьСписокПользователей(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокПользователей");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["members"]).ИмеетТип("Массив");
+    
+КонецПроцедуры
+
+Процедура Слак_ПолучитьСписокОбластей() Экспорт
+    
+    Токен     = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Результат = OPI_Slack.ПолучитьСписокРабочихОбластей(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокРабочихОбластей");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["teams"]).ИмеетТип("Массив");
+    
+КонецПроцедуры
+
+Процедура Слак_ОтправитьУдалитьСообщение() Экспорт
+
+    Токен    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); 
+    Канал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    Текст    = "Тестовое сообщение 1";
+    Текст2   = "Тестовое сообщение 2";
+    Отметки  = Новый Массив;
+    Картинка = "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1";
+    
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message"]["text"]).Равно(Текст);
+    
+    Отметка = Результат["ts"];
+    
+    Результат = OPI_Slack.ИзменитьСообщение(Токен, Канал, Отметка, Текст2);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьСообщение");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message"]["text"]).Равно(Текст2);
+        
+    Результат = OPI_Slack.ПолучитьСписокОтветовНаСообщение(Токен, Канал, Отметка);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокОтветовНаСообщение");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["messages"]).ИмеетТип("Массив");
+    
+    Результат = OPI_Slack.ПолучитьСсылкуНаСообщение(Токен, Канал, Отметка);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуНаСообщение");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["permalink"]).Заполнено();
+        
+    Проверка_СлакОк(Результат);
+      
+    Отметки.Добавить(Отметка);
+    
+    МассивБлоков = Новый Массив;
+    Блок         = OPI_Slack.СформироватьБлокКартинку(Картинка, "Yo");
+    МассивБлоков.Добавить(Блок);
+    
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст, , МассивБлоков);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение (картинка)");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    
+    Отметки.Добавить(Результат["ts"]);
+    
+    Блок = OPI_Slack.СформироватьБлокКартинку(Картинка, "Yo");
+    БлокJSON = OPI_Инструменты.JSONСтрокой(Блок);
+    
+    ИВФ = ПолучитьИмяВременногоФайла("json");
+    
+    ТекстовыйДокумент = Новый ТекстовыйДокумент();
+    ТекстовыйДокумент.УстановитьТекст(БлокJSON);
+    ТекстовыйДокумент.Записать(ИВФ);
+        
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст, , ИВФ);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение (json)");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    
+    Отметки.Добавить(Результат["ts"]);
+    
+    Блоки = "['" + ИВФ + "','" + ИВФ + "']";
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст, , Блоки);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение (json массив)");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    
+    Отметки.Добавить(Результат["ts"]);
+
+    УдалитьФайлы(ИВФ);
+ 
+    Для Каждого Отметка Из Отметки Цикл
+        
+        Результат = OPI_Slack.УдалитьСообщение(Токен, Канал, Отметка);
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьСообщение");
+
+        Проверка_СлакОк(Результат);
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ts"]).Заполнено();
+    
+    КонецЦикла;
+    
+    Час       = 3600;
+    Сутки     = 24;
+    Отправка  = OPI_Инструменты.ПолучитьТекущуюДату() + (Сутки * Час);
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст, Отправка);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение (отложенное)");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).Равно(Канал);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["scheduled_message_id"]).Заполнено();
+    
+    Отметка   = Результат["scheduled_message_id"];
+    Результат = OPI_Slack.УдалитьСообщение(Токен, Канал, Отметка, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьСообщение");
+
+    Проверка_СлакОк(Результат);
+
+КонецПроцедуры
+
+Процедура Слак_ОтправитьУдалитьЭфемерное() Экспорт
+   
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); 
+    Канал        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_User");
+    Картинка     = "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1";
+    Текст        = "Тестовое сообщение 1";
+    
+    Блок      = OPI_Slack.СформироватьБлокКартинку(Картинка, "Yo");
+    Результат = OPI_Slack.ОтправитьЭфемерноеСообщение(Токен, Канал, Текст, Пользователь, Блок);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["message_ts"]).Заполнено();
+     
+КонецПроцедуры
+
+Процедура Слак_ПолучитьОтложенныеСообщения() Экспорт
+    
+    Токен    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); 
+    Канал    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    
+    Результат = OPI_Slack.ПолучитьСписокОтложенныхСообщений(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокОтложенныхСообщений");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["scheduled_messages"]).ИмеетТип("Массив");
+   
+КонецПроцедуры
+
+Процедура Слак_СоздатьАрхивироватьКанал() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_User");
+    Имя          = "testconv" + Строка(Новый УникальныйИдентификатор);
+    Тема         = "Тестовая тема";
+    Цель         = "Тестовая цель";
+    
+    #Область СоздатьКанал
+    Результат = OPI_Slack.СоздатьКанал(Токен, Имя);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКанал");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(Имя);
+    #КонецОбласти
+
+    #Область УстановитьТемуКанала
+    Результат = OPI_Slack.УстановитьТемуКанала(Токен, Канал, Тема);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьТемуКанала");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(Имя);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["topic"]["value"]).Равно(Тема);
+    #КонецОбласти
+    
+    #Область УстановитьЦельКанала
+    Результат = OPI_Slack.УстановитьЦельКанала(Токен, Канал, Цель);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьЦельКанала");
+    
+    Проверка_СлакОк(Результат);
+    #КонецОбласти
+    
+    #Область ПолучитьКанал
+    Результат = OPI_Slack.ПолучитьКанал(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьКанал");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(Имя);
+    #КонецОбласти
+    
+    #Область ПригласитьПользователейВКанал
+    Результат = OPI_Slack.ПригласитьПользователейВКанал(Токен, Канал, Пользователь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПригласитьПользователейВКанал");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(Имя);
+    #КонецОбласти
+    
+    #Область ВыгнатьПользователяИзКанала
+    Результат = OPI_Slack.ВыгнатьПользователяИзКанала(Токен, Канал, Пользователь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыгнатьПользователяИзКанала");
+    
+    Проверка_СлакОк(Результат);
+    #КонецОбласти
+    
+    #Область ПолучитьИсториюКанала
+    Результат = OPI_Slack.ПолучитьИсториюКанала(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИсториюКанала");
+        
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["messages"]).ИмеетТип("Массив");
+    #КонецОбласти
+    
+    #Область ПолучитьСписокПользователейКанала
+    Результат = OPI_Slack.ПолучитьСписокПользователейКанала(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокПользователейКанала");
+        
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["members"]).ИмеетТип("Массив");
+    #КонецОбласти
+
+    #Область ПокинутьКанал
+    Результат = OPI_Slack.ПокинутьКанал(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПокинутьКанал");
+    
+    Проверка_СлакОк(Результат);
+    #КонецОбласти
+    
+    #Область ВступитьВКанал
+    Результат = OPI_Slack.ВступитьВКанал(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВступитьВКанал");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(Имя);
+    #КонецОбласти
+    
+    #Область ПереименоватьКанал
+    НовоеИмя  = "testconv" + Строка(Новый УникальныйИдентификатор);
+    Результат = OPI_Slack.ПереименоватьКанал(Токен, Канал, НовоеИмя);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьКанал");
+    
+    Данные = Результат["channel"];
+    Канал  = Данные["id"];
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Данные["name"]).Равно(НовоеИмя);
+    #КонецОбласти
+    
+    #Область АрхивироватьКанал
+    Результат = OPI_Slack.АрхивироватьКанал(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "АрхивироватьКанал");
+    
+    Проверка_СлакОк(Результат);
+    #КонецОбласти
+    
+КонецПроцедуры
+
+Процедура Слак_ПолучитьСписокКаналов() Экспорт
+    
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    
+    Результат = OPI_Slack.ПолучитьСписокКаналов(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокКаналов");
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channels"]).ИмеетТип("Массив");
+    
+КонецПроцедуры
+
+Процедура Слак_ОткрытьЗакрытьДиалог() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Пользователь = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_User");
+    Текст        = "Yo, dude";
+    
+    Результат = OPI_Slack.ОткрытьДиалог(Токен, Пользователь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрытьДиалог");
+
+    Диалог = Результат["channel"]["id"];
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["channel"]).ИмеетТип("Соответствие");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Диалог).Заполнено();
+    
+    Результат = OPI_Slack.ОтправитьСообщение(Токен, Диалог, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьСообщение");
+    
+    Проверка_СлакОк(Результат);
+
+    Результат = OPI_Slack.ЗакрытьДиалог(Токен, Диалог);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрытьДиалог");
+
+    Проверка_СлакОк(Результат);
+
+КонецПроцедуры
+
+Процедура Слак_ПолучитьСписокФайлов() Экспорт
+    
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    
+    Результат = OPI_Slack.ПолучитьСписокФайлов(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокФайлов");
+
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");
+
+КонецПроцедуры
+
+Процедура Слак_ЗагрузитьУдалитьФайл() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Файл         = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Document");
+    Канал        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    МассивФайлов = Новый Массив;
+    ИмяФайла     = "megadoc.docx";
+    Заголовок    = "Новый файл";
+    
+    Результат = OPI_Slack.ЗагрузитьФайл(Токен, Файл, ИмяФайла, Заголовок);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
+
+    ЗагруженныйФайл = Результат["files"][0];
+    МассивФайлов.Добавить(ЗагруженныйФайл["id"]);
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
+    
+    Результат = OPI_Slack.ЗагрузитьФайл(Токен, Файл, ИмяФайла, Заголовок, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл (в канал)");
+
+    ЗагруженныйФайл = Результат["files"][0];
+    МассивФайлов.Добавить(ЗагруженныйФайл["id"]);
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
+    
+    Результат = OPI_Slack.ПолучитьДанныеФайла(Токен, ЗагруженныйФайл["id"]);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьФайл");
+    
+    ЗагруженныйФайл = Результат["file"];
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
+        
+    Для Каждого ЗагруженныйФайл Из МассивФайлов Цикл
+        
+        Результат = OPI_Slack.УдалитьФайл(Токен, ЗагруженныйФайл);
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьФайл");
+        
+        Проверка_СлакОк(Результат);
+        
+    КонецЦикла;
+
+КонецПроцедуры
+
+Процедура Слак_ПолучитьСписокВФ() Экспорт
+    
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    
+    Результат = OPI_Slack.ПолучитьСписокВнешнихФайлов(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокВнешнихФайлов");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");
+    
+    Результат = OPI_Slack.ПолучитьСписокВнешнихФайлов(Токен, Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокВнешнихФайлов");
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");
+    
+КонецПроцедуры
+
+Процедура Слак_ЗагрузитьУдалитьВФ() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
+    Файл         = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Document");
+    Канал        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
+    Заголовок    = "Новый файл";
+    
+    Результат = OPI_Slack.ДобавитьВнешнийФайл(Токен, Файл, Заголовок);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьВнешнийФайл");
+    
+    ЗагруженныйФайл = Результат["file"];
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["title"]).Равно(Заголовок);
+    
+    Результат = OPI_Slack.ПолучитьВнешнийФайл(Токен, ЗагруженныйФайл["id"]);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьВнешнийФайл");
+    
+    ЗагруженныйФайл = Результат["file"];
+    
+    Проверка_СлакОк(Результат);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["title"]).Равно(Заголовок);
+    
+    Результат = OPI_Slack.ОтправитьВнешнийФайл(Токен, ЗагруженныйФайл["id"], Канал);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВнешнийФайл");
+    
+    Проверка_СлакОк(Результат);
+    
+    Результат = OPI_Slack.УдалитьВнешнийФайл(Токен, ЗагруженныйФайл["id"]);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВнешнийФайл");
+    
+    Проверка_СлакОк(Результат);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Airtable
+
+Процедура АТ_СоздатьБазу() Экспорт
+    
+    Токен        = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
+    Область      = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Workspace");
+    Наименование = "Тестовая база";
+    
+    МассивПолей = Новый Массив;
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Номер"));
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСтроковое("Строковое"));
+    
+    ИмяТаблицы = "Тестовая таблица";
+    
+    СоответствиеТаблиц = Новый Соответствие;
+    СоответствиеТаблиц.Вставить(ИмяТаблицы, МассивПолей);
+    
+    Результат = OPI_Airtable.СоздатьБазу(Токен, Область, Наименование, СоответствиеТаблиц);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазу");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"][0]["name"]).Равно(ИмяТаблицы);
+    
+    База = Результат["id"];
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Airtable_Base", База);
+    
+    Результат = OPI_Airtable.ПолучитьТаблицыБазы(Токен, База);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТаблицыБазы");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"]).ИмеетТип("Массив");
+
+    Результат = OPI_Airtable.ПолучитьСписокБаз(Токен);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокБаз");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["bases"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["bases"]).ИмеетТип("Массив");
+ 
+КонецПроцедуры
+
+Процедура АТ_СоздатьТаблицу() Экспорт
+    
+    Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
+    База  = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base");
+    
+    МассивПолей = Новый Массив;
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Номер"));    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[0], "ПолучитьПолеНомера");
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСтроковое("Строковое"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[1], "ПолучитьПолеСтроковое");
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеВложения("Вложение"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[2], "ПолучитьПолеВложения");
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеФлажка("Флажок"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[3], "ПолучитьПолеФлажка");
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеДаты("Дата"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[4], "ПолучитьПолеДаты");
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеТелефона("Телефон"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[5], "ПолучитьПолеТелефона");
+        
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеПочты("Почта"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[6], "ПолучитьПолеПочты");    
+    
+    МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСсылки("Ссылка"));
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(МассивПолей[7], "ПолучитьПолеСсылки");    
+    
+    ИмяТаблицы = "Тестовая таблица 2";
+    Описание   = "Новая таблица";
+    
+    Результат = OPI_Airtable.СоздатьТаблицу(Токен, База, ИмяТаблицы, МассивПолей, Описание);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(ИмяТаблицы);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание);
+    
+    Таблица    = Результат["id"];
+    ИмяТаблицы = "Тестовая таблица 2 (изм.)";
+    Описание   = "Новая таблица (изм.)";
+   
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Airtable_Table", Таблица);
+    
+    Результат = OPI_Airtable.ИзменитьТаблицу(Токен, База, Таблица, ИмяТаблицы, Описание);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьТаблицу");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(ИмяТаблицы);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание);
+
+КонецПроцедуры
+
+Процедура АТ_СоздатьПоле() Экспорт
+    
+    Токен   = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
+    База    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base");
+    Таблица = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Table");
+    Имя     = Строка(Новый УникальныйИдентификатор);
+    
+    Поле = OPI_Airtable.ПолучитьПолеНомера(Имя);
+    
+    Результат = OPI_Airtable.СоздатьПоле(Токен, База, Таблица, Поле);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПоле");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(Имя);
+    
+    Поле      = Результат["id"]; 
+    Имя       = Имя + "(изм.)";
+    Описание  = "Новое описание";
+    
+    Результат = OPI_Airtable.ИзменитьПоле(Токен, База, Таблица, Поле, Имя, Описание);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьПоле");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(Имя);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание);
+    
+КонецПроцедуры
+
+Процедура АТ_СоздатьУдалитьЗаписи() Экспорт
+
+    Токен   = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
+    База    = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base");
+    Таблица = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Table");
+    
+    Числовой = 10;
+    Строчный = "Привет";
+    
+    ОписаниеСтроки1 = Новый Структура("Номер,Строковое", Числовой, Строчный);
+    ОписаниеСтроки2 = Новый Структура("Номер,Строковое", Числовой, Строчный);
+    
+    МассивУдаляемых = Новый Массив;
+    МассивОписаний  = Новый Массив;
+    МассивОписаний.Добавить(ОписаниеСтроки1);
+    МассивОписаний.Добавить(ОписаниеСтроки2);
+    
+    Результат = OPI_Airtable.СоздатьЗаписи(Токен, База, Таблица, МассивОписаний);
+
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьЗаписи");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"].Количество()).Равно(2);
+    
+    Для Каждого Запись Из Результат["records"] Цикл
+        МассивУдаляемых.Добавить(Запись["id"]);
+    КонецЦикла;
+        
+    Результат = OPI_Airtable.СоздатьЗаписи(Токен, База, Таблица, ОписаниеСтроки1);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьЗаписи (одна)");
+    
+    ОдиночнаяЗапись = Результат["id"];
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ОдиночнаяЗапись).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["createdTime"]).Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["fields"]["Номер"]).Равно(Числовой);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(СокрЛП(Результат["fields"]["Строковое"])).Равно(Строчный);
+  
+    Результат = OPI_Airtable.ПолучитьЗапись(Токен, База, Таблица, ОдиночнаяЗапись);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗапись");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Равно(ОдиночнаяЗапись);
+    
+    Текст     = "Тестовый комментарий";
+    Результат = OPI_Airtable.СоздатьКомментарий(Токен, База, Таблица, ОдиночнаяЗапись, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКомментарий");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["text"]).Равно(Текст);
+    
+    Коммент   = Результат["id"];
+    Текст     = "Тестовый комментарий (изм.)";
+    Результат = OPI_Airtable.ИзменитьКомментарий(Токен, База, Таблица, ОдиночнаяЗапись, Коммент, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьКомментарий");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["text"]).Равно(Текст);
+    
+    Результат = OPI_Airtable.ПолучитьКомментарии(Токен, База, Таблица, ОдиночнаяЗапись);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьКомментарии");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["comments"]).ИмеетТип("Массив");
+    
+    Результат = OPI_Airtable.УдалитьКомментарий(Токен, База, Таблица, ОдиночнаяЗапись, Коммент);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьКомментарий");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["deleted"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Равно(Коммент);
+     
+    Результат = OPI_Airtable.ПолучитьСписокЗаписей(Токен, База, Таблица);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗаписей");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).Заполнено();
+    
+    Результат = OPI_Airtable.УдалитьЗаписи(Токен, База, Таблица, МассивУдаляемых);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЗаписи");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).Заполнено();
+      
+    Результат = OPI_Airtable.УдалитьЗаписи(Токен, База, Таблица, ОдиночнаяЗапись);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЗаписи (одна)");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).Заполнено();
+        
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Dropbox
+
+Процедура ДропБокс_ПолучитьОбновитьТокен() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Appkey"   , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Appsecret", ПараметрыТеста);
+   
+    Dropbox_ПолучитьСсылкуАвторизации(ПараметрыТеста); 
+    
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Code", ПараметрыТеста);
+
+    Dropbox_ПолучитьТокен(ПараметрыТеста);
+    
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Refresh", ПараметрыТеста);
+    
+    Dropbox_ОбновитьТокен(ПараметрыТеста);
+       
+КонецПроцедуры
+
+Процедура ДропБокс_ЗагрузитьФайл() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture", ПараметрыТеста);
+    
+    Dropbox_ЗагрузитьФайл(ПараметрыТеста);
+    Dropbox_ПолучитьИнформациюОбОбъекте(ПараметрыТеста);
+    Dropbox_ПолучитьСписокВерсийОбъекта(ПараметрыТеста);
+    Dropbox_ВосстановитьОбъектКВерсии(ПараметрыТеста);
+    Dropbox_ПолучитьПревью(ПараметрыТеста);
+    Dropbox_СкачатьФайл(ПараметрыТеста);
+    Dropbox_ПереместитьОбъект(ПараметрыТеста);
+    Dropbox_КопироватьОбъект(ПараметрыТеста);
+    Dropbox_УдалитьОбъект(ПараметрыТеста);
+        
+КонецПроцедуры
+
+Процедура ДропБокс_СоздатьКаталог() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    
+    Dropbox_СоздатьПапку(ПараметрыТеста);
+    Dropbox_СкачатьПапку(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ДропБокс_ПолучитьСписокФайловПапки() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    
+    Dropbox_ПолучитьСписокФайловПапки(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ДропБокс_ЗагрузитьФайлПоURL() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Document", ПараметрыТеста);
+    
+    Dropbox_ЗагрузитьФайлПоURL(ПараметрыТеста);
+    Dropbox_ПолучитьСтатусЗагрузкиПоURL(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ДропБокс_СоздатьУдалитьТег() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    
+    Dropbox_ДобавитьТег(ПараметрыТеста);
+    Dropbox_ПолчитьСписокТегов(ПараметрыТеста);
+    Dropbox_УдалитьТег(ПараметрыТеста);
+    
+КонецПроцедуры
+
+Процедура ДропБокс_ПолучитьАккаунт() Экспорт
+  
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token", ПараметрыТеста);
+    
+    Dropbox_ПолучитьИнформациюОбАккаунте(ПараметрыТеста);
+    Dropbox_ПолучитьДанныеИспользованияПространства(ПараметрыТеста);
+      
+КонецПроцедуры
+
+Процедура ДропБокс_РаботаСДоступами() Экспорт
+    
+    ПараметрыТеста = Новый Структура;
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token"    , ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_OtherUser", ПараметрыТеста);
+    OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_FileID"   , ПараметрыТеста);
+    
+    Dropbox_ДобавитьПользователейКФайлу(ПараметрыТеста);
+    Dropbox_ОпубликоватьПапку(ПараметрыТеста);
+    Dropbox_ДобавитьПользователейКПапке(ПараметрыТеста);
+    Dropbox_ОтменитьПубликациюПапки(ПараметрыТеста);
+    Dropbox_ОтменитьПубликациюФайла(ПараметрыТеста);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьПараметрыВК() 
+    
+    Параметры   = Новый Структура;
+    НомерГруппы = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_GroupID");
+    
+    Параметры.Вставить("access_token"  , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_Token"));
+    Параметры.Вставить("owner_id"      , "-" + НомерГруппы);
+    Параметры.Вставить("app_id"        , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("VK_AppID"));
+    Параметры.Вставить("group_id"      , НомерГруппы);
+    
+    Возврат Параметры;
+    
+КонецФункции
+
+Функция ПолучитьПараметрыТвиттер() 
+    
+    Параметры = Новый Соответствие;
+              
+    Параметры.Вставить("redirect_uri"          , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Redirect"));
+    Параметры.Вставить("client_id"             , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_ClinetID"));
+    Параметры.Вставить("client_secret"         , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_ClientSecret"));
+    Параметры.Вставить("access_token"          , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Token"));
+    Параметры.Вставить("refresh_token"         , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Refresh"));
+    Параметры.Вставить("oauth_token"           , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthToken"));
+    Параметры.Вставить("oauth_token_secret"    , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthSecret"));
+    
+    Параметры.Вставить("oauth_consumer_key"    
+        , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthConsumerKey"));
+    Параметры.Вставить("oauth_consumer_secret" 
+        , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthConsumerSecret"));
+
+    Возврат Параметры;
+    
+КонецФункции
+
+#Область Проверки
+
+Процедура Проверка_Пусто(Знач Результат)   
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
+КонецПроцедуры
+
+Процедура Проверка_ДвоичныеДанные(Знач Результат, Знач Размер = Неопределено)
+    
+    МинимальныйРазмер = 500000;
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные"); 
+    
+    Если Не Размер = Неопределено Тогда
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат.Размер()).Равно(Размер); 
+    Иначе
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат.Размер() > МинимальныйРазмер).Равно(Истина);
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмИстина(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина);
+        
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмИнформацияБота(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["username"]).Заполнено();
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмМассив(Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие") .Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмУстановкаВебхук(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Webhook was set");
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмУдалениеВебхук(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Заполнено();
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмСообщение(Знач Результат, Знач Текст)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["text"]).Равно(Текст);
+    	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмКартинка(Знач Результат, Знач Текст)
+	
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие") .Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["photo"]).ИмеетТип("Массив");
+        
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмВидео(Знач Результат, Знач Текст)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["video"]["mime_type"]).Равно("video/mp4");
+    	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмАудио(Знач Результат, Знач Текст)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["audio"]["mime_type"]).Равно("audio/mpeg");
+            
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмДокумент(Знач Результат, Знач Текст)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["document"]).ИмеетТип("Соответствие").Заполнено();  
+      
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмГифка(Знач Результат, Знач Текст)
+
+    Result = "result";
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["caption"]).Равно(Текст);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["document"]).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["animation"]["mime_type"]).Равно("video/mp4");
+            
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмМедиагруппа(Знач Результат)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
+            
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмМестоположение(Знач Результат)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["location"]).ИмеетТип("Соответствие").Заполнено();   
+     
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмКонтакт(Знач Результат, Знач Имя)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["contact"]).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["contact"]["first_name"]).Равно(Имя);
+            
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмОпрос(Знач Результат, Знач Вопрос)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["poll"]).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["poll"]["question"]).Равно(Вопрос);
+        	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмПереслать(Знач Результат, Знач IDСообщения)
+	
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["forward_origin"]["message_id"]).Равно(Число(IDСообщения));
+    
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмБан(Знач Результат)
+	
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Bad Request: can't remove chat owner");
+    	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмПриглашение(Знач Результат, Знач Заголовок, Знач UnixИстечение)
+
+    Result        = "result";
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["member_limit"]).Равно(200);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["name"]).Равно(Заголовок);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Result]["expire_date"]).Равно(Число(UnixИстечение));
+    	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмЧисло(Знач Результат)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).ИмеетТип("Число");
+    	
+КонецПроцедуры
+
+Процедура Проверка_ТелеграмСозданиеТемы(Знач Результат, Знач Имя, Иконка)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["name"]).Равно(Имя);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["icon_custom_emoji_id"]).Равно(Иконка);
+    	
+КонецПроцедуры
+
+Процедура Проверка_ВКПост(Знач Результат)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]["post_id"]).ИмеетТип("Число").Заполнено();
+        
+КонецПроцедуры
+
+Процедура Проверка_ВКИстина(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);
+    
+КонецПроцедуры
+
+Процедура Проверка_ВКАльбом(Знач Результат, Знач Описание)
+
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]["description"]).Равно(Описание);
+        
+КонецПроцедуры
+
+Процедура Проверка_ВККартинкаАльбома(Знач Результат, Знач ОписаниеКартинки, Знач ИДАльбома)
+
+    Response    = "response";
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response][0]["text"]).Равно(ОписаниеКартинки);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[Response][0]["album_id"]).Равно(ИДАльбома);
+            
+КонецПроцедуры
+
+Процедура Проверка_ВКИстория(Знач Результат)
+  
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]["count"]).ИмеетТип("Число").Равно(1);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]["items"]).ИмеетТип("Массив").Заполнено();
+      
+КонецПроцедуры
+
+Процедура Проверка_ВКОбсуждение(Знач Результат)
+ 
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();   
+    
+КонецПроцедуры
+
+Процедура Проверка_ГКОбъект(Знач Результат, Знач Наименование, Знач Описание)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["summary"]).Равно(Наименование);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();
+    
+КонецПроцедуры
+
+Процедура Проверка_ТвиттерТекст(Знач Результат, Знач Текст)
+    
+    ТекстОтвета = Результат["data"]["text"];
+    ТекстОтвета = Лев(ТекстОтвета, СтрДлина(Текст));
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ТекстОтвета).Равно(Текст);
+
+КонецПроцедуры
+
+Процедура Проверка_ВайберОк(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["status_message"]).Равно("ok");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["status"]).Равно(0);
+
+КонецПроцедуры
+
+Процедура Проверка_НоушнОбъект(Знач Результат, Знач Вид = "page")
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["object"]).Равно(Вид);
+    
+КонецПроцедуры
+
+Процедура Проверка_СлакОк(Знач Результат)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
+
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксФайл(Знач Результат, Знач Путь)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["path_display"]).Равно(Путь);
+    
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксМетаданные(Знач Результат, Знач Путь)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);
+    
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксМассив(Знач Результат, Знач Количество = Неопределено)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["entries"]).ИмеетТип("Массив");
+    
+    Если Не Количество = Неопределено Тогда
+        OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["entries"].Количество()).Равно(Количество);
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксРабота(Знач Результат)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["async_job_id"]).Заполнено();
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксСтатус(Знач Результат)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[".tag"]).Равно("complete");
+КонецПроцедуры
+
+Процедура Проверка_ДропБоксТеги(Знач Результат, Знач Количество)
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["paths_to_tags"]).ИмеетТип("Массив");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["paths_to_tags"].Количество()).Равно(Количество);
+    
+КонецПроцедуры
+
+Процедура Проверка_ДропбоксАккаунт(Знач Результат)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["account_id"]).Заполнено();
+КонецПроцедуры
+
+Процедура Проверка_ДропбоксПространство(Знач Результат)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["used"]).Заполнено();
+КонецПроцедуры
+
+Процедура Проверка_ДропбоксУчастник(Знач Результат, Знач Почта, Знач ТолькоПросмотр)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[0]["result"][".tag"]).Равно("success");
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[0]["member"]["email"]).Равно(Почта);
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(
+        Результат[0]["result"]["success"][".tag"]).Равно(?(ТолькоПросмотр, "viewer", "editor"));
+КонецПроцедуры
+
+Процедура Проверка_ДропбоксПубличнаяПапка(Знач Результат)
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["shared_folder_id"]).Заполнено();
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область АтомарныеТесты
+
+#Область Telegram
+
+Процедура Telegram_ПолучитьИнформациюБота(ПараметрыФункции)
+
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    Результат   = OPI_Telegram.ПолучитьИнформациюБота(Токен);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюБота", "Telegram");
+        
+    Проверка_ТелеграмИнформацияБота(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ПолучитьОбновления(ПараметрыФункции)
+	
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Результат   = OPI_Telegram.ПолучитьОбновления(Токен);
+
+	// END
+	
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьОбновления", "Telegram");
+    
+    Проверка_ТелеграмМассив(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_УстановитьWebhook(ПараметрыФункции)
+    
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    URL         = ПараметрыФункции["Telegram_URL"];
+    
+    Результат   = OPI_Telegram.УстановитьWebhook(Токен, URL);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьWebhook", "Telegram");
+      
+    Проверка_ТелеграмУстановкаВебхук(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_УдалитьWebhook(ПараметрыФункции)
+	
+	Токен     = ПараметрыФункции["Telegram_Token"];
+	Результат = OPI_Telegram.УдалитьWebhook(Токен);
+	
+	// END
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьWebhook", "Telegram");
+      
+    Проверка_ТелеграмУдалениеВебхук(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьТекстовоеСообщение(ПараметрыФункции)
+	
+	Токен    = ПараметрыФункции["Telegram_Token"];
+	IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+	IDКанала = ПараметрыФункции["Telegram_ChannelID"];    
+	Текст    = ПараметрыФункции["String"];
+	
+    Результат = OPI_Telegram.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение", "Telegram"); 
+    
+    Проверка_ТелеграмСообщение(Результат, Текст); // SKIP
+    
+    Результат = OPI_Telegram.ОтправитьТекстовоеСообщение(Токен, IDКанала, Текст);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение (канал)"); 
+    
+    Проверка_ТелеграмСообщение(Результат, Текст);
+    
+    IDСообщения = OPI_Инструменты.ЧислоВСтроку(Результат["result"]["message_id"]);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Telegram_ChannelMessageID", IDСообщения);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьКартинку(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];
+    Текст    = ПараметрыФункции["String"];
+    Картинка = ПараметрыФункции["Picture"]; 
+    
+    КартинкаПуть = ПолучитьИмяВременногоФайла("png");
+    КопироватьФайл(Картинка, КартинкаПуть);
+    
+    КартинкаДД   = Новый ДвоичныеДанные(КартинкаПуть);
+    
+    Результат = OPI_Telegram.ОтправитьКартинку(Токен, IDЧата, Текст, Картинка);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКартинку", "Telegram");
+    
+    Проверка_ТелеграмКартинка(Результат, Текст); // SKIP
+  
+    Результат = OPI_Telegram.ОтправитьКартинку(Токен, IDКанала, Текст, КартинкаПуть);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКартинку (Путь)");
+    
+    Проверка_ТелеграмКартинка(Результат, Текст); // SKIP
+      
+    Результат = OPI_Telegram.ОтправитьКартинку(Токен, IDКанала, Текст, КартинкаДД);
+    
+    // END 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКартинку (ДД)");
+    
+    Проверка_ТелеграмКартинка(Результат, Текст);
+    
+    УдалитьФайлы(КартинкаПуть);
+    
+    IDФайла = Результат["result"]["photo"][0]["file_id"];
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Telegram_FileID", IDФайла);
+    
+    ПараметрыФункции.Вставить("Telegram_FileID", IDФайла);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьВидео(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];
+    Текст    = ПараметрыФункции["String"];
+    Видео    = ПараметрыФункции["Video"];
+    
+    ВидеоПуть = ПолучитьИмяВременногоФайла("mp4");
+    КопироватьФайл(Видео, ВидеоПуть);
+    
+    ВидеоДД   = Новый ДвоичныеДанные(ВидеоПуть);
+    
+    Результат = OPI_Telegram.ОтправитьВидео(Токен, IDЧата, Текст, Видео);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВидео", "Telegram");
+    
+    Проверка_ТелеграмВидео(Результат, Текст); // SKIP
+  
+    Результат = OPI_Telegram.ОтправитьВидео(Токен, IDКанала, Текст, ВидеоПуть);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВидео (Путь)");
+    
+    Проверка_ТелеграмВидео(Результат, Текст); // SKIP
+      
+    Результат = OPI_Telegram.ОтправитьВидео(Токен, IDКанала, Текст, ВидеоДД);
+    
+    // END 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВидео (ДД)");
+    
+    Проверка_ТелеграмВидео(Результат, Текст);
+    
+    УдалитьФайлы(ВидеоПуть);
+    
+    IDФайла = Результат["result"]["video"]["file_id"];
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Telegram_FileID", IDФайла);
+    
+    ПараметрыФункции.Вставить("Telegram_FileID", IDФайла);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьАудио(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];
+    Текст    = ПараметрыФункции["String"];
+    Аудио    = ПараметрыФункции["Audio"];
+    
+    АудиоПуть = ПолучитьИмяВременногоФайла("mp3");
+    КопироватьФайл(Аудио, АудиоПуть);
+    
+    АудиоДД   = Новый ДвоичныеДанные(АудиоПуть);
+    
+    Результат = OPI_Telegram.ОтправитьАудио(Токен, IDЧата, Текст, Аудио);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьАудио", "Telegram");
+    
+    Проверка_ТелеграмАудио(Результат, Текст); // SKIP
+  
+    Результат = OPI_Telegram.ОтправитьАудио(Токен, IDКанала, Текст, АудиоПуть);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьАудио (Путь)");
+    
+    Проверка_ТелеграмАудио(Результат, Текст); // SKIP
+      
+    Результат = OPI_Telegram.ОтправитьАудио(Токен, IDКанала, Текст, АудиоДД);
+    
+    // END 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьАудио (ДД)");
+    
+    Проверка_ТелеграмАудио(Результат, Текст);
+    
+    УдалитьФайлы(АудиоПуть);
+    
+    IDФайла = Результат["result"]["audio"]["file_id"];
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Telegram_FileID", IDФайла);
+    
+    ПараметрыФункции.Вставить("Telegram_FileID", IDФайла);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьДокумент(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];
+    Текст    = ПараметрыФункции["String"];
+    Документ = ПараметрыФункции["Document"];
+    
+    ДокументПуть = ПолучитьИмяВременногоФайла("docx");
+    КопироватьФайл(Документ, ДокументПуть);
+    
+    ДокументДД   = Новый ДвоичныеДанные(ДокументПуть);
+    
+    Результат = OPI_Telegram.ОтправитьДокумент(Токен, IDЧата, Текст, Документ);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьДокумент", "Telegram");
+    
+    Проверка_ТелеграмДокумент(Результат, Текст); // SKIP
+  
+    Результат = OPI_Telegram.ОтправитьДокумент(Токен, IDКанала, Текст, ДокументПуть);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьДокумент (Путь)");
+    
+    Проверка_ТелеграмДокумент(Результат, Текст); // SKIP
+      
+    Результат = OPI_Telegram.ОтправитьДокумент(Токен, IDКанала, Текст, ДокументДД);
+    
+    // END 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьДокумент (ДД)");
+    
+    Проверка_ТелеграмДокумент(Результат, Текст);
+    
+    УдалитьФайлы(ДокументПуть);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьГифку(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];
+    Текст    = ПараметрыФункции["String"];
+    Гифка    = ПараметрыФункции["GIF"];
+    
+    ГифкаПуть = ПолучитьИмяВременногоФайла("gif");
+    КопироватьФайл(Гифка, ГифкаПуть);
+    
+    ГифкаДД   = Новый ДвоичныеДанные(ГифкаПуть);
+    
+    Результат = OPI_Telegram.ОтправитьГифку(Токен, IDЧата, Текст, Гифка);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьГифку", "Telegram");
+    
+    Проверка_ТелеграмГифка(Результат, Текст); // SKIP
+  
+    Результат = OPI_Telegram.ОтправитьГифку(Токен, IDКанала, Текст, ГифкаПуть);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьГифку (Путь)");
+    
+    Проверка_ТелеграмГифка(Результат, Текст); // SKIP
+      
+    Результат = OPI_Telegram.ОтправитьГифку(Токен, IDКанала, Текст, ГифкаДД);
+    
+    // END 
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьГифку (ДД)");
+    
+    Проверка_ТелеграмГифка(Результат, Текст);
+    
+    УдалитьФайлы(ГифкаПуть);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьМеидагруппу(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    Текст    = ПараметрыФункции["String"];
+    Картинка = ПараметрыФункции["Picture"];
+    Видео    = ПараметрыФункции["Video"];
+ 
+    КартинкаПуть = ПолучитьИмяВременногоФайла("png");
+    КопироватьФайл(Картинка, КартинкаПуть);
+           
+    ВидеоПуть = ПолучитьИмяВременногоФайла("mp4");
+    КопироватьФайл(Видео, ВидеоПуть);
+    
+    ВидеоДД   = Новый ДвоичныеДанные(ВидеоПуть);
+    
+    Медиагруппа    = Новый Соответствие;
+    Медиагруппа.Вставить(КартинкаПуть, "photo");
+    Медиагруппа.Вставить(ВидеоДД     , "video");
+    
+    Результат = OPI_Telegram.ОтправитьМедиагруппу(Токен, IDЧата, Текст, Медиагруппа);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу", "Telegram");
+    
+    Проверка_ТелеграмМедиагруппа(Результат); 
+   
+    УдалитьФайлы(ВидеоПуть);
+    УдалитьФайлы(КартинкаПуть);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьМестоположение(ПараметрыФункции)
+    
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];    
+    Ширина   = ПараметрыФункции["Lat"];
+    Долгота  = ПараметрыФункции["Long"];
+    
+    Результат = OPI_Telegram.ОтправитьМестоположение(Токен, IDЧата, Ширина, Долгота);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМестоположение", "Telegram"); 
+    
+    Проверка_ТелеграмМестоположение(Результат); // SKIP
+    
+    Результат = OPI_Telegram.ОтправитьМестоположение(Токен, IDКанала, Ширина, Долгота);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМестоположение (канал)"); 
+    
+    Проверка_ТелеграмМестоположение(Результат);
+
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьКонтакт(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"];    
+    Имя      = ПараметрыФункции["Name"];
+    Фамилия  = ПараметрыФункции["Surname"];
+    Телефон  = ПараметрыФункции["Phone"];
+    
+    Результат = OPI_Telegram.ОтправитьКонтакт(Токен, IDЧата  , Имя, Фамилия, Телефон);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКонтакт", "Telegram"); 
+    
+    Проверка_ТелеграмКонтакт(Результат, Имя); // SKIP
+    OPI_Инструменты.Пауза(20);                // SKIP
+    
+    Результат = OPI_Telegram.ОтправитьКонтакт(Токен, IDКанала, Имя, Фамилия, Телефон);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьКонтакт (канал)"); 
+    
+    Проверка_ТелеграмКонтакт(Результат, Имя);
+
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура Telegram_ОтправитьОпрос(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Telegram_Token"];
+    IDЧата   = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала = ПараметрыФункции["Telegram_ChannelID"]; 
+    Вопрос   = "Какой ваш любимый цвет?";
+    
+    МассивОтветов     = Новый Массив;
+    МассивОтветов.Добавить("Красный");
+    МассивОтветов.Добавить("Желтый");
+    МассивОтветов.Добавить("Зеленый");
+    МассивОтветов.Добавить("Синий");
+    
+    Результат = OPI_Telegram.ОтправитьОпрос(Токен, IDЧата  , Вопрос, МассивОтветов, Ложь);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьОпрос", "Telegram");
+                
+    Проверка_ТелеграмОпрос(Результат, Вопрос); // SKIP
+    
+    Результат = OPI_Telegram.ОтправитьОпрос(Токен, IDКанала, Вопрос, МассивОтветов, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьОпрос (канал)");
+                
+    Проверка_ТелеграмОпрос(Результат, Вопрос); // SKIP
+    
+    // END
+    
+    СтрочныйМассив    = "['Красный', 'Желтый','Зеленый' ,'Синий']";
+    
+    Результат = OPI_Telegram.ОтправитьОпрос(Токен, IDКанала, Вопрос, СтрочныйМассив, Истина);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьОпрос (строчный массив)");
+                
+    Проверка_ТелеграмОпрос(Результат, Вопрос);
+
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_СкачатьФайл(ПараметрыФункции)
+	
+	IDФайла = ПараметрыФункции["Telegram_FileID"];
+	Токен   = ПараметрыФункции["Telegram_Token"];
+
+    Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкачатьФайл", "Telegram");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
+    	
+КонецПроцедуры
+
+Процедура Telegram_ПереслатьСообщение(ПараметрыФункции)
+
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    IDЧата      = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала    = ПараметрыФункции["Telegram_ChannelID"];
+    IDСообщения = ПараметрыФункции["Telegram_ChannelMessageID"];
+    
+    Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
+    
+    // END
+
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереслатьСообщение", "Telegram");
+        
+	Проверка_ТелеграмПереслать(Результат, IDСообщения);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_Бан(ПараметрыФункции)
+	
+	Токен          = ПараметрыФункции["Telegram_Token"];
+    IDПользователя = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала       = ПараметрыФункции["Telegram_ChannelID"];
+    
+	Результат = OPI_Telegram.Бан(Токен, IDКанала, IDПользователя);
+
+	// END
+	
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Бан", "Telegram");
+    
+	Проверка_ТелеграмБан(Результат);
+	OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_Разбан(ПараметрыФункции)
+	
+    Токен          = ПараметрыФункции["Telegram_Token"];
+    IDПользователя = ПараметрыФункции["Telegram_ChatID"];
+    IDКанала       = ПараметрыФункции["Telegram_ChannelID"];
+    
+	Результат = OPI_Telegram.Разбан(Токен, IDКанала, IDПользователя);
+
+	// END
+	
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Разбан", "Telegram");
+    
+	Проверка_ТелеграмБан(Результат);
+	OPI_Инструменты.Пауза(5);
+	
+КонецПроцедуры
+
+Процедура Telegram_СоздатьСсылкуПриглашение(ПараметрыФункции)
+
+    Токен         = ПараметрыФункции["Telegram_Token"];
+    IDКанала      = ПараметрыФункции["Telegram_ChannelID"];    
+    Сутки         = 86400;   
+    ТекущаяДата   = OPI_Инструменты.ПолучитьТекущуюДату();
+
+    Заголовок     = "Ссылка " + Строка(ТекущаяДата); 
+    Истечение     = ТекущаяДата + Сутки;
+    UnixИстечение = OPI_Инструменты.UNIXTime(Истечение);
+    
+    Результат = OPI_Telegram.СоздатьСсылкуПриглашение(Токен, IDКанала, Заголовок, Истечение, 200);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСсылкуПриглашение", "Telegram");
+
+	Проверка_ТелеграмПриглашение(Результат, Заголовок, UnixИстечение);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ЗакрепитьСообщение(ПараметрыФункции)
+
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    IDКанала    = ПараметрыФункции["Telegram_ChannelID"];
+    IDСообщения = ПараметрыФункции["Telegram_ChannelMessageID"];
+    
+    Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
+
+	// END
+	
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрепитьСообщение", "Telegram");
+	
+	Проверка_ТелеграмИстина(Результат);
+        
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ОткрепитьСообщение(ПараметрыФункции)
+
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    IDКанала    = ПараметрыФункции["Telegram_ChannelID"];
+    IDСообщения = ПараметрыФункции["Telegram_ChannelMessageID"];
+    
+    Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
+
+	// END
+	
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрепитьСообщение", "Telegram");
+	
+	Проверка_ТелеграмИстина(Результат);
+        
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ПолучитьЧислоУчастников(ПараметрыФункции)
+	
+    Токен       = ПараметрыФункции["Telegram_Token"];
+    IDКанала    = ПараметрыФункции["Telegram_ChannelID"];
+    
+    Результат  = OPI_Telegram.ПолучитьЧислоУчастников(Токен, IDКанала);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЧислоУчастников", "Telegram");
+    
+    Проверка_ТелеграмЧисло(Результат);
+        
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ПолучитьСписокАватаровФорума(ПараметрыФункции)
+	
+	Токен       = ПараметрыФункции["Telegram_Token"];
+	Результат   = OPI_Telegram.ПолучитьСписокИконокАватаров(Токен);
+	
+	// END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокИконокАватаров", "Telegram");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Telegram_СоздатьТемуФорума(ПараметрыФункции)
+	
+	Токен  = ПараметрыФункции["Telegram_Token"];
+    Чат    = ПараметрыФункции["Telegram_ForumID"];
+    Иконка = "5357419403325481346";
+    Имя    = "Тестовая тема " + Строка(Новый УникальныйИдентификатор);
+    
+	Результат = OPI_Telegram.СоздатьТемуФорума(Токен, Чат, Имя, Иконка);
+	
+	// END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТемуФорума", "Telegram");
+    
+    Тема = Результат["result"]["message_thread_id"];
+    
+    ПараметрыФункции.Вставить("Telegram_TopicID", Тема);
+    OPI_Инструменты.ДобавитьПоле("Telegram_TopicID", Тема, "Строка", ПараметрыФункции);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Telegram_TopicID", ПараметрыФункции["Telegram_TopicID"]);
+   
+	Проверка_ТелеграмСозданиеТемы(Результат, Имя, Иконка);
+	
+	ЧатТема   = Чат + "*" + Тема;
+	Текст     = ПараметрыФункции["String"];
+    Результат = OPI_Telegram.ОтправитьТекстовоеСообщение(Токен, ЧатТема, Текст);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение (форум)");
+    
+    Проверка_ТелеграмСообщение(Результат, Текст);
+	
+КонецПроцедуры
+
+Процедура Telegram_ИзменитьТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    Тема        = ПараметрыФункции["Telegram_TopicID"];
+    НовоеИмя    = "Новый тестовый заголовок";
+    НовяИконка  = "5310132165583840589";
+
+    Результат = OPI_Telegram.ИзменитьТемуФорума(Токен, Чат, Тема, НовоеИмя, НовяИконка);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьТемуФорума", "Telegram");
+        
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ЗакрытьТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    Тема        = ПараметрыФункции["Telegram_TopicID"];
+
+    OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // SKIP
+    
+	Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат);       // Закрывает главную тему
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрытьТемуФорума (главная)");
+    
+    Проверка_ТелеграмИстина(Результат); // SKIP
+    
+    Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат, Тема);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрытьТемуФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(25);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ОткрытьТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    Тема        = ПараметрыФункции["Telegram_TopicID"];
+
+	Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат);       // Открывает главную тему
+	
+	// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрытьТемуФорума (главная)");
+    
+    Проверка_ТелеграмИстина(Результат); // SKIP
+    
+    Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат, Тема);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрытьТемуФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(25);
+    	
+КонецПроцедуры
+
+Процедура Telegram_УдалитьТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    Тема        = ПараметрыФункции["Telegram_TopicID"];
+    
+    Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема); 
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьТемуФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(25);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ОчиститьСписокЗакрепленныхСообщенийТемы(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    Тема        = ПараметрыФункции["Telegram_TopicID"];
+    
+    Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьСписокЗакрепленныхСообщенийТемы (главная)");
+    
+    Проверка_ТелеграмИстина(Результат); // SKIP
+    
+    Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат, Тема);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьСписокЗакрепленныхСообщенийТемы", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_СкрытьГлавнуюТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    
+    Результат = OPI_Telegram.СкрытьГлавнуюТемуФорума(Токен, Чат);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкрытьГлавнуюТемуФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ПоказатьГлавнуюТемуФорума(ПараметрыФункции)
+
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];
+    
+    Результат = OPI_Telegram.ПоказатьГлавнуюТемуФорума(Токен, Чат);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПоказатьГлавнуюТемуФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+Процедура Telegram_ИзменитьИмяГлавнойТемыФорума(ПараметрыФункции)
+
+	Заголовок   = "Новое имя главной темы " + Строка(Новый УникальныйИдентификатор);
+	Токен       = ПараметрыФункции["Telegram_Token"];
+    Чат         = ПараметрыФункции["Telegram_ForumID"];    
+	
+    Результат = OPI_Telegram.ИзменитьИмяГлавнойТемыФорума(Токен, Чат, Заголовок);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьИмяГлавнойТемыФорума", "Telegram");
+    
+    Проверка_ТелеграмИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    	
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область VK
+
+Процедура VK_СоздатьСсылкуПолученияТокена(ПараметрыФункции)
+
+    Приложение = ПараметрыФункции["VK_AppID"];
+    Результат  = OPI_VK.СоздатьСсылкуПолученияТокена(Приложение);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСсылкуПолученияТокена", "VK");
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура VK_СоздатьПост(ПараметрыФункции)
+    
+    Параметры = ПолучитьПараметрыВК();
+    Текст     = "Пост из автотеста";
+    URL       = "https://github.com/Bayselonarrend/OpenIntegrations";
+    
+    Картинка  = ПараметрыФункции["Picture"];  // URL, Путь или Двоичные данные
+    Картинка2 = ПараметрыФункции["Picture2"]; // URL, Путь или Двоичные данные
+    
+    ИВФ = ПолучитьИмяВременногоФайла("png");   
+    КопироватьФайл(Картинка2, ИВФ);
+    
+    МассивКартинок = Новый Массив;
+    МассивКартинок.Добавить(Картинка);
+    МассивКартинок.Добавить(ИВФ);
+  
+    Результат = OPI_VK.СоздатьПост(Текст, МассивКартинок, Истина, URL, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост", "VK");
+
+    Проверка_ВКПост(Результат);                         // SKIP
+    ИДПоста   = Результат["response"]["post_id"];       // SKIP
+    Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры); // SKIP
+    
+    Результат = OPI_VK.СоздатьПост(Текст, Картинка, Ложь  ,    , Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост (одна картинка)");
+
+    Проверка_ВКПост(Результат); 
+    
+    ИДПоста   = Результат["response"]["post_id"];       
+    Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры); 
+    
+    OPI_Инструменты.Пауза(5);   
+    
+    Результат = OPI_VK.СоздатьПост(Текст, ИВФ     , Истина, URL, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПост (один путь)");
+
+    Проверка_ВКПост(Результат);                   
+    
+    ИДПоста = Результат["response"]["post_id"];
+    OPI_Инструменты.ДобавитьПоле("VK_PostID", ИДПоста, "Строка", ПараметрыФункции);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("VK_PostID", ПараметрыФункции["VK_PostID"]);
+    
+    УдалитьФайлы(ИВФ);
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_УдалитьПост(ПараметрыФункции)
+    
+    Параметры = ПолучитьПараметрыВК();
+    ИДПоста   = ПараметрыФункции["VK_PostID"];
+    
+    Результат = OPI_VK.УдалитьПост(ИДПоста, Параметры);
+
+    // END
+
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьПост", "VK");
+            
+    Проверка_ВКИстина(Результат);
+    
+КонецПроцедуры
+
+Процедура VK_СоздатьСоставнойПост(ПараметрыФункции)
+
+    Параметры = ПолучитьПараметрыВК();
+    Текст     = "Пост из автотеста";
+    URL       = "https://github.com/Bayselonarrend/OpenIntegrations";
+    
+    Картинка = ПараметрыФункции["Picture"]; // URL, Путь или Двоичные данные
+    Видео    = ПараметрыФункции["Video"];   // URL, Путь или Двоичные данные
+    
+    ИВФ = ПолучитьИмяВременногоФайла("png");   
+    КопироватьФайл(Картинка, ИВФ);
+    
+    ЗагрузкаКартинки = OPI_VK.ЗагрузитьФотоНаСервер(ИВФ, Параметры)["response"][0];
+    ЗагрузкаВидео    = OPI_VK.ЗагрузитьВидеоНаСервер(Видео, "Новое видео", , , Параметры);
+    
+    ВладелецКартинки = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаКартинки["owner_id"]);
+    ВладелецВидео    = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаВидео["owner_id"]);
+    
+    IDКартинки       = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаКартинки["id"]);
+    IDВидео          = OPI_Инструменты.ЧислоВСтроку(ЗагрузкаВидео["video_id"]);
+    
+    МассивВложений = Новый Массив;
+    МассивВложений.Добавить("photo" + ВладелецКартинки + "_" + IDКартинки);
+    МассивВложений.Добавить("video" + ВладелецВидео + "_" + IDВидео);
+    
+    Результат = OPI_VK.СоздатьСоставнойПост(Текст, МассивВложений, Ложь, URL, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьСоставнойПост", "VK");
+    
+    Проверка_ВКПост(Результат);
+    УдалитьФайлы(ИВФ);    
+        
+    OPI_Инструменты.Пауза(5);
+     
+КонецПроцедуры
+
+Процедура VK_СоздатьОпрос()
+
+    Параметры = ПолучитьПараметрыВК();
+    Вопрос    = "Какой ваш любимый цвет?";
+    
+    МассивВариантов = Новый Массив;
+    МассивВариантов.Добавить("Красный");
+    МассивВариантов.Добавить("Желтый");
+    МассивВариантов.Добавить("Зеленый");
+    
+    Результат = OPI_VK.СоздатьОпрос(Вопрос, МассивВариантов, , Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьОпрос", "VK");
+    
+    Проверка_ВКПост(Результат);
+        
+    ИДПоста  = Результат["response"]["post_id"];
+    OPI_VK.УдалитьПост(ИДПоста, Параметры);
+    
+    OPI_Инструменты.Пауза(10);
+        
+КонецПроцедуры
+
+Процедура VK_СоздатьАльбом(ПараметрыФункции)
+    
+    Параметры        = ПолучитьПараметрыВК();
+    Имя              = "Альбом из автотеста";
+    Описание         = "Новый альбом из автотеста";
+      
+    Результат = OPI_VK.СоздатьАльбом(Имя, Описание, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьАльбом", "VK");
+    
+    Проверка_ВКАльбом(Результат, Описание);
+        
+    ИДАльбома  = Результат["response"]["id"];
+    ПараметрыФункции.Вставить("VK_AlbumID", ИДАльбома);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("VK_AlbumID", ИДАльбома);
+    
+КонецПроцедуры
+
+Процедура VK_СохранитьКартинкуВАльбом(ПараметрыФункции)
+    
+    Параметры        = ПолучитьПараметрыВК();
+    ОписаниеКартинки = "Картинка автотест";
+    ИДАльбома        = ПараметрыФункции["VK_AlbumID"];
+    
+    Картинка  = ПараметрыФункции["Picture"];       // URL, Путь к файлу или Двоичные данные
+    ИВФ       = ПолучитьИмяВременногоФайла("png");
+    КопироватьФайл(Картинка, ИВФ);
+    
+    Картинка  = Новый ДвоичныеДанные(ИВФ);
+    
+    Результат = OPI_VK.СохранитьКартинкуВАльбом(ИДАльбома, Картинка, ОписаниеКартинки, Параметры);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СохранитьКартинкуВАльбом", "VK");
+    
+    Проверка_ВККартинкаАльбома(Результат, ОписаниеКартинки, ИДАльбома); // SKIP
+    
+    ИДКартинки  = Результат["response"][0]["id"];                       // SKIP
+    Результат    = OPI_VK.УдалитьКартинку(ИДКартинки, Параметры);       // SKIP
+            
+    Результат = OPI_VK.СохранитьКартинкуВАльбом(ИДАльбома, ИВФ, ОписаниеКартинки, Параметры);
+    
+    // END
+   
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СохранитьКартинкуВАльбом (путь)");
+    
+    Проверка_ВККартинкаАльбома(Результат, ОписаниеКартинки, ИДАльбома); // SKIP
+    
+    ИДКартинки  = Результат["response"][0]["id"];
+    ПараметрыФункции.Вставить("VK_PictureID", ИДКартинки);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("VK_PictureID", ИДКартинки);
+    
+    УдалитьФайлы(ИВФ);
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_УдалитьКартинку(ПараметрыФункции)
+    
+    Параметры  = ПолучитьПараметрыВК();
+    ИДКартинки = ПараметрыФункции["VK_PictureID"];
+    
+    Результат  = OPI_VK.УдалитьКартинку(ИДКартинки, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьКартинку", "VK");
+    
+    Проверка_ВКИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_УдалитьАльбом(ПараметрыФункции)
+    
+    Параметры = ПолучитьПараметрыВК();
+    ИДАльбома = ПараметрыФункции["VK_AlbumID"];
+    
+    Результат = OPI_VK.УдалитьАльбом(ИДАльбома, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьАльбом", "VK");
+        
+    Проверка_ВКИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_СоздатьИсторию(ПараметрыФункции)
+
+    Параметры = ПолучитьПараметрыВК();
+    URL       = "https://github.com/Bayselonarrend/OpenIntegrations";
+
+    Картинка  = ПараметрыФункции["Picture"];       // URL, Путь к файлу или Двоичные данные
+    ИВФ       = ПолучитьИмяВременногоФайла("png");
+    КопироватьФайл(Картинка, ИВФ);
+    Картинка  = Новый ДвоичныеДанные(ИВФ);
+       
+    Результат = OPI_VK.СоздатьИсторию(Картинка , URL, Параметры);
+
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьИсторию", "VK");
+    
+    Проверка_ВКИстория(Результат); // SKIP
+        
+    Результат = OPI_VK.СоздатьИсторию(ИВФ, , Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьИсторию (путь)");
+    
+    Проверка_ВКИстория(Результат);
+    
+    УдалитьФайлы(ИВФ);
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура VK_СоздатьОбсуждение(ПараметрыФункции)
+
+    Параметры       = ПолучитьПараметрыВК();
+    Название        = "Обсуждаем: какой цвет лучше?";
+    Сообщение       = "Красный, желтый, синий или какой-то другой?";
+    
+    Результат = OPI_VK.СоздатьОбсуждение(Название, Сообщение, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьОбсуждение", "VK");
+    
+    Проверка_ВКОбсуждение(Результат);
+    
+    ИДОбсуждения = Результат["response"];
+    ПараметрыФункции.Вставить("VK_ConvID", ИДОбсуждения);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("VK_ConvID", ИДОбсуждения);    
+    
+    OPI_Инструменты.Пауза(5);
+        
+КонецПроцедуры
+
+Процедура VK_ЗакрытьОбсуждение(ПараметрыФункции)
+    
+    Параметры    = ПолучитьПараметрыВК();
+    ИДОбсуждения = ПараметрыФункции["VK_ConvID"];
+    Результат    = OPI_VK.ЗакрытьОбсуждение(ИДОбсуждения, Ложь, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрытьОбсуждение", "VK");
+        
+    Проверка_ВКИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_ОткрытьОбсуждение(ПараметрыФункции)
+    
+    Параметры    = ПолучитьПараметрыВК();
+    ИДОбсуждения = ПараметрыФункции["VK_ConvID"];
+    Результат    = OPI_VK.ОткрытьОбсуждение(ИДОбсуждения, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрытьОбсуждение", "VK");
+        
+    Проверка_ВКИстина(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура VK_НаписатьВОбсуждение(ПараметрыФункции)
+    
+    Параметры    = ПолучитьПараметрыВК();
+    ИДОбсуждения = ПараметрыФункции["VK_ConvID"];
+    Сообщение    = "Мне больше нравится желтый";
+    
+    Результат = OPI_VK.НаписатьВОбсуждение(ИДОбсуждения, Сообщение, Параметры);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "НаписатьВОбсуждение", "VK");
+    
+    Проверка_ВКОбсуждение(Результат);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Dropbox
+
+Процедура Dropbox_ПолучитьСсылкуАвторизации(ПараметрыФункции)
+
+    КлючПриложения = ПараметрыФункции["Dropbox_Appkey"];
+    Результат      = OPI_Dropbox.ПолучитьСсылкуАвторизации(КлючПриложения);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуАвторизации", "Dropbox");
+        
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Строка");
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьТокен(ПараметрыФункции)
+    
+    КлючПриложения   = ПараметрыФункции["Dropbox_Appkey"];
+    СекретПриложения = ПараметрыФункции["Dropbox_Appsecret"];
+    Код              = ПараметрыФункции["Dropbox_Code"];
+
+    Результат = OPI_Dropbox.ПолучитьТокен(КлючПриложения, СекретПриложения, Код);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТокен");
+    
+    Токен  = Результат["access_token"];
+    Рефреш = Результат["refresh_token"];
+   
+    Если ЗначениеЗаполнено(Токен) Тогда
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_Token", Токен);
+    КонецЕсли;
+   
+    Если ЗначениеЗаполнено(Рефреш) Тогда
+        OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_Refresh", Рефреш);
+    КонецЕсли;
+    
+КонецПроцедуры
+
+Процедура Dropbox_ОбновитьТокен(ПараметрыФункции)
+
+    КлючПриложения   = ПараметрыФункции["Dropbox_Appkey"];
+    СекретПриложения = ПараметрыФункции["Dropbox_Appsecret"];
+    РефрешТокен      = ПараметрыФункции["Dropbox_Refresh"];
+    
+    Результат = OPI_Dropbox.ОбновитьТокен(КлючПриложения, СекретПриложения, РефрешТокен);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбновитьТокен");
+    
+    Токен = Результат["access_token"];
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(Токен).Заполнено();
+
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_Token", Токен);
+        
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьИнформациюОбОбъекте(ПараметрыФункции)
+   
+    Путь      = "/New/pic.png";  
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+     
+    Результат = OPI_Dropbox.ПолучитьИнформациюОбОбъекте(Токен, Путь, Истина);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОбОбъекте", "Dropbox");
+
+    Проверка_ДропБоксФайл(Результат, Путь);
+    
+    OPI_Инструменты.Пауза(5); 
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьПревью(ПараметрыФункции)
+   
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/mydoc.docx"; 
+    
+    Результат = OPI_Dropbox.ПолучитьПревью(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьПревью", "Dropbox");
+        
+    Проверка_ДвоичныеДанные(Результат, 190834);
+        
+    OPI_Инструменты.Пауза(5); 
+     
+КонецПроцедуры
+
+Процедура Dropbox_ЗагрузитьФайл(ПараметрыФункции)
+
+    Путь      = "/New/pic.png";  
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Картинка  = ПараметрыФункции["Picture"];
+    
+    КартинкаПуть = ПолучитьИмяВременногоФайла("png");
+    КопироватьФайл(Картинка, КартинкаПуть);
+    
+    Результат = OPI_Dropbox.ЗагрузитьФайл(Токен, КартинкаПуть, Путь, Истина);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл", "Dropbox");
+        
+    Проверка_ДропБоксФайл(Результат, Путь);
+    УдалитьФайлы(КартинкаПуть);
+    
+    OPI_Инструменты.Пауза(5); 
+     
+КонецПроцедуры
+
+Процедура Dropbox_ЗагрузитьФайлПоURL(ПараметрыФункции)
+   
+    Путь  = "/New/url_doc.docx";  
+    Токен = ПараметрыФункции["Dropbox_Token"];
+    URL   = ПараметрыФункции["Document"];
+    
+    Результат = OPI_Dropbox.ЗагрузитьФайлПоURL(Токен, URL, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлПоURL", "Dropbox");
+        
+    Проверка_ДропБоксРабота(Результат);
+   
+    Работа = Результат["async_job_id"];
+   
+    ПараметрыФункции.Вставить("Dropbox_Job", Работа);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_Job", Работа);
+    
+    OPI_Инструменты.Пауза(5); 
+     
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьСтатусЗагрузкиПоURL(ПараметрыФункции)
+
+    Токен    = ПараметрыФункции["Dropbox_Token"];
+    ИДРаботы = ПараметрыФункции["Dropbox_Job"];
+    Статус   = "in_progress";    
+    
+    Пока Статус = "in_progress" Цикл 
+        
+        Результат = OPI_Dropbox.ПолучитьСтатусЗагрузкиПоURL(Токен, ИДРаботы);
+        Статус    = Результат[".tag"];
+        
+        OPI_Инструменты.Пауза(5);
+        
+        // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтатусЗагрузкиПоURL", "Dropbox");
+        
+    КонецЦикла;
+    
+    // END
+    
+    Проверка_ДропБоксСтатус(Результат);
+    
+    Путь      = "/New/url_doc.docx";
+    Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
+    
+    Проверка_ДропБоксМетаданные(Результат, Путь);
+    OPI_Инструменты.Пауза(5); 
+        
+КонецПроцедуры
+
+Процедура Dropbox_УдалитьОбъект(ПараметрыФункции)
+ 
+    Путь      = "/New/pic.png";  
+    Токен     = ПараметрыФункции["Dropbox_Token"];  
+    
+    Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьОбъект", "Dropbox");
+
+    Проверка_ДропБоксМетаданные(Результат, Путь);
+    
+    OPI_Инструменты.Пауза(5); 
+     
+КонецПроцедуры
+
+Процедура Dropbox_КопироватьОбъект(ПараметрыФункции)
+    
+    Оригинал  = "/New/pic.png";
+    Копия     = "/New/pic_copy.png";  
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    
+    Результат = OPI_Dropbox.КопироватьОбъект(Токен, Оригинал, Копия);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "КопироватьОбъект", "Dropbox");
+        
+    Проверка_ДропБоксМетаданные(Результат, Копия);
+    
+    Результат = OPI_Dropbox.УдалитьОбъект(Токен, Копия);
+    Проверка_ДропБоксМетаданные(Результат, Копия);
+        
+    OPI_Инструменты.Пауза(5); 
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПереместитьОбъект(ПараметрыФункции)
+    
+    ОригиналныйПуть  = "/New/pic.png";
+    ЦелевойПуть      = "/pic.png";  
+    Токен            = ПараметрыФункции["Dropbox_Token"];
+    
+    Результат = OPI_Dropbox.ПереместитьОбъект(Токен, ОригиналныйПуть, ЦелевойПуть);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Dropbox_ПереместитьОбъект", "Dropbox");
+        
+    Проверка_ДропБоксМетаданные(Результат, ЦелевойПуть);
+    
+    Результат = OPI_Dropbox.ПереместитьОбъект(Токен, ЦелевойПуть, ОригиналныйПуть);
+    Проверка_ДропБоксМетаданные(Результат, ОригиналныйПуть);
+        
+    OPI_Инструменты.Пауза(5); 
+    
+КонецПроцедуры
+
+Процедура Dropbox_СоздатьПапку(ПараметрыФункции)
+    
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/Новый каталог";
+    
+    Результат = OPI_Dropbox.СоздатьПапку(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПапку", "Dropbox");
+        
+    Проверка_ДропБоксМетаданные(Результат, Путь);
+    
+    Результат = OPI_Dropbox.УдалитьОбъект(Токен, Путь);
+    Проверка_ДропБоксМетаданные(Результат, Путь);
+        
+    OPI_Инструменты.Пауза(5); 
+    
+КонецПроцедуры
+
+Процедура Dropbox_СкачатьФайл(ПараметрыФункции)
+
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/pic.png"; 
+    
+    Результат = OPI_Dropbox.СкачатьФайл(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкачатьФайл", "Dropbox");
+        
+    Проверка_ДвоичныеДанные(Результат, 2114023);
+        
+    OPI_Инструменты.Пауза(5); 
+        
+КонецПроцедуры
+
+Процедура Dropbox_СкачатьПапку(ПараметрыФункции)
+    
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New";
+    
+    Результат = OPI_Dropbox.СкачатьПапку(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СкачатьПапку", "Dropbox");
+        
+    Проверка_ДвоичныеДанные(Результат);
+        
+    OPI_Инструменты.Пауза(5); 
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьСписокФайловПапки(ПараметрыФункции)
+ 
+    Путь      = "/New";  
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+     
+    Результат = OPI_Dropbox.ПолучитьСписокФайловПапки(Токен, Путь, Истина);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокФайловПапки", "Dropbox");
+
+    Проверка_ДропБоксМассив(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры 
+
+Процедура Dropbox_ПолучитьСписокВерсийОбъекта(ПараметрыФункции)
+
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/pic.png"; 
+    
+    Результат = OPI_Dropbox.ПолучитьСписокВерсийОбъекта(Токен, Путь, 1);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокВерсийОбъекта", "Dropbox");
+        
+   Проверка_ДропБоксМассив(Результат, 1);
+   
+   Ревизия = Результат["entries"][0]["rev"];
+   
+   ПараметрыФункции.Вставить("Dropbox_FileRevision", Ревизия);
+   OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_FileRevision", Ревизия);
+        
+   OPI_Инструменты.Пауза(5); 
+        
+КонецПроцедуры
+
+Процедура Dropbox_ВосстановитьОбъектКВерсии(ПараметрыФункции)
+   
+    Версия    = ПараметрыФункции["Dropbox_FileRevision"];
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/pic.png";  
+    
+    Результат = OPI_Dropbox.ВосстановитьОбъектКВерсии(Токен, Путь, Версия);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВосстановитьОбъектКВерсии", "Dropbox");
+    
+    Проверка_ДропБоксФайл(Результат, Путь);
+    
+    OPI_Инструменты.Пауза(5);  
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолчитьСписокТегов(ПараметрыФункции)
+
+    Токен = ПараметрыФункции["Dropbox_Token"];
+    
+    МассивПутей = Новый Массив;
+    МассивПутей.Добавить("/New/Dogs.mp3");
+    МассивПутей.Добавить("/New/mydoc.docx");  
+    
+    Результат = OPI_Dropbox.ПолучитьСписокТегов(Токен, МассивПутей);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокТегов", "Dropbox");
+    
+    Проверка_ДропБоксТеги(Результат, МассивПутей.Количество());
+    
+    Результат = OPI_Dropbox.ПолучитьСписокТегов(Токен, "/New/mydoc.docx");
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокТегов (одиночный)");
+    
+    Проверка_ДропБоксТеги(Результат, 1);
+    
+    ЕстьТег = Ложь;
+    
+    Для Каждого Тег Из Результат["paths_to_tags"][0]["tags"] Цикл
+        Если Тег["tag_text"] = "важное" Тогда
+            ЕстьТег = Истина;    
+        КонецЕсли;
+    КонецЦикла;
+    
+    OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЕстьТег).Равно(Истина);
+    
+    OPI_Инструменты.Пауза(5);  
+        
+КонецПроцедуры
+
+Процедура Dropbox_ДобавитьТег(ПараметрыФункции)
+    
+    Тег       = "Важное";
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/mydoc.docx";  
+    
+    Результат = OPI_Dropbox.ДобавитьТег(Токен, Путь, Тег);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьТег", "Dropbox");
+    
+    Проверка_Пусто(Результат);
+    
+    OPI_Инструменты.Пауза(5);  
+    
+КонецПроцедуры
+
+Процедура Dropbox_УдалитьТег(ПараметрыФункции)
+    
+    Тег       = "Важное";
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New/mydoc.docx";  
+    
+    Результат = OPI_Dropbox.УдалитьТег(Токен, Путь, Тег);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьТег", "Dropbox");
+    
+    Проверка_Пусто(Результат);
+    
+    OPI_Инструменты.Пауза(5);  
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьИнформациюОбАккаунте(ПараметрыФункции)
+    
+    Токен = ПараметрыФункции["Dropbox_Token"];
+    
+    Результат = OPI_Dropbox.ПолучитьИнформациюОбАккаунте(Токен);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОбАккаунте", "Dropbox");
+    
+    Проверка_ДропбоксАккаунт(Результат);
+    
+    Результат = OPI_Dropbox.ПолучитьИнформациюОбАккаунте(Токен, Результат["account_id"]);
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОбАккаунте (сторонний)");
+    
+    Проверка_ДропбоксАккаунт(Результат);
+    
+    OPI_Инструменты.Пауза(5);
+    
+КонецПроцедуры
+
+Процедура Dropbox_ПолучитьДанныеИспользованияПространства(ПараметрыФункции)
+  
+    Токен = ПараметрыФункции["Dropbox_Token"];
+    
+    Результат = OPI_Dropbox.ПолучитьДанныеИспользованияПространства(Токен);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеИспользованияПространства", "Dropbox");
+    
+    Проверка_ДропбоксПространство(Результат);
+      
+КонецПроцедуры
+
+Процедура Dropbox_ДобавитьПользователейКФайлу(ПараметрыФункции)
+    
+    Токен = ПараметрыФункции["Dropbox_Token"];
+    Почта = ПараметрыФункции["Dropbox_OtherUser"];
+    Файл  = ПараметрыФункции["Dropbox_FileID"];
+    
+    Результат = OPI_Dropbox.ДобавитьПользователейКФайлу(Токен, Файл, Почта, Ложь);
+    
+    // END
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьПользователяКФайлу", "Dropbox");
+    
+    Проверка_ДропбоксУчастник(Результат, Почта, Ложь);
+    
+    Почты = Новый Массив;
+    Почты.Добавить(Почта);
+    
+    Результат = OPI_Dropbox.ДобавитьПользователейКФайлу(Токен, Файл, Почты, Истина);
+    
+    Проверка_ДропбоксУчастник(Результат, Почта, Истина);
+    
+КонецПроцедуры
+
+Процедура Dropbox_ОпубликоватьПапку(ПараметрыФункции)
+    
+    Токен     = ПараметрыФункции["Dropbox_Token"];
+    Путь      = "/New"; 
+   
+    Результат = OPI_Dropbox.ОпубликоватьПапку(Токен, Путь);
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОпубликоватьПапку", "Dropbox");
+        
+    Проверка_ДропБоксПубличнаяПапка(Результат);
+   
+    IDПапки = Результат["shared_folder_id"];
+   
+    ПараметрыФункции.Вставить("Dropbox_SharedFolder", IDПапки);
+    OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_SharedFolder", IDПапки);
+        
+    OPI_Инструменты.Пауза(5); 
+
+КонецПроцедуры
+
+Процедура Dropbox_ОтменитьПубликациюПапки(ПараметрыФункции)
+    
+    Токен  = ПараметрыФункции["Dropbox_Token"];
+    Папка  = ПараметрыФункции["Dropbox_SharedFolder"];
+ 
+    Результат     = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
+    ТекущийСтатус = "in_progress";
+    IDРаботы      = Результат["async_job_id"];
+    
+    Пока ТекущийСтатус = "in_progress" Цикл
+        Результат     = OPI_Dropbox.ПолучитьСтатусАсинхронногоИзменения(Токен, IDРаботы);
+        ТекущийСтатус = Результат[".tag"];
+        OPI_Инструменты.Пауза(3);
+    КонецЦикла;
+    
+    // END
+    
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюПапки", "Dropbox");
+    
+   Проверка_ДропБоксСтатус(Результат);
+   
+   OPI_Инструменты.Пауза(5); 
+   
+КонецПроцедуры
+
+Процедура Dropbox_ДобавитьПользователейКПапке(ПараметрыФункции)
+    
+    Токен  = ПараметрыФункции["Dropbox_Token"];
+    Почта  = ПараметрыФункции["Dropbox_OtherUser"];
+    Папка  = ПараметрыФункции["Dropbox_SharedFolder"]; // shared_folder_id
+    
+    Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почта, Ложь);
+    
+    // END
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьПользователяКФайлу", "Dropbox");
+    
+    Проверка_Пусто(Результат);
+    
+    Почты = Новый Массив;
+    Почты.Добавить(Почта);
+    
+    Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почты, Истина);
+    
+    Проверка_Пусто(Результат);
+    
+КонецПроцедуры
+
+Процедура Dropbox_ОтменитьПубликациюФайла(ПараметрыФункции)
+	
+	Токен = ПараметрыФункции["Dropbox_Token"];
+    Файл  = ПараметрыФункции["Dropbox_FileID"];
+    
+    Результат = OPI_Dropbox.ОтменитьПубликациюФайла(Токен, Файл);
+    
+    // END
+        
+    // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюФайла", "Dropbox");
+    
+    Проверка_Пусто(Результат);
+    
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/en/OPI/src/CommonModules/OPI_Тесты/OPI_Тесты.mdo b/en/OPI/src/CommonModules/OPI_Тесты/OPI_Тесты.mdo
new file mode 100644
index 0000000000..6106c21e79
--- /dev/null
+++ b/en/OPI/src/CommonModules/OPI_Тесты/OPI_Тесты.mdo
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca6868b2-8987-4ae3-9d97-50a8becc72df">
+  <name>OPI_Тесты</name>
+  <synonym>
+    <key></key>
+    <value>OPI тесты</value>
+  </synonym>
+  <synonym>
+    <key>ru</key>
+    <value>Тесты для YaxUnit (ОПИ)</value>
+  </synonym>
+  <server>true</server>
+  <externalConnection>true</externalConnection>
+  <clientOrdinaryApplication>true</clientOrdinaryApplication>
+</mdclass:CommonModule>
diff --git a/en/OPI/src/Configuration/Configuration.mdo b/en/OPI/src/Configuration/Configuration.mdo
new file mode 100644
index 0000000000..0c5da04703
--- /dev/null
+++ b/en/OPI/src/Configuration/Configuration.mdo
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="aa51f610-7ed3-4091-8908-8ecccf0aaf0f">
+  <name>OpenIntegrations</name>
+  <synonym>
+    <key>ru</key>
+    <value>Открытый пакет интеграций</value>
+  </synonym>
+  <objectBelonging>Adopted</objectBelonging>
+  <extension xsi:type="mdclassExtension:ConfigurationExtension">
+    <defaultRunMode>Checked</defaultRunMode>
+    <usePurposes>Checked</usePurposes>
+    <interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
+  </extension>
+  <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="12689443-2950-4e3b-b313-9a692b6acac7"/>
+  <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f6f98fbd-010a-4aba-8f11-01203bbc59c7"/>
+  <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="33990ba2-16f0-473d-851f-a9132c777ed6"/>
+  <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="917bb154-d76e-42a4-b161-336b7c57a1ac"/>
+  <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="793db0b3-8d01-4f55-982c-73cb3d4547da"/>
+  <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="c67ca98f-c017-4f18-8175-02819e09b383"/>
+  <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="c9ed170a-ffaa-4859-9d92-fd1cbc7051b3"/>
+  <keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
+  <namePrefix>OPI_</namePrefix>
+  <configurationExtensionCompatibilityMode>8.3.9</configurationExtensionCompatibilityMode>
+  <configurationExtensionPurpose>Customization</configurationExtensionPurpose>
+  <defaultRunMode>ManagedApplication</defaultRunMode>
+  <usePurposes>PersonalComputer</usePurposes>
+  <scriptVariant>Russian</scriptVariant>
+  <vendor>Bayselonarrend</vendor>
+  <version>1.9.0</version>
+  <detailedInformation>
+    <key>ru</key>
+    <value>Открытый пакет интеграций - набор библиотек для интеграции с некоторыми популярными API для 1C:Enterprise. Он состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех.</value>
+  </detailedInformation>
+  <vendorInformationAddress>
+    <key>ru</key>
+    <value>https://github.com/Bayselonarrend</value>
+  </vendorInformationAddress>
+  <configurationInformationAddress>
+    <key>ru</key>
+    <value>https://github.com/Bayselonarrend/OpenIntegrations</value>
+  </configurationInformationAddress>
+  <languages uuid="0e858b44-34f3-4d20-986d-13290bb5ba5a">
+    <name>Русский</name>
+    <objectBelonging>Adopted</objectBelonging>
+    <extension xsi:type="mdclassExtension:LanguageExtension">
+      <languageCode>Checked</languageCode>
+    </extension>
+    <languageCode>ru</languageCode>
+  </languages>
+  <subsystems>Subsystem.OPI_Интеграция</subsystems>
+  <commonModules>CommonModule.OPI_Инструменты</commonModules>
+  <commonModules>CommonModule.OPI_Криптография</commonModules>
+  <commonModules>CommonModule.OPI_ПреобразованиеТипов</commonModules>
+  <commonModules>CommonModule.OPI_Telegram</commonModules>
+  <commonModules>CommonModule.OPI_VK</commonModules>
+  <commonModules>CommonModule.OPI_Viber</commonModules>
+  <commonModules>CommonModule.OPI_Twitter</commonModules>
+  <commonModules>CommonModule.OPI_Notion</commonModules>
+  <commonModules>CommonModule.OPI_YandexID</commonModules>
+  <commonModules>CommonModule.OPI_YandexDisk</commonModules>
+  <commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
+  <commonModules>CommonModule.OPI_GoogleCalendar</commonModules>
+  <commonModules>CommonModule.OPI_GoogleDrive</commonModules>
+  <commonModules>CommonModule.OPI_GoogleSheets</commonModules>
+  <commonModules>CommonModule.OPI_Slack</commonModules>
+  <commonModules>CommonModule.OPI_Airtable</commonModules>
+  <commonModules>CommonModule.OPI_Dropbox</commonModules>
+  <commonModules>CommonModule.OPI_Тесты</commonModules>
+  <commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
+</mdclass:Configuration>
diff --git a/en/OPI/src/Subsystems/OPI_Интеграция/CommandInterface.cmi b/en/OPI/src/Subsystems/OPI_Интеграция/CommandInterface.cmi
new file mode 100644
index 0000000000..0cf6de8a40
--- /dev/null
+++ b/en/OPI/src/Subsystems/OPI_Интеграция/CommandInterface.cmi
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
diff --git a/en/OPI/src/Subsystems/OPI_Интеграция/OPI_Интеграция.mdo b/en/OPI/src/Subsystems/OPI_Интеграция/OPI_Интеграция.mdo
new file mode 100644
index 0000000000..64613d82e4
--- /dev/null
+++ b/en/OPI/src/Subsystems/OPI_Интеграция/OPI_Интеграция.mdo
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="86c261d7-2729-405f-9d39-5d9104a56bd1">
+  <name>OPI_Интеграция</name>
+  <synonym>
+    <key>ru</key>
+    <value>Интеграция</value>
+  </synonym>
+  <includeHelpInContents>true</includeHelpInContents>
+  <includeInCommandInterface>true</includeInCommandInterface>
+  <content>CommonModule.OPI_Инструменты</content>
+  <content>CommonModule.OPI_Криптография</content>
+  <content>CommonModule.OPI_ПреобразованиеТипов</content>
+  <content>CommonModule.OPI_VK</content>
+  <content>CommonModule.OPI_Telegram</content>
+  <content>CommonModule.OPI_Viber</content>
+  <content>CommonModule.OPI_Twitter</content>
+  <content>CommonModule.OPI_Notion</content>
+  <content>CommonModule.OPI_YandexID</content>
+  <content>CommonModule.OPI_YandexDisk</content>
+  <content>CommonModule.OPI_GoogleWorkspace</content>
+  <content>CommonModule.OPI_GoogleCalendar</content>
+  <content>CommonModule.OPI_GoogleDrive</content>
+  <content>CommonModule.OPI_GoogleSheets</content>
+  <content>CommonModule.OPI_Slack</content>
+  <content>CommonModule.OPI_Airtable</content>
+  <content>CommonModule.OPI_Тесты</content>
+  <content>CommonModule.OPI_ПолучениеДанныхТестов</content>
+</mdclass:Subsystem>
diff --git a/service/dictionaries/backup/en.json b/service/dictionaries/backup/en.json
new file mode 100644
index 0000000000..991849d6d7
--- /dev/null
+++ b/service/dictionaries/backup/en.json
@@ -0,0 +1,2804 @@
+{
+"В": "In",
+"т": "t",
+"И": "And",
+"о": "o",
+"д": "d",
+"в": "in",
+"Н": "N",
+"и": "and",
+"к": "to",
+"с": "with",
+"не": "not",
+"то": "that",
+"из": "from",
+"МБ": "MB",
+"Из": "Of",
+"же": "same",
+"ВК": "VK",
+"он": "he",
+"ПС": "PS",
+"по": "by",
+"Не": "Not",
+"ДД": "DD",
+"ФС": "FS",
+"См": "See",
+"на": "to",
+"БД": "DB",
+"ИВФ": "AndVF",
+"Вес": "Weight",
+"Код": "Code",
+"так": "so",
+"для": "for",
+"что": "what",
+"без": "without",
+"тип": "type",
+"все": "all",
+"они": "they",
+"Чат": "Chat",
+"Тип": "Type",
+"Час": "Hour",
+"или": "or",
+"Это": "This",
+"это": "this",
+"ОТД": "OTD",
+"Лев": "Left",
+"Для": "For",
+"имя": "name",
+"Или": "Or",
+"Хэш": "Hash",
+"при": "at",
+"осн": "main",
+"Бан": "Ban",
+"БАН": "BAN",
+"Нет": "No",
+"НПП": "NPP",
+"доп": "add",
+"Вид": "View",
+"Имя": "Name",
+"Тег": "Tag",
+"поля": "fields",
+"Пути": "Paths",
+"Куда": "To",
+"Файл": "File",
+"Сайт": "Website",
+"типа": "type",
+"Тест": "Test",
+"быть": "be",
+"Цикл": "Loop",
+"Пока": "While",
+"цены": "price",
+"путь": "path",
+"фото": "photo",
+"Цвет": "Color",
+"Поля": "Fields",
+"базы": "databases",
+"файл": "file",
+"Цель": "Purpose",
+"Тема": "Topic",
+"Блок": "Block",
+"Лист": "Sheet",
+"Линк": "Link",
+"Путь": "Path",
+"Пост": "Post",
+"если": "if",
+"Туда": "There",
+"Слак": "Slack",
+"Ключ": "Key",
+"база": "database",
+"есть": "is",
+"Знач": "Value",
+"АирТ": "AirT",
+"вРег": "inReg",
+"Цена": "Price",
+"Ложь": "False",
+"Тело": "Body",
+"Если": "If",
+"Прав": "Right",
+"бота": "bot",
+"Поле": "Field",
+"База": "Base",
+"нРег": "nReg",
+"Лого": "Logo",
+"Фото": "Photo",
+"Вход": "Entry",
+"Дата": "Date",
+"Часть": "Part",
+"вроде": "like",
+"Медиа": "Media",
+"Форум": "Forum",
+"будет": "will",
+"Твиты": "Tweets",
+"имени": "name",
+"новый": "new",
+"ячеек": "cells",
+"типом": "type",
+"Аудио": "Audio",
+"типы:": "types:",
+"боте:": "bot:",
+"нечто": "something",
+"можно": "can",
+"Опции": "Options",
+"ТЗнач": "TValue",
+"Режим": "Mode",
+"Число": "Number",
+"МБайт": "MByte",
+"Метка": "Label",
+"места": "of the venue",
+"Вызов": "Call",
+"Серый": "Gray",
+"Белый": "White",
+"файлу": "file",
+"Дата0": "Date0",
+"Добро": "Welcome",
+"Дата1": "Date1",
+"Отбор": "Filter",
+"файла": "file",
+"Листы": "Sheets",
+"товар": "product",
+"Книга": "Book",
+"через": "through",
+"Почта": "Email",
+"Канал": "Channel",
+"Блоки": "Blocks",
+"Адрес": "Address",
+"новых": "new",
+"Видео": "Video",
+"Части": "Parts",
+"Гифка": "GIF",
+"Номер": "Number",
+"своей": "of its",
+"полей": "fields",
+"текст": "text",
+"Драйв": "Drive",
+"Лист2": "Sheet2",
+"Вывод": "Output",
+"Ответ": "Response",
+"Ноушн": "Notion",
+"ЯДиск": "YDisk",
+"Файлы": "Files",
+"Тогда": "Then",
+"Сдвиг": "Shift",
+"Новый": "New",
+"Шапка": "Header",
+"Файла": "File",
+"ЮТест": "UTest",
+"Равно": "Equal",
+"Синий": "Blue",
+"Опрос": "Poll",
+"Папка": "Folder",
+"Токен": "Token",
+"Лист1": "Sheet1",
+"ЕдИзм": "Unit",
+"Буфер": "Buffer",
+"Текст": "Text",
+"Копия": "Copy",
+"Метод": "Method",
+"путей": "paths",
+"Товар": "Product",
+"Сервер": "Server",
+"Работа": "Work",
+"Это A4": "ThisIsA4",
+"Запрос": "Request",
+"Модуль": "Module",
+"Это A3": "ThisIsA3",
+"Булево": "Boolean",
+"разные": "different",
+"Курсор": "Cursor",
+"Высота": "Height",
+"Это B3": "ThisIsB3",
+"Это B2": "ThisIsB2",
+"Откуда": "From",
+"Ширина": "Width",
+"данных": "data",
+"Это A2": "ThisIsA2",
+"таблиц": "tables",
+"Массив": "Array",
+"Это A1": "ThisIsA1",
+"Книга2": "Book2",
+"Сессия": "Session",
+"Это B1": "ThisIsB1",
+"Это B4": "ThisIsB4",
+"Прочие": "Others",
+"Запись": "Record",
+"метода": "method",
+"Важное": "Important",
+"опции:": "options:",
+"Привет": "Hello",
+"Текст2": "Text2",
+"Желтый": "Yellow",
+"Бирюза": "Turquoise",
+"адресу": "address",
+"стучит": "knocks",
+"Вайбер": "Viber",
+"Записи": "Records",
+"СокрЛП": "ShortLP",
+"ВСпейс": "VSpace",
+"сервис": "service",
+"канале": "channel",
+"СКонца": "FromEnd",
+"Отступ": "Indent",
+"Версия": "Version",
+"важное": "important",
+"типов:": "types:",
+"Список": "List",
+"Рефреш": "Refresh",
+"Статус": "Status",
+"Флажок": "Checkbox",
+"начала": "of start",
+"Коммит": "Commit",
+"только": "only",
+"ТипЗнч": "TypeValue",
+"IDЧата": "ChatID",
+"группе": "group",
+"Данные": "Data",
+"Широта": "Latitude",
+"Формат": "Format",
+"Вопрос": "Question",
+"КудаID": "ToID",
+"Строки": "Strings",
+"IDТемы": "ThreadID",
+"Кнопки": "Buttons",
+"Кнопка": "Button",
+"Ссылка": "Link",
+"Товары": "Products",
+"Альбом": "Album",
+"Должно": "Should",
+"ячейки": "cell",
+"данные": "Data",
+"Ответы": "Answers",
+"булево": "boolean",
+"Дважды": "Twice",
+"IDФото": "PhotoID",
+"ФотоID": "PhotoID",
+"Парсер": "Parser",
+"Диалог": "Dialog",
+"ИДФото": "PhotoID",
+"Строка": "String",
+"корень": "root",
+"тестов": "tests",
+"Истина": "True",
+"полей:": "fields:",
+"Пример": "Example",
+"режиме": "mode",
+"Размер": "Size",
+"Заказы": "Orders",
+"работе": "work",
+"Черный": "Black",
+"Разбан": "Unban",
+"товара": "product",
+"Первый": "First",
+"Ячейка": "Cell",
+"Раздел": "Section",
+"Иконка": "Icon",
+"группы": "groups",
+"Пароль": "Password",
+"Способ": "Method",
+"РАЗБАН": "UNBAN",
+"Синоним": "Synonym",
+"который": "which",
+"Ревизия": "Revision",
+"Таблицы": "Tables",
+"базовую": "basic",
+"обычным": "ordinary",
+"Секунды": "Seconds",
+"Ожидаем": "Awaiting",
+"выбором": "choice",
+"Разделы": "Sections",
+"ЮТТесты": "UTTests",
+"Твиттер": "Twitter",
+"сервере": "server",
+"СНачала": "FromStart",
+"ID темы": "Thread ID",
+"формате": "format",
+"IDПоста": "PostID",
+"ЧатТема": "ChatTopic",
+"запуска": "start",
+"Элемент": "Element",
+"Альбомы": "Albums",
+"Запросы": "Requests",
+"Обложка": "Cover",
+"Удалить": "Delete",
+"ИДБлока": "BlockID",
+"Вариант": "Option",
+"ТипПоля": "FieldType",
+"ДопФото": "AdditionalPhoto",
+"Телефон": "Phone",
+"Отметка": "Timestamp",
+"Скрытая": "Hidden",
+"Каталог": "Directory",
+"Таймаут": "Timeout",
+"граммах": "grams",
+"главным": "main",
+"Долгота": "Longitude",
+"Фамилия": "Last name",
+"Сделать": "Make",
+"свойств": "properties",
+"Счетчик": "Counter",
+"IDСтены": "WallID",
+"История": "Story",
+"ОпросID": "PollID",
+"Подпись": "Signature",
+"Реклама": "Advertisement",
+"Объекты": "Objects",
+"Артикул": "SKU",
+"IDВидео": "VideoID",
+"ИДПоста": "PostID",
+"Признак": "Indication",
+"Глубина": "Depth",
+"ВидеоДД": "VideoDD",
+"Консоль": "Console",
+"Вывести": "Output",
+"Коммент": "Comment",
+"Зеленый": "Green",
+"вызова:": "call:",
+"Каждого": "Each",
+"справку": "help",
+"Символы": "Symbols",
+"Отметки": "Tags",
+"методы:": "methods:",
+"Причина": "Reason",
+"Красный": "Red",
+"Обычный": "Regular",
+"Экспорт": "Export",
+"Функция": "Function",
+"Префикс": "Prefix",
+"изменен": "changed",
+"Активен": "Active",
+"Таблица": "Table",
+"Строка_": "String_",
+"IDПапки": "FolderID",
+"IDФайла": "FileID",
+"Булево_": "Boolean_",
+"Скрытый": "Hidden",
+"Событие": "Event",
+"В офисе": "InOffice",
+"удалено": "deleted",
+"объекта": "object",
+"Аккаунт": "Account",
+"Утилиты": "Utilities",
+"таблицы": "tables",
+"Функции": "Functions",
+"Область": "Region",
+"Справка": "Help",
+"Возврат": "Return",
+"массив:": "array:",
+"<Данные": "<Data",
+"массива": "array",
+"события": "events",
+"Команда": "Command",
+"Колонки": "Columns",
+"Строчный": "StringType",
+"Вставить": "Insert",
+"Свойства": "Properties",
+"параметр": "parameter",
+"описания": "descriptions",
+"указания": "indications",
+"Действие": "Action",
+"Свойство": "Property",
+"ID блока": "Block ID",
+"СтрДлина": "StrLength",
+"Основная": "Main",
+"ID книги": "BookID",
+"ИмяЛиста": "SheetName",
+"Добавить": "Add",
+"ПоляБазы": "BaseFields",
+"Свернуть": "Collapse",
+"Подборки": "Selections",
+"Числовой": "Numeric",
+"В работе": "InProgress",
+"Описание": "Description",
+"СтрНайти": "StrFind",
+"ТипМедиа": "MediaType",
+"название": "name",
+"ТипЧисло": "TypeNumber",
+"значения": "values",
+"Вариант1": "Option1",
+"ИмеетТип": "HasType",
+"Вариант2": "Option2",
+"Вложения": "Attachments",
+"Вложение": "Attachment",
+"ключевой": "key",
+"Страница": "Page",
+"страницы": "pages",
+"Кнопка 1": "Button 1",
+"описание": "description",
+"Кнопка 2": "Button 2",
+"событиях": "events",
+"IDРаботы": "JobID",
+"URLФайла": "FileURL",
+"НовоеИмя": "NewName",
+"Оригинал": "Original",
+"ЭтоКанал": "IsChannel",
+"Подробно": "Detailed",
+"Кнопка 3": "Button 3",
+"ВКорзину": "ToCart",
+"загрузки": "upload",
+"ИДТовара": "ProductID",
+"Точность": "Precision",
+"описаний": "descriptions",
+"IDКанала": "ChannelID",
+"каталога": "directory",
+"варианты": "variants",
+"Параметр": "Parameter",
+"ОткудаID": "FromID",
+"IDИконки": "IconID",
+"JSONДата": "JSONDate",
+"действий": "actions",
+"Максимум": "Maximum",
+"Родитель": "Parent",
+"ЭтотФайл": "ThisFile",
+"ИмяМедиа": "MediaName",
+"отправки": "of sending",
+"подойдет": "suit",
+"ДропБокс": "Dropbox",
+"Приемник": "Receiver",
+"Источник": "Source",
+"работать": "work",
+"ОбъектВК": "VKObject",
+"Получить": "Get",
+"Загрузка": "Upload",
+"НЕ JSON:": "NOT JSON:",
+"СтрВсего": "StrTotal",
+"указании": "indication",
+"ПутьФайл": "FilePath",
+"Записать": "Write",
+"значение": "value",
+"Не JSON:": "Not JSON:",
+"ID поста": "Post ID",
+"ДатаСтоп": "EndDate",
+"Документ": "Document",
+"Значения": "Values",
+"МассивИД": "IDArray",
+"Название": "Name",
+"магазина": "store",
+"страницу": "page",
+"ИмяФайла": "FileName",
+"Двоичные": "Binary",
+"ФайлСлак": "SlackFile",
+"Смещение": "Offset",
+"СтрокаТЗ": "DataString",
+"Разметка": "Markup",
+"ИДРаботы": "WorkID",
+"Картинка": "Image",
+"Сообщить": "Notify",
+"Значение": "Value",
+"Телеграм": "Telegram",
+"Подборка": "Selection",
+"Свойства_": "Properties_",
+"СтрШаблон": "StrTemplate",
+"Изменение": "Change",
+"ПутьКСтат": "PathToStat",
+"Значение:": "Value:",
+"Сигнатура": "Signature",
+"IDАльбома": "AlbumID",
+"ВерсияАпи": "APIVersion",
+"Выражение": "Expression",
+"Константы": "Constants",
+"Результат": "Result",
+"Приватный": "Private",
+"параметра": "parameter",
+"ID канала": "Channel ID",
+"изменения": "change",
+"Рекламный": "Advertising",
+"Анонимный": "Anonymous",
+"отражения": "reflection",
+"Подборки_": "Selections_",
+"ДатаСтарт": "StartDate",
+"В корзину": "To cart",
+"ТекущийИД": "CurrentID",
+"ИДОбъекта": "ObjectID",
+"URLФайла2": "URLFile2",
+"Категории": "Categories",
+"ИмяПакета": "PackageName",
+"ПутьКопии": "CopyPath",
+"Вариант 2": "Option 2",
+"Категория": "Category",
+"Удаленный": "Remote",
+"ИмяМетода": "MethodName",
+"Доступные": "Available",
+"неактивен": "inactive",
+"Строковое": "String",
+"ИДАльбома": "AlbumID",
+"ВидеоПуть": "VideoPath",
+"АудиоПуть": "AudioPath",
+"Выполнить": "Execute",
+"ГифкаПуть": "GifPath",
+"ПутьЛогов": "LogPath",
+"Структура": "Structure",
+"URLФайла1": "URLFile1",
+"сообщений": "messages",
+"URL файла": "File URL",
+"доступных": "available",
+"ID товара": "Product ID",
+"ИначеЕсли": "ElseIf",
+"НовыйТест": "NewTest",
+"Процедура": "Procedure",
+"Имя папки": "Folder name",
+"ВКонтакте": "VK",
+"Кодировка": "Encoding",
+"Вариант 1": "Option 1",
+"Параметр_": "Parameter_",
+"HTTPОтвет": "HTTPResponse",
+"Значение2": "Value2",
+"Значение1": "Value1",
+"Заголовок": "Title",
+"ИДЖелтого": "YellowID",
+"Параметры": "Parameters",
+"ТокенБота": "BotToken",
+"Заполнено": "Filled",
+"ТипСтрока": "TypeString",
+"подлинный": "genuine",
+"Календарь": "Calendar",
+"добавлять": "add",
+"окончания": "of end",
+"Коллекция": "Collection",
+"Картинка1": "Image1",
+"Картинка2": "Image2",
+"приходить": "come",
+"Заголовки": "Headers",
+"НовыйЛист": "NewSheet",
+"Сообщение": "Message",
+"ТипДанных": "DataType",
+"возвращать": "return",
+"дальнейших": "further",
+"на сервере": "on the server",
+"информация": "information",
+"сертификат": "certificate",
+"информации": "information",
+"Параметры_": "Parameters_",
+"перестанет": "will stop",
+"сообщениях": "messages",
+"Разрешения": "Permissions",
+"МассивЧата": "ChatArray",
+"участникам": "to participants",
+"возвращает": "returns",
+"Статистика": "Statistics",
+"ФорматДаты": "DateFormat",
+"информацию": "information",
+"проведения": "of the event",
+"Соединение": "Connection",
+"Расширение": "Extension",
+"Файл видео": "Video file",
+"Файл аудио": "Audio file",
+"Параметры:": "Parameters:",
+"Файл гифки": "GIF file",
+"ДанныеПоля": "FieldData",
+"ID альбома": "Album ID",
+"ПутьКФайлу": "FilePath",
+"библиотек:": "libraries:",
+"параметров": "parameters",
+"библиотеки": "libraries",
+"Текст тега": "Tag text",
+"УдалитьТег": "DeleteTag",
+"УДАЛИТЬТЕГ": "DELETETAG",
+"пожаловать": "welcome",
+"ВидЗапроса": "RequestType",
+"Клавиатура": "Keyboard",
+"СтараяЦена": "OldPrice",
+"ID диалога": "Dialog ID",
+"конкретное": "specific",
+"они разные": "they are different",
+"Токен бота": "Bot token",
+"Имя товара": "Product name",
+"ИДКартинки": "ImageID",
+"Приложение": "Application",
+"НовяИконка": "NewIcon",
+"ИмяТаблицы": "TableName",
+"Новый файл": "NewFile",
+"Библиотека": "Library",
+"ООО Вектор": "LLC Vector",
+"ИДКаталога": "CatalogID",
+"ДатаНачала": "StartDate",
+"ТокенКанал": "ChannelToken",
+"ИДВарианта": "VariantID",
+"ЦветКнопок": "ButtonColor",
+"ИДКабинета": "CabinetID",
+"ИмеетДлину": "HasLength",
+"ОжидаетЧто": "ExpectsThat",
+"ИДПодборки": "SelectionID",
+"ПолныйПуть": "FullPath",
+"МассивФото": "PhotoArray",
+"Доуступные": "Available",
+"ID события": "Event ID",
+"Информация": "Information",
+"Объявление": "Ad",
+"Назначение": "Destination",
+"Сохранение": "Save",
+"ФайлОтвета": "ResponseFile",
+"СтрПроцент": "StrPercentage",
+"Бан\/Разбан": "Ban\/Unban",
+"Количество": "Quantity",
+"СтрТекущее": "StrCurrent",
+"HTTPЗапрос": "HTTPRequest",
+"IDКабинета": "AccountID",
+"IDКартинки": "ImageID",
+"Твит с гиф": "Tweet with gif",
+"ID Родителя": "Parent ID",
+"Новое видео": "NewVideo",
+"Удалить тег": "Delete tag",
+"АдресаПочты": "EmailAddresses",
+"ТипКонтента": "ContentType",
+"РефрешТокен": "RefreshToken",
+"Петр Петров": "Petr Petrov",
+"JSONСтрокой": "JSONString",
+"ОписаниеИзм": "EditedDescription",
+"НомерГруппы": "GroupNumber",
+"Фон истории": "Story background",
+"возможность": "possibility",
+"Токен Viber": "Viber Token",
+"ТекущаяДата": "CurrentDate",
+"ID страницы": "Page ID",
+"ЗаписатьЛог": "WriteLog",
+"Для Asserts": "For Asserts",
+"уведомлений": "notifications",
+"Для YaxUnit": "For YAxUnit",
+"Текст твита": "Tweet text",
+"авторизации": "authorization",
+"ЗаменаТочки": "DotReplacement",
+"РазмерБлока": "BlockSize",
+"Уведомления": "Notifications",
+"ОбщийРазмер": "TotalSize",
+"ПолныйОтвет": "FullResponse",
+"МассивПолей": "FieldArray",
+"УДАЛИТЬПОСТ": "DELETEPOST",
+"ID картинки": "Image ID",
+"УдалитьПост": "DeletePost",
+"СтрЗаменить": "StringReplace",
+"Текст поста": "Post text",
+"МассивПутей": "PathsArray",
+"ID подборок": "Selection IDs",
+"ID подборки": "Selection ID",
+"ID свойства": "Property ID",
+"ID варианта": "Variant ID",
+"ЦелевойПуть": "TargetPath",
+"СОЗДАТЬПОСТ": "CREATEPOST",
+"СоздатьПост": "CreatePost",
+"ДОБАВИТЬТЕГ": "ADDTAG",
+"Комментарий": "Comment",
+"Медиагруппа": "MediaGroup",
+"Стандартные": "Standard",
+"ТекстОтвета": "ReplyText",
+"ОбщийДоступ": "PublicAccess",
+"медиагруппы": "media groups",
+"ОбщийМодуль": "CommonModule",
+"МетодПоиска": "SearchMethod",
+"НоваяСтрока": "NewLine",
+"УдалитьЛист": "DeleteSheet",
+"УДАЛИТЬЛИСТ": "DELETESHEET",
+"СоздатьБазу": "CreateDatabase",
+"СОЗДАТЬБАЗУ": "CREATEDATABASE",
+"СКАЧАТЬФАЙЛ": "DOWNLOADFILE",
+"СкачатьФайл": "DownloadFile",
+"ДобавитьТег": "AddTag",
+"ИмяКонтакта": "ContactName",
+"JSON данные": "JSON data",
+"СОЗДАТЬПОЛЕ": "CREATEFIELD",
+"ТекущийКлюч": "Current key",
+"ИмяСодержит": "NameContains",
+"миллиметрах": "millimeters",
+"ПолеОтметки": "TimestampField",
+"ДанныеСхемы": "SchemaData",
+"ТипВложений": "AttachmentsType",
+"ТекущийФайл": "CurrentFile",
+"УДАЛИТЬФАЙЛ": "DELETEFILE",
+"Разделитель": "Delimiter",
+"УдалитьФайл": "DeleteFile",
+"СоздатьПоле": "CreateField",
+"указывается": "specified",
+"МассивВидео": "Video array",
+"МассивГифок": "Gif array",
+"МассивМедиа": "MediaArray",
+"МассивСвязи": "LinkArray",
+"Тема канала": "Channel topic",
+"конкретному": "specific",
+"УдалитьБлок": "DeleteBlock",
+"ВЕРНУТЬБЛОК": "RETURNBLOCK",
+"МассивЯчеек": "Cell array",
+"СтрокаФайла": "FileString",
+"ОтборПоТипу": "FilterByType",
+"ТекстКнопки": "ButtonText",
+"Остаток. -1": "Balance. -1",
+"расширением": "extension",
+"ОтборСтрока": "FilterString",
+"СоздатьБлок": "CreateBlock",
+"IDСообщения": "MessageID",
+"РазмерЧасти": "ChunkSize",
+"СОЗДАТЬБЛОК": "CREATEBLOCK",
+"Сортировать": "Sort",
+"Авторизация": "Authorization",
+"Цель канала": "Channel purpose",
+"ОтветМассив": "ResponseArray",
+"ВернутьБлок": "ReturnBlock",
+"Цена товара": "Product price",
+"УДАЛИТЬБЛОК": "DELETEBLOCK",
+"Новый товар": "New product",
+"IDОригинала": "OriginalID",
+"ИмяПараметра": "ParameterName",
+"МассивКнопок": "ButtonArray",
+"IDОбъявления": "AdID",
+"УдалитьТовар": "DeleteProduct",
+"УДАЛИТЬТОВАР": "DELETEITEM",
+"ID, Значение": "ID, Value",
+"ТекущийТовар": "CurrentProduct",
+"СписокКоманд": "CommandList",
+"ЦветнойВывод": "ColorOutput",
+"ОсновноеФото": "MainPhoto",
+"ОднаПодОдной": "OneByOne",
+"ЦелеваяСтена": "Target wall",
+"СОЗДАТЬОПРОС": "CREATEPOLL",
+"Создать пост": "Create post",
+"Удалить пост": "Delete post",
+"КодировкаURL": "URLencoding",
+"РазмерДанных": "DataSize",
+"ЗаписьТекста": "TextRecord",
+"ТипКоллекции": "CollectionType",
+"опубликована": "published",
+"использовать": "use",
+"ID календаря": "Calendar ID",
+"КлючКартинка": "ImageKey",
+"Base64Строка": "Base64String",
+"Тип вложений": "Attachments type",
+"периодически": "periodically",
+"ОтборКоманды": "CommandSelection",
+"Длительность": "Duration",
+"пользователя": "user",
+"ОписаниеТипа": "TypeDescription",
+"IDОбсуждения": "DiscussionID",
+"Твит с видео": "Tweet with video",
+"МассивНабора": "Array of Sets",
+"ДневнойЛимит": "DailyLimit",
+"Соответствие": "Match",
+"СоздатьОпрос": "CreatePoll",
+"СтрокаВызова": "CallString",
+"ИДОбсуждения": "DiscussionID",
+"ПараметрыURL": "URLParameters",
+"Файл размера": "File size",
+"Удалить блок": "Delete block",
+"ТолькоОснова": "OnlyBase",
+"формирования": "formation",
+"СтруктураURL": "URLStructure",
+"МассивБлоков": "BlockArray",
+"Создать блок": "Create block",
+"ОбъектИконка": "Icon object",
+"Архивирована": "Archived",
+"БезВозвратно": "Irrecoverable",
+"Скачать файл": "Download file",
+"Добавить тег": "Add tag",
+"Неопределено": "Undefined",
+"МассивДанных": "Data array",
+"Удалить лист": "DeleteSheet",
+"Рефреш токен": "Refresh token",
+"СтрРазделить": "StrSplit",
+"ОсновнойЦвет": "PrimaryColor",
+"ЧислоВСтроку": "NumberToString",
+"ДопЗаголовки": "AdditionalHeaders",
+"МассивФайлов": "ArrayOfFiles",
+"ОтветСтрокой": "ResponseString",
+"загружаемого": "uploading",
+"Существующее": "Existing",
+"РодительБаза": "ParentBase",
+"СтрокаДанных": "DataString",
+"СоздатьПапку": "CreateFolder",
+"Число,Строка": "Number, String",
+"Строка,Число": "String, Number",
+"ДокументПуть": "DocumentPath",
+"КартинкаПуть": "ImagePath",
+"Удалить файл": "Delete file",
+"ИЗМЕНИТЬПОЛЕ": "CHANGEFIELD",
+"ИзменитьПоле": "ModifyField",
+"ПолучитьФайл": "GetFile",
+"ТекстСправки": "HelpText",
+"Пользователь": "User",
+"ДатаОтправки": "Sending date",
+"СтрСоединить": "StrJoin",
+"МассивТекста": "TextArray",
+"ЭтоКоллекция": "ThisIsCollection",
+"Дублирования": "duplicates",
+"СКАЧАТЬПАПКУ": "DOWNLOADFOLDER",
+"НовыйПрефикс": "NewPrefix",
+"СкачатьПапку": "DownloadFolder",
+"МассивЛишних": "ExtraArray",
+"МассивЛистов": "SheetArray",
+"ДобавитьПоле": "AddField",
+"Создать базу": "Create base",
+"МассивТаблиц": "TableArray",
+"Создать поле": "Create field",
+"СОЗДАТЬПАПКУ": "CREATEFOLDER",
+"пустой ответ": "empty response",
+"Использовать": "Use",
+"Пользователи": "Users",
+"ОбновитьФайл": "UpdateFile",
+"ОБНОВИТЬФАЙЛ": "UPDATEFILE",
+"СОЗДАТЬКАНАЛ": "CREATECHANNEL",
+"СоздатьКанал": "CreateChannel",
+"Имя контакта": "Contact name",
+"СоздатьКнигу": "CreateBook",
+"URL картинки": "Image URL",
+"СОЗДАТЬКНИГУ": "CREATEBOOK",
+"Наименование": "Name",
+"пользователю": "to user",
+"ДобавитьЛист": "AddSheet",
+"ID чата темы": "Thread chat ID",
+"ДОБАВИТЬЛИСТ": "ADDSHEET",
+"возвращающий": "returning",
+"Используется": "Used",
+"ПолучитьКнигу": "GetBook",
+"Новая таблица": "NewTable",
+"КодУстройства": "DeviceCode",
+"Вопрос опроса": "Poll question",
+"ОТПРАВИТЬФАЙЛ": "SENDFILE",
+"ОтправитьФайл": "SendFile",
+"ОбновитьТокен": "RefreshToken",
+"Создать опрос": "Create poll",
+"ОтветПроверки": "CheckResponse",
+"КартинкаПоста": "PostImage",
+"Массив кнопок": "Array of buttons",
+"ОБНОВИТЬТОКЕН": "UPDATETOKEN",
+"UnixИстечение": "UnixExpiration",
+"ПОЛУЧИТЬКНИГУ": "GETBOOK",
+"ID обсуждения": "Discussion ID",
+"СвойстваЛиста": "Sheet properties",
+"ТекущиеДанные": "Current data",
+"РазмерТекущих": "CurrentSize",
+"НомерТелефона": "PhoneNumber",
+"ТекущийМассив": "Current array",
+"ЗагрузкаВидео": "VideoUpload",
+"ПоставитьЛайк": "LikePost",
+"ВладелецВидео": "VideoOwner",
+"АдресЗагрузки": "UploadURL",
+"ТекущийСтатус": "CurrentStatus",
+"СДЕЛАТЬРЕПОСТ": "MAKEREPOST",
+"СделатьРепост": "MakeRepost",
+"Массив файлов": "Files array",
+"ПолучитьКанал": "GetChannel",
+"ТаблицаТестов": "TestTable",
+"Тестовая база": "TestDatabase",
+"ПутьОригинала": "OriginalPath",
+"НовыйРодитель": "NewParent",
+"Тестовая цель": "TestGoal",
+"существующего": "existing",
+"УдалитьАльбом": "DeleteAlbum",
+"УДАЛИТЬАЛЬБОМ": "DELETEALBUM",
+"ДОБАВИТЬТОВАР": "ADDITEM",
+"ДатаОкончания": "EndDate",
+"ДобавитьТовар": "AddProduct",
+"ИДКомментария": "CommentID",
+"СписокТоваров": "ProductList",
+"УДАЛИТЬОБЪЕКТ": "DELETEOBJECT",
+"ID объявления": "Ad ID",
+"УдалитьОбъект": "DeleteObject",
+"Создать папку": "Create folder",
+"Администратор": "Administrator",
+"Создать книгу": "CreateBook",
+"Строка, Число": "String, Number",
+"Скачать папку": "Download folder",
+"СОЗДАТЬАЛЬБОМ": "CREATEALBUM",
+"не ограничено": "unlimited",
+"Тестовая тема": "TestTopic",
+"Обновить файл": "Update file",
+"СтрокаНомеров": "NumbersString",
+"НомерКампании": "CampaignNumber",
+"ТекущийОбъект": "CurrentObject",
+"ПОЛУЧИТЬКАНАЛ": "GETCHANNEL",
+"СоздатьАльбом": "CreateAlbum",
+"Дата создания": "CreationDate",
+"СтрокаТоваров": "ProductsString",
+"Удалить товар": "Delete product",
+"МассивТоваров": "Array of products",
+"ИЗМЕНИТЬТОВАР": "CHANGEITEM",
+"ИзменитьТовар": "EditProduct",
+"Тестовый лист": "TestSheet",
+"Добавить лист": "AddSheet",
+"Идентификатор": "Identifier",
+"ПОСТАВИТЬЛАЙК": "PUTLIKE",
+"ЗагрузитьФайл": "UploadFile",
+"ПокинутьКанал": "LeaveChannel",
+"ПолучитьТокен": "GetToken",
+"СтруктураДаты": "DateStructure",
+"ВозможныеПути": "PossiblePaths",
+"ДФ=yyyy-MM-dd": "DF=yyyy-MM-dd",
+"РазложитьJSON": "ParseJSON",
+"РАЗЛОЖИТЬJSON": "PARSEJSON",
+"ЭтоОтложенное": "IsDelayed",
+"ОТКРЫТЬДИАЛОГ": "OPENDIALOG",
+"Блок картинки": "Image block",
+"МассивКаналов": "ChannelArray",
+"ЗАГРУЗИТЬФАЙЛ": "UPLOADFILE",
+"Создать канал": "Create channel",
+"СоздатьЗапрос": "CreateRequest",
+"Число, Строка": "Number, String",
+"НомерСтраницы": "PageNumber",
+"ОткрытьДиалог": "OpenDialog",
+"ОбъектОбложка": "Cover object",
+"пустая строка": "empty string",
+"ВставитьПосле": "InsertAfter",
+"ОписаниеТипов": "TypeDescription",
+"Новое событие": "New event",
+"ТекущийРаздел": "CurrentSection",
+"Файл с Base64": "Base64 File",
+"ПОЛУЧИТЬТОКЕН": "GETTOKEN",
+"Экранирование": "Escaping",
+"Метод,Область": "Method,Region",
+"ПОКИНУТЬКАНАЛ": "LEAVECHANNEL",
+"СтрокаЗаписей": "RecordString",
+"Версия: 2.4.8": "Version: 2.4.8",
+"УдалитьЗаписи": "DeletePosts",
+"Адрес объекта": "Object address",
+"СОЗДАТЬЗАПИСИ": "CREATEPOSTS",
+"ВыборЗначения": "ValueSelection",
+"МассивСобытий": "ArrayOfEvents",
+"СтруктураПоля": "FieldStructure",
+"СоздатьЗаписи": "CreatePosts",
+"ДатаИстечения": "ExpirationDate",
+"Файл картинки": "Image file",
+"ВывестиСтроку": "PrintString",
+"Изменить поле": "Modify field",
+"УДАЛИТЬЗАПИСИ": "DELETERECORDS",
+"ПодСообщением": "UnderMessage",
+"Описание поля": "Field description",
+"ЗАКРЫТЬДИАЛОГ": "CLOSEDIALOG",
+"МассивОтветов": "AnswersArray",
+"ЗакрытьДиалог": "CloseDialog",
+"МассивТоваров_": "Array_of_Products",
+"Покинуть канал": "Leave channel",
+"ПараметрыТеста": "TestParameters",
+"РабочийКаталог": "WorkingDirectory",
+"Получить канал": "Get channel",
+"Новое описание": "New description",
+"Получить книгу": "GetBook",
+"Изменяет имя и": "Changes name and",
+"ID базы данных": "Database ID",
+"ОТПРАВИТЬВИДЕО": "SENDVIDEO",
+"ОтправитьВидео": "SendVideo",
+"СоздатьТаблицу": "CreateTable",
+"СОЗДАТЬТАБЛИЦУ": "CREATETABLE",
+"МассивПодборок": "SelectionArray",
+"Удалить записи": "Delete records",
+"СтрНачинаетсяС": "StringStartsWith",
+"СОЗДАТЬСОБЫТИЕ": "CREATEEVENT",
+"ИДПользователя": "UserID",
+"СтрокаПодборок": "SelectionsString",
+"СтрОбщийРазмер": "StrTotalSize",
+"Удалить объект": "Delete object",
+"СтруктураФайла": "FileStructure",
+"СтруктураОпций": "OptionsStructure",
+"ГлавныйВГруппе": "MainInGroup",
+"Создать записи": "Create records",
+"Обновить токен": "Refresh token",
+"Изменить товар": "Edit product",
+"Библиотека: VK": "Library: VK",
+"ВСТУПИТЬВКАНАЛ": "JOINCHANNEL",
+"Файл, Значение": "File, Value",
+"КлючПриложения": "AppKey",
+"Тип клавиатуры": "KeyboardType",
+"ВступитьВКанал": "JoinChannel",
+"Отправить файл": "SendFile",
+"ОтправкаВКанал": "SendingToChannel",
+"IDПользователя": "UserID",
+"ТекущаяОбласть": "CurrentRegion",
+"ОтправитьОпрос": "SendPoll",
+"Получить токен": "Get token",
+"ПолучитьЗапись": "GetRecord",
+"ПОЛУЧИТЬЗАПИСЬ": "GETRECORD",
+"ОТПРАВИТЬОПРОС": "SENDPOLL",
+"УДАЛИТЬWEBHOOK": "DELETEWEBHOOK",
+"ПолноеИмяМедиа": "FullMediaName",
+"СтруктураМедиа": "MediaStructure",
+"МассивКартинок": "ImageArray",
+"УдалитьWebhook": "DeleteWebhook",
+"ПОЛУЧИТЬОБЪЕКТ": "GETOBJECT",
+"СтрокаВложений": "AttachmentsString",
+"ПараметрМетода": "MethodParameter",
+"Новое название": "New name",
+"ОписаниеТовара": "ProductDescription",
+"Добавить товар": "Add product",
+"МассивЗапросов": "ArrayOfRequests",
+"Закрыть диалог": "Close dialog",
+"МассивСтруктур": "Array of Structures",
+"Перезаписывать": "Overwrite",
+"НомерКатегории": "CategoryNumber",
+"МассивИДПостов": "Array of post IDs",
+"Номер страницы": "Page number",
+"Загрузить файл": "Upload file",
+"Файл документа": "Document file",
+"МассивОписания": "DescriptionArray",
+"Сделать репост": "Make repost",
+"ТекущийЭлемент": "CurrentElement",
+"ОТПРАВИТЬГИФКУ": "SENDGIF",
+"Поставить лайк": "Like",
+"МассивОтправки": "SendArray",
+"Описание видео": "Video description",
+"ОписаниеЗаписи": "RecordDescription",
+"Удалить альбом": "Delete album",
+"Создать альбом": "Create album",
+"Открыть диалог": "Open dialog",
+"ПолучитьОбъект": "GetObject",
+"Путь к объекту": "Path to the object",
+"СтруктураЯчеек": "CellStructure",
+"Номер телефона": "Phone number",
+"КартинкаЗамены": "ReplacementImage",
+"Тестовая папка": "TestFolder",
+"ТолькоПросмотр": "ViewOnly",
+"НазваниеФайла1": "FileName1",
+"Твит с опросом": "Tweet with poll",
+"ЗаписатьСтроку": "WriteString",
+"ТекущаяКоманда": "CurrentCommand",
+"HTTPСоединение": "HTTPConnection",
+"ТекущеВложение": "CurrentAttachment",
+"АТ_СоздатьПоле": "AT_CreateField",
+"ТекущаяПозиция": "CurrentPosition",
+"УдалитьСобытие": "DeleteEvent",
+"УДАЛИТЬСОБЫТИЕ": "DELETEEVENT",
+"ТаблицаСостава": "CompositionTable",
+"АТ_СоздатьБазу": "AT_CreateDatabase",
+"ОЧИСТИТЬЯЧЕЙКИ": "CLEARCELLS",
+"Тестовый товар": "TestProduct",
+"ПолучитьПревью": "GetPreview",
+"СтрочныйМассив": "StringArray",
+"МассивВложений": "AttachmentsArray",
+"КОПИРОВАТЬЛИСТ": "COPYSHEET",
+"КопироватьЛист": "CopySheet",
+"Тестовый твитт": "TestTweet",
+"Отбор по имени": "Filter by name",
+"Это новый файл": "This is a new file",
+"Новый файл.jpg": "New file.jpg",
+"ПутьСохранения": "SavePath",
+"ОписаниеМетода": "MethodDescription",
+"ОписаниеОшибки": "ErrorDescription",
+"ОчиститьЯчейки": "ClearCells",
+"Описание файла": "File description",
+"ДвоичныеДанные": "BinaryData",
+"Текстовый твит": "Text tweet",
+"ПОЛУЧИТЬПРЕВЬЮ": "GETPREVIEW",
+"МассивОбъектов": "ArrayOfObjects",
+"СОЗДАТЬИСТОРИЮ": "CREATEHISTORY",
+"Заголовок темы": "Thread title",
+"СоздатьИсторию": "CreateStory",
+"Копировать лист": "CopySheet",
+"ЗагруженныйФайл": "UploadedFile",
+"ОписаниеТаблицы": "TableDescription",
+"МассивРодителей": "ArrayOfParents",
+"Сокращенный URL": "Shortened URL",
+"Массив картинок": "Array of images",
+"УдалитьПодборку": "DeleteSelection",
+"Очистить ячейки": "Clear cells",
+"Номер,Строковое": "Number,String",
+"Создать историю": "Create story",
+"Новый заголовок": "New title",
+"ВК_СоздатьОпрос": "VK_CreatePoll",
+"Загрузить видео": "Upload video",
+"JSON клавиатуры": "Keyboard JSON",
+"ID пользователя": "User ID",
+"Массив ID медиа": "Media ID array",
+"ЗависимостиГугл": "GoogleDependencies",
+"ОригиналныйПуть": "OriginalPath",
+"IDИнициализации": "InitializationID",
+"СтатусОбработки": "ProcessingStatus",
+"Отправить опрос": "Send poll",
+"СтрокаСигнатуры": "SignatureString",
+"ТекущаяДатаUNIX": "CurrentUNIXDate",
+"Получить превью": "Get preview",
+"СтруктураФайлов": "FileStructure",
+"Отправить гифку": "Send GIF",
+"СтруктураКнопки": "ButtonStructure",
+"Отправить аудио": "Send audio",
+"Отправить видео": "Send video",
+"ОдиночнаяЗапись": "SingleRecord",
+"Команда CLI: vk": "CLI Command: vk",
+"МассивУдаляемых": "ArrayOfDeletions",
+"ОписаниеСтроки2": "RowDescription2",
+"Удалить событие": "Delete event",
+"Картинка опроса": "Poll image",
+"ЗапросИзменения": "ChangeRequest",
+"Удалить Webhook": "Delete webhook",
+"ОписаниеСтроки1": "RowDescription1",
+"IDПользователей": "UserIDs",
+"Текст сообщения": "Message text",
+"Создать каталог": "Create folder",
+"СократитьСсылку": "ShortenLink",
+"ID целевой базы": "Target database ID",
+"МассивВариантов": "OptionArray",
+"Ключ приложения": "Application key",
+"КоллекцияТаблиц": "TableCollection",
+"УдалитьКартинку": "DeleteImage",
+"установлен свой": "set your",
+"Создать таблицу": "Create table",
+"Создать событие": "Create event",
+"ЗаписатьЦелое16": "WriteInt16",
+"МестоПроведения": "Venue",
+"СтруктураДанных": "DataStructure",
+"Получить объект": "Get object",
+"Получить запись": "Get record",
+"ПовторитьСтроку": "RepeatString",
+"ТипСоответствие": "TypeMatch",
+"СтруктураТекста": "TextStructure",
+"ИзменитьТаблицу": "ModifyTable",
+"ОписаниеСобытия": "EventDescription",
+"OPI_Инструменты": "OPI_Tools",
+"ЗначенияСвойств": "PropertyValues",
+"ЗаголовокПотока": "StreamHeader",
+"СтруктураВыбора": "ChoiceStructure",
+"Описание товара": "Product description",
+"ID целевого чата": "Target chat ID",
+"Массив ID постов": "Array of post IDs",
+"ВладелецКартинки": "ImageOwner",
+"ПараметрыФункции": "FunctionParameters",
+"МассивРазрешений": "Permissions array",
+"ЗагрузкаКартинки": "ImageUpload",
+"Загружаемый файл": "File to be uploaded",
+"Отправить ссылку": "SendLink",
+"Твит с картинкой": "Tweet with image",
+"Коллекция файлов": "File collection",
+"СтруктураФормата": "FormatStructure",
+"РазделительСтрок": "LineSeparator",
+"Code из браузера": "Code from browser",
+"Описание таблицы": "Table description",
+"ЗапятаяВКавычках": "CommaInQuotes",
+"Изменить таблицу": "Modify table",
+"Описание события": "Event description",
+"ПолучитьДвоичные": "GetBinary",
+"СекретПриложения": "AppSecret",
+"ПараметрыЗапроса": "RequestParameters",
+"HTTPСервисЗапрос": "HTTPServiceRequest",
+"ГВ_ПолучитьТокен": "GV_GetToken",
+"ГВ_ОбновитьТокен": "GV_UpdateToken",
+"Телефон контакта": "Contact phone number",
+"Фамилия контакта": "Contact last name",
+"Получить таблицу": "Get table",
+"ПолучитьПолеДаты": "GetDateField",
+"СоответствиеMIME": "MIMETypeMapping",
+"УправлениеФайлом": "FileManagement",
+"KeyИнициализации": "InitializationKey",
+"ИмяФайлаОтправки": "SendingFileName",
+"ОтправитьКонтакт": "SendContact",
+"Создать страницу": "Create page",
+"ПолучитьПараметр": "GetParameter",
+"МетодХэширования": "HashingMethod",
+"КодироватьСтроку": "EncodeString",
+"Массив Из Строка": "Array From String",
+"Получить событие": "Get event",
+"Тестовый товар 2": "TestProduct2",
+"СоздатьТвитВидео": "CreateVideoTweet",
+"УдалитьПолностью": "Delete completely",
+"превью документа": "document preview",
+"СоздатьТвитГифки": "CreateGifTweet",
+"МассивКлавиатуры": "KeyboardArray",
+"ОписаниеКартинки": "ImageDescription",
+"Сократить ссылку": "Shorten link",
+"МассивКалендарей": "ArrayOfCalendars",
+"МассивСтатистики": "Array of Statistics",
+"Канал для отбора": "Channel for selection",
+"СтрокаПараметров": "ParameterString",
+"Массив из Строка": "Array of Strings",
+"Тестовая таблица": "TestTable",
+"Вступить в канал": "Join channel",
+"ДоступныйОстаток": "AvailableBalance",
+"СтрокаФотографий": "PhotoString",
+"Удалить картинку": "Delete image",
+"Удалить подборку": "DeleteSelection",
+"Неактивный : red": "Inactive    : red",
+"МассивИнформации": "ArrayOfInformation",
+"СсылкаПодЗаписью": "LinkUnderPost",
+"URLВКодировкеURL": "URLInURLEncoding",
+"СоздатьТвитОпрос": "CreatePollTweet",
+"МассивИменЛистов": "ArrayOfSheetNames",
+"Изменить событие": "Edit event",
+"СмещениеОтНачала": "OffsetFromStart",
+"ЗаписатьПараметр": "WriteParameter",
+"СтруктураСтатуса": "StatusStructure",
+"Расширение файла": "File extension",
+"МассивПараметров": "ParameterArray",
+"Описание альбома": "Album description",
+"ВызватьHTTPМетод": "CallHTTPMethod",
+"Имя файла в Slack": "File name in Slack",
+"ПреобразоватьДату": "ConvertDate",
+"Отправить контакт": "Send contact",
+"СоответствиеПолей": "FieldMapping",
+"ВК_ЗагрузитьВидео": "VK_UploadVideo",
+"ЗначениеЗаполнено": "ValueFilled",
+"СтруктураРодителя": "ParentStructure",
+"ОтправитьКартинку": "SendImage",
+"ТаблицаПараметров": "ParametersTable",
+"ЗакрытьТемуФорума": "CloseForumThread",
+"КалендарьИсточник": "SourceCalendar",
+"ГД_СоздатьКаталог": "GD_CreateCatalog",
+"СоздатьСоединение": "CreateConnection",
+"ГТ_СоздатьТаблицу": "GT_CreateTable",
+"Библиотека: Slack": "Library: Slack",
+"Удалить календарь": "Delete calendar",
+"Текст комментария": "Comment text",
+"Удалить сообщение": "Delete message",
+"Путь или ID файла": "Path or ID of the file",
+"КалендарьПриемник": "TargetCalendar",
+"АТ_СоздатьТаблицу": "AT_CreateTable",
+"Дата       : date": "Date        : date",
+"Скрытый календарь": "Hidden calendar",
+"НаправлениеПоиска": "SearchDirection",
+"ОткрытьТемуФорума": "OpenForumThread",
+"СтруктураВозврата": "ReturnStructure",
+"Файл для загрузки": "File for upload",
+"ПараметрЛокальный": "LocalParameter",
+"СоответствиеФайла": "FileMapping",
+"Массив ID товаров": "Array of product IDs",
+"УправлениеТоваром": "ProductManagement",
+"Библиотека: Viber": "Library: Viber",
+"ИзменитьСообщение": "EditMessage",
+"ID целевого поста": "ID of the target post",
+"Копировать объект": "Copy object",
+"СоздатьБазуДанных": "CreateDatabase",
+"Отправить локацию": "SendLocation",
+"ВызватьИсключение": "RaiseException",
+"ПолучитьСписокБаз": "GetListOfBases",
+"ЗакрытьОбсуждение": "CloseDiscussion",
+"Данные для API v2": "Data for API v2",
+"Строка, Структура": "String, Structure",
+"ID блока родителя": "Parent block ID",
+"ОткрытьОбсуждение": "OpenDiscussion",
+"ОсновнаяСтруктура": "MainStructure",
+"ОтветСоответствие": "ResponseCorrespondence",
+"Значение свойства": "Property value",
+"Новое имя объекта": "New object name",
+"Наименование поля": "Field name",
+"ОпросСоответствие": "PollCorrespondence",
+"Новый комментарий": "NewComment",
+"Название свойства": "Property name",
+"При отправке  URL": "When sending URL",
+"Описание картинки": "Image description",
+"Тестовая подборка": "TestCollection",
+"Получить страницу": "Get page",
+"Тестовая кампания": "TestCampaign",
+"ВК_СоздатьИсторию": "VK_CreateStory",
+"ОсновноеИзмерение": "MajorDimension",
+"ЗагруженныеДанные": "UploadedData",
+"СоздатьОбсуждение": "CreateDiscussion",
+"СтруктураКампании": "CampaignStructure",
+"СортироватьПоДате": "SortByDate",
+"Название подборки": "Selection name",
+"Картинка автотест": "AutoTestImage",
+"ПолучитьПолеПочты": "GetEmailField",
+"Пост из автотеста": "Post from autotest",
+"СоздатьТемуФорума": "CreateForumThread",
+"Создать календарь": "Create calendar",
+"Наш первый клиент": "OurFirstClient",
+"СкопироватьОбъект": "CopyObject",
+"Тестовое описание": "TestDescription",
+"Секрет приложения": "Application secret",
+"СтруктураВарианта": "OptionStructure",
+"СтрЗаканчиваетсяНа": "StrEndsWith",
+"СуществующаяГруппа": "ExistingGroup",
+"ID книги источника": "SourceBookID",
+"УправлениеДиалогом": "DialogManagement",
+"Идентификатор базы": "Base identifier",
+"Архивировать канал": "Archive channel",
+"Идентификатор поля": "Field identifier",
+"Удаляет пост по id": "Deletes a post by ID",
+"URL для сокращения": "URL for shortening",
+"Изменить календарь": "Edit calendar",
+"ДополнительныеФото": "AdditionalPhotos",
+"ПолучитьПолеСсылки": "GetLinkField",
+"ПолучитьПолеНомера": "GetNumberField",
+"Заголовок страницы": "Page title",
+"Тестовое сообщение": "TestMessage",
+"ЧЦ=10; ЧДЦ=0; ЧГ=0": "HC=10; HDC=0; HG=0",
+"Наименование видео": "Video name",
+"Переместить объект": "Move object",
+"ID книги приемника": "DestinationBookID",
+"ДанныеПользователя": "UserData",
+"Тестовый календарь": "TestCalendar",
+"ПолучитьСтатистику": "GetStatistics",
+"ПолучитьИДКартинки": "GetImageID",
+"Команда CLI: slack": "CLI command: slack",
+"ПолучитьТоварыПоИД": "GetProductsByID",
+"Изменить сообщение": "Edit message",
+"Удаляет блок по ID": "Deletes block by ID",
+"МассивКлючЗначение": "KeyValueArray",
+"ОтправитьСообщение": "SendMessage",
+"Тестовая таблица 2": "TestTable2",
+"Новое наименование": "New name",
+"Анонимность опроса": "Poll anonymity",
+"Создать твит опрос": "Create poll tweet",
+"ГТ_ПолучитьТаблицу": "GT_GetTable",
+"Создать твит видео": "Create video tweet",
+"Создать твит гифки": "Create gif tweet",
+"СтруктураПараметра": "ParameterStructure",
+"СоответствиеИконки": "Icon match",
+"Библиотека: Notion": "Library: Notion",
+"ДлительностьОпроса": "PollDuration",
+"Телеграм_БанРазбан": "Telegram_BanUnban",
+"ЛимитПользователей": "UserLimit",
+"ПолучитьПолеФлажка": "GetCheckboxField",
+"ЗагрузитьМалыйФайл": "UploadSmallFile",
+"Имя        : title": "Name        : title",
+"Опубликовать папку": "Publish folder",
+"Получить календарь": "Get calendar",
+"ЯДиск_СоздатьПапку": "YDisk_CreateFolder",
+"Команда CLI: viber": "CLI Command: viber",
+"'Желтый','Зеленый'": "'Yellow','Green'",
+"СоответствиеФайлов": "FileMapping",
+"Работа с доступами": "Access management",
+"ИдентификаторФайла": "FileID",
+"ПолеИдентификатора": "IdentifierField",
+"URL источник файла": "URL source of the file",
+"Написать сообщение": "Write a message",
+"Открыть обсуждение": "Open discussion",
+"Закрыть обсуждение": "Close discussion",
+"ДополнительныйЦвет": "SecondaryColor",
+"Создать обсуждение": "Create discussion",
+"Установить Webhook": "Set Webhook",
+"ПараметрВКоллекцию": "ParameterToCollection",
+"Активный   : green": "Active      : green",
+"УправлениеСобытием": "EventManagement",
+"Отправить картинку": "Send image",
+"УдалитьВнешнийФайл": "DeleteExternalFile",
+"Токен пользователя": "User token",
+"Отправить документ": "Send document",
+"Тестовый заголовок": "TestTitle",
+"ПолучитьОбновления": "GetUpdates",
+"Удалить комментарий": "Delete comment",
+"ПолучитьДанныеФайла": "GetFileData",
+"МассивПользователей": "ArrayOfUsers",
+"Переместить событие": "Move event",
+"Создать комментарий": "Create comment",
+"Новое описание базы": "New database description",
+"Архив      : yellow": "Archive     : yellow",
+"Библиотека: Dropbox": "Library: Dropbox",
+"Команда CLI: google": "CLI command: google",
+"Скоприровать объект": "Copy object",
+"СоответствиеОбложки": "Cover match",
+"Команда CLI: gdrive": "CLI Command: gdrive",
+"Количество : number": "Quantity    : number",
+"Структура Из Строка": "Structure From String",
+"Создать базу данных": "Create database",
+"ПолучитьВнешнийФайл": "GetExternalFile",
+"Команда CLI: notion": "CLI command: notion",
+"СтруктураПараметров": "ParametersStructure",
+"Массив файлов видео": "Video files array",
+"Длительность опроса": "Poll duration",
+"СгруппироватьТовары": "GroupProducts",
+"Получить статистику": "Get statistics",
+"Получает файл по ID": "Gets file by ID",
+"СтруктураЗаголовков": "HeadersStructure",
+"СтруктураКлавиатуры": "KeyboardStructure",
+"Массив из Структура": "Array of Structure",
+"Массив файлов гифок": "Gif files array",
+"Данные для API v1.1": "Data for API v1.1",
+"Создает новый канал": "Creates a new channel",
+"Наименование канала": "Channel name",
+"СоздатьТвитКартинки": "Create image tweet",
+"Создать\/Удалить тег": "Create\/Delete tag",
+"Структура из Строка": "Structure from String",
+"Библиотека: Twitter": "Library: Twitter",
+"СоответствиеМетодов": "MethodCorrespondence",
+"Команда CLI: yadisk": "CLI command: yadisk",
+"Отбор по типу файла": "Filter by file type",
+"Опубликовать объект": "Publish object",
+"Альбом из автотеста": "AlbumFromAutoTest",
+"Создает новую книгу": "Creates a new book",
+"Отправляемая ссылка": "SentLink",
+"Идентификатор книги": "BookIdentifier",
+"ПолучитьТекущуюДату": "GetCurrentDate",
+"СоответствиеСобытия": "EventMatch",
+"СоответствиеСвойств": "PropertyMatch",
+"Удалить тему форума": "Delete forum thread",
+"ВК_МетодыОбсуждений": "VK_DiscussionMethods",
+"НаписатьВОбсуждение": "WriteInDiscussion",
+"Ставит лайк на пост": "Likes a post",
+"НаписатьКомментарий": "WriteComment",
+"Создает базу данных": "Creates a database",
+"Дата начала периода": "Start date of the period",
+"Команда CLI: yandex": "CLI Command: yandex",
+"Путь внутри объекта": "Path inside the object",
+"Измененная подборка": "EditedCollection",
+"Открыть тему форума": "Open forum thread",
+"Идентификатор файла": "File identifier",
+"ПутьЛоговБиблиотеки": "LibraryLogPath",
+"Получить список баз": "Get list of bases",
+"АльтернативныйТекст": "AlternateText",
+"Получить обновления": "Get updates",
+"Переименовать канал": "Rename channel",
+"ЗаменитьСпецСимволы": "ReplaceSpecialCharacters",
+"ПолучитьСписокТегов": "GetTagList",
+"РабочееПространство": "Workspace",
+"ПолучитьКомментарии": "GetComments",
+"Отправить сообщение": "Send message",
+"ПолучитьОбщийМодуль": "GetCommonModule",
+"Закрепить сообщение": "Pin message",
+"Открепить сообщение": "Unpin message",
+"Массив Из Структура": "Array of Structures",
+"Удаляет тему форума": "Deletes a forum thread",
+"Создать тему форума": "Create forum thread",
+"Переслать сообщение": "Forward message",
+"Закрыть тему форума": "Close forum thread",
+"ПолучитьПолеВложения": "GetAttachmentField",
+"ответ сервера Google": "Google server response",
+"Путь или ID каталога": "Path or ID of the directory",
+"Делает репост записи": "Reposts the record",
+"ID родительской базы": "Parent database ID",
+"Соответствие свойств": "Properties match",
+"Получить комментарии": "Get comments",
+"ВК_ЛайкРепостКоммент": "VK_LikeRepostComment",
+"ЗагрузитьБольшойФайл": "UploadLargeFile",
+"ПолучитьПолеТелефона": "GetPhoneField",
+"Наименование альбома": "Album name",
+"Создать\/Удалить пост": "Create\/Delete post",
+"URL к внешнему файлу": "URL to external file",
+"Обновленный файл.jpg": "UpdatedFile.jpg",
+"Изменить комментарий": "Modify comment",
+"Получить комментарий": "Get comment",
+"ОтправитьВнешнийФайл": "SendExternalFile",
+"ID копируемого листа": "CopiedSheetID",
+"Проверка_НоушнОбъект": "Check_NotionObject",
+"СоответствиеСимволов": "CharacterMapping",
+"Тестовое сообщение 1": "TestMessage1",
+"Тестовое сообщение 2": "TestMessage2",
+"Список пользователей": "User list",
+"Тестовый комментарий": "TestComment",
+"Библиотека: Airtable": "Library: Airtable",
+"ID страницы родителя": "Parent page ID",
+"Изменить тему форума": "Edit forum thread",
+"Библиотека: Telegram": "Library: Telegram",
+"Свойства базы данных": "Database properties",
+"Команда CLI: twitter": "CLI Command: twitter",
+"Пустой макет события": "Empty event template",
+"ЗаголовокАвторизации": "AuthorizationHeader",
+"Аннотация к картинке": "Image annotation",
+"Создать\/Удалить блок": "Create\/Delete block",
+"Команда CLI: dropbox": "CLI Command: dropbox",
+"СоответствиеВозврата": "ReturnMapping",
+"МассивСтруктурКнопок": "ArrayOfButtonStructures",
+"СтруктураОтправителя": "SenderStructure",
+"СоздатьТекстовыйТвит": "CreateTextTweet",
+"Написать комментарий": "Write a comment",
+"Команда CLI: gsheets": "CLI Command: gsheets",
+"Идентификатор канала": "Channel ID",
+"ПолучитьПодборкиПоИД": "GetSelectionsByID",
+"СоответствиеВарианта": "OptionMap",
+"Новый заголовок базы": "New database title",
+"Вайбер_ОтправитьФайл": "Viber_SendFile",
+"Сгруппировать товары": "Group products",
+"Описание нового поля": "Description of the new field",
+"Получить базу данных": "Get database",
+"Удалить внешний файл": "Delete external file",
+"ИзменитьСвойстваБазы": "EditDatabaseProperties",
+"СоответствиеЗначений": "ValueMapping",
+"ПодчиненнаяСтруктура": "SubordinateStructure",
+"ПолучитьСписокФайлов": "GetFilesList",
+"Отправить медиагруппу": "Send media group",
+"ВыполнитьЗапросСТелом": "ExecuteRequestWithBody",
+"ВК_ОтправитьСообщение": "VK_SendMessage",
+"Создать\/Изменить поле": "Create\/Edit field",
+"Ноушн_СоздатьСтраницу": "Notion_CreatePage",
+"Слак_ПолучитьСписокВФ": "Slack_GetExternalFileList",
+"ВК_СоздатьУдалитьПост": "VK_CreateDeletePost",
+"Твиттер_ОбновитьТокен": "Twitter_UpdateToken",
+"Создать\/Изменить базу": "Create\/Edit database",
+"Удаляет событие по ID": "Deletes an event by ID",
+"ВК_ПолучитьСтатистику": "VK_GetStatistics",
+"Создать копию объекта": "Create object copy",
+"Идентификатор объекта": "Object identifier",
+"ПреобразованныеДанные": "ConvertedData",
+"МассивВариантовВыбора": "ChoiceOptionArray",
+"Новый текст сообщения": "New message text",
+"Новое название канала": "New channel name",
+"Строка,ДвоичныеДанные": "String, BinaryData",
+"Удаляет файл на Slack": "Deletes a file on Slack",
+"Получить данные файла": "Get file data",
+"Получить внешний файл": "Get external file",
+"Команда CLI: telegram": "CLI command: telegram",
+"Заголовок приглашения": "Invitation title",
+"В работе   : checkbox": "In progress : checkbox",
+"МассивВариантовОпроса": "PollOptionsArray",
+"Создать твит картинки": "Create image tweet",
+"ПолучитьСписокЗаписей": "GetListOfRecords",
+"ДвоичныеДанные,Строка": "BinaryData,String",
+"СоответствиеЗаголовка": "HeaderMapping",
+"ПолучитьСписокКаналов": "GetChannelList",
+"ТекстПервогоСообщения": "Text of the first message",
+"Написать в обсуждение": "Write in discussion",
+"СоответствиеКатегорий": "CategoryCorrespondence",
+"Получить товары по ID": "Get products by ID",
+"Идентификатор таблицы": "Table identifier",
+"Массив описаний полей": "Array of field descriptions",
+"Заголовок базы данных": "Database title",
+"Библиотека: Yandex ID": "Library: Yandex ID",
+"Создает новое событие": "Creates a new event",
+"ПолучитьПолеСтроковое": "GetStringField",
+"ПолучитьЗначенияЯчеек": "GetCellValues",
+"Удаляет лист из книги": "Deletes a sheet from the book",
+"Путь сохранения файла": "File save path",
+"Ссылка получения кода": "Code retrieval link",
+"Добавить внешний файл": "Add external file",
+"ОтправлятьУведомления": "SendNotifications",
+"ID асинхронной работы": "AsynchronousJobID",
+"ID пользователя Viber": "Viber User ID",
+"ЗагрузитьФотоНаСервер": "UploadPhotoToServer",
+"Получить список тегов": "Get list of tags",
+"Получить таблицы базы": "Get base tables",
+"Наименование кампании": "Campaign name",
+"ПолучитьСписокЗаказов": "GetOrderList",
+"ID рекламной кампании": "Advertising campaign ID",
+"Команда CLI: airtable": "CLI Command: airtable",
+"Загрузить файл по URL": "Upload file by URL",
+"СтруктураПользователя": "UserStructure",
+"ID целевого сообщения": "Target message ID",
+"УдалитьСвойствоТовара": "DeleteProductProperty",
+"СоздатьСвойствоТовара": "CreateProductProperty",
+"Географическая широта": "Geographic latitude",
+"ПолучитьСписокСвойств": "GetPropertyList",
+"двоичные данные файла": "binary data of the file",
+"ID чата создания темы": "Thread creation chat ID",
+"ПолучитьСписокТоваров": "GetProductList",
+"ДобавитьТоварВПодборку": "AddProductToSelection",
+"Соответствие Из Строка": "Correspondence From String",
+"ДропБокс_ЗагрузитьФайл": "Dropbox_UploadFile",
+"ЗагрузитьВидеоНаСервер": "UploadVideoToServer",
+"ID рекламного кабинета": "Advertising account ID",
+"Сделать файл публичным": "Make file public",
+"Соответствие из Строка": "Map from String",
+"ВК_СоздатьСсылкуТокена": "VK_CreateTokenLink",
+"ПолучитьМассивПодборок": "GetSelectionArray",
+"Создать составной пост": "Create composite post",
+"Путь к папке или файлу": "Path to folder or file",
+"Создает твит с опросом": "Creates a tweet with a poll",
+"Вайбер_ОтправитьСсылку": "Viber_SendLink",
+"СоответствиеПараметров": "ParameterMap",
+"Строка, ДвоичныеДанные": "String, BinaryData",
+"ВыполнитьЗапросБезТела": "ExecuteRequestWithoutBody",
+"Массив описаний блоков": "Array of block descriptions",
+"Дневной лимит в рублях": "Daily limit in rubles",
+"Новое описание события": "New event description",
+"Сделать файл приватным": "Make file private",
+"Загружает файл на диск": "Uploads a file to the drive",
+"Получить пользователей": "Get users",
+"СоздатьПодборкуТоваров": "CreateProductCollection",
+"Отправить внешний файл": "Send external file",
+"Новое имя главной темы": "New main thread name",
+"Загрузить\/Удалить файл": "Upload\/Delete file",
+"УдалитьТоварИзПодборки": "RemoveProductFromSelection",
+"НаименованиеИзмененное": "EditedName",
+"ИзменитьСвойствоТовара": "EditProductProperty",
+"Вернуть дочерние блоки": "Return child blocks",
+"Массив из Произвольный": "Array of Arbitrary",
+"Сообщение из автотеста": "Message from autotest",
+"Удаляет подборку по ID": "Deletes the selection by ID",
+"Дата окончания периода": "End date of the period",
+"Описание   : rich_text": "Description : rich_text",
+"Возвращаемое значение:": "Return value:",
+"Загрузить\/Удалить Файл": "Upload\/Delete file",
+"Изменить свойства базы": "Edit database properties",
+"Установить цель канала": "Set channel purpose",
+"и почитать комментарии": "and read comments",
+"Установить тему канала": "Set channel topic",
+"Массив файлов картинок": "Image files array",
+"Получить токен по коду": "Get token by code",
+"Получает список файлов": "Gets the list of files",
+"ID изменяемой страницы": "ID of the page being modified",
+"Получает событие по ID": "Gets an event by ID",
+"ID календаря приемника": "ID of the target calendar",
+"Получить список файлов": "Get list of files",
+"Создать\/Удалить записи": "Create\/Delete records",
+"СтандартныеЗависимости": "StandardDependencies",
+"Массив из Строка,Число": "Array of String,Number",
+"ПолучитьСписокПодборок": "GetSelectionList",
+"Создать текстовый твит": "Create text tweet",
+"ID календаря источника": "ID of the source calendar",
+"Географическая долгота": "Geographic longitude",
+"Команда CLI: gcalendar": "CLI Command: gcalendar",
+"Открыть\/Закрыть диалог": "Open\/Close dialog",
+"ID файла для скачивания": "File ID for downloading",
+"ВК_СоздатьСоставнойПост": "VK_CreateCompositePost",
+"Получить список товаров": "Get product list",
+"СоздатьПроизвольныйТвит": "CreateCustomTweet",
+"УникальныйИдентификатор": "UniqueIdentifier",
+"ПолучитьСписокКаталогов": "GetDirectoriesList",
+"Путь к объекту удаления": "Path to the object to delete",
+"Путь к созаваемой папке": "Path to the created folder",
+"Создать страницу в базу": "Create page in database",
+"Пустое описание товара:": "Empty product description:",
+"Телеграм_ОтправитьОпрос": "Telegram_SendPoll",
+"Удаляет календарь по ID": "Deletes a calendar by ID",
+"ГД_ЗагрузитьУдалитьФайл": "GD_UploadDeleteFile",
+"Наименование новой базы": "New base name",
+"Твиттер_СоздатьТвитСГиф": "Twitter_CreateTweetWithGif",
+"Наименование обсуждения": "Discussion name",
+"МассивURLФайловВложений": "ArrayOfAttachmentURLs",
+"Создать\/Удалить событие": "Create\/Delete event",
+"Получить значения ячеек": "Get cell values",
+"Имя файла с расширением": "File name with extension",
+"Идентификатор базы База": "Base identifier Base",
+"Текст первого сообщения": "Text of the first message",
+"СпособКодированияСтроки": "StringEncodingMethod",
+"Какой ваш любимый цвет?": "What's your favorite color?",
+"Получить список записей": "Get list of records",
+"Создать\/Удалить каталог": "Create\/Delete catalog",
+"ЗагрузитьМассивВложений": "Upload attachments array",
+"Получить список каналов": "Get channel list",
+"Новое название подборки": "New selection name",
+"ИсключатьАрхивированные": "ExcludeArchived",
+"ПараметрыЗапросаВСтроку": "RequestParametersToString",
+"Получить список свойств": "Get property list",
+"Создать свойство товара": "Create product property",
+"Телеграм_ОтправитьГифку": "Telegram_SendGIF",
+"Получить\/Обновить токен": "Get\/Update token",
+"Создать канал приватным": "Create channel as private",
+"Удалить свойство товара": "Delete product property",
+"Библиотека: Yandex Disk": "Library: Yandex Disk",
+"Получить историю канала": "Get channel history",
+"АТ_СоздатьУдалитьЗаписи": "AT_CreateDeleteRecords",
+"Лайк\/Репост\/Комментарий": "Like\/Repost\/Comment",
+"ДФ=yyyy-MM-ddTHH:mm:ssZ": "DF=yyyy-MM-ddTHH:mm:ssZ",
+"ИзменитьПодборкуТоваров": "EditProductCollection",
+"ВК_СоздатьТоварПодборку": "VK_CreateProductSelection",
+"Сформировать клавиатуру": "Create keyboard",
+"Новый текст комментария": "New comment text",
+"ОтправитьМестоположение": "SendLocation",
+"Слак_ЗагрузитьУдалитьВФ": "Slack_UploadDeleteExternalFile",
+"Массив из Строка, Число": "Array of string, number",
+"Получить список заказов": "Get order list",
+"Новая картинка подборки": "New selection image",
+"Получить подборки по ID": "Get selections by ID",
+"ДФ=yyyy-MM-ddThh:mm:ssZ": "ISO8601Datetime",
+"ЯДиск_ПереместитьОбъект": "YDisk_MoveObject",
+"Получить список событий": "Get list of events",
+"Массив вариантов ответа": "Array of answer options",
+"Массив ID пользователей": "User ID Array",
+"Произвольный, HTTPОтвет": "Arbitrary, HTTP Response",
+"Скопированный файл.jpeg": "CopiedFile.jpeg",
+"Новое значение свойства": "New property value",
+"Массив вариантов опроса": "Poll options array",
+"Вайбер_ОтправитьКонтакт": "Viber_SendContact",
+"Телеграм_ОтправитьАудио": "Telegram_SendAudio",
+"Телеграм_ОтправитьВидео": "Telegram_SendVideo",
+"Действия с обсуждениями": "Actions with discussions",
+"Вайбер_ОтправитьЛокацию": "Viber_SendLocation",
+"ДропБокс_СоздатьКаталог": "Dropbox_CreateFolder",
+"для дальнейших действий": "for further actions",
+"Получить список областей": "Get region list",
+"Набор тестов для YAxUnit": "Test suite for YAxUnit",
+"Изменяет название канала": "Changes the name of the channel",
+"Ноушн_СоздатьУдалитьБлок": "Notion_CreateDeleteBlock",
+"Получить информацию бота": "Get bot information",
+"Получить данные аккаунта": "Get account data",
+"Изменить свойство товара": "Edit product property",
+"Создать\/Изменить таблицу": "Create\/Edit table",
+"Отправить местоположение": "Send location",
+"ПолучитьСтатистикуПостов": "GetPostStatistics",
+"Строка, Массив из Строка": "String, Array of Strings",
+"ОписаниеПримитивногоПоля": "PrimitiveFieldDescription",
+"СоздатьРекламнуюКампанию": "CreateAdvertisingCampaign",
+"Создает пустой календарь": "Creates an empty calendar",
+"ДропБокс_ПолучитьАккаунт": "Dropbox_GetAccount",
+"Файл источник обновления": "File source for update",
+"Вайбер_ОтправитьКартинку": "Viber_SendImage",
+"Получить список подборок": "Get selection list",
+"ID целевого пользователя": "Target user ID",
+"Создать подборку товаров": "Create product selection",
+"Путь к целевому каталогу": "Path to the target directory",
+"Библиотека: Google Drive": "Library: Google Drive",
+"Новый тестовый заголовок": "NewTestTitle",
+"Загрузить фото на сервер": "Upload photo to server",
+"ГК_ПолучитьСписокСобытий": "GC_GetEventList",
+"Создать товар и подборку": "Create product and selection",
+"ГК_СоздатьУдалитьСобытие": "GC_CreateDeleteEvent",
+"ПолучитьЗаголовкиЗапроса": "GetRequestHeaders",
+"Наименование нового поля": "New field name",
+"Ссылка (URL) под записью": "Link (URL) under the post",
+"ПолучитьСписокРазрешений": "GetPermissionsList",
+"СформироватьБлокКартинку": "GenerateImageBlock",
+"ID пользователя адресата": "Recipient user ID",
+"Создает новое обсуждение": "Creates a new discussion",
+"СохранитьКартинкуВАльбом": "SaveImageToAlbum",
+"Массив заголовков кнопок": "Array of button titles",
+"ВК_ПолучитьСписокСвойств": "VK_GetPropertyList",
+"Путь к объекту оригинала": "Path to the original object",
+"Новый каталог размещения": "New parent directory",
+"D:\\GD\\Мой диск\\data.json": "D:\\GD\\My Drive\\data.json",
+"Создает каталог на диске": "Creates a directory on the disk",
+"Массив товаров или товар": "Array of products or product",
+"Новое описание календаря": "New calendar description",
+"ВК_ПолучитьСписокЗаказов": "VK_GetOrderList",
+"Признак рекламного поста": "Sign of an advertising post",
+"Данные файл для загрузки": "Data file for upload",
+"Строка, Массив Из Строка": "String, Array of Strings",
+"ВК_ПолучитьСписокТоваров": "VK_GetProductList",
+"Получить число участников": "Get participant count",
+"ВыполнитьЗапросМультипарт": "ExecuteMultipartRequest",
+"Отменить публикацию папки": "Unpublish folder",
+"ЯДиск_СоздатьКопиюОбъекта": "YDisk_CreateObjectCopy",
+"ПолучитьСписокФайловПапки": "GetListOfFolderFiles",
+"Получить публичный объект": "Get public object",
+"Копирует файл или каталог": "Copies file or directory",
+"Заголовок файла для Slack": "File title for Slack",
+"Создает твит без вложений": "Creates a tweet without attachments",
+"ПолучитьСсылкуАвторизации": "GetAuthorizationLink",
+"Загрузить видео на сервер": "Upload video to server",
+"Идентификатор комментария": "Comment identifier",
+"Получить список каталогов": "Get list of directories",
+"Отменить публикацию файла": "Unpublish file",
+"ID пользователей(я) Viber": "Viber User(s) ID",
+"Изменить подборку товаров": "Edit product selection",
+"Ноушн_СоздатьИзменитьБазу": "Notion_CreateEditDatabase",
+"Номер рекламной категории": "Advertising category number",
+"См. ПолучитьОписаниеФайла": "See GetFileDescription",
+"Добавить товар в подборку": "Add product to selection",
+"Удалить товар из подборки": "Remove product from selection",
+"Добавить\/Удалить картинку": "Add\/Delete image",
+"Библиотека: Google Sheets": "Library: Google Sheets",
+"ВК_ПолучитьСписокПодборок": "VK_GetSelectionList",
+"Создать произвольный твит": "Create custom tweet",
+"См.ПолучитьОписаниеТовара": "See GetProductDescription",
+"Устанавливает тему канала": "Sets the channel topic",
+"Изменить имя главной темы": "Change main topic name",
+"URL для установки Webhook": "URL for setting up Webhook",
+"Телеграм_ОтправитьКонтакт": "Telegram_SendContact",
+"Некорректный вид отправки": "Incorrect sending view",
+"Твиттер_СоздатьТвитСВидео": "Twitter_CreateTweetWithVideo",
+"Создает новую базу данных": "Creates a new database",
+"Новый альбом из автотеста": "NewAlbumFromAutoTest",
+"Преобразовать код в токен": "Convert code to token",
+"Слак_ОткрытьЗакрытьДиалог": "Slack_OpenCloseDialog",
+"Удаляет комментарий по ID": "Deletes comment by ID",
+"Идентификатор базы данных": "Database identifier",
+"Путь назначения для копии": "Destination path for the copy",
+"Изменить календарь списка": "Edit list calendar",
+"Слак_ПолучитьСписокФайлов": "Slack_GetFileList",
+"Наименование нового листа": "NewSheetName",
+"Статус     : Соответствие": "Status      : Map",
+"Архивирует активный канал": "Archives an active channel",
+"Слак_ЗагрузитьУдалитьФайл": "Slack_UploadDeleteFile",
+"OPI_ПолучениеДанныхТестов": "OPI_GetTestData",
+"Тестовый товар измененный": "EditedTestProduct",
+"Заполнить\/Очистить ячейки": "Fill\/Clear cells",
+"Установить значения ячеек": "SetCellValues",
+"Создать\/Удалить календарь": "Create\/Delete calendar",
+"Получить календарь списка": "Get list calendar",
+"ДропБокс_РаботаСДоступами": "Dropbox_AccessManagement",
+"Создает пост с картинками": "Creates a post with images",
+"Добавляет товар в подборку": "Adds a product to the selection",
+"Получает схему таблиц базы": "Gets the schema of base tables",
+"Слак_ПолучитьСписокКаналов": "Slack_GetChannelList",
+"Телеграм_УстановитьWebhook": "Telegram_SetWebhook",
+"Массив соответствий файлов": "Array of file mappings",
+"Создать\/Архивировать канал": "Create\/Archive channel",
+"Получить статистику постов": "Get post statistics",
+"Получить список календарей": "Get list of calendars",
+"Получить информацию о базе": "Get database info",
+"Получить категории товаров": "Get product categories",
+"Ноушн_СоздатьСтраницуВБазу": "Notion_CreatePageInDatabase",
+"Сформировать блок картинку": "Generate image block",
+"Изменить свойства страницы": "Edit page properties",
+"ГТ_ЗаполнитьОчиститьЯчейки": "GT_FillClearCells",
+"Телеграм_ОтправитьКартинку": "Telegram_SendImage",
+"Получает комментарий по ID": "Gets comment by ID",
+"ID оригинального сообщения": "Original message ID",
+"разрешение на методы Drive": "Drive methods permission",
+"ГД_ПолучитьСписокКаталогов": "GD_GetCatalogList",
+"Число знаков после запятой": "Number of decimal places",
+"Получить код подтверждения": "Get confirmation code",
+"ПолучитьИмяВременногоФайла": "GetTempFileName",
+"Получить информацию канала": "Get channel info",
+"Структура Из КлючИЗначение": "Structure of Key-Value",
+"Наименование новой таблицы": "New table name",
+"Путь сохранения на Dropbox": "Save path on Dropbox",
+"Телеграм_ОтправитьДокумент": "Telegram_SendDocument",
+"Скрыть главную тему форума": "Hide main forum thread",
+"ЯДиск_ПолучитьСписокФайлов": "YDisk_GetFileList",
+"ГК_СоздатьУдалитьКалендарь": "GC_CreateDeleteCalendar",
+"Мне больше нравится желтый": "I like yellow more",
+"Получить информацию о боте": "Get bot information",
+"ЯДиск_ЗагрузитьУдалитьФайл": "YDisk_UploadDeleteFile",
+"Очищает значение в ячейках": "Clears the value in cells",
+"Создать рекламную кампанию": "Create advertising campaign",
+"ДропБокс_СоздатьУдалитьТег": "Dropbox_CreateDeleteTag",
+"Описание тестового события": "TestEventDescription",
+"Создать ссылку-приглашение": "Create invitation link",
+"Телеграм_ПереслатьСообщение": "Telegram_ForwardMessage",
+"Временная отметка сообщения": "Message timestamp",
+"Слак_ПолучитьСписокОбластей": "Slack_GetRegionList",
+"ПолучитьСписокПользователей": "GetUserList",
+"ВК_СохранитьУдалитьКартинку": "VK_SaveDeleteImage",
+"Загрузить по URL и получить": "Upload by URL and get",
+"ВК_ПолучитьСтатистикуПостов": "VK_GetPostStatistics",
+"Создет новое поле в таблице": "Creates a new field in the table",
+"Путь к публикуемому объекту": "Path to the object to be published",
+"ID целевой стены или группы": "ID of the target wall or group",
+"Создать\/Удалить тему форума": "Create\/Delete forum topic",
+"Ноушн_ПолучитьПользователей": "Notion_GetUsers",
+"URL для кнопки под историей": "URL for button under the story",
+"Массив соответствий товаров": "Array of product matches",
+"Тип отправляемого сообщения": "TypeOfSentMessage",
+"ВК_СоздатьТоварСоСвойствами": "VK_CreateProductWithProperties",
+"Твиттер_СоздатьТвитСОпросом": "Twitter_CreateTweetWithPoll",
+"Сохранить картинку в альбом": "Save image to album",
+"ВК_СоздатьРекламнуюКампанию": "VK_CreateAdCampaign",
+"ID альбома, если необходимо": "Album ID, if necessary",
+"ВК_ПолучитьКатегорииТоваров": "VK_GetProductCategories",
+"ГК_ПолучитьСписокКалендарей": "GC_GetCalendarList",
+"Ключ > ID, Значение > Emoji": "Key > ID, Value > Emoji",
+"Создать товар со свойствами": "Create product with properties",
+"Отправить\/Удалить сообщение": "Send\/Delete message",
+"Путь к файлу для скачивания": "Path to the file for downloading",
+"Получает информацию о файле": "Gets information about the file",
+"СформироватьОписаниеТаблицы": "GenerateTableDescription",
+"Получить ссылку авторизации": "Get authorization link",
+"Создает историю из картинки": "Creates a story from an image",
+"ПолучитьСписокВнешнихФайлов": "GetExternalFileList",
+"URL для перехода в браузере": "URL for browser transition",
+"Отменить публикацию объекта": "Unpublish object",
+"Библиотека: Google Calendar": "Library: Google Calendar",
+"ID стены расположения поста": "ID of the wall where the post is located",
+"Массив каналов для отправки": "Array of channels for sending",
+"Очистить основной календарь": "Clear primary calendar",
+"Изменить наименование книги": "ChangeBookName",
+"разрешение на методы Sheets": "Sheets methods permission",
+"Добавить календарь в список": "Add calendar to list",
+"Удалить календарь из списка": "Remove calendar from list",
+"Массив соответствий событий": "Array of event mappings",
+"Удалить картинку из альбома": "Deletes an image from the album",
+"Отправить\/Удалить эфемерное": "Send\/Delete ephemeral",
+"Телеграм_ПолучитьОбновления": "Telegram_GetUpdates",
+"Код со страницы авторизации": "Code from the authorization page",
+"Получить информацию о диске": "Get disk information",
+"ДропБокс_ЗагрузитьФайлПоURL": "Dropbox_UploadFileByURL",
+"HEX цвет кнопок с # в начале": "HEX color of buttons with # at the beginning",
+"C:\\GDrive\\Мой диск\\data.json": "C:\\GDrive\\My Drive\\data.json",
+"Массив сформированных кнопок": "Array of formed buttons",
+"Восстановить объект к версии": "Restore object to version",
+"Создать рекламное объявление": "Create advertising post",
+"УдалитьВариантСвойстваТовара": "DeleteProductPropertyVariant",
+"ГВ_ПолучитьСсылкуАвторизации": "GV_GetAuthorizationLink",
+"Скрыть\/Показать главную тему": "Hide\/Show main topic",
+"JSON массива описаний блоков": "JSON array of block descriptions",
+"ПолучитьИнформациюОбАккаунте": "GetAccountInformation",
+"Получить список файлов папки": "Get list of folder files",
+"Получает описание поля с URL": "Gets the description of a URL field",
+"Библиотека: Google Workspace": "Library: Google Workspace",
+"Эти токены обновлять не надо": "These tokens do not need to be updated",
+"Массив соответствий подборок": "Array of selection matches",
+"Получить данные пользователя": "Get user data",
+"Показать главную тему форума": "Show main forum thread",
+"Обсуждаем: какой цвет лучше?": "Discussing: Which color is better?",
+"ПолучитьСтандартныеПараметры": "GetStandardParameters",
+"ГД_СоздатьУдалитьКомментарий": "GD_CreateDeleteComment",
+"Создает новую таблицу в базе": "Creates a new table in the base",
+"Получить информацию о канале": "Get channel information",
+"Получить ссылку на сообщение": "Get message link",
+"URL картинки иконки страницы": "URL of the page icon image",
+"Добавляет новый внешний файл": "Adds a new external file",
+"Получить список внеш. файлов": "Get external file list",
+"ПолучитьСоответствиеКартинки": "GetImageCorrespondence",
+"Загрузить\/Удалить внеш. файл": "Upload\/Delete external file",
+"Твиттер_СоздатьТекстовыйТвит": "Twitter_CreateTextTweet",
+"Отправить группу медиафайлов": "Send media group",
+"Слак_ПолучитьИнформациюОБоте": "Slack_GetBotInfo",
+"JSON файлов или путь к .json": "File JSON or path to .json",
+"Получить список комментариев": "Get list of comments",
+"Добавляет новый лист в книгу": "Adds a new sheet to the book",
+"Скрывает главную тему форума": "Hides the main forum thread",
+"Время ожидания новых событий": "Waiting time for new events",
+"Получает информацию о канале": "Gets information about the channel",
+"JSON описание товара или путь": "JSON description of the product or path",
+"разрешение на методы Calendar": "Calendar methods permission",
+"Удаляет ранее созданный товар": "Deletes a previously created product",
+"Слак_СоздатьАрхивироватьКанал": "Slack_CreateArchiveChannel",
+"Закрепить\/Открепить сообщение": "Pin\/Unpin message",
+"URL картинки обложки страницы": "URL of the page cover image",
+"Альтернативный текст картинки": "Alternate text of the image",
+"Получить отложенные сообщения": "Get scheduled messages",
+"Отправить текстовое сообщение": "Send text message",
+"Получить статистику по постам": "Get post statistics",
+"Получает список доступных баз": "Gets the list of available bases",
+"СоздатьЗаголовокАвторизацииV1": "CreateAuthorizationHeaderV1",
+"Телеграм_ОтправитьМедиагруппу": "Telegram_SendMediaGroup",
+"app_id из настроек приложения": "app_id from application settings",
+"Закрывает существующий диалог": "Closes an existing dialog",
+"Соответствие Из КлючИЗначение": "Key-Value Pair",
+"ID подборки, если нужен отбор": "Selection ID, if filtering is needed",
+"Массив соответствий каталогов": "Array of directory mappings",
+"Ошибка в данных описания поля": "Error in field description data",
+"ПолучитьТелоКакДвоичныеДанные": "GetBodyAsBinaryData",
+"Получить ссылку на скачивание": "Get download link",
+"ИзменитьВариантСвойстваТовара": "EditProductPropertyVariant",
+"Изменяет существующее событие": "Edits an existing event",
+"Соответствие из КлючИЗначение": "Map from KeyAndValue",
+"ПолучитьСписокРабочихОбластей": "GetWorkspaceList",
+"Получить данные о базе данных": "Get database information",
+"Удаляет внешний файл из Slack": "Deletes an external file from Slack",
+"Получить онлайн пользователей": "Get online users",
+"Отправить эфемерное сообщение": "Send ephemeral message",
+"ДобавитьВариантСвойстваТовара": "AddProductPropertyVariant",
+"ID блока или сам блок образец": "Block ID or block sample itself",
+"Получить список пользователей": "Get user list",
+"Создает твит с видеовложением": "Creates a tweet with a video attachment",
+"Отбор по ID каталога родителя": "Filter by parent directory ID",
+"Ноушн_ПолучитьИнформациюОБазе": "Notion_GetDatabaseInfo",
+"Твиттер_СоздатьТвитСКартинкой": "Twitter_CreateTweetWithImage",
+"Добавить пользователя к файлу": "Add user to file",
+"JSON описания или путь к .json": "JSON description or path to .json",
+"Слак_ОтправитьУдалитьЭфемерное": "Slack_SendDeleteEphemeral",
+"Получить информацию об объекте": "Get object information",
+"Изменяет ранее созданный товар": "Edits a previously created product",
+"Получить список версий объекта": "Get list of object versions",
+"Получить список опубликованных": "Get published list",
+"Создать\/Удалить составной пост": "Create\/Delete composite post",
+"Размер файла в случае отправке": "File size in case of sending",
+"ПолучитьСтрокуИзДвоичныхДанных": "GetStringFromBinaryData",
+"Добавить пользователей к папке": "Add users to folder",
+"Получить описание файла !NOCLI": "Get file description !NOCLI",
+"ЯДиск_ПолучитьИнформациюОДиске": "YDisk_GetDiskInfo",
+"Удаляет ранее созданный альбом": "Deletes a previously created album",
+"ID события календаря источника": "ID of the source calendar event",
+"Идентификатор удаляемого листа": "IdentifierOfSheetToDelete",
+"ПолучитьДвоичныеДанныеИзСтроки": "GetBinaryDataFromString",
+"Идентификатор записи в таблице": "Record identifier in the table",
+"Слак_ОтправитьУдалитьСообщение": "Slack_SendDeleteMessage",
+"Выгнать пользователя из канала": "Kick user from channel",
+"УправлениеСостояниемТемыФорума": "ManageForumThreadState",
+"СохранитьПубличныйОбъектНаДиск": "SavePublicObjectToDisk",
+"Нельзя замешивать разные типы!": "Different types cannot be mixed!",
+"ДропБокс_ПолучитьОбновитьТокен": "Dropbox_GetUpdateToken",
+"Получить информацию о странице": "Get page info",
+"ПолучитьСписокКатегорийТоваров": "GetProductCategoryList",
+"Структура, Массив из Структура": "Structure, Array of Structures",
+"Путь или набору путей к файлам": "Path or set of paths to the files",
+"Получить список внешних файлов": "Get list of external files",
+"Целевой путь создания каталога": "Target path for creating the directory",
+"Получить ссылку для скачивания": "Get download link",
+"Ноушн_ИзменитьСвойстваСтраницы": "Notion_EditPageProperties",
+"Удаляет файл или каталог по ID": "Deletes file or directory by ID",
+"Создать ссылку получения токена": "Create token retrieval link",
+"Удалить вариант свойства товара": "Delete product property variant",
+"Создает твит с вложением-гифкой": "Creates a tweet with a gif attachment",
+"Двоичные данные или путь к фото": "Binary data or path to photo",
+"Путь назначение для перемещения": "Destination path for moving",
+"Получает информацию об аккаунте": "Gets account information",
+"Не удалось записать файл лога!:": "Failed to write log file!:",
+"Телеграм_ИзменитьИмяГлавнойТемы": "Telegram_ChangeMainTopicName",
+"Получить список иконок-аватаров": "Get avatar icon list",
+"Обновляет двоичные данные файла": "Updates file binary data",
+"Получает список каталогов диска": "Gets the list of drive directories",
+"ЯДиск_ДействияПубличныхОбъектов": "YDisk_PublicObjectActions",
+"Действия с публичными объектами": "Actions with public objects",
+"Получить статус загрузки по URL": "Get upload status by URL",
+"Получает значения ячеек таблицы": "Gets cell values of the table",
+"Получить список аватаров форума": "Get forum avatars list",
+"Создает пустую подборку товаров": "Creates an empty product selection",
+"Загружает файл на сервера Slack": "Uploads a file to Slack servers",
+"только конкретному пользователю": "only to a specific user",
+"ПолучитьСписокСобытийРекурсивно": "GetEventsListRecursively",
+"Удаляет текущего бота из канала": "Removes the current bot from the channel",
+"ID чата оригинального сообщения": "Chat ID of the original message",
+"Массив из Строка,ДвоичныеДанные": "Array from String, BinaryData",
+"Copyright (c) 2019, ООО 1С-Софт": "Copyright (c) 2019, LLC 1C-Soft",
+"Отправка в канал или в чат бота": "Sending to channel or bot chat",
+"См.ПолучитьСтандартныеПараметры": "See GetStandardParameters",
+"Целевой путь для нового объекта": "Target path for the new object",
+"Получить ссылку для авторизации": "Get authorization link",
+"Получить информацию об аккаунте": "Get account information",
+"Добавляет текущего бота в канал": "Adds the current bot to the channel",
+"Создает пустой каталог на диске": "Creates an empty directory on the drive",
+"Загружает файл на облачный диск": "Uploads a file to the cloud drive",
+"Телеграм_ПолучитьИнформациюБота": "Telegram_GetBotInfo",
+"Слак_ПолучитьОтложенныеСообщения": "Slack_GetScheduledMessages",
+"ЯДиск_ПолучитьСсылкуНаСкачивание": "YDisk_GetDownloadLink",
+"ПриостановитьРекламноеОбъявление": "PauseAdvertisingAd",
+"См. ПолучитьСписокИконокАватаров": "See GetAvatarIconList",
+"Ноушн_ПолучитьДанныеПользователя": "Notion_GetUserData",
+"Слак_ПолучитьСписокПользователей": "Slack_GetUserList",
+"Создает страницу в базе-родителе": "Creates a page in the parent database",
+"Получает список подборок товаров": "Gets the list of product selections",
+"Закрывает или удаляет обсуждение": "Close or delete discussion",
+"Удаляет объект по заданному пути": "Deletes an object at the specified path",
+"Количество возвращаемых объектов": "Number of returned objects",
+"Получить описание события !NOCLI": "Get event description !NOCLI",
+"Идентификатор файла или каталога": "Identifier of the file or folder",
+"ВыполнитьЗапросСДвоичнымиДанными": "ExecuteRequestWithBinaryData",
+"Отправляет видео в чат или канал": "Sends a video to a chat or channel",
+"Массив ячеек вида А1 для очистки": "Array of cells like A1 to be cleared",
+"Получить список рабочих областей": "Get workspace list",
+"Путь к удаляемой папке или файлу": "Path to the folder or file to be deleted",
+"Удаляет объект с облачного диска": "Deletes an object from the cloud drive",
+"ПолучитьСписокОтветовНаСообщение": "GetMessageReplyList",
+"Добавить вариант свойства товара": "Add product property variant",
+"Вайбер_ПолучитьИнформациюОКанале": "Viber_GetChannelInfo",
+"Получает описание поля типа дата": "Gets the description of a date field",
+"См.ДобавитьВариантСвойстваТовара": "See AddPropertyVariant",
+"Телеграм_ПолучитьЧислоУчастников": "Telegram_GetMemberCount",
+"Изменяет имя главной темы форума": "Edits the name of the main forum thread",
+"ПолучитьСписокОбъектовРекурсивно": "GetObjectsListRecursively",
+"Телеграм_ОтправитьМестоположение": "Telegram_SendLocation",
+"Обновляет токен по Refresh token": "Updates token by Refresh token",
+"Отправляет гифку в чат или канал": "Sends a GIF to a chat or channel",
+"JSON клавиатуры или путь к .json": "Keyboard JSON or path to .json",
+"Изменить вариант свойства товара": "Edit product property variant",
+"ПолучитьСписокРекламныхКатегорий": "GetAdvertisingCategoryList",
+"Пригласить пользователей в канал": "Invite users to channel",
+"Получить описание товара. !NOCLI": "Get product description. !NOCLI",
+"Изменить имя главной темы форума": "Edit main forum thread name",
+"Ошибка в данных коллекции таблиц": "Error in table collection data",
+"Идентификатор изменяемого товара": "Identifier of the product being edited",
+"Отправка в канал или чат с ботом": "Sending to channel or bot chat",
+"Загрузить массив вложений !NOCLI": "Upload attachments array !NOCLI",
+"Массив из Строка, ДвоичныеДанные": "Array from String, BinaryData",
+"ПолучитьСписокОтложенныхСообщений": "GetDelayedMessageList",
+"Создает опрос с вариантами ответа": "Creates a poll with answer options",
+"Ноушн_ПолучитьИнформациюОСтранице": "Notion_GetPageInfo",
+"Получает информацию о книге по ID": "Gets information about the book by ID",
+"ВыполнитьЗапросМультипартРелэйтед": "ExecuteMultipartRelatedRequest",
+"Получить список категорий товаров": "Get a list of product categories",
+"сериализованный JSON ответа от VK": "Serialized JSON response from VK",
+"Закрепляет сообщение в шапке чата": "Pins a message in the chat header",
+"JSON авторизации или путь к .json": "Authorization JSON or path to .json",
+"Путь помещения загруженного файла": "Path to place the downloaded file",
+"v1.1. Поэтому что-то нужно делать": "v1.1. Therefore, something needs to be done",
+"Запрос, приходящий на http-сервис": "Request coming to the http service",
+"Открепляет сообщение в шапке чата": "Unpins a message in the chat header",
+"Ссылка на страницу сайта магазина": "Link to the store's website page",
+"Вайбер_ПолучитьДанныеПользователя": "Viber_GetUserData",
+"Предпочтительное хранение токенов": "Preferred token storage",
+"ПолучитьСписокПользователейКанала": "GetChannelUserList",
+"Скачивает файл по указанному пути": "Downloads a file at the specified path",
+"Телеграм_СоздатьУдалитьТемуФорума": "Telegram_CreateDeleteForumTopic",
+"Телеграм_СоздатьСсылкуПриглашение": "Telegram_CreateInvitationLink",
+"Твиттер_ПолучитьСсылкуАвторизации": "Twitter_GetAuthorizationLink",
+"Получает список доступных каналов": "Gets a list of available channels",
+"Соответствие изменяемых параметров": "Matching of editable parameters",
+"Скачивает файл с серверов Telegram": "Download file from Telegram servers",
+"См. ПолучитьСписокКатегорийТоваров": "See GetProductCategoryList",
+"Расширение файла в случае отправки": "File extension in case of sending",
+"Массив данных статистики по постам": "Array of post statistics data",
+"что обсуловлено наличием сразу 2-х": "which is due to the presence of two at once",
+"Устанавливает значения ячеек листа": "Sets sheet cell values",
+"Создает твит с картинкой вложением": "Creates a tweet with an image attachment",
+"Идентификатор объекта для удаления": "Identifier of the object to delete",
+"querry из Telegram.WebApp.initData": "Query from Telegram.WebApp.initData",
+"Сохранить публичный объект на диск": "Save public object to disk",
+"Получает описание поля типа булево": "Gets the description of a boolean field",
+"ID целевого чата или IDЧата*IDТемы": "Target chat ID or ChatID*TopicID",
+"ПолучитьСписокКалендарейРекурсивно": "GetCalendarsListRecursively",
+"Путь для сохранение файла на Диске": "Path for saving the file to disk",
+"Временная отметка или ID сообщения": "Timestamp or message ID",
+"Закрывает тему для новых сообщений": "Closes the thread for new messages",
+"ОбработатьДанные Telegram Mini App": "Process Telegram Mini App data",
+"Получает данные пользователя по ID": "Gets user data by ID",
+"Вайбер_ПолучитьОнлайнПользователей": "Viber_GetOnlineUsers",
+"Идентификатор обновляемого объекта": "Identifier of the object to update",
+"Сформировать ссылку получения кода": "Generate code retrieval link",
+"Телеграм_СкрытьПоказатьГлавнуюТему": "Telegram_HideShowMainTopic",
+"Вайбер_ОтправитьТекстовоеСообщение": "Viber_SendTextMessage",
+"Приостановить рекламное объявление": "Pause advertising post",
+"ЯДиск_ПолучитьСписокОпубликованных": "YDisk_GetPublishedList",
+"Изменяет свойства подборки товаров": "Edits the properties of a product selection",
+"Текст лицензии доступен по ссылке:": "License text available at:",
+"Получает список товаров сообщества": "Gets the community's product list",
+"Получить список рекламных категорий": "Get a list of advertising categories",
+"Идентификатор рабочего пространства": "Workspace identifier",
+"Получает информацию событиях канала": "Gets information about channel events",
+"Создает сокращенный URL из обычного": "Creates a shortened URL from a regular one",
+"Строка,Число,Массив из Строка,Число": "String,Number,Array of String,Number",
+"Изменяет свойства существующей базы": "Edits properties of an existing database",
+"Получает основную информацию о боте": "Gets basic information about the bot",
+"Получает информацию о текущем диске": "Gets information about the current disk",
+"Отправляет документ в чат или канал": "Sends a document to a chat or channel",
+"ПолучитьБуферДвоичныхДанныхИзСтроки": "GetBinaryDataBufferFromString",
+"Наименование создаваемого календаря": "Name of the created calendar",
+"Открывает ранее закрытое обсуждение": "Opens a previously closed discussion",
+"Получает массив календарей аккаунта": "Gets an array of account calendars",
+"Типы: audio, document, photo, video": "Types: audio, document, photo, video",
+"ID родительского блока или страницы": "Parent block or page ID",
+"ID темы. Главная, если не заполнено": "Thread ID. Main if not filled",
+"Отправляет картинку в чат или канал": "Sends an image to a chat or channel",
+"Получает информацию о внешнем файле": "Gets information about the external file",
+"Банит пользователя в выбранном чате": "Bans a user in the selected chat",
+"Строка,Соответствие Из КлючИЗначение": "String, Map From KeyAndValue",
+"Телеграм_ЗакрепитьОткрепитьСообщение": "Telegram_PinUnpinMessage",
+"Результат чтения JSON ответа сервера": "Result of reading the JSON response from the server",
+"Устанавливает цель (описание) канала": "Sets the channel purpose (description)",
+"Путь к опубликованному ранее объекту": "Path to the previously published object",
+"Перемещает объект по выбранному пути": "Moves an object to the selected path",
+"Отправляет сообщение в выбранный час": "Sends a message at a selected hour",
+"Отправляет аудиофайл в чат или канал": "Sends an audio file to a chat or channel",
+"Получает ссылку для скачивания файла": "Gets a download link for the file",
+"Отправляет опрос с вариантами ответа": "Sends a poll with answer options",
+"Получает информацию о странице по ID": "Gets information about the page by ID",
+"Возвращает список заказов сообщества": "Returns the community's order list",
+"Получить список пользователей канала": "Get channel user list",
+"Получить список ответов на сообщение": "Get list of message replies",
+"Путь к оригинальному файлу или папке": "Path to the original file or folder",
+"сериализованный JSON ответа от Viber": "serialized JSON response from Viber",
+"сериализованный JSON ответа от Slack": "Serialized JSON response from Slack",
+"Главный в группе, если есть в группе": "Main in the group, if exists in the group",
+"Получает общее число участников чата": "Gets the total number of chat participants",
+"Получить список отложенных сообщений": "Get list of delayed messages",
+"Телеграм_ОтправитьТекстовоеСообщение": "Telegram_SendTextMessage",
+"Удаляет существующее свойство товара": "Deletes the existing product property",
+"Получает статистику в разрезе постов": "Gets statistics in terms of posts",
+"Создает альбом для хранения картинок": "Creates an album to store images",
+"Удаляет комментарий к записи таблицы": "Deletes a comment for a table record",
+"Получает информацию о календаре по ID": "Gets calendar information by ID",
+"Получает статус загрузки файла по URL": "Gets the upload status of the file by URL",
+"сериализованный JSON ответа от Yandex": "serialized JSON response from Yandex",
+"СформироватьКлавиатуруИзМассиваКнопок": "CreateKeyboardFromArrayButton",
+"Телеграм_ПолучитьСписокАватаровФорума": "Telegram_GetForumAvatarsList",
+"Пример структуры\/соответствия свойств": "Example structure\/property map",
+"сериализованный JSON ответа от Notion": "Serialized JSON response from Notion",
+"Массив соответствий данных календарей": "Array of calendar data mappings",
+"Копирует лист из одной книги в другую": "Copies a sheet from one book to another",
+"Получает описание поля числового типа": "Gets the description of a numeric field",
+"Удаляет сообщение канала по timestamp": "Deletes a channel message by timestamp",
+"ID свойства, куда добавляется вариант": "Property ID where the variant is added",
+"ID версии (ревизии) для востановления": "ID of the version (revision) for restoration",
+"Перемещает событие в другой календарь": "Moves an event to another calendar",
+"сериализованный JSON ответа от Google": "serialized JSON response from Google",
+"Получает описание поля файлового типа": "Gets the description of a file field",
+"Изменяет существующее свойство товара": "Edits the existing product property",
+"Для отображения скидки\/изменения цены": "For displaying discount\/changing price",
+"ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект": "YDisk_UploadByUrlAndGetObject",
+"Сохраняет картинку в альбом сообщества": "Saves an image to the community album",
+"Получает список всех событий календаря": "Gets the list of all calendar events",
+"Получить список подборок по массиву ID": "Gets the list of selections by array of IDs",
+"Признак удаления отложенного сообщения": "Indicator of deleting a delayed message",
+"Формирует клавиатуру по массиву кнопок": "Forms a keyboard from an array of buttons",
+"Смещение в списке получаемых сообщений": "Offset in the list of received messages",
+"Создает комментарий к записи в таблице": "Creates a comment for a record in the table",
+"Получить статус асинхронного изменения": "Get asynchronous change status",
+"Получает список тегов выбранных файлов": "Gets the list of tags of the selected files",
+"сериализованный JSON ответа от Dropbox": "serialized JSON response from Dropbox",
+"Сохраняет публичный объект на ваш диск": "Saves the public object to your disk",
+"Получает список файлов бота или канала": "Gets a list of files of the bot or channel",
+"Некорректный статус управления форумом": "Incorrect forum management status",
+"Получает описание поля строкового типа": "Gets the description of a string field",
+"Получает список свойств товаров группы": "Gets the list of properties of group products",
+"Удалить полностью (Истина) или закрыть": "Delete completely (True) or close",
+"сериализованный JSON ответа от Twitter": "serialized JSON response from Twitter",
+"ПолучитьБуферДвоичныхДанныхИзHexСтроки": "GetBinaryDataBufferFromHexString",
+"сериализованный JSON ответа от Airtable": "serialized JSON response from Airtable",
+"ID существующей группы, если необходимо": "ID of the existing group, if needed",
+"Получает список опубликованных объектов": "Gets a list of published objects",
+"ОчиститьСписокЗакрепленныхСообщенийТемы": "ClearThreadPinnedMessagesList",
+"Дата отправки для отложенного сообщения": "Sending date for delayed message",
+"HTTPОтвет, Произвольный, ДвоичныеДанные": "HTTPResponse, Arbitrary, BinaryData",
+"Путь к оригинальному файлу или каталогу": "Path to the original file or directory",
+"сериализованный JSON ответа от Telegram": "Serialized JSON response from Telegram",
+"Изменяет состав существующего сообщения": "Edits the content of an existing message",
+"Перезаписывать файл при конфликте путей": "Overwrite file in case of path conflicts",
+"Получает информацию о файле или каталоге": "Gets information about a file or directory",
+"Создает комментарий к файлу или каталогу": "Creates a comment for a file or directory",
+"Удаляет текстовый тег файла или каталога": "Deletes the text tag of a file or directory",
+"Массив идентификаторов вида photo123_123": "Array of identifiers like photo123_123",
+"Удаляет календарь из списка пользователя": "Removes a calendar from the user's list",
+"Изменяет текст существующего комментария": "Changes the text of an existing comment",
+"Массив вариантов опроса, если необходимо": "Array of poll options, if necessary",
+"Получает список версий (ревизий) объекта": "Gets the list of versions (revisions) of the object",
+"Получает информацию о пользователе по ID": "Gets user information by ID",
+"Изменяет наименование существующей книги": "Changes the name of the existing book",
+"Загружает файл на диск по заданному пути": "Uploads a file to disk at the specified path",
+"Скачивает файл по указанному пути или ID": "Downloads a file by the specified path or ID",
+"Удаляет ранее созданный вариант свойства": "Deletes the previously created product property variant",
+"Добавляет список файлов к полям каталога": "Adds a list of files to the directory fields",
+"Добавляет указанных пользователей в канал": "Adds specified users to the channel",
+"Изменяет свойства существуещего календаря": "Edits properties of an existing calendar",
+"ПолучитьСсылкуСкачиванияПубличногоОбъекта": "GetDownloadLinkForPublicObject",
+"Получает список записей выбранной таблицы": "Gets the list of records of the selected table",
+"Сформировать клавиатуру по массиву кнопок": "Generate keyboard from array of buttons",
+"Удаляет указанного пользователя из канала": "Removes specified user from channel",
+"Получает список всех комментариев объекта": "Gets the list of all comments of the object",
+"Создает комментарий под выбранной записью": "Creates a comment under the selected record",
+"Публикует объект диска в публичный доступ": "Publishes the disk object for public access",
+"Изменяет наименование и|или описание базы": "Changes the name and\/or description of the base",
+"Массив двоичных данных или путей к файлам": "Array of binary data or file paths",
+"Новые или изменяемые свойства базы данных": "New or modified database properties",
+"Сформировать клавиатуру из массива кнопок": "Create a keyboard from an array of buttons",
+"См. СформироватьКлавиатуруПоМассивуКнопок": "See GenerateKeyboardFromArray",
+"действия будут выполняться от лица группы": "actions will be performed on behalf of the group",
+"Возвращает URL для авторизации в браузере": "Returns URL for browser authorization",
+"Создает пустой каталог по выбранному пути": "Creates an empty directory at the selected path",
+"|--------[через 2 ч.]-------------------|": "|--------[after 2 hrs.]-------------------|",
+"См. СформироватьКлавиатуруИзМассиваКнопок": "See CreateKeyboardFromArrayButton",
+"Получает описание поля с номером телефона": "Gets the description of a phone number field",
+"Признак исключения архивированных каналов": "Indicator of excluding archived channels",
+"Отменяет режим общего доступа для каталога": "Cancels the public access mode for the directory",
+"Получает постоянный UTL к сообщению канала": "Gets a permanent URL to the channel message",
+"Получить данные использования пространства": "Get space usage data",
+"ID поста, используемого в качетсве рекламы": "ID of the post used for advertising",
+"Отправляет файл (документ) в чат или канал": "Sends a file (document) to a chat or channel",
+"Добавляет новый товар в каталог сообщества": "Adds a new product to the community's catalog",
+"JSON клавиатуры. См.СформироватьКлавиатуру": "JSON keyboard. See FormKeyboard",
+"Разбанивает забаненного ранее пользователя": "Unbans a previously banned user",
+"Отправляет внейшний файл по списку каналов": "Sends an external file to a list of channels",
+"Очищает список событий основного календаря": "Clears the event list of the primary calendar",
+"Сформировать клавиатуру из массива кнопок:": "Create a keyboard from an array of buttons:",
+"Очистить список закрепленных сообщений темы": "Clear thread's pinned messages list",
+"Получает информацию о папке или файле по ID": "Gets information about a folder or file by ID",
+"Обновляет v2 токен при помощи refresh_token": "Updates the v2 token using the refresh_token",
+"Получает информацию о товарах по массиву ID": "Gets information about products by array of IDs",
+"Красный, желтый, синий или какой-то другой?": "Red, yellow, blue, or some other?",
+"Ошибка получения данных булево из параметра": "Error getting boolean data from parameter",
+"ID файла, к которому предоставляется доступ": "ID of the file to be accessed",
+"Удаляет ранее добавленный товар из подборки": "Removes a previously added product from the selection",
+"Получает описание поля с электронной почтой": "Gets the description of an email field",
+"Получает список отложенных сообщений канала": "Gets a list of delayed channel messages",
+"Создает рекламное объявление на основе поста": "Creates an advertising post based on a post",
+"Копирует файл или каталог по выбранному пути": "Copies a file or directory to the selected path",
+"Загружает файлы на сервер и возвращает их ID": "Uploads files to the server and returns their IDs",
+"Создает ссылку для вступления в закрытый чат": "Creates a link for joining a closed chat",
+"Переводит каталог в режим публичного доступа": "Sets the directory to public access mode",
+"Добавляет вариант для существующего свойства": "Adds a variant for an existing property",
+"Получает новый токен на основе рефреш токена": "Gets a new token based on the refresh token",
+"Показывает ранее скрытую главную тему форума": "Shows a previously hidden main forum thread",
+"Удалить объект без возможности востановления": "Delete object without the possibility of recovery",
+"Приостанавливает показ рекламного объявления": "Pauses the display of the advertising post",
+"Идентификатор новой подборки, если необходимо": "Identifier of the new selection, if needed",
+"Требования: платформа 1С версии 8.3.10 и выше": "Requirements: 1C platform version 8.3.10 and above",
+"Повторно открывает ранее закрытую тему форума": "Reopens a previously closed forum thread",
+"Получить ссылку скачивания публичного объекта": "Get download link for public object",
+"Возвращает структура клавиатуры для сообщений": "Returns a keyboard structure for messages",
+"Получает список пользователей рабочей области": "Gets a list of users in the workspace",
+"Раскомментировать, если выполняется OneScript": "Uncomment if OneScript is executed",
+"Число последних версий объекта для отображения": "Number of the latest versions of the object to display",
+"Формирует ссылку для авторизации через браузер": "Forms a link for authorization via the browser",
+"Отправляет контакт с именем и номером телефона": "Sends a contact with name and phone number",
+"Клавиатура под сообщением или на нижней панели": "Keyboard under the message or on the bottom panel",
+"Получает общую статистику сообщества за период": "Gets the overall community statistics for a period",
+"Отправляет текстовое сообщение в чат или канал": "Sends a text message to a chat or channel",
+"Список адресов почты добавляемых пользователей": "List of email addresses of users being added",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_VK.os": "Location OS: .\/OInt\/core\/Modules\/OPI_VK.os",
+"Ошибка получения двоичных данных из параметра:": "Error getting binary data from parameter:",
+"URL, по которому необходимо перейти в браузере": "URL to go to in the browser",
+"Массив имен для добавления новых листов в книгу": "Array of names to add new sheets to the book",
+"Получает список файлов с или без отбора по типу": "Gets a list of files with or without filtering by type",
+"Путь к объекту, тег которого необходимо удалить": "Path to the object whose tag needs to be deleted",
+"Получает список комментариев к записи в таблице": "Gets the list of comments for a record in the table",
+"Отправляет URL с предпросмотром в чат или канал": "Sends a URL with a preview to a chat or channel",
+"Получает список пользователей указанного канала": "Gets a list of users in the specified channel",
+"Получает календарь из списка пользователя по ID": "Gets a calendar from the user's list by ID",
+"Создает кампанию в выбранном рекламном кабинете": "Creates a campaign in the selected advertising account",
+"Получает токен по коду из авторизации в бразуере": "Gets token by code from browser authorization",
+"Получает данные строки таблицы по идентификатору": "Gets row data of the table by identifier",
+"Создает новый блок на основе существующего блока": "Creates a new block based on an existing block",
+"Добавляет сообщение в обсуждение от имени группы": "Adds a message to the discussion on behalf of the group",
+"Истина > сортировать по дате, Ложь > по алфавиту": "True > sort by date, False > alphabetically",
+"двоичные данные zip архива с содержимым каталога": "binary data of the zip archive with the contents of the directory",
+"Отменяет публикацию ранее опубликованного объекта": "Unpublishes a previously published object",
+"Путь к каталогу. Необязателен, если указан курсор": "Path to the directory. Optional if the cursor is specified",
+"Твиттер не смог обработать загруженное вами видео": "Twitter could not process the video you uploaded",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Viber.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Viber.os",
+"Идентификатор или массив индентификаторов записей": "Identifier or array of record identifiers",
+"Источник: https:github.com\/vbondarevsky\/Connector": "Source: https:github.com\/vbondarevsky\/Connector",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Slack.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Slack.os",
+"ID подборка для помещения товара, если необходимо": "Selection ID for placing the product, if needed",
+"Запрещает доступ к файлу для внешних пользователей": "Prohibits access to the file for external users",
+"ID асинхронной работы из ответа ЗагрузитьФайлПоURL": "ID of the asynchronous job from the UploadFileByURL response",
+"Добавляет новый текстовый тег к файлу или каталогу": "Adds a new text tag to a file or directory",
+"ID блока, после которого необходимо встаивть новый": "Block ID after which to insert the new one",
+"Создает новое свойство для использования в товарах": "Creates a new property for use in products",
+"Не удалось привести структуру значений к коллекции": "Failed to convert the structure of values to a collection",
+"Данные заполнения, где ключ это имя ячейки вида A1": "Fill data where the key is the cell name like A1",
+"Удаляет одну или массив записей по идентификаторам": "Deletes one or an array of records by identifiers",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Notion.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Notion.os",
+"Путь к объекту, для которого необходимо создать тег": "Path to the object for which the tag needs to be created",
+"Смещение для получение объектов не из начала списка": "Offset for getting objects not from the beginning of the list",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Dropbox.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Dropbox.os",
+"Изменяет свойства календаря из списка пользователей": "Edits the properties of a calendar from the user's list",
+"Коннектор: удобный HTTP-клиент для 1С:Предприятие 8": "Connector: convenient HTTP client for 1C:Enterprise 8",
+"Очищает список закрепленных сообщений в теме форума": "Clears the list of pinned messages in the forum thread",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Twitter.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Twitter.os",
+"Здесь собрано определение данных для работы с VK API": "Here is a collection of data definitions for working with the VK API",
+"Обрабатывает данные TMA и опредеяет их достоверность": "Processes TMA data and determines its validity",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Airtable.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Airtable.os",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Telegram.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Telegram.os",
+"Основное измерение при заполнении диапазона массивом": "Main dimension when filling the array range",
+"Загружает файл на диск, забирая его по заданному URL": "Downloads a file to disk from the specified URL",
+"Истина > кнопки выводятся в столбик, Ложь > в строку": "True > buttons are displayed in a column, False > in a row",
+"Отправляет географические координаты в чат или канал": "Sends geographic coordinates to a chat or channel",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_YandexID.os": "Location OS: .\/OInt\/core\/Modules\/OPI_YandexID.os",
+"Скачивает zip архив с содержимым указанного каталога": "Downloads a zip archive with the contents of the specified directory",
+"Написать сообщение пользователю в диалоге сообщества": "Write a message to a user in the community's dialog",
+"Описание таблиц: Ключ > имя, Значение > массив полей": "Table description: Key > name, Value > array of fields",
+"Определяет доступ к файлу для стороннего пользователя": "Defines access to the file for an external user",
+"Генерирует ссылку авторизации для перехода в браузере": "Generates an authorization link for browser transition",
+"Отправляет контакт с номером телефона в чат или канал": "Sends a contact with a phone number to a chat or channel",
+"Возвращает список пользователей рабочего пространства": "Returns a list of workspace users",
+"Изменяет имя и|или описание существующего поля таблицы": "Changes the name and\/or description of an existing table field",
+"Перемещает объект по заданному пути и пути к оригиналу": "Moves the object to the specified path and path to the original",
+"Добавляет существующий календарь в список пользователя": "Adds an existing calendar to the user's list",
+"Группирует товары на основе одинаковых наборов свойств": "Groups products based on similar sets of properties",
+"ID аккаунта. Текущий аккаунт токена, если не заполнено": "Account ID. Current token account if not filled",
+"Перезаписывать если файл с таким именем уже существует": "Overwrite if a file with the same name already exists",
+"Получает список внешних файлов пользователя или канала": "Gets a list of external files of a user or channel",
+"Получает информацию об объекте диска по заданному пути": "Gets information about a disk object at the specified path",
+"Предоставляет стороннии пользователям доступ к каталогу": "Grants external users access to the directory",
+"Перезаписывать, если файл с таким именем уже существует": "Overwrite if a file with the same name already exists",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleDrive.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleDrive.os",
+"Идентификатор файла или каталога размещения комментария": "Identifier of the file or directory where the comment is located",
+"Изменяет значение варианта существующего свойства товара": "Edits the value of an existing product property variant",
+"Соответствие данных с результатом проверки в поле passed": "Map of data with the result of verification in the passed field",
+"Получает информацию об опубликованном объекте по его URL": "Gets information about the published object by its URL",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleSheets.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleSheets.os",
+"Получает статус асинхронной работы по изменению доступов": "Gets the status of the asynchronous access change job",
+"Отправляет сообщение, которое приходит в канал, но видно": "Sends a message that arrives in the channel but is visible",
+"Получает прямую ссылку для скачивания публичного объекта": "Gets a direct link to download the public object",
+"Добавляет дополнительные поля информации для медиафайлов": "Adds additional information fields for media files",
+"Создает дочернюю страницу над другой страницей-родителем": "Creates a child page above another parent page",
+"Удаляет публичный URL у файла. Требует токен пользователя": "Removes the public URL from the file. Requires user token",
+"Получает список рабочих областей, в которых подключен бот": "Gets a list of workspaces where the bot is connected",
+"Идентификатор объекта, для которого необходим комментарий": "Identifier of the object that needs a comment",
+"Создает новую тему в группе с включенным функционалом тем": "Creates a new thread in the group with theme functionality enabled",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleCalendar.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleCalendar.os",
+"Пересылает сообщение между чатами или в рамках одного чата": "Forwards a message between chats or within a chat",
+"Загружает фото на сервер для его дальнейшего использования": "Uploads photo to server for further use",
+"Запрещает редактирование файла для стороннего пользователя": "Prohibits file editing for the external user",
+"Создает копию объекта по заданному пути и пути к оригиналу": "Creates a copy of the object at the specified path and path to the original",
+"Расположение OS: .\/OInt\/tests\/Modules\/internal\/OPI_Тесты.os": "Location OS: .\/OInt\/tests\/Modules\/internal\/OPI_Tests.os",
+"Вы можете переопределять их, передавая в качестве параметра": "You can override them by passing them as a parameter",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleWorkspace.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleWorkspace.os",
+"Истина > служебные поля удаляются, остается только сам блок": "True > service fields are deleted, only the block itself remains",
+"Создает публичный URL для файла. Требует токен пользователя": "Creates a public URL for the file. Requires user token",
+"Код, полученный из авторизации См.ПолучитьСсылкуАвторизации": "Code obtained from authorization See GetAuthorizationLink",
+"механизм загрузки файлов и некоторые другие из старой версии": "file upload mechanism and some others from the old version",
+"Смещение для получение вложенных объектов не из начала списка": "Offset for getting nested objects not from the beginning of the list",
+"Указатель из предыдущего запроса, если строк результата > 100": "Pointer from the previous request, if the result rows > 100",
+"Иднтификатор следующей страницы данных из предыдущего запроса": "Next page identifier of data from the previous request",
+"Открывает новый диалог с одним или несколькими пользователями": "Opens a new dialog with one or more users",
+"Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено": "String, Arbitrary, HTTPResponse, BinaryData, Undefined",
+"Токен бота чата сообщества, котрый можно получить в настройках": "Community chat bot token, which can be obtained in the settings",
+"Загружает файл на облачный диск, получая его по указанному URL": "Uploads a file to the cloud drive by fetching it from the specified URL",
+"Игнорируем проверку целостности архива, просто читаем результат": "Ignore archive integrity check, just read the result",
+"Получает статус пользователя или нескольких пользователей по ID": "Gets the status of a user or several users by ID",
+"Удаляет URL обработчика событий бота для работы в режиме Webhook": "Deletes the bot event handler URL for webhook operation",
+"Получает массив сообщений, которые являются ответом на указанное": "Gets an array of messages that are replies to the specified",
+"Расположение OS: .\/OInt\/tools\/Modules\/OPI_ПреобразованиеТипов.os": "Location OS: .\/OInt\/tools\/Modules\/OPI_TypeConversion.os",
+"Набор или массив наборов пар Ключ : Значение > Поле : Показатель": "Set or array of sets of Key : Value pairs > Field : Indicator",
+"Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок": "Keyboard, if needed, see CreateKeyboardFromArrayButton",
+"Расположение OS: .\/OInt\/tools\/Modules\/OPI_ПолучениеДанныхТестов.os": "Location OS: .\/OInt\/tools\/Modules\/OPI_TestDataRetrieval.os",
+"Идентификатор следующей страницы списка баз из перыдудщего запроса": "Next page identifier of the base list from the previous request",
+"Совпадающие поля будут перезаписаны с приоритетом параметра функции": "Matching fields will be overwritten with the parameter of the function",
+"Формирует блок с картинкой для добавления в массив блоков сообщения": "Generates a block with an image to add to the message block array",
+"ID пользователя. Для канала > администратора, для бота > получателя": "User ID. For channel > administrator, for bot > recipient",
+"Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации": "Gets token based on the code from the GetAuthorizationLink page",
+"Курсор из предыдущего запроса для получения следующего набора файлов": "Cursor from the previous request to get the next set of files",
+"на redirect_uri после авторизации через браузер есть всего 30 секунд": "on redirect_uri after authorization via the browser is only 30 seconds",
+"Загружает видео в группу с возможностью его дальнейшего использования": "Uploads video to the group for further use",
+"access_token нужно будет забрать из параметра в строке адреса браузера": "access_token will need to be taken from the parameter in the browser address bar",
+"Двоичные данные или путь к файлу при указании параметра ПутьСохранения": "Binary data or file path when SavePath parameter is specified",
+"Устанавливает URL обработчика событий бота для работы в режиме Webhook": "Set webhook URL for bot event handling in webhook mode",
+"Получает список ID товарных категорий для указания при создании товара": "Gets a list of product category IDs to specify when creating a product",
+"Получает информацию о количестве использованного дискового пространства": "Gets information on the amount of used disk space",
+"Расположение OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Инструменты.os": "Location OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Tools.os",
+"Получает соответствие ID Emoji для установки в качестве иконок тем форума": "Gets the mapping of Emoji IDs for setting as forum theme icons",
+"Получает список id рекламных категорий для создания рекламного объявления": "Gets a list of advertising category IDs for creating an advertising post",
+"Метод для вставки в http-сервис, адрес которого указывается в redirect_uri": "Method for insertion into an http service, the address of which is specified in redirect_uri",
+"Расположение OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Криптография.os": "Location OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Cryptography.os",
+"URL вашего http-сервиса (или другого обработчика запросов) для авторизации": "URL of your http service (or other request handler) for authorization",
+"Отправляет местоположение по географической широте и долготе в чат или канал": "Sends location by geographic latitude and longitude to a chat or channel",
+"Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer": "From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer",
+"Размер файла. Если не заполнен > определяется автоматически скачиванием файла": "File size. If not filled in > determined automatically by downloading the file",
+"Получает код подтверждения и адрес страницы, на которой его необходимо ввести": "Gets the confirmation code and the address of the page where it needs to be entered",
+"Все права защищены. Эта программа и сопроводительные материалы предоставляются": "All rights reserved. This program and accompanying materials are provided",
+"1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1": "1, and something on 2: up to the point that they removed the ability to post tweets from v1",
+"Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer": "From Consumer Keys -> Access Token and Secret settings page of Twitter Developer",
+"Создает одну или массив записей по описанию или массиву описаний значений полей": "Creates one or an array of records by description or an array of field value descriptions",
+"id приложения, которое необходимо создать в профиле на странице для разработчиков": "application ID that needs to be created in the profile on the developer page",
+"Вызывает метод получения токена, так как для получения токена из кода, приходящего": "Calls the token acquisition method, as for obtaining a token from the code received",
+"Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели": "Generates a simple JSON keyboard from an array of buttons for a message or bottom panel",
+"Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения": "Converts the code to a token after entering the code when executing GetConfirmationCode",
+"ID пользователя из информации о канале не подойдет для отправки сообщений через бота": "The user ID from channel information is not suitable for sending messages through the bot",
+"|--> ОбновитьТокен() ->|access_token  --> Используется в т-нии 2-х часов для запросов": "|--> RefreshToken() ->| access_token --> Used in the interval of 2 hours for requests",
+"Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя": "All pages created as children must have parent base properties",
+"Описание структур см. здесь https:pkware.cachefly.net\/webdocs\/casestudies\/APPNOTE.TXT": "Description of structures see here https:pkware.cachefly.net\/webdocs\/casestudies\/APPNOTE.TXT",
+"id группы с \"-\" в начале. Можно найти в настройках группы ВК или в ее URL, если не был": "group ID with \"-\" at the beginning. Can be found in the settings of the VK group or in its URL if not set",
+"набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен": "a set of permissions for the received key. Can be any, but offline.access is mandatory",
+"Получение ссылки для интерактивного получения токена (access_token), который необходим": "Getting a link for interactive token retrieval (access_token), which is necessary",
+"можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях": "you can use an HTTP service. Information about new messages will also be sent there",
+"Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer": "From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer",
+"При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить": "For the next update, you need to use a new refresh_token, so hardcode",
+"Приходит вместе с access_token и используется для его обновления (время жизни access_token": "Comes together with access_token and is used to refresh it (access_token lifetime",
+"Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации": "Gets the token by the code obtained during authorization via the link from GetAuthorizationLink",
+"Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video": "Sends a set of files to a chat or channel. Media types: audio, document, photo, video",
+"Получает список первых файлов каталога или продолжает получение следующих при указании курсора": "Gets the list of the first files in the directory or continues getting the next ones when the cursor is specified",
+"который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована": "which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published",
+"что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести": "that Twitter insists on using this latest version, they somehow managed not to transfer",
+"Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook": "Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals",
+"но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные": "but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different",
+"Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать": "Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working",
+"Выполняет запрос \/getUpdates, возвращающий информацию о событиях бота. Используется при работе в polling режиме": "Executes a request \/getUpdates, returning information about bot events. Used in polling mode",
+"СоздатьСобытие": "",
+"НазваниеФайла2": "",
+"ОтправитьГифку": "",
+"ОтправитьАудио": "",
+"ОТПРАВИТЬАУДИО": "",
+"Отправка данных": "",
+"ОТПРАВИТЬССЫЛКУ": "",
+"ОтправитьСсылку": "",
+"ПОЛУЧИТЬСОБЫТИЕ": "",
+"ВводныйПараметр": "",
+"ПолучитьСобытие": "",
+"УДАЛИТЬПОДБОРКУ": "",
+"СОЗДАТЬСТРАНИЦУ": "",
+"Работа с базами": "",
+"ТекущееОписание": "",
+"СОКРАТИТЬССЫЛКУ": "",
+"ПеременнаяСреды": "",
+"СоздатьСтраницу": "",
+"Работа с тегами": "",
+"УДАЛИТЬКАРТИНКУ": "",
+"Работа с полями": "",
+"ТекстВыполнения": "",
+"ИзменитьСобытие": "",
+"ИЗМЕНИТЬСОБЫТИЕ": "",
+"ПолучитьТаблицу": "",
+"ИЗМЕНИТЬТАБЛИЦУ": "",
+"СОЗДАТЬКАЛЕНДАРЬ": "",
+"СОЗДАТЬТВИТОПРОС": "",
+"СОЗДАТЬТВИТВИДЕО": "",
+"УДАЛИТЬКАЛЕНДАРЬ": "",
+"СоздатьКалендарь": "",
+"МБ был записан в": "",
+"Работа с книгами": "",
+"УдалитьКалендарь": "",
+"Получение токена": "",
+"ОТПРАВИТЬЛОКАЦИЮ": "",
+"СОЗДАТЬТВИТГИФКИ": "",
+"ОтправитьЛокацию": "",
+"Выполняет запрос": "",
+"Работа с файлами": "",
+"ОТПРАВИТЬКОНТАКТ": "",
+"ПОЛУЧИТЬПОЛЕДАТЫ": "",
+"УдалитьСообщение": "",
+"ДобавитьПараметр": "",
+"Работа с группой": "",
+"Работа с данными": "",
+"Работа с блоками": "",
+"Работа с листами": "",
+"КопироватьОбъект": "",
+"ОбъектПроцессора": "",
+"УДАЛИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСТРАНИЦУ": "",
+"ПолучитьСтраницу": "",
+"КОПИРОВАТЬОБЪЕКТ": "",
+"НеобходимаяДлина": "",
+"СОЗДАТЬТЕМУФОРУМА": "",
+"ИЗМЕНИТЬСООБЩЕНИЕ": "",
+"Работа с каналами": "",
+"СКОПИРОВАТЬОБЪЕКТ": "",
+"ЗначениеПараметра": "",
+"УстановитьКоманду": "",
+"СообщитьРезультат": "",
+"КаталогИсходников": "",
+"СОЗДАТЬБАЗУДАННЫХ": "",
+"Работа с товарами": "",
+"ПОЛУЧИТЬПОЛЕПОЧТЫ": "",
+"АРХИВИРОВАТЬКАНАЛ": "",
+"Работа с записями": "",
+"УдалитьТемуФорума": "",
+"УДАЛИТЬТЕМУФОРУМА": "",
+"ЗАКРЫТЬТЕМУФОРУМА": "",
+"УстановитьWebhook": "",
+"УСТАНОВИТЬWEBHOOK": "",
+"ПереместитьОбъект": "",
+"ПЕРЕМЕСТИТЬОБЪЕКТ": "",
+"Работа с заказами": "",
+"ОТПРАВИТЬКАРТИНКУ": "",
+"НачальнаяФигурная": "",
+"ОтправитьДокумент": "",
+"ОТПРАВИТЬДОКУМЕНТ": "",
+"ОпубликоватьПапку": "",
+"ОПУБЛИКОВАТЬПАПКУ": "",
+"НАПИСАТЬСООБЩЕНИЕ": "",
+"АрхивироватьКанал": "",
+"ПоследняяФигурная": "",
+"НаписатьСообщение": "",
+"ОТКРЫТЬТЕМУФОРУМА": "",
+"Администрирование": "",
+"ОТКРЫТЬОБСУЖДЕНИЕ": "",
+"ЗАКРЫТЬОБСУЖДЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКБАЗ": "",
+"СОЗДАТЬОБСУЖДЕНИЕ": "",
+"ПЕРЕИМЕНОВАТЬКАНАЛ": "",
+"ПереименоватьКанал": "",
+"Команда CLI: tools": "",
+"НачальнаяТабуляция": "",
+"СОЗДАТЬКОММЕНТАРИЙ": "",
+"СоздатьКомментарий": "",
+"ИзменитьТемуФорума": "",
+"ПолучитьБазуДанных": "",
+"ПОЛУЧИТЬБАЗУДАННЫХ": "",
+"ОПУБЛИКОВАТЬОБЪЕКТ": "",
+"ОпубликоватьОбъект": "",
+"СкоприроватьОбъект": "",
+"Отправка сообщений": "",
+"Работа с таблицами": "",
+"ПОЛУЧИТЬПОЛЕССЫЛКИ": "",
+"ЗАКРЕПИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬПОЛЕФЛАЖКА": "",
+"ПОЛУЧИТЬПОЛЕНОМЕРА": "",
+"ПОЛУЧИТЬТОВАРЫПОИД": "",
+"ПереслатьСообщение": "",
+"ОТПРАВИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСТАТИСТИКУ": "",
+"ЗакрепитьСообщение": "",
+"УдалитьКомментарий": "",
+"УДАЛИТЬКОММЕНТАРИЙ": "",
+"Работа с событиями": "",
+"ПереместитьСобытие": "",
+"ПЕРЕМЕСТИТЬСОБЫТИЕ": "",
+"ОткрепитьСообщение": "",
+"УДАЛИТЬВНЕШНИЙФАЙЛ": "",
+"ОТКРЕПИТЬСООБЩЕНИЕ": "",
+"ЗагрузитьФайлПоURL": "",
+"ЗАГРУЗИТЬФАЙЛПОURL": "",
+"ЗначенияПараметров": "",
+"ТекущаяВложенность": "",
+"Данные и настройка": "",
+"ПОЛУЧИТЬОБНОВЛЕНИЯ": "",
+"ПЕРЕСЛАТЬСООБЩЕНИЕ": "",
+"ИЗМЕНИТЬТЕМУФОРУМА": "",
+"Работа с диалогами": "",
+"СГРУППИРОВАТЬТОВАРЫ": "",
+"СОЗДАТЬТВИТКАРТИНКИ": "",
+"ПОЛУЧИТЬТАБЛИЦЫБАЗЫ": "",
+"Формирование блоков": "",
+"ПолучитьТаблицыБазы": "",
+"СоздатьКопиюОбъекта": "",
+"ИЗМЕНИТЬКОММЕНТАРИЙ": "",
+"ИзменитьКомментарий": "",
+"СОЗДАТЬКОПИЮОБЪЕКТА": "",
+"ПОЛУЧИТЬСПИСОКТЕГОВ": "",
+"ДОБАВИТЬВНЕШНИЙФАЙЛ": "",
+"ДобавитьВнешнийФайл": "",
+"json (необяз. по ум": "",
+"ПОЛУЧИТЬВНЕШНИЙФАЙЛ": "",
+"ПОЛУЧИТЬДАННЫЕФАЙЛА": "",
+"ПОЛУЧИТЬКОММЕНТАРИИ": "",
+"НАПИСАТЬВОБСУЖДЕНИЕ": "",
+"СписокПользователей": "",
+"НАПИСАТЬКОММЕНТАРИЙ": "",
+"ПОЛУЧИТЬТОКЕНПОКОДУ": "",
+"СПИСОКПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьКомментарий": "",
+"ПолучитьТокенПоКоду": "",
+"ПОЛУЧИТЬКОММЕНТАРИЙ": "",
+"СДЕЛАТЬФАЙЛПРИВАТНЫМ": "",
+"ПОЛУЧИТЬПОДБОРКИПОИД": "",
+"УстановитьТемуКанала": "",
+"ВЕРНУТЬДОЧЕРНИЕБЛОКИ": "",
+"ИнформацияОПрогрессе": "",
+"СДЕЛАТЬФАЙЛПУБЛИЧНЫМ": "",
+"СделатьФайлПубличным": "",
+"СделатьФайлПриватным": "",
+"УСТАНОВИТЬТЕМУКАНАЛА": "",
+"СоздатьСтраницуВБазу": "",
+"УстановитьЦельКанала": "",
+"УСТАНОВИТЬЦЕЛЬКАНАЛА": "",
+"ОТПРАВИТЬВНЕШНИЙФАЙЛ": "",
+"Работа с сообщениями": "",
+"ПОЛУЧИТЬСПИСОКФАЙЛОВ": "",
+"ОтправитьМедиагруппу": "",
+"СОЗДАТЬСОСТАВНОЙПОСТ": "",
+"ИЗМЕНИТЬСВОЙСТВАБАЗЫ": "",
+"СОЗДАТЬСТРАНИЦУВБАЗУ": "",
+"Работа со страницами": "",
+"ВернутьДочерниеБлоки": "",
+"Изменение публикации": "",
+"ВозвращаемоеЗначение": "",
+"СОЗДАТЬТЕКСТОВЫЙТВИТ": "",
+"СоздатьСоставнойПост": "",
+"ПОЛУЧИТЬПОЛЕТЕЛЕФОНА": "",
+"ОТПРАВИТЬМЕДИАГРУППУ": "",
+"ПОЛУЧИТЬПОЛЕВЛОЖЕНИЯ": "",
+"ПОЛУЧИТЬСПИСОККАНАЛОВ": "",
+"ЗАГРУЗИТЬФОТОНАСЕРВЕР": "",
+"Аккаунт и авторизация": "",
+"Программный интерфейс": "",
+"ПОЛУЧИТЬСПИСОКЗАПИСЕЙ": "",
+"УДАЛИТЬСВОЙСТВОТОВАРА": "",
+"ПОЛУЧИТЬСПИСОКТОВАРОВ": "",
+"ПОЛУЧИТЬСПИСОКЗАКАЗОВ": "",
+"ПолучитьИсториюКанала": "",
+"СОЗДАТЬСВОЙСТВОТОВАРА": "",
+"ПОЛУЧИТЬСПИСОКСОБЫТИЙ": "",
+"ПолучитьСписокСобытий": "",
+"ПОЛУЧИТЬПОЛЕСТРОКОВОЕ": "",
+"ПОЛУЧИТЬИСТОРИЮКАНАЛА": "",
+"ПОЛУЧИТЬЗНАЧЕНИЯЯЧЕЕК": "",
+"Работа с обсуждениями": "",
+"ПОЛУЧИТЬСПИСОКСВОЙСТВ": "",
+"УДАЛИТЬТОВАРИЗПОДБОРКИ": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮБОТА": "",
+"ПолучитьИнформациюБота": "",
+"Работа с базами данных": "",
+"Работа с комментариями": "",
+"ЗАГРУЗИТЬВИДЕОНАСЕРВЕР": "",
+"ПОЛУЧИТЬСПИСОКПОДБОРОК": "",
+"Интерактивные действия": "",
+"ИЗМЕНИТЬСВОЙСТВОТОВАРА": "",
+"СформироватьКлавиатуру": "",
+"Настройки и информация": "",
+"СОЗДАТЬПОДБОРКУТОВАРОВ": "",
+"Работа с темами форума": "",
+"ПреобразоватьКодВТокен": "",
+"ДОБАВИТЬТОВАРВПОДБОРКУ": "",
+"ПРЕОБРАЗОВАТЬКОДВТОКЕН": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУ": "",
+"Управление и настройки": "",
+"ОтменитьПубликациюПапки": "",
+"УстановитьЗначенияЯчеек": "",
+"ОбеспечитьПустойКаталог": "",
+"ПолучитьЧислоУчастников": "",
+"ПОЛУЧИТЬЧИСЛОУЧАСТНИКОВ": "",
+"ПОЛУЧИТЬПУБЛИЧНЫЙОБЪЕКТ": "",
+"Непредвиденная ошибка!:": "",
+"ОТПРАВИТЬМЕСТОПОЛОЖЕНИЕ": "",
+"Не найден входной файл!": "",
+"ПолучитьПубличныйОбъект": "",
+"УСТАНОВИТЬЗНАЧЕНИЯЯЧЕЕК": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮФАЙЛА": "",
+"ИзменитьКалендарьСписка": "",
+"ИЗМЕНИТЬПОДБОРКУТОВАРОВ": "",
+"ОтменитьПубликациюФайла": "",
+"СкрытьГлавнуюТемуФорума": "",
+"ИЗМЕНИТЬКАЛЕНДАРЬСПИСКА": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБОТЕ": "",
+"ПОЛУЧИТЬКАЛЕНДАРЬСПИСКА": "",
+"ПолучитьКалендарьСписка": "",
+"Изменяет наименование и": "",
+"ПОЛУЧИТЬСПИСОККАТАЛОГОВ": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮПАПКИ": "",
+"ПолучитьИнформациюОБоте": "",
+"СКРЫТЬГЛАВНУЮТЕМУФОРУМА": "",
+"СФОРМИРОВАТЬБЛОККАРТИНКУ": "",
+"СОЗДАТЬССЫЛКУПРИГЛАШЕНИЕ": "",
+"УДАЛИТЬКАЛЕНДАРЬИЗСПИСКА": "",
+"УдалитьКалендарьИзСписка": "",
+"ИзменитьСвойстваСтраницы": "",
+"ИЗМЕНИТЬСВОЙСТВАСТРАНИЦЫ": "",
+"ПОЛУЧИТЬСПИСОККАЛЕНДАРЕЙ": "",
+"ПОЛУЧИТЬСТАТИСТИКУПОСТОВ": "",
+"СоздатьСсылкуПриглашение": "",
+"ДобавитьКалендарьВСписок": "",
+"ПолучитьСписокКалендарей": "",
+"СОЗДАТЬРЕКЛАМНУЮКАМПАНИЮ": "",
+"ДОБАВИТЬКАЛЕНДАРЬВСПИСОК": "",
+"ПОЛУЧИТЬКОДПОДТВЕРЖДЕНИЯ": "",
+"ПолучитьКодПодтверждения": "",
+"СОХРАНИТЬКАРТИНКУВАЛЬБОМ": "",
+"ПолучитьИнформациюОДиске": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОДИСКЕ": "",
+"ВосстановитьОбъектКВерсии": "",
+"ПоказатьГлавнуюТемуФорума": "",
+"ПОКАЗАТЬГЛАВНУЮТЕМУФОРУМА": "",
+"ПолучитьИнформациюОКанале": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОКАНАЛЕ": "",
+"Dropbox_ПереместитьОбъект": "",
+"ОчиститьОсновнойКалендарь": "",
+"ОЧИСТИТЬОСНОВНОЙКАЛЕНДАРЬ": "",
+"ОтменитьПубликациюОбъекта": "",
+"ИЗМЕНИТЬНАИМЕНОВАНИЕКНИГИ": "",
+"ИзменитьНаименованиеКниги": "",
+"ПОЛУЧИТЬССЫЛКУНАСООБЩЕНИЕ": "",
+"СоответствиеКомандМодулей": "",
+"ПОЛУЧИТЬССЫЛКУАВТОРИЗАЦИИ": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮОБЪЕКТА": "",
+"ПолучитьСсылкуНаСообщение": "",
+"ВОССТАНОВИТЬОБЪЕКТКВЕРСИИ": "",
+"ПОЛУЧИТЬСПИСОКФАЙЛОВПАПКИ": "",
+"ВывестиСообщениеИсключения": "",
+"ПолучитьСписокКомментариев": "",
+"ДобавитьПользователяКФайлу": "",
+"ПолучитьЗначенияРекурсивно": "",
+"Работа с файлами и папками": "",
+"СоздатьРекламноеОбъявление": "",
+"ПолучитьДанныеПользователя": "",
+"ЧислоСтандартныхПараметров": "",
+"ПОЛУЧИТЬСПИСОККОММЕНТАРИЕВ": "",
+"ПОЛУЧИТЬДАННЫЕПОЛЬЗОВАТЕЛЯ": "",
+"СОЗДАТЬРЕКЛАМНОЕОБЪЯВЛЕНИЕ": "",
+"Работа с подборками товаров": "",
+"ПолучитьОнлайнПользователей": "",
+"ОТПРАВИТЬТЕКСТОВОЕСООБЩЕНИЕ": "",
+"ОтправитьТекстовоеСообщение": "",
+"ПОЛУЧИТЬОНЛАЙНПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьСтатусЗагрузкиПоURL": "",
+"ПОЛУЧИТЬСТАТУСЗАГРУЗКИПОURL": "",
+"ИЗМЕНИТЬМЕТАДАННЫЕКАЛЕНДАРЯ": "",
+"Работа с удаленными файлами": "",
+"ВЫГНАТЬПОЛЬЗОВАТЕЛЯИЗКАНАЛА": "",
+"ВыгнатьПользователяИзКанала": "",
+"ИзменитьМетаданныеКалендаря": "",
+"ОТПРАВИТЬЭФЕМЕРНОЕСООБЩЕНИЕ": "",
+"ДобавитьПользователейКПапке": "",
+"ПолучитьСсылкуДляСкачивания": "",
+"Разложить JSON на параметры": "",
+"ПолучитьИнформациюОбОбъекте": "",
+"ДОБАВИТЬПОЛЬЗОВАТЕЛЕЙКФАЙЛУ": "",
+"ПОЛУЧИТЬМЕТАДАННЫЕКАЛЕНДАРЯ": "",
+"ДобавитьПараметрФлагКоманды": "",
+"ДобавитьПользователейКФайлу": "",
+"ПОЛУЧИТЬСПИСОКВЕРСИЙОБЪЕКТА": "",
+"ДОБАВИТЬПОЛЬЗОВАТЕЛЕЙКПАПКЕ": "",
+"ОтправитьЭфемерноеСообщение": "",
+"ПОЛУЧИТЬСПИСОКПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьСписокВерсийОбъекта": "",
+"ПОЛУЧИТЬСПИСОКВНЕШНИХФАЙЛОВ": "",
+"ПОЛУЧИТЬССЫЛКУДЛЯСКАЧИВАНИЯ": "",
+"ПолучитьМетаданныеКалендаря": "",
+"Создать\/Удалить кооментарий": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБОБЪЕКТЕ": "",
+"ПреобразоватьBase64ВДвоичные": "",
+"ПРЕОБРАЗОВАТЬBASE64ВДВОИЧНЫЕ": "",
+"СоздатьСсылкуПолученияТокена": "",
+"Получение данных и настройка": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБАККАУНТЕ": "",
+"Работа со свойствами товаров": "",
+"Работа со списком календарей": "",
+"ИЗМЕНИТЬИМЯГЛАВНОЙТЕМЫФОРУМА": "",
+"ПолучитьСписокИконокАватаров": "",
+"Работа с рекламным кабинетом": "",
+"ИзменитьИмяГлавнойТемыФорума": "",
+"ПОЛУЧИТЬСПИСОКИКОНОКАВАТАРОВ": "",
+"УДАЛИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"СОЗДАТЬССЫЛКУПОЛУЧЕНИЯТОКЕНА": "",
+"ПОЛУЧИТЬСПИСОКРАБОЧИХОБЛАСТЕЙ": "",
+"Работа с файлами и каталогами": "",
+"Настройки совместного доступа": "",
+"ДОБАВИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"ПРИГЛАСИТЬПОЛЬЗОВАТЕЛЕЙВКАНАЛ": "",
+"ИЗМЕНИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"ПригласитьПользователейВКанал": "",
+"Управление публичным доступом": "",
+"СОХРАНИТЬПУБЛИЧНЫЙОБЪЕКТНАДИСК": "",
+"МаксимальныйУровеньВложенности": "",
+"ПОЛУЧИТЬСПИСОККАТЕГОРИЙТОВАРОВ": "",
+"Работа с метаданными календарей": "",
+"Служебный программный интерфейс": "",
+"СФОРМИРОВАТЬССЫЛКУПОЛУЧЕНИЯКОДА": "",
+"Двоичные данные или пути к фото": "",
+"СформироватьСсылкуПолученияКода": "",
+"Функция вернула пустое значение": "",
+"ПРИОСТАНОВИТЬРЕКЛАМНОЕОБЪЯВЛЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКРЕКЛАМНЫХКАТЕГОРИЙ": "",
+"ПОЛУЧИТЬСПИСОКОТВЕТОВНАСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКОТЛОЖЕННЫХСООБЩЕНИЙ": "",
+"ПОЛУЧИТЬСПИСОКПОЛЬЗОВАТЕЛЕЙКАНАЛА": "",
+"ДобавитьИменованныйПараметрКоманды": "",
+"ДобавитьПозиционныйПараметрКоманды": "",
+"ПОЛУЧИТЬСТАТУСАСИНХРОННОГОИЗМЕНЕНИЯ": "",
+"ПолучитьСтатусАсинхронногоИзменения": "",
+"под записью (необяз. по ум. - Пустое": "",
+"ПОЛУЧИТЬСПИСОКОПУБЛИКОВАННЫХОБЪЕКТОВ": "",
+"ПолучитьСписокОпубликованныхОбъектов": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУПОМАССИВУКНОПОК": "",
+"СформироватьКлавиатуруПоМассивуКнопок": "",
+"См.СформироватьКлавиатуру (необяз. по": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУИЗМАССИВАКНОПОК": "",
+"Главная, если не заполнено (необяз. по": "",
+"ПолучитьДанныеИспользованияПространства": "",
+"ОЧИСТИТЬСПИСОКЗАКРЕПЛЕННЫХСООБЩЕНИЙТЕМЫ": "",
+"ПОЛУЧИТЬДАННЫЕИСПОЛЬЗОВАНИЯПРОСТРАНСТВА": "",
+"ПолучитьСписокИконокАватаров (необяз. по": "",
+"ПОЛУЧИТЬССЫЛКУСКАЧИВАНИЯПУБЛИЧНОГООБЪЕКТА": "",
+"Кодировка, в которой записаны JSON данные": "",
+"Ошибка преобразовани данных параметра JSON": "",
+"конкретное значение при указании имени поля": "",
+"Похоже, что в ответе пришли двоичные данные!": "",
+"Необязателен, если указан курсор (необяз. по": "",
+"Преобразует файл с Base64 строкой в бинарный": "",
+"Не удалось получить информацию из json медиа!": "",
+"Созвращает список дочерних блоков блока-родителя": "",
+"Некорректный метод! Проверьте правильность ввода": "",
+"Выводит весь список, если не указано (необяз. по": "",
+"СформироватьКлавиатуруИзМассиваКнопок (необяз. по": "",
+"Преобразует файл с Base64 строкой в бинарный файл": "",
+"Некорректная команда! Проверьте правильность ввода": "",
+"Текущий аккаунт токена, если не заполнено (необяз. по": "",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_YandexDisk.os": "",
+"Имя поля для получения. Выводит весь список, если не указано": "",
+"вложенности разбора. На всю глубину по умолчанию (необяз. по": "",
+"Ограничение на ур. вложенности разбора. На всю глубину по умолчанию": "",
+"В следующий раз используйте опцию --out для указания пути их сохранения": "",
+"Полную документацию можно найти по адресу: (https:\/\/openintegrations.dev": "",
+"Если не заполнен > определяется автоматически скачиванием файла (необяз. по": "",
+"Показывает значения, которые можно получить из переданного JSON и возвращает": "",
+"Файл не был записан! Используйте флаг --debug для получения дополнительной информации": ""
+}
diff --git a/service/dictionaries/en.json b/service/dictionaries/en.json
new file mode 100644
index 0000000000..991849d6d7
--- /dev/null
+++ b/service/dictionaries/en.json
@@ -0,0 +1,2804 @@
+{
+"В": "In",
+"т": "t",
+"И": "And",
+"о": "o",
+"д": "d",
+"в": "in",
+"Н": "N",
+"и": "and",
+"к": "to",
+"с": "with",
+"не": "not",
+"то": "that",
+"из": "from",
+"МБ": "MB",
+"Из": "Of",
+"же": "same",
+"ВК": "VK",
+"он": "he",
+"ПС": "PS",
+"по": "by",
+"Не": "Not",
+"ДД": "DD",
+"ФС": "FS",
+"См": "See",
+"на": "to",
+"БД": "DB",
+"ИВФ": "AndVF",
+"Вес": "Weight",
+"Код": "Code",
+"так": "so",
+"для": "for",
+"что": "what",
+"без": "without",
+"тип": "type",
+"все": "all",
+"они": "they",
+"Чат": "Chat",
+"Тип": "Type",
+"Час": "Hour",
+"или": "or",
+"Это": "This",
+"это": "this",
+"ОТД": "OTD",
+"Лев": "Left",
+"Для": "For",
+"имя": "name",
+"Или": "Or",
+"Хэш": "Hash",
+"при": "at",
+"осн": "main",
+"Бан": "Ban",
+"БАН": "BAN",
+"Нет": "No",
+"НПП": "NPP",
+"доп": "add",
+"Вид": "View",
+"Имя": "Name",
+"Тег": "Tag",
+"поля": "fields",
+"Пути": "Paths",
+"Куда": "To",
+"Файл": "File",
+"Сайт": "Website",
+"типа": "type",
+"Тест": "Test",
+"быть": "be",
+"Цикл": "Loop",
+"Пока": "While",
+"цены": "price",
+"путь": "path",
+"фото": "photo",
+"Цвет": "Color",
+"Поля": "Fields",
+"базы": "databases",
+"файл": "file",
+"Цель": "Purpose",
+"Тема": "Topic",
+"Блок": "Block",
+"Лист": "Sheet",
+"Линк": "Link",
+"Путь": "Path",
+"Пост": "Post",
+"если": "if",
+"Туда": "There",
+"Слак": "Slack",
+"Ключ": "Key",
+"база": "database",
+"есть": "is",
+"Знач": "Value",
+"АирТ": "AirT",
+"вРег": "inReg",
+"Цена": "Price",
+"Ложь": "False",
+"Тело": "Body",
+"Если": "If",
+"Прав": "Right",
+"бота": "bot",
+"Поле": "Field",
+"База": "Base",
+"нРег": "nReg",
+"Лого": "Logo",
+"Фото": "Photo",
+"Вход": "Entry",
+"Дата": "Date",
+"Часть": "Part",
+"вроде": "like",
+"Медиа": "Media",
+"Форум": "Forum",
+"будет": "will",
+"Твиты": "Tweets",
+"имени": "name",
+"новый": "new",
+"ячеек": "cells",
+"типом": "type",
+"Аудио": "Audio",
+"типы:": "types:",
+"боте:": "bot:",
+"нечто": "something",
+"можно": "can",
+"Опции": "Options",
+"ТЗнач": "TValue",
+"Режим": "Mode",
+"Число": "Number",
+"МБайт": "MByte",
+"Метка": "Label",
+"места": "of the venue",
+"Вызов": "Call",
+"Серый": "Gray",
+"Белый": "White",
+"файлу": "file",
+"Дата0": "Date0",
+"Добро": "Welcome",
+"Дата1": "Date1",
+"Отбор": "Filter",
+"файла": "file",
+"Листы": "Sheets",
+"товар": "product",
+"Книга": "Book",
+"через": "through",
+"Почта": "Email",
+"Канал": "Channel",
+"Блоки": "Blocks",
+"Адрес": "Address",
+"новых": "new",
+"Видео": "Video",
+"Части": "Parts",
+"Гифка": "GIF",
+"Номер": "Number",
+"своей": "of its",
+"полей": "fields",
+"текст": "text",
+"Драйв": "Drive",
+"Лист2": "Sheet2",
+"Вывод": "Output",
+"Ответ": "Response",
+"Ноушн": "Notion",
+"ЯДиск": "YDisk",
+"Файлы": "Files",
+"Тогда": "Then",
+"Сдвиг": "Shift",
+"Новый": "New",
+"Шапка": "Header",
+"Файла": "File",
+"ЮТест": "UTest",
+"Равно": "Equal",
+"Синий": "Blue",
+"Опрос": "Poll",
+"Папка": "Folder",
+"Токен": "Token",
+"Лист1": "Sheet1",
+"ЕдИзм": "Unit",
+"Буфер": "Buffer",
+"Текст": "Text",
+"Копия": "Copy",
+"Метод": "Method",
+"путей": "paths",
+"Товар": "Product",
+"Сервер": "Server",
+"Работа": "Work",
+"Это A4": "ThisIsA4",
+"Запрос": "Request",
+"Модуль": "Module",
+"Это A3": "ThisIsA3",
+"Булево": "Boolean",
+"разные": "different",
+"Курсор": "Cursor",
+"Высота": "Height",
+"Это B3": "ThisIsB3",
+"Это B2": "ThisIsB2",
+"Откуда": "From",
+"Ширина": "Width",
+"данных": "data",
+"Это A2": "ThisIsA2",
+"таблиц": "tables",
+"Массив": "Array",
+"Это A1": "ThisIsA1",
+"Книга2": "Book2",
+"Сессия": "Session",
+"Это B1": "ThisIsB1",
+"Это B4": "ThisIsB4",
+"Прочие": "Others",
+"Запись": "Record",
+"метода": "method",
+"Важное": "Important",
+"опции:": "options:",
+"Привет": "Hello",
+"Текст2": "Text2",
+"Желтый": "Yellow",
+"Бирюза": "Turquoise",
+"адресу": "address",
+"стучит": "knocks",
+"Вайбер": "Viber",
+"Записи": "Records",
+"СокрЛП": "ShortLP",
+"ВСпейс": "VSpace",
+"сервис": "service",
+"канале": "channel",
+"СКонца": "FromEnd",
+"Отступ": "Indent",
+"Версия": "Version",
+"важное": "important",
+"типов:": "types:",
+"Список": "List",
+"Рефреш": "Refresh",
+"Статус": "Status",
+"Флажок": "Checkbox",
+"начала": "of start",
+"Коммит": "Commit",
+"только": "only",
+"ТипЗнч": "TypeValue",
+"IDЧата": "ChatID",
+"группе": "group",
+"Данные": "Data",
+"Широта": "Latitude",
+"Формат": "Format",
+"Вопрос": "Question",
+"КудаID": "ToID",
+"Строки": "Strings",
+"IDТемы": "ThreadID",
+"Кнопки": "Buttons",
+"Кнопка": "Button",
+"Ссылка": "Link",
+"Товары": "Products",
+"Альбом": "Album",
+"Должно": "Should",
+"ячейки": "cell",
+"данные": "Data",
+"Ответы": "Answers",
+"булево": "boolean",
+"Дважды": "Twice",
+"IDФото": "PhotoID",
+"ФотоID": "PhotoID",
+"Парсер": "Parser",
+"Диалог": "Dialog",
+"ИДФото": "PhotoID",
+"Строка": "String",
+"корень": "root",
+"тестов": "tests",
+"Истина": "True",
+"полей:": "fields:",
+"Пример": "Example",
+"режиме": "mode",
+"Размер": "Size",
+"Заказы": "Orders",
+"работе": "work",
+"Черный": "Black",
+"Разбан": "Unban",
+"товара": "product",
+"Первый": "First",
+"Ячейка": "Cell",
+"Раздел": "Section",
+"Иконка": "Icon",
+"группы": "groups",
+"Пароль": "Password",
+"Способ": "Method",
+"РАЗБАН": "UNBAN",
+"Синоним": "Synonym",
+"который": "which",
+"Ревизия": "Revision",
+"Таблицы": "Tables",
+"базовую": "basic",
+"обычным": "ordinary",
+"Секунды": "Seconds",
+"Ожидаем": "Awaiting",
+"выбором": "choice",
+"Разделы": "Sections",
+"ЮТТесты": "UTTests",
+"Твиттер": "Twitter",
+"сервере": "server",
+"СНачала": "FromStart",
+"ID темы": "Thread ID",
+"формате": "format",
+"IDПоста": "PostID",
+"ЧатТема": "ChatTopic",
+"запуска": "start",
+"Элемент": "Element",
+"Альбомы": "Albums",
+"Запросы": "Requests",
+"Обложка": "Cover",
+"Удалить": "Delete",
+"ИДБлока": "BlockID",
+"Вариант": "Option",
+"ТипПоля": "FieldType",
+"ДопФото": "AdditionalPhoto",
+"Телефон": "Phone",
+"Отметка": "Timestamp",
+"Скрытая": "Hidden",
+"Каталог": "Directory",
+"Таймаут": "Timeout",
+"граммах": "grams",
+"главным": "main",
+"Долгота": "Longitude",
+"Фамилия": "Last name",
+"Сделать": "Make",
+"свойств": "properties",
+"Счетчик": "Counter",
+"IDСтены": "WallID",
+"История": "Story",
+"ОпросID": "PollID",
+"Подпись": "Signature",
+"Реклама": "Advertisement",
+"Объекты": "Objects",
+"Артикул": "SKU",
+"IDВидео": "VideoID",
+"ИДПоста": "PostID",
+"Признак": "Indication",
+"Глубина": "Depth",
+"ВидеоДД": "VideoDD",
+"Консоль": "Console",
+"Вывести": "Output",
+"Коммент": "Comment",
+"Зеленый": "Green",
+"вызова:": "call:",
+"Каждого": "Each",
+"справку": "help",
+"Символы": "Symbols",
+"Отметки": "Tags",
+"методы:": "methods:",
+"Причина": "Reason",
+"Красный": "Red",
+"Обычный": "Regular",
+"Экспорт": "Export",
+"Функция": "Function",
+"Префикс": "Prefix",
+"изменен": "changed",
+"Активен": "Active",
+"Таблица": "Table",
+"Строка_": "String_",
+"IDПапки": "FolderID",
+"IDФайла": "FileID",
+"Булево_": "Boolean_",
+"Скрытый": "Hidden",
+"Событие": "Event",
+"В офисе": "InOffice",
+"удалено": "deleted",
+"объекта": "object",
+"Аккаунт": "Account",
+"Утилиты": "Utilities",
+"таблицы": "tables",
+"Функции": "Functions",
+"Область": "Region",
+"Справка": "Help",
+"Возврат": "Return",
+"массив:": "array:",
+"<Данные": "<Data",
+"массива": "array",
+"события": "events",
+"Команда": "Command",
+"Колонки": "Columns",
+"Строчный": "StringType",
+"Вставить": "Insert",
+"Свойства": "Properties",
+"параметр": "parameter",
+"описания": "descriptions",
+"указания": "indications",
+"Действие": "Action",
+"Свойство": "Property",
+"ID блока": "Block ID",
+"СтрДлина": "StrLength",
+"Основная": "Main",
+"ID книги": "BookID",
+"ИмяЛиста": "SheetName",
+"Добавить": "Add",
+"ПоляБазы": "BaseFields",
+"Свернуть": "Collapse",
+"Подборки": "Selections",
+"Числовой": "Numeric",
+"В работе": "InProgress",
+"Описание": "Description",
+"СтрНайти": "StrFind",
+"ТипМедиа": "MediaType",
+"название": "name",
+"ТипЧисло": "TypeNumber",
+"значения": "values",
+"Вариант1": "Option1",
+"ИмеетТип": "HasType",
+"Вариант2": "Option2",
+"Вложения": "Attachments",
+"Вложение": "Attachment",
+"ключевой": "key",
+"Страница": "Page",
+"страницы": "pages",
+"Кнопка 1": "Button 1",
+"описание": "description",
+"Кнопка 2": "Button 2",
+"событиях": "events",
+"IDРаботы": "JobID",
+"URLФайла": "FileURL",
+"НовоеИмя": "NewName",
+"Оригинал": "Original",
+"ЭтоКанал": "IsChannel",
+"Подробно": "Detailed",
+"Кнопка 3": "Button 3",
+"ВКорзину": "ToCart",
+"загрузки": "upload",
+"ИДТовара": "ProductID",
+"Точность": "Precision",
+"описаний": "descriptions",
+"IDКанала": "ChannelID",
+"каталога": "directory",
+"варианты": "variants",
+"Параметр": "Parameter",
+"ОткудаID": "FromID",
+"IDИконки": "IconID",
+"JSONДата": "JSONDate",
+"действий": "actions",
+"Максимум": "Maximum",
+"Родитель": "Parent",
+"ЭтотФайл": "ThisFile",
+"ИмяМедиа": "MediaName",
+"отправки": "of sending",
+"подойдет": "suit",
+"ДропБокс": "Dropbox",
+"Приемник": "Receiver",
+"Источник": "Source",
+"работать": "work",
+"ОбъектВК": "VKObject",
+"Получить": "Get",
+"Загрузка": "Upload",
+"НЕ JSON:": "NOT JSON:",
+"СтрВсего": "StrTotal",
+"указании": "indication",
+"ПутьФайл": "FilePath",
+"Записать": "Write",
+"значение": "value",
+"Не JSON:": "Not JSON:",
+"ID поста": "Post ID",
+"ДатаСтоп": "EndDate",
+"Документ": "Document",
+"Значения": "Values",
+"МассивИД": "IDArray",
+"Название": "Name",
+"магазина": "store",
+"страницу": "page",
+"ИмяФайла": "FileName",
+"Двоичные": "Binary",
+"ФайлСлак": "SlackFile",
+"Смещение": "Offset",
+"СтрокаТЗ": "DataString",
+"Разметка": "Markup",
+"ИДРаботы": "WorkID",
+"Картинка": "Image",
+"Сообщить": "Notify",
+"Значение": "Value",
+"Телеграм": "Telegram",
+"Подборка": "Selection",
+"Свойства_": "Properties_",
+"СтрШаблон": "StrTemplate",
+"Изменение": "Change",
+"ПутьКСтат": "PathToStat",
+"Значение:": "Value:",
+"Сигнатура": "Signature",
+"IDАльбома": "AlbumID",
+"ВерсияАпи": "APIVersion",
+"Выражение": "Expression",
+"Константы": "Constants",
+"Результат": "Result",
+"Приватный": "Private",
+"параметра": "parameter",
+"ID канала": "Channel ID",
+"изменения": "change",
+"Рекламный": "Advertising",
+"Анонимный": "Anonymous",
+"отражения": "reflection",
+"Подборки_": "Selections_",
+"ДатаСтарт": "StartDate",
+"В корзину": "To cart",
+"ТекущийИД": "CurrentID",
+"ИДОбъекта": "ObjectID",
+"URLФайла2": "URLFile2",
+"Категории": "Categories",
+"ИмяПакета": "PackageName",
+"ПутьКопии": "CopyPath",
+"Вариант 2": "Option 2",
+"Категория": "Category",
+"Удаленный": "Remote",
+"ИмяМетода": "MethodName",
+"Доступные": "Available",
+"неактивен": "inactive",
+"Строковое": "String",
+"ИДАльбома": "AlbumID",
+"ВидеоПуть": "VideoPath",
+"АудиоПуть": "AudioPath",
+"Выполнить": "Execute",
+"ГифкаПуть": "GifPath",
+"ПутьЛогов": "LogPath",
+"Структура": "Structure",
+"URLФайла1": "URLFile1",
+"сообщений": "messages",
+"URL файла": "File URL",
+"доступных": "available",
+"ID товара": "Product ID",
+"ИначеЕсли": "ElseIf",
+"НовыйТест": "NewTest",
+"Процедура": "Procedure",
+"Имя папки": "Folder name",
+"ВКонтакте": "VK",
+"Кодировка": "Encoding",
+"Вариант 1": "Option 1",
+"Параметр_": "Parameter_",
+"HTTPОтвет": "HTTPResponse",
+"Значение2": "Value2",
+"Значение1": "Value1",
+"Заголовок": "Title",
+"ИДЖелтого": "YellowID",
+"Параметры": "Parameters",
+"ТокенБота": "BotToken",
+"Заполнено": "Filled",
+"ТипСтрока": "TypeString",
+"подлинный": "genuine",
+"Календарь": "Calendar",
+"добавлять": "add",
+"окончания": "of end",
+"Коллекция": "Collection",
+"Картинка1": "Image1",
+"Картинка2": "Image2",
+"приходить": "come",
+"Заголовки": "Headers",
+"НовыйЛист": "NewSheet",
+"Сообщение": "Message",
+"ТипДанных": "DataType",
+"возвращать": "return",
+"дальнейших": "further",
+"на сервере": "on the server",
+"информация": "information",
+"сертификат": "certificate",
+"информации": "information",
+"Параметры_": "Parameters_",
+"перестанет": "will stop",
+"сообщениях": "messages",
+"Разрешения": "Permissions",
+"МассивЧата": "ChatArray",
+"участникам": "to participants",
+"возвращает": "returns",
+"Статистика": "Statistics",
+"ФорматДаты": "DateFormat",
+"информацию": "information",
+"проведения": "of the event",
+"Соединение": "Connection",
+"Расширение": "Extension",
+"Файл видео": "Video file",
+"Файл аудио": "Audio file",
+"Параметры:": "Parameters:",
+"Файл гифки": "GIF file",
+"ДанныеПоля": "FieldData",
+"ID альбома": "Album ID",
+"ПутьКФайлу": "FilePath",
+"библиотек:": "libraries:",
+"параметров": "parameters",
+"библиотеки": "libraries",
+"Текст тега": "Tag text",
+"УдалитьТег": "DeleteTag",
+"УДАЛИТЬТЕГ": "DELETETAG",
+"пожаловать": "welcome",
+"ВидЗапроса": "RequestType",
+"Клавиатура": "Keyboard",
+"СтараяЦена": "OldPrice",
+"ID диалога": "Dialog ID",
+"конкретное": "specific",
+"они разные": "they are different",
+"Токен бота": "Bot token",
+"Имя товара": "Product name",
+"ИДКартинки": "ImageID",
+"Приложение": "Application",
+"НовяИконка": "NewIcon",
+"ИмяТаблицы": "TableName",
+"Новый файл": "NewFile",
+"Библиотека": "Library",
+"ООО Вектор": "LLC Vector",
+"ИДКаталога": "CatalogID",
+"ДатаНачала": "StartDate",
+"ТокенКанал": "ChannelToken",
+"ИДВарианта": "VariantID",
+"ЦветКнопок": "ButtonColor",
+"ИДКабинета": "CabinetID",
+"ИмеетДлину": "HasLength",
+"ОжидаетЧто": "ExpectsThat",
+"ИДПодборки": "SelectionID",
+"ПолныйПуть": "FullPath",
+"МассивФото": "PhotoArray",
+"Доуступные": "Available",
+"ID события": "Event ID",
+"Информация": "Information",
+"Объявление": "Ad",
+"Назначение": "Destination",
+"Сохранение": "Save",
+"ФайлОтвета": "ResponseFile",
+"СтрПроцент": "StrPercentage",
+"Бан\/Разбан": "Ban\/Unban",
+"Количество": "Quantity",
+"СтрТекущее": "StrCurrent",
+"HTTPЗапрос": "HTTPRequest",
+"IDКабинета": "AccountID",
+"IDКартинки": "ImageID",
+"Твит с гиф": "Tweet with gif",
+"ID Родителя": "Parent ID",
+"Новое видео": "NewVideo",
+"Удалить тег": "Delete tag",
+"АдресаПочты": "EmailAddresses",
+"ТипКонтента": "ContentType",
+"РефрешТокен": "RefreshToken",
+"Петр Петров": "Petr Petrov",
+"JSONСтрокой": "JSONString",
+"ОписаниеИзм": "EditedDescription",
+"НомерГруппы": "GroupNumber",
+"Фон истории": "Story background",
+"возможность": "possibility",
+"Токен Viber": "Viber Token",
+"ТекущаяДата": "CurrentDate",
+"ID страницы": "Page ID",
+"ЗаписатьЛог": "WriteLog",
+"Для Asserts": "For Asserts",
+"уведомлений": "notifications",
+"Для YaxUnit": "For YAxUnit",
+"Текст твита": "Tweet text",
+"авторизации": "authorization",
+"ЗаменаТочки": "DotReplacement",
+"РазмерБлока": "BlockSize",
+"Уведомления": "Notifications",
+"ОбщийРазмер": "TotalSize",
+"ПолныйОтвет": "FullResponse",
+"МассивПолей": "FieldArray",
+"УДАЛИТЬПОСТ": "DELETEPOST",
+"ID картинки": "Image ID",
+"УдалитьПост": "DeletePost",
+"СтрЗаменить": "StringReplace",
+"Текст поста": "Post text",
+"МассивПутей": "PathsArray",
+"ID подборок": "Selection IDs",
+"ID подборки": "Selection ID",
+"ID свойства": "Property ID",
+"ID варианта": "Variant ID",
+"ЦелевойПуть": "TargetPath",
+"СОЗДАТЬПОСТ": "CREATEPOST",
+"СоздатьПост": "CreatePost",
+"ДОБАВИТЬТЕГ": "ADDTAG",
+"Комментарий": "Comment",
+"Медиагруппа": "MediaGroup",
+"Стандартные": "Standard",
+"ТекстОтвета": "ReplyText",
+"ОбщийДоступ": "PublicAccess",
+"медиагруппы": "media groups",
+"ОбщийМодуль": "CommonModule",
+"МетодПоиска": "SearchMethod",
+"НоваяСтрока": "NewLine",
+"УдалитьЛист": "DeleteSheet",
+"УДАЛИТЬЛИСТ": "DELETESHEET",
+"СоздатьБазу": "CreateDatabase",
+"СОЗДАТЬБАЗУ": "CREATEDATABASE",
+"СКАЧАТЬФАЙЛ": "DOWNLOADFILE",
+"СкачатьФайл": "DownloadFile",
+"ДобавитьТег": "AddTag",
+"ИмяКонтакта": "ContactName",
+"JSON данные": "JSON data",
+"СОЗДАТЬПОЛЕ": "CREATEFIELD",
+"ТекущийКлюч": "Current key",
+"ИмяСодержит": "NameContains",
+"миллиметрах": "millimeters",
+"ПолеОтметки": "TimestampField",
+"ДанныеСхемы": "SchemaData",
+"ТипВложений": "AttachmentsType",
+"ТекущийФайл": "CurrentFile",
+"УДАЛИТЬФАЙЛ": "DELETEFILE",
+"Разделитель": "Delimiter",
+"УдалитьФайл": "DeleteFile",
+"СоздатьПоле": "CreateField",
+"указывается": "specified",
+"МассивВидео": "Video array",
+"МассивГифок": "Gif array",
+"МассивМедиа": "MediaArray",
+"МассивСвязи": "LinkArray",
+"Тема канала": "Channel topic",
+"конкретному": "specific",
+"УдалитьБлок": "DeleteBlock",
+"ВЕРНУТЬБЛОК": "RETURNBLOCK",
+"МассивЯчеек": "Cell array",
+"СтрокаФайла": "FileString",
+"ОтборПоТипу": "FilterByType",
+"ТекстКнопки": "ButtonText",
+"Остаток. -1": "Balance. -1",
+"расширением": "extension",
+"ОтборСтрока": "FilterString",
+"СоздатьБлок": "CreateBlock",
+"IDСообщения": "MessageID",
+"РазмерЧасти": "ChunkSize",
+"СОЗДАТЬБЛОК": "CREATEBLOCK",
+"Сортировать": "Sort",
+"Авторизация": "Authorization",
+"Цель канала": "Channel purpose",
+"ОтветМассив": "ResponseArray",
+"ВернутьБлок": "ReturnBlock",
+"Цена товара": "Product price",
+"УДАЛИТЬБЛОК": "DELETEBLOCK",
+"Новый товар": "New product",
+"IDОригинала": "OriginalID",
+"ИмяПараметра": "ParameterName",
+"МассивКнопок": "ButtonArray",
+"IDОбъявления": "AdID",
+"УдалитьТовар": "DeleteProduct",
+"УДАЛИТЬТОВАР": "DELETEITEM",
+"ID, Значение": "ID, Value",
+"ТекущийТовар": "CurrentProduct",
+"СписокКоманд": "CommandList",
+"ЦветнойВывод": "ColorOutput",
+"ОсновноеФото": "MainPhoto",
+"ОднаПодОдной": "OneByOne",
+"ЦелеваяСтена": "Target wall",
+"СОЗДАТЬОПРОС": "CREATEPOLL",
+"Создать пост": "Create post",
+"Удалить пост": "Delete post",
+"КодировкаURL": "URLencoding",
+"РазмерДанных": "DataSize",
+"ЗаписьТекста": "TextRecord",
+"ТипКоллекции": "CollectionType",
+"опубликована": "published",
+"использовать": "use",
+"ID календаря": "Calendar ID",
+"КлючКартинка": "ImageKey",
+"Base64Строка": "Base64String",
+"Тип вложений": "Attachments type",
+"периодически": "periodically",
+"ОтборКоманды": "CommandSelection",
+"Длительность": "Duration",
+"пользователя": "user",
+"ОписаниеТипа": "TypeDescription",
+"IDОбсуждения": "DiscussionID",
+"Твит с видео": "Tweet with video",
+"МассивНабора": "Array of Sets",
+"ДневнойЛимит": "DailyLimit",
+"Соответствие": "Match",
+"СоздатьОпрос": "CreatePoll",
+"СтрокаВызова": "CallString",
+"ИДОбсуждения": "DiscussionID",
+"ПараметрыURL": "URLParameters",
+"Файл размера": "File size",
+"Удалить блок": "Delete block",
+"ТолькоОснова": "OnlyBase",
+"формирования": "formation",
+"СтруктураURL": "URLStructure",
+"МассивБлоков": "BlockArray",
+"Создать блок": "Create block",
+"ОбъектИконка": "Icon object",
+"Архивирована": "Archived",
+"БезВозвратно": "Irrecoverable",
+"Скачать файл": "Download file",
+"Добавить тег": "Add tag",
+"Неопределено": "Undefined",
+"МассивДанных": "Data array",
+"Удалить лист": "DeleteSheet",
+"Рефреш токен": "Refresh token",
+"СтрРазделить": "StrSplit",
+"ОсновнойЦвет": "PrimaryColor",
+"ЧислоВСтроку": "NumberToString",
+"ДопЗаголовки": "AdditionalHeaders",
+"МассивФайлов": "ArrayOfFiles",
+"ОтветСтрокой": "ResponseString",
+"загружаемого": "uploading",
+"Существующее": "Existing",
+"РодительБаза": "ParentBase",
+"СтрокаДанных": "DataString",
+"СоздатьПапку": "CreateFolder",
+"Число,Строка": "Number, String",
+"Строка,Число": "String, Number",
+"ДокументПуть": "DocumentPath",
+"КартинкаПуть": "ImagePath",
+"Удалить файл": "Delete file",
+"ИЗМЕНИТЬПОЛЕ": "CHANGEFIELD",
+"ИзменитьПоле": "ModifyField",
+"ПолучитьФайл": "GetFile",
+"ТекстСправки": "HelpText",
+"Пользователь": "User",
+"ДатаОтправки": "Sending date",
+"СтрСоединить": "StrJoin",
+"МассивТекста": "TextArray",
+"ЭтоКоллекция": "ThisIsCollection",
+"Дублирования": "duplicates",
+"СКАЧАТЬПАПКУ": "DOWNLOADFOLDER",
+"НовыйПрефикс": "NewPrefix",
+"СкачатьПапку": "DownloadFolder",
+"МассивЛишних": "ExtraArray",
+"МассивЛистов": "SheetArray",
+"ДобавитьПоле": "AddField",
+"Создать базу": "Create base",
+"МассивТаблиц": "TableArray",
+"Создать поле": "Create field",
+"СОЗДАТЬПАПКУ": "CREATEFOLDER",
+"пустой ответ": "empty response",
+"Использовать": "Use",
+"Пользователи": "Users",
+"ОбновитьФайл": "UpdateFile",
+"ОБНОВИТЬФАЙЛ": "UPDATEFILE",
+"СОЗДАТЬКАНАЛ": "CREATECHANNEL",
+"СоздатьКанал": "CreateChannel",
+"Имя контакта": "Contact name",
+"СоздатьКнигу": "CreateBook",
+"URL картинки": "Image URL",
+"СОЗДАТЬКНИГУ": "CREATEBOOK",
+"Наименование": "Name",
+"пользователю": "to user",
+"ДобавитьЛист": "AddSheet",
+"ID чата темы": "Thread chat ID",
+"ДОБАВИТЬЛИСТ": "ADDSHEET",
+"возвращающий": "returning",
+"Используется": "Used",
+"ПолучитьКнигу": "GetBook",
+"Новая таблица": "NewTable",
+"КодУстройства": "DeviceCode",
+"Вопрос опроса": "Poll question",
+"ОТПРАВИТЬФАЙЛ": "SENDFILE",
+"ОтправитьФайл": "SendFile",
+"ОбновитьТокен": "RefreshToken",
+"Создать опрос": "Create poll",
+"ОтветПроверки": "CheckResponse",
+"КартинкаПоста": "PostImage",
+"Массив кнопок": "Array of buttons",
+"ОБНОВИТЬТОКЕН": "UPDATETOKEN",
+"UnixИстечение": "UnixExpiration",
+"ПОЛУЧИТЬКНИГУ": "GETBOOK",
+"ID обсуждения": "Discussion ID",
+"СвойстваЛиста": "Sheet properties",
+"ТекущиеДанные": "Current data",
+"РазмерТекущих": "CurrentSize",
+"НомерТелефона": "PhoneNumber",
+"ТекущийМассив": "Current array",
+"ЗагрузкаВидео": "VideoUpload",
+"ПоставитьЛайк": "LikePost",
+"ВладелецВидео": "VideoOwner",
+"АдресЗагрузки": "UploadURL",
+"ТекущийСтатус": "CurrentStatus",
+"СДЕЛАТЬРЕПОСТ": "MAKEREPOST",
+"СделатьРепост": "MakeRepost",
+"Массив файлов": "Files array",
+"ПолучитьКанал": "GetChannel",
+"ТаблицаТестов": "TestTable",
+"Тестовая база": "TestDatabase",
+"ПутьОригинала": "OriginalPath",
+"НовыйРодитель": "NewParent",
+"Тестовая цель": "TestGoal",
+"существующего": "existing",
+"УдалитьАльбом": "DeleteAlbum",
+"УДАЛИТЬАЛЬБОМ": "DELETEALBUM",
+"ДОБАВИТЬТОВАР": "ADDITEM",
+"ДатаОкончания": "EndDate",
+"ДобавитьТовар": "AddProduct",
+"ИДКомментария": "CommentID",
+"СписокТоваров": "ProductList",
+"УДАЛИТЬОБЪЕКТ": "DELETEOBJECT",
+"ID объявления": "Ad ID",
+"УдалитьОбъект": "DeleteObject",
+"Создать папку": "Create folder",
+"Администратор": "Administrator",
+"Создать книгу": "CreateBook",
+"Строка, Число": "String, Number",
+"Скачать папку": "Download folder",
+"СОЗДАТЬАЛЬБОМ": "CREATEALBUM",
+"не ограничено": "unlimited",
+"Тестовая тема": "TestTopic",
+"Обновить файл": "Update file",
+"СтрокаНомеров": "NumbersString",
+"НомерКампании": "CampaignNumber",
+"ТекущийОбъект": "CurrentObject",
+"ПОЛУЧИТЬКАНАЛ": "GETCHANNEL",
+"СоздатьАльбом": "CreateAlbum",
+"Дата создания": "CreationDate",
+"СтрокаТоваров": "ProductsString",
+"Удалить товар": "Delete product",
+"МассивТоваров": "Array of products",
+"ИЗМЕНИТЬТОВАР": "CHANGEITEM",
+"ИзменитьТовар": "EditProduct",
+"Тестовый лист": "TestSheet",
+"Добавить лист": "AddSheet",
+"Идентификатор": "Identifier",
+"ПОСТАВИТЬЛАЙК": "PUTLIKE",
+"ЗагрузитьФайл": "UploadFile",
+"ПокинутьКанал": "LeaveChannel",
+"ПолучитьТокен": "GetToken",
+"СтруктураДаты": "DateStructure",
+"ВозможныеПути": "PossiblePaths",
+"ДФ=yyyy-MM-dd": "DF=yyyy-MM-dd",
+"РазложитьJSON": "ParseJSON",
+"РАЗЛОЖИТЬJSON": "PARSEJSON",
+"ЭтоОтложенное": "IsDelayed",
+"ОТКРЫТЬДИАЛОГ": "OPENDIALOG",
+"Блок картинки": "Image block",
+"МассивКаналов": "ChannelArray",
+"ЗАГРУЗИТЬФАЙЛ": "UPLOADFILE",
+"Создать канал": "Create channel",
+"СоздатьЗапрос": "CreateRequest",
+"Число, Строка": "Number, String",
+"НомерСтраницы": "PageNumber",
+"ОткрытьДиалог": "OpenDialog",
+"ОбъектОбложка": "Cover object",
+"пустая строка": "empty string",
+"ВставитьПосле": "InsertAfter",
+"ОписаниеТипов": "TypeDescription",
+"Новое событие": "New event",
+"ТекущийРаздел": "CurrentSection",
+"Файл с Base64": "Base64 File",
+"ПОЛУЧИТЬТОКЕН": "GETTOKEN",
+"Экранирование": "Escaping",
+"Метод,Область": "Method,Region",
+"ПОКИНУТЬКАНАЛ": "LEAVECHANNEL",
+"СтрокаЗаписей": "RecordString",
+"Версия: 2.4.8": "Version: 2.4.8",
+"УдалитьЗаписи": "DeletePosts",
+"Адрес объекта": "Object address",
+"СОЗДАТЬЗАПИСИ": "CREATEPOSTS",
+"ВыборЗначения": "ValueSelection",
+"МассивСобытий": "ArrayOfEvents",
+"СтруктураПоля": "FieldStructure",
+"СоздатьЗаписи": "CreatePosts",
+"ДатаИстечения": "ExpirationDate",
+"Файл картинки": "Image file",
+"ВывестиСтроку": "PrintString",
+"Изменить поле": "Modify field",
+"УДАЛИТЬЗАПИСИ": "DELETERECORDS",
+"ПодСообщением": "UnderMessage",
+"Описание поля": "Field description",
+"ЗАКРЫТЬДИАЛОГ": "CLOSEDIALOG",
+"МассивОтветов": "AnswersArray",
+"ЗакрытьДиалог": "CloseDialog",
+"МассивТоваров_": "Array_of_Products",
+"Покинуть канал": "Leave channel",
+"ПараметрыТеста": "TestParameters",
+"РабочийКаталог": "WorkingDirectory",
+"Получить канал": "Get channel",
+"Новое описание": "New description",
+"Получить книгу": "GetBook",
+"Изменяет имя и": "Changes name and",
+"ID базы данных": "Database ID",
+"ОТПРАВИТЬВИДЕО": "SENDVIDEO",
+"ОтправитьВидео": "SendVideo",
+"СоздатьТаблицу": "CreateTable",
+"СОЗДАТЬТАБЛИЦУ": "CREATETABLE",
+"МассивПодборок": "SelectionArray",
+"Удалить записи": "Delete records",
+"СтрНачинаетсяС": "StringStartsWith",
+"СОЗДАТЬСОБЫТИЕ": "CREATEEVENT",
+"ИДПользователя": "UserID",
+"СтрокаПодборок": "SelectionsString",
+"СтрОбщийРазмер": "StrTotalSize",
+"Удалить объект": "Delete object",
+"СтруктураФайла": "FileStructure",
+"СтруктураОпций": "OptionsStructure",
+"ГлавныйВГруппе": "MainInGroup",
+"Создать записи": "Create records",
+"Обновить токен": "Refresh token",
+"Изменить товар": "Edit product",
+"Библиотека: VK": "Library: VK",
+"ВСТУПИТЬВКАНАЛ": "JOINCHANNEL",
+"Файл, Значение": "File, Value",
+"КлючПриложения": "AppKey",
+"Тип клавиатуры": "KeyboardType",
+"ВступитьВКанал": "JoinChannel",
+"Отправить файл": "SendFile",
+"ОтправкаВКанал": "SendingToChannel",
+"IDПользователя": "UserID",
+"ТекущаяОбласть": "CurrentRegion",
+"ОтправитьОпрос": "SendPoll",
+"Получить токен": "Get token",
+"ПолучитьЗапись": "GetRecord",
+"ПОЛУЧИТЬЗАПИСЬ": "GETRECORD",
+"ОТПРАВИТЬОПРОС": "SENDPOLL",
+"УДАЛИТЬWEBHOOK": "DELETEWEBHOOK",
+"ПолноеИмяМедиа": "FullMediaName",
+"СтруктураМедиа": "MediaStructure",
+"МассивКартинок": "ImageArray",
+"УдалитьWebhook": "DeleteWebhook",
+"ПОЛУЧИТЬОБЪЕКТ": "GETOBJECT",
+"СтрокаВложений": "AttachmentsString",
+"ПараметрМетода": "MethodParameter",
+"Новое название": "New name",
+"ОписаниеТовара": "ProductDescription",
+"Добавить товар": "Add product",
+"МассивЗапросов": "ArrayOfRequests",
+"Закрыть диалог": "Close dialog",
+"МассивСтруктур": "Array of Structures",
+"Перезаписывать": "Overwrite",
+"НомерКатегории": "CategoryNumber",
+"МассивИДПостов": "Array of post IDs",
+"Номер страницы": "Page number",
+"Загрузить файл": "Upload file",
+"Файл документа": "Document file",
+"МассивОписания": "DescriptionArray",
+"Сделать репост": "Make repost",
+"ТекущийЭлемент": "CurrentElement",
+"ОТПРАВИТЬГИФКУ": "SENDGIF",
+"Поставить лайк": "Like",
+"МассивОтправки": "SendArray",
+"Описание видео": "Video description",
+"ОписаниеЗаписи": "RecordDescription",
+"Удалить альбом": "Delete album",
+"Создать альбом": "Create album",
+"Открыть диалог": "Open dialog",
+"ПолучитьОбъект": "GetObject",
+"Путь к объекту": "Path to the object",
+"СтруктураЯчеек": "CellStructure",
+"Номер телефона": "Phone number",
+"КартинкаЗамены": "ReplacementImage",
+"Тестовая папка": "TestFolder",
+"ТолькоПросмотр": "ViewOnly",
+"НазваниеФайла1": "FileName1",
+"Твит с опросом": "Tweet with poll",
+"ЗаписатьСтроку": "WriteString",
+"ТекущаяКоманда": "CurrentCommand",
+"HTTPСоединение": "HTTPConnection",
+"ТекущеВложение": "CurrentAttachment",
+"АТ_СоздатьПоле": "AT_CreateField",
+"ТекущаяПозиция": "CurrentPosition",
+"УдалитьСобытие": "DeleteEvent",
+"УДАЛИТЬСОБЫТИЕ": "DELETEEVENT",
+"ТаблицаСостава": "CompositionTable",
+"АТ_СоздатьБазу": "AT_CreateDatabase",
+"ОЧИСТИТЬЯЧЕЙКИ": "CLEARCELLS",
+"Тестовый товар": "TestProduct",
+"ПолучитьПревью": "GetPreview",
+"СтрочныйМассив": "StringArray",
+"МассивВложений": "AttachmentsArray",
+"КОПИРОВАТЬЛИСТ": "COPYSHEET",
+"КопироватьЛист": "CopySheet",
+"Тестовый твитт": "TestTweet",
+"Отбор по имени": "Filter by name",
+"Это новый файл": "This is a new file",
+"Новый файл.jpg": "New file.jpg",
+"ПутьСохранения": "SavePath",
+"ОписаниеМетода": "MethodDescription",
+"ОписаниеОшибки": "ErrorDescription",
+"ОчиститьЯчейки": "ClearCells",
+"Описание файла": "File description",
+"ДвоичныеДанные": "BinaryData",
+"Текстовый твит": "Text tweet",
+"ПОЛУЧИТЬПРЕВЬЮ": "GETPREVIEW",
+"МассивОбъектов": "ArrayOfObjects",
+"СОЗДАТЬИСТОРИЮ": "CREATEHISTORY",
+"Заголовок темы": "Thread title",
+"СоздатьИсторию": "CreateStory",
+"Копировать лист": "CopySheet",
+"ЗагруженныйФайл": "UploadedFile",
+"ОписаниеТаблицы": "TableDescription",
+"МассивРодителей": "ArrayOfParents",
+"Сокращенный URL": "Shortened URL",
+"Массив картинок": "Array of images",
+"УдалитьПодборку": "DeleteSelection",
+"Очистить ячейки": "Clear cells",
+"Номер,Строковое": "Number,String",
+"Создать историю": "Create story",
+"Новый заголовок": "New title",
+"ВК_СоздатьОпрос": "VK_CreatePoll",
+"Загрузить видео": "Upload video",
+"JSON клавиатуры": "Keyboard JSON",
+"ID пользователя": "User ID",
+"Массив ID медиа": "Media ID array",
+"ЗависимостиГугл": "GoogleDependencies",
+"ОригиналныйПуть": "OriginalPath",
+"IDИнициализации": "InitializationID",
+"СтатусОбработки": "ProcessingStatus",
+"Отправить опрос": "Send poll",
+"СтрокаСигнатуры": "SignatureString",
+"ТекущаяДатаUNIX": "CurrentUNIXDate",
+"Получить превью": "Get preview",
+"СтруктураФайлов": "FileStructure",
+"Отправить гифку": "Send GIF",
+"СтруктураКнопки": "ButtonStructure",
+"Отправить аудио": "Send audio",
+"Отправить видео": "Send video",
+"ОдиночнаяЗапись": "SingleRecord",
+"Команда CLI: vk": "CLI Command: vk",
+"МассивУдаляемых": "ArrayOfDeletions",
+"ОписаниеСтроки2": "RowDescription2",
+"Удалить событие": "Delete event",
+"Картинка опроса": "Poll image",
+"ЗапросИзменения": "ChangeRequest",
+"Удалить Webhook": "Delete webhook",
+"ОписаниеСтроки1": "RowDescription1",
+"IDПользователей": "UserIDs",
+"Текст сообщения": "Message text",
+"Создать каталог": "Create folder",
+"СократитьСсылку": "ShortenLink",
+"ID целевой базы": "Target database ID",
+"МассивВариантов": "OptionArray",
+"Ключ приложения": "Application key",
+"КоллекцияТаблиц": "TableCollection",
+"УдалитьКартинку": "DeleteImage",
+"установлен свой": "set your",
+"Создать таблицу": "Create table",
+"Создать событие": "Create event",
+"ЗаписатьЦелое16": "WriteInt16",
+"МестоПроведения": "Venue",
+"СтруктураДанных": "DataStructure",
+"Получить объект": "Get object",
+"Получить запись": "Get record",
+"ПовторитьСтроку": "RepeatString",
+"ТипСоответствие": "TypeMatch",
+"СтруктураТекста": "TextStructure",
+"ИзменитьТаблицу": "ModifyTable",
+"ОписаниеСобытия": "EventDescription",
+"OPI_Инструменты": "OPI_Tools",
+"ЗначенияСвойств": "PropertyValues",
+"ЗаголовокПотока": "StreamHeader",
+"СтруктураВыбора": "ChoiceStructure",
+"Описание товара": "Product description",
+"ID целевого чата": "Target chat ID",
+"Массив ID постов": "Array of post IDs",
+"ВладелецКартинки": "ImageOwner",
+"ПараметрыФункции": "FunctionParameters",
+"МассивРазрешений": "Permissions array",
+"ЗагрузкаКартинки": "ImageUpload",
+"Загружаемый файл": "File to be uploaded",
+"Отправить ссылку": "SendLink",
+"Твит с картинкой": "Tweet with image",
+"Коллекция файлов": "File collection",
+"СтруктураФормата": "FormatStructure",
+"РазделительСтрок": "LineSeparator",
+"Code из браузера": "Code from browser",
+"Описание таблицы": "Table description",
+"ЗапятаяВКавычках": "CommaInQuotes",
+"Изменить таблицу": "Modify table",
+"Описание события": "Event description",
+"ПолучитьДвоичные": "GetBinary",
+"СекретПриложения": "AppSecret",
+"ПараметрыЗапроса": "RequestParameters",
+"HTTPСервисЗапрос": "HTTPServiceRequest",
+"ГВ_ПолучитьТокен": "GV_GetToken",
+"ГВ_ОбновитьТокен": "GV_UpdateToken",
+"Телефон контакта": "Contact phone number",
+"Фамилия контакта": "Contact last name",
+"Получить таблицу": "Get table",
+"ПолучитьПолеДаты": "GetDateField",
+"СоответствиеMIME": "MIMETypeMapping",
+"УправлениеФайлом": "FileManagement",
+"KeyИнициализации": "InitializationKey",
+"ИмяФайлаОтправки": "SendingFileName",
+"ОтправитьКонтакт": "SendContact",
+"Создать страницу": "Create page",
+"ПолучитьПараметр": "GetParameter",
+"МетодХэширования": "HashingMethod",
+"КодироватьСтроку": "EncodeString",
+"Массив Из Строка": "Array From String",
+"Получить событие": "Get event",
+"Тестовый товар 2": "TestProduct2",
+"СоздатьТвитВидео": "CreateVideoTweet",
+"УдалитьПолностью": "Delete completely",
+"превью документа": "document preview",
+"СоздатьТвитГифки": "CreateGifTweet",
+"МассивКлавиатуры": "KeyboardArray",
+"ОписаниеКартинки": "ImageDescription",
+"Сократить ссылку": "Shorten link",
+"МассивКалендарей": "ArrayOfCalendars",
+"МассивСтатистики": "Array of Statistics",
+"Канал для отбора": "Channel for selection",
+"СтрокаПараметров": "ParameterString",
+"Массив из Строка": "Array of Strings",
+"Тестовая таблица": "TestTable",
+"Вступить в канал": "Join channel",
+"ДоступныйОстаток": "AvailableBalance",
+"СтрокаФотографий": "PhotoString",
+"Удалить картинку": "Delete image",
+"Удалить подборку": "DeleteSelection",
+"Неактивный : red": "Inactive    : red",
+"МассивИнформации": "ArrayOfInformation",
+"СсылкаПодЗаписью": "LinkUnderPost",
+"URLВКодировкеURL": "URLInURLEncoding",
+"СоздатьТвитОпрос": "CreatePollTweet",
+"МассивИменЛистов": "ArrayOfSheetNames",
+"Изменить событие": "Edit event",
+"СмещениеОтНачала": "OffsetFromStart",
+"ЗаписатьПараметр": "WriteParameter",
+"СтруктураСтатуса": "StatusStructure",
+"Расширение файла": "File extension",
+"МассивПараметров": "ParameterArray",
+"Описание альбома": "Album description",
+"ВызватьHTTPМетод": "CallHTTPMethod",
+"Имя файла в Slack": "File name in Slack",
+"ПреобразоватьДату": "ConvertDate",
+"Отправить контакт": "Send contact",
+"СоответствиеПолей": "FieldMapping",
+"ВК_ЗагрузитьВидео": "VK_UploadVideo",
+"ЗначениеЗаполнено": "ValueFilled",
+"СтруктураРодителя": "ParentStructure",
+"ОтправитьКартинку": "SendImage",
+"ТаблицаПараметров": "ParametersTable",
+"ЗакрытьТемуФорума": "CloseForumThread",
+"КалендарьИсточник": "SourceCalendar",
+"ГД_СоздатьКаталог": "GD_CreateCatalog",
+"СоздатьСоединение": "CreateConnection",
+"ГТ_СоздатьТаблицу": "GT_CreateTable",
+"Библиотека: Slack": "Library: Slack",
+"Удалить календарь": "Delete calendar",
+"Текст комментария": "Comment text",
+"Удалить сообщение": "Delete message",
+"Путь или ID файла": "Path or ID of the file",
+"КалендарьПриемник": "TargetCalendar",
+"АТ_СоздатьТаблицу": "AT_CreateTable",
+"Дата       : date": "Date        : date",
+"Скрытый календарь": "Hidden calendar",
+"НаправлениеПоиска": "SearchDirection",
+"ОткрытьТемуФорума": "OpenForumThread",
+"СтруктураВозврата": "ReturnStructure",
+"Файл для загрузки": "File for upload",
+"ПараметрЛокальный": "LocalParameter",
+"СоответствиеФайла": "FileMapping",
+"Массив ID товаров": "Array of product IDs",
+"УправлениеТоваром": "ProductManagement",
+"Библиотека: Viber": "Library: Viber",
+"ИзменитьСообщение": "EditMessage",
+"ID целевого поста": "ID of the target post",
+"Копировать объект": "Copy object",
+"СоздатьБазуДанных": "CreateDatabase",
+"Отправить локацию": "SendLocation",
+"ВызватьИсключение": "RaiseException",
+"ПолучитьСписокБаз": "GetListOfBases",
+"ЗакрытьОбсуждение": "CloseDiscussion",
+"Данные для API v2": "Data for API v2",
+"Строка, Структура": "String, Structure",
+"ID блока родителя": "Parent block ID",
+"ОткрытьОбсуждение": "OpenDiscussion",
+"ОсновнаяСтруктура": "MainStructure",
+"ОтветСоответствие": "ResponseCorrespondence",
+"Значение свойства": "Property value",
+"Новое имя объекта": "New object name",
+"Наименование поля": "Field name",
+"ОпросСоответствие": "PollCorrespondence",
+"Новый комментарий": "NewComment",
+"Название свойства": "Property name",
+"При отправке  URL": "When sending URL",
+"Описание картинки": "Image description",
+"Тестовая подборка": "TestCollection",
+"Получить страницу": "Get page",
+"Тестовая кампания": "TestCampaign",
+"ВК_СоздатьИсторию": "VK_CreateStory",
+"ОсновноеИзмерение": "MajorDimension",
+"ЗагруженныеДанные": "UploadedData",
+"СоздатьОбсуждение": "CreateDiscussion",
+"СтруктураКампании": "CampaignStructure",
+"СортироватьПоДате": "SortByDate",
+"Название подборки": "Selection name",
+"Картинка автотест": "AutoTestImage",
+"ПолучитьПолеПочты": "GetEmailField",
+"Пост из автотеста": "Post from autotest",
+"СоздатьТемуФорума": "CreateForumThread",
+"Создать календарь": "Create calendar",
+"Наш первый клиент": "OurFirstClient",
+"СкопироватьОбъект": "CopyObject",
+"Тестовое описание": "TestDescription",
+"Секрет приложения": "Application secret",
+"СтруктураВарианта": "OptionStructure",
+"СтрЗаканчиваетсяНа": "StrEndsWith",
+"СуществующаяГруппа": "ExistingGroup",
+"ID книги источника": "SourceBookID",
+"УправлениеДиалогом": "DialogManagement",
+"Идентификатор базы": "Base identifier",
+"Архивировать канал": "Archive channel",
+"Идентификатор поля": "Field identifier",
+"Удаляет пост по id": "Deletes a post by ID",
+"URL для сокращения": "URL for shortening",
+"Изменить календарь": "Edit calendar",
+"ДополнительныеФото": "AdditionalPhotos",
+"ПолучитьПолеСсылки": "GetLinkField",
+"ПолучитьПолеНомера": "GetNumberField",
+"Заголовок страницы": "Page title",
+"Тестовое сообщение": "TestMessage",
+"ЧЦ=10; ЧДЦ=0; ЧГ=0": "HC=10; HDC=0; HG=0",
+"Наименование видео": "Video name",
+"Переместить объект": "Move object",
+"ID книги приемника": "DestinationBookID",
+"ДанныеПользователя": "UserData",
+"Тестовый календарь": "TestCalendar",
+"ПолучитьСтатистику": "GetStatistics",
+"ПолучитьИДКартинки": "GetImageID",
+"Команда CLI: slack": "CLI command: slack",
+"ПолучитьТоварыПоИД": "GetProductsByID",
+"Изменить сообщение": "Edit message",
+"Удаляет блок по ID": "Deletes block by ID",
+"МассивКлючЗначение": "KeyValueArray",
+"ОтправитьСообщение": "SendMessage",
+"Тестовая таблица 2": "TestTable2",
+"Новое наименование": "New name",
+"Анонимность опроса": "Poll anonymity",
+"Создать твит опрос": "Create poll tweet",
+"ГТ_ПолучитьТаблицу": "GT_GetTable",
+"Создать твит видео": "Create video tweet",
+"Создать твит гифки": "Create gif tweet",
+"СтруктураПараметра": "ParameterStructure",
+"СоответствиеИконки": "Icon match",
+"Библиотека: Notion": "Library: Notion",
+"ДлительностьОпроса": "PollDuration",
+"Телеграм_БанРазбан": "Telegram_BanUnban",
+"ЛимитПользователей": "UserLimit",
+"ПолучитьПолеФлажка": "GetCheckboxField",
+"ЗагрузитьМалыйФайл": "UploadSmallFile",
+"Имя        : title": "Name        : title",
+"Опубликовать папку": "Publish folder",
+"Получить календарь": "Get calendar",
+"ЯДиск_СоздатьПапку": "YDisk_CreateFolder",
+"Команда CLI: viber": "CLI Command: viber",
+"'Желтый','Зеленый'": "'Yellow','Green'",
+"СоответствиеФайлов": "FileMapping",
+"Работа с доступами": "Access management",
+"ИдентификаторФайла": "FileID",
+"ПолеИдентификатора": "IdentifierField",
+"URL источник файла": "URL source of the file",
+"Написать сообщение": "Write a message",
+"Открыть обсуждение": "Open discussion",
+"Закрыть обсуждение": "Close discussion",
+"ДополнительныйЦвет": "SecondaryColor",
+"Создать обсуждение": "Create discussion",
+"Установить Webhook": "Set Webhook",
+"ПараметрВКоллекцию": "ParameterToCollection",
+"Активный   : green": "Active      : green",
+"УправлениеСобытием": "EventManagement",
+"Отправить картинку": "Send image",
+"УдалитьВнешнийФайл": "DeleteExternalFile",
+"Токен пользователя": "User token",
+"Отправить документ": "Send document",
+"Тестовый заголовок": "TestTitle",
+"ПолучитьОбновления": "GetUpdates",
+"Удалить комментарий": "Delete comment",
+"ПолучитьДанныеФайла": "GetFileData",
+"МассивПользователей": "ArrayOfUsers",
+"Переместить событие": "Move event",
+"Создать комментарий": "Create comment",
+"Новое описание базы": "New database description",
+"Архив      : yellow": "Archive     : yellow",
+"Библиотека: Dropbox": "Library: Dropbox",
+"Команда CLI: google": "CLI command: google",
+"Скоприровать объект": "Copy object",
+"СоответствиеОбложки": "Cover match",
+"Команда CLI: gdrive": "CLI Command: gdrive",
+"Количество : number": "Quantity    : number",
+"Структура Из Строка": "Structure From String",
+"Создать базу данных": "Create database",
+"ПолучитьВнешнийФайл": "GetExternalFile",
+"Команда CLI: notion": "CLI command: notion",
+"СтруктураПараметров": "ParametersStructure",
+"Массив файлов видео": "Video files array",
+"Длительность опроса": "Poll duration",
+"СгруппироватьТовары": "GroupProducts",
+"Получить статистику": "Get statistics",
+"Получает файл по ID": "Gets file by ID",
+"СтруктураЗаголовков": "HeadersStructure",
+"СтруктураКлавиатуры": "KeyboardStructure",
+"Массив из Структура": "Array of Structure",
+"Массив файлов гифок": "Gif files array",
+"Данные для API v1.1": "Data for API v1.1",
+"Создает новый канал": "Creates a new channel",
+"Наименование канала": "Channel name",
+"СоздатьТвитКартинки": "Create image tweet",
+"Создать\/Удалить тег": "Create\/Delete tag",
+"Структура из Строка": "Structure from String",
+"Библиотека: Twitter": "Library: Twitter",
+"СоответствиеМетодов": "MethodCorrespondence",
+"Команда CLI: yadisk": "CLI command: yadisk",
+"Отбор по типу файла": "Filter by file type",
+"Опубликовать объект": "Publish object",
+"Альбом из автотеста": "AlbumFromAutoTest",
+"Создает новую книгу": "Creates a new book",
+"Отправляемая ссылка": "SentLink",
+"Идентификатор книги": "BookIdentifier",
+"ПолучитьТекущуюДату": "GetCurrentDate",
+"СоответствиеСобытия": "EventMatch",
+"СоответствиеСвойств": "PropertyMatch",
+"Удалить тему форума": "Delete forum thread",
+"ВК_МетодыОбсуждений": "VK_DiscussionMethods",
+"НаписатьВОбсуждение": "WriteInDiscussion",
+"Ставит лайк на пост": "Likes a post",
+"НаписатьКомментарий": "WriteComment",
+"Создает базу данных": "Creates a database",
+"Дата начала периода": "Start date of the period",
+"Команда CLI: yandex": "CLI Command: yandex",
+"Путь внутри объекта": "Path inside the object",
+"Измененная подборка": "EditedCollection",
+"Открыть тему форума": "Open forum thread",
+"Идентификатор файла": "File identifier",
+"ПутьЛоговБиблиотеки": "LibraryLogPath",
+"Получить список баз": "Get list of bases",
+"АльтернативныйТекст": "AlternateText",
+"Получить обновления": "Get updates",
+"Переименовать канал": "Rename channel",
+"ЗаменитьСпецСимволы": "ReplaceSpecialCharacters",
+"ПолучитьСписокТегов": "GetTagList",
+"РабочееПространство": "Workspace",
+"ПолучитьКомментарии": "GetComments",
+"Отправить сообщение": "Send message",
+"ПолучитьОбщийМодуль": "GetCommonModule",
+"Закрепить сообщение": "Pin message",
+"Открепить сообщение": "Unpin message",
+"Массив Из Структура": "Array of Structures",
+"Удаляет тему форума": "Deletes a forum thread",
+"Создать тему форума": "Create forum thread",
+"Переслать сообщение": "Forward message",
+"Закрыть тему форума": "Close forum thread",
+"ПолучитьПолеВложения": "GetAttachmentField",
+"ответ сервера Google": "Google server response",
+"Путь или ID каталога": "Path or ID of the directory",
+"Делает репост записи": "Reposts the record",
+"ID родительской базы": "Parent database ID",
+"Соответствие свойств": "Properties match",
+"Получить комментарии": "Get comments",
+"ВК_ЛайкРепостКоммент": "VK_LikeRepostComment",
+"ЗагрузитьБольшойФайл": "UploadLargeFile",
+"ПолучитьПолеТелефона": "GetPhoneField",
+"Наименование альбома": "Album name",
+"Создать\/Удалить пост": "Create\/Delete post",
+"URL к внешнему файлу": "URL to external file",
+"Обновленный файл.jpg": "UpdatedFile.jpg",
+"Изменить комментарий": "Modify comment",
+"Получить комментарий": "Get comment",
+"ОтправитьВнешнийФайл": "SendExternalFile",
+"ID копируемого листа": "CopiedSheetID",
+"Проверка_НоушнОбъект": "Check_NotionObject",
+"СоответствиеСимволов": "CharacterMapping",
+"Тестовое сообщение 1": "TestMessage1",
+"Тестовое сообщение 2": "TestMessage2",
+"Список пользователей": "User list",
+"Тестовый комментарий": "TestComment",
+"Библиотека: Airtable": "Library: Airtable",
+"ID страницы родителя": "Parent page ID",
+"Изменить тему форума": "Edit forum thread",
+"Библиотека: Telegram": "Library: Telegram",
+"Свойства базы данных": "Database properties",
+"Команда CLI: twitter": "CLI Command: twitter",
+"Пустой макет события": "Empty event template",
+"ЗаголовокАвторизации": "AuthorizationHeader",
+"Аннотация к картинке": "Image annotation",
+"Создать\/Удалить блок": "Create\/Delete block",
+"Команда CLI: dropbox": "CLI Command: dropbox",
+"СоответствиеВозврата": "ReturnMapping",
+"МассивСтруктурКнопок": "ArrayOfButtonStructures",
+"СтруктураОтправителя": "SenderStructure",
+"СоздатьТекстовыйТвит": "CreateTextTweet",
+"Написать комментарий": "Write a comment",
+"Команда CLI: gsheets": "CLI Command: gsheets",
+"Идентификатор канала": "Channel ID",
+"ПолучитьПодборкиПоИД": "GetSelectionsByID",
+"СоответствиеВарианта": "OptionMap",
+"Новый заголовок базы": "New database title",
+"Вайбер_ОтправитьФайл": "Viber_SendFile",
+"Сгруппировать товары": "Group products",
+"Описание нового поля": "Description of the new field",
+"Получить базу данных": "Get database",
+"Удалить внешний файл": "Delete external file",
+"ИзменитьСвойстваБазы": "EditDatabaseProperties",
+"СоответствиеЗначений": "ValueMapping",
+"ПодчиненнаяСтруктура": "SubordinateStructure",
+"ПолучитьСписокФайлов": "GetFilesList",
+"Отправить медиагруппу": "Send media group",
+"ВыполнитьЗапросСТелом": "ExecuteRequestWithBody",
+"ВК_ОтправитьСообщение": "VK_SendMessage",
+"Создать\/Изменить поле": "Create\/Edit field",
+"Ноушн_СоздатьСтраницу": "Notion_CreatePage",
+"Слак_ПолучитьСписокВФ": "Slack_GetExternalFileList",
+"ВК_СоздатьУдалитьПост": "VK_CreateDeletePost",
+"Твиттер_ОбновитьТокен": "Twitter_UpdateToken",
+"Создать\/Изменить базу": "Create\/Edit database",
+"Удаляет событие по ID": "Deletes an event by ID",
+"ВК_ПолучитьСтатистику": "VK_GetStatistics",
+"Создать копию объекта": "Create object copy",
+"Идентификатор объекта": "Object identifier",
+"ПреобразованныеДанные": "ConvertedData",
+"МассивВариантовВыбора": "ChoiceOptionArray",
+"Новый текст сообщения": "New message text",
+"Новое название канала": "New channel name",
+"Строка,ДвоичныеДанные": "String, BinaryData",
+"Удаляет файл на Slack": "Deletes a file on Slack",
+"Получить данные файла": "Get file data",
+"Получить внешний файл": "Get external file",
+"Команда CLI: telegram": "CLI command: telegram",
+"Заголовок приглашения": "Invitation title",
+"В работе   : checkbox": "In progress : checkbox",
+"МассивВариантовОпроса": "PollOptionsArray",
+"Создать твит картинки": "Create image tweet",
+"ПолучитьСписокЗаписей": "GetListOfRecords",
+"ДвоичныеДанные,Строка": "BinaryData,String",
+"СоответствиеЗаголовка": "HeaderMapping",
+"ПолучитьСписокКаналов": "GetChannelList",
+"ТекстПервогоСообщения": "Text of the first message",
+"Написать в обсуждение": "Write in discussion",
+"СоответствиеКатегорий": "CategoryCorrespondence",
+"Получить товары по ID": "Get products by ID",
+"Идентификатор таблицы": "Table identifier",
+"Массив описаний полей": "Array of field descriptions",
+"Заголовок базы данных": "Database title",
+"Библиотека: Yandex ID": "Library: Yandex ID",
+"Создает новое событие": "Creates a new event",
+"ПолучитьПолеСтроковое": "GetStringField",
+"ПолучитьЗначенияЯчеек": "GetCellValues",
+"Удаляет лист из книги": "Deletes a sheet from the book",
+"Путь сохранения файла": "File save path",
+"Ссылка получения кода": "Code retrieval link",
+"Добавить внешний файл": "Add external file",
+"ОтправлятьУведомления": "SendNotifications",
+"ID асинхронной работы": "AsynchronousJobID",
+"ID пользователя Viber": "Viber User ID",
+"ЗагрузитьФотоНаСервер": "UploadPhotoToServer",
+"Получить список тегов": "Get list of tags",
+"Получить таблицы базы": "Get base tables",
+"Наименование кампании": "Campaign name",
+"ПолучитьСписокЗаказов": "GetOrderList",
+"ID рекламной кампании": "Advertising campaign ID",
+"Команда CLI: airtable": "CLI Command: airtable",
+"Загрузить файл по URL": "Upload file by URL",
+"СтруктураПользователя": "UserStructure",
+"ID целевого сообщения": "Target message ID",
+"УдалитьСвойствоТовара": "DeleteProductProperty",
+"СоздатьСвойствоТовара": "CreateProductProperty",
+"Географическая широта": "Geographic latitude",
+"ПолучитьСписокСвойств": "GetPropertyList",
+"двоичные данные файла": "binary data of the file",
+"ID чата создания темы": "Thread creation chat ID",
+"ПолучитьСписокТоваров": "GetProductList",
+"ДобавитьТоварВПодборку": "AddProductToSelection",
+"Соответствие Из Строка": "Correspondence From String",
+"ДропБокс_ЗагрузитьФайл": "Dropbox_UploadFile",
+"ЗагрузитьВидеоНаСервер": "UploadVideoToServer",
+"ID рекламного кабинета": "Advertising account ID",
+"Сделать файл публичным": "Make file public",
+"Соответствие из Строка": "Map from String",
+"ВК_СоздатьСсылкуТокена": "VK_CreateTokenLink",
+"ПолучитьМассивПодборок": "GetSelectionArray",
+"Создать составной пост": "Create composite post",
+"Путь к папке или файлу": "Path to folder or file",
+"Создает твит с опросом": "Creates a tweet with a poll",
+"Вайбер_ОтправитьСсылку": "Viber_SendLink",
+"СоответствиеПараметров": "ParameterMap",
+"Строка, ДвоичныеДанные": "String, BinaryData",
+"ВыполнитьЗапросБезТела": "ExecuteRequestWithoutBody",
+"Массив описаний блоков": "Array of block descriptions",
+"Дневной лимит в рублях": "Daily limit in rubles",
+"Новое описание события": "New event description",
+"Сделать файл приватным": "Make file private",
+"Загружает файл на диск": "Uploads a file to the drive",
+"Получить пользователей": "Get users",
+"СоздатьПодборкуТоваров": "CreateProductCollection",
+"Отправить внешний файл": "Send external file",
+"Новое имя главной темы": "New main thread name",
+"Загрузить\/Удалить файл": "Upload\/Delete file",
+"УдалитьТоварИзПодборки": "RemoveProductFromSelection",
+"НаименованиеИзмененное": "EditedName",
+"ИзменитьСвойствоТовара": "EditProductProperty",
+"Вернуть дочерние блоки": "Return child blocks",
+"Массив из Произвольный": "Array of Arbitrary",
+"Сообщение из автотеста": "Message from autotest",
+"Удаляет подборку по ID": "Deletes the selection by ID",
+"Дата окончания периода": "End date of the period",
+"Описание   : rich_text": "Description : rich_text",
+"Возвращаемое значение:": "Return value:",
+"Загрузить\/Удалить Файл": "Upload\/Delete file",
+"Изменить свойства базы": "Edit database properties",
+"Установить цель канала": "Set channel purpose",
+"и почитать комментарии": "and read comments",
+"Установить тему канала": "Set channel topic",
+"Массив файлов картинок": "Image files array",
+"Получить токен по коду": "Get token by code",
+"Получает список файлов": "Gets the list of files",
+"ID изменяемой страницы": "ID of the page being modified",
+"Получает событие по ID": "Gets an event by ID",
+"ID календаря приемника": "ID of the target calendar",
+"Получить список файлов": "Get list of files",
+"Создать\/Удалить записи": "Create\/Delete records",
+"СтандартныеЗависимости": "StandardDependencies",
+"Массив из Строка,Число": "Array of String,Number",
+"ПолучитьСписокПодборок": "GetSelectionList",
+"Создать текстовый твит": "Create text tweet",
+"ID календаря источника": "ID of the source calendar",
+"Географическая долгота": "Geographic longitude",
+"Команда CLI: gcalendar": "CLI Command: gcalendar",
+"Открыть\/Закрыть диалог": "Open\/Close dialog",
+"ID файла для скачивания": "File ID for downloading",
+"ВК_СоздатьСоставнойПост": "VK_CreateCompositePost",
+"Получить список товаров": "Get product list",
+"СоздатьПроизвольныйТвит": "CreateCustomTweet",
+"УникальныйИдентификатор": "UniqueIdentifier",
+"ПолучитьСписокКаталогов": "GetDirectoriesList",
+"Путь к объекту удаления": "Path to the object to delete",
+"Путь к созаваемой папке": "Path to the created folder",
+"Создать страницу в базу": "Create page in database",
+"Пустое описание товара:": "Empty product description:",
+"Телеграм_ОтправитьОпрос": "Telegram_SendPoll",
+"Удаляет календарь по ID": "Deletes a calendar by ID",
+"ГД_ЗагрузитьУдалитьФайл": "GD_UploadDeleteFile",
+"Наименование новой базы": "New base name",
+"Твиттер_СоздатьТвитСГиф": "Twitter_CreateTweetWithGif",
+"Наименование обсуждения": "Discussion name",
+"МассивURLФайловВложений": "ArrayOfAttachmentURLs",
+"Создать\/Удалить событие": "Create\/Delete event",
+"Получить значения ячеек": "Get cell values",
+"Имя файла с расширением": "File name with extension",
+"Идентификатор базы База": "Base identifier Base",
+"Текст первого сообщения": "Text of the first message",
+"СпособКодированияСтроки": "StringEncodingMethod",
+"Какой ваш любимый цвет?": "What's your favorite color?",
+"Получить список записей": "Get list of records",
+"Создать\/Удалить каталог": "Create\/Delete catalog",
+"ЗагрузитьМассивВложений": "Upload attachments array",
+"Получить список каналов": "Get channel list",
+"Новое название подборки": "New selection name",
+"ИсключатьАрхивированные": "ExcludeArchived",
+"ПараметрыЗапросаВСтроку": "RequestParametersToString",
+"Получить список свойств": "Get property list",
+"Создать свойство товара": "Create product property",
+"Телеграм_ОтправитьГифку": "Telegram_SendGIF",
+"Получить\/Обновить токен": "Get\/Update token",
+"Создать канал приватным": "Create channel as private",
+"Удалить свойство товара": "Delete product property",
+"Библиотека: Yandex Disk": "Library: Yandex Disk",
+"Получить историю канала": "Get channel history",
+"АТ_СоздатьУдалитьЗаписи": "AT_CreateDeleteRecords",
+"Лайк\/Репост\/Комментарий": "Like\/Repost\/Comment",
+"ДФ=yyyy-MM-ddTHH:mm:ssZ": "DF=yyyy-MM-ddTHH:mm:ssZ",
+"ИзменитьПодборкуТоваров": "EditProductCollection",
+"ВК_СоздатьТоварПодборку": "VK_CreateProductSelection",
+"Сформировать клавиатуру": "Create keyboard",
+"Новый текст комментария": "New comment text",
+"ОтправитьМестоположение": "SendLocation",
+"Слак_ЗагрузитьУдалитьВФ": "Slack_UploadDeleteExternalFile",
+"Массив из Строка, Число": "Array of string, number",
+"Получить список заказов": "Get order list",
+"Новая картинка подборки": "New selection image",
+"Получить подборки по ID": "Get selections by ID",
+"ДФ=yyyy-MM-ddThh:mm:ssZ": "ISO8601Datetime",
+"ЯДиск_ПереместитьОбъект": "YDisk_MoveObject",
+"Получить список событий": "Get list of events",
+"Массив вариантов ответа": "Array of answer options",
+"Массив ID пользователей": "User ID Array",
+"Произвольный, HTTPОтвет": "Arbitrary, HTTP Response",
+"Скопированный файл.jpeg": "CopiedFile.jpeg",
+"Новое значение свойства": "New property value",
+"Массив вариантов опроса": "Poll options array",
+"Вайбер_ОтправитьКонтакт": "Viber_SendContact",
+"Телеграм_ОтправитьАудио": "Telegram_SendAudio",
+"Телеграм_ОтправитьВидео": "Telegram_SendVideo",
+"Действия с обсуждениями": "Actions with discussions",
+"Вайбер_ОтправитьЛокацию": "Viber_SendLocation",
+"ДропБокс_СоздатьКаталог": "Dropbox_CreateFolder",
+"для дальнейших действий": "for further actions",
+"Получить список областей": "Get region list",
+"Набор тестов для YAxUnit": "Test suite for YAxUnit",
+"Изменяет название канала": "Changes the name of the channel",
+"Ноушн_СоздатьУдалитьБлок": "Notion_CreateDeleteBlock",
+"Получить информацию бота": "Get bot information",
+"Получить данные аккаунта": "Get account data",
+"Изменить свойство товара": "Edit product property",
+"Создать\/Изменить таблицу": "Create\/Edit table",
+"Отправить местоположение": "Send location",
+"ПолучитьСтатистикуПостов": "GetPostStatistics",
+"Строка, Массив из Строка": "String, Array of Strings",
+"ОписаниеПримитивногоПоля": "PrimitiveFieldDescription",
+"СоздатьРекламнуюКампанию": "CreateAdvertisingCampaign",
+"Создает пустой календарь": "Creates an empty calendar",
+"ДропБокс_ПолучитьАккаунт": "Dropbox_GetAccount",
+"Файл источник обновления": "File source for update",
+"Вайбер_ОтправитьКартинку": "Viber_SendImage",
+"Получить список подборок": "Get selection list",
+"ID целевого пользователя": "Target user ID",
+"Создать подборку товаров": "Create product selection",
+"Путь к целевому каталогу": "Path to the target directory",
+"Библиотека: Google Drive": "Library: Google Drive",
+"Новый тестовый заголовок": "NewTestTitle",
+"Загрузить фото на сервер": "Upload photo to server",
+"ГК_ПолучитьСписокСобытий": "GC_GetEventList",
+"Создать товар и подборку": "Create product and selection",
+"ГК_СоздатьУдалитьСобытие": "GC_CreateDeleteEvent",
+"ПолучитьЗаголовкиЗапроса": "GetRequestHeaders",
+"Наименование нового поля": "New field name",
+"Ссылка (URL) под записью": "Link (URL) under the post",
+"ПолучитьСписокРазрешений": "GetPermissionsList",
+"СформироватьБлокКартинку": "GenerateImageBlock",
+"ID пользователя адресата": "Recipient user ID",
+"Создает новое обсуждение": "Creates a new discussion",
+"СохранитьКартинкуВАльбом": "SaveImageToAlbum",
+"Массив заголовков кнопок": "Array of button titles",
+"ВК_ПолучитьСписокСвойств": "VK_GetPropertyList",
+"Путь к объекту оригинала": "Path to the original object",
+"Новый каталог размещения": "New parent directory",
+"D:\\GD\\Мой диск\\data.json": "D:\\GD\\My Drive\\data.json",
+"Создает каталог на диске": "Creates a directory on the disk",
+"Массив товаров или товар": "Array of products or product",
+"Новое описание календаря": "New calendar description",
+"ВК_ПолучитьСписокЗаказов": "VK_GetOrderList",
+"Признак рекламного поста": "Sign of an advertising post",
+"Данные файл для загрузки": "Data file for upload",
+"Строка, Массив Из Строка": "String, Array of Strings",
+"ВК_ПолучитьСписокТоваров": "VK_GetProductList",
+"Получить число участников": "Get participant count",
+"ВыполнитьЗапросМультипарт": "ExecuteMultipartRequest",
+"Отменить публикацию папки": "Unpublish folder",
+"ЯДиск_СоздатьКопиюОбъекта": "YDisk_CreateObjectCopy",
+"ПолучитьСписокФайловПапки": "GetListOfFolderFiles",
+"Получить публичный объект": "Get public object",
+"Копирует файл или каталог": "Copies file or directory",
+"Заголовок файла для Slack": "File title for Slack",
+"Создает твит без вложений": "Creates a tweet without attachments",
+"ПолучитьСсылкуАвторизации": "GetAuthorizationLink",
+"Загрузить видео на сервер": "Upload video to server",
+"Идентификатор комментария": "Comment identifier",
+"Получить список каталогов": "Get list of directories",
+"Отменить публикацию файла": "Unpublish file",
+"ID пользователей(я) Viber": "Viber User(s) ID",
+"Изменить подборку товаров": "Edit product selection",
+"Ноушн_СоздатьИзменитьБазу": "Notion_CreateEditDatabase",
+"Номер рекламной категории": "Advertising category number",
+"См. ПолучитьОписаниеФайла": "See GetFileDescription",
+"Добавить товар в подборку": "Add product to selection",
+"Удалить товар из подборки": "Remove product from selection",
+"Добавить\/Удалить картинку": "Add\/Delete image",
+"Библиотека: Google Sheets": "Library: Google Sheets",
+"ВК_ПолучитьСписокПодборок": "VK_GetSelectionList",
+"Создать произвольный твит": "Create custom tweet",
+"См.ПолучитьОписаниеТовара": "See GetProductDescription",
+"Устанавливает тему канала": "Sets the channel topic",
+"Изменить имя главной темы": "Change main topic name",
+"URL для установки Webhook": "URL for setting up Webhook",
+"Телеграм_ОтправитьКонтакт": "Telegram_SendContact",
+"Некорректный вид отправки": "Incorrect sending view",
+"Твиттер_СоздатьТвитСВидео": "Twitter_CreateTweetWithVideo",
+"Создает новую базу данных": "Creates a new database",
+"Новый альбом из автотеста": "NewAlbumFromAutoTest",
+"Преобразовать код в токен": "Convert code to token",
+"Слак_ОткрытьЗакрытьДиалог": "Slack_OpenCloseDialog",
+"Удаляет комментарий по ID": "Deletes comment by ID",
+"Идентификатор базы данных": "Database identifier",
+"Путь назначения для копии": "Destination path for the copy",
+"Изменить календарь списка": "Edit list calendar",
+"Слак_ПолучитьСписокФайлов": "Slack_GetFileList",
+"Наименование нового листа": "NewSheetName",
+"Статус     : Соответствие": "Status      : Map",
+"Архивирует активный канал": "Archives an active channel",
+"Слак_ЗагрузитьУдалитьФайл": "Slack_UploadDeleteFile",
+"OPI_ПолучениеДанныхТестов": "OPI_GetTestData",
+"Тестовый товар измененный": "EditedTestProduct",
+"Заполнить\/Очистить ячейки": "Fill\/Clear cells",
+"Установить значения ячеек": "SetCellValues",
+"Создать\/Удалить календарь": "Create\/Delete calendar",
+"Получить календарь списка": "Get list calendar",
+"ДропБокс_РаботаСДоступами": "Dropbox_AccessManagement",
+"Создает пост с картинками": "Creates a post with images",
+"Добавляет товар в подборку": "Adds a product to the selection",
+"Получает схему таблиц базы": "Gets the schema of base tables",
+"Слак_ПолучитьСписокКаналов": "Slack_GetChannelList",
+"Телеграм_УстановитьWebhook": "Telegram_SetWebhook",
+"Массив соответствий файлов": "Array of file mappings",
+"Создать\/Архивировать канал": "Create\/Archive channel",
+"Получить статистику постов": "Get post statistics",
+"Получить список календарей": "Get list of calendars",
+"Получить информацию о базе": "Get database info",
+"Получить категории товаров": "Get product categories",
+"Ноушн_СоздатьСтраницуВБазу": "Notion_CreatePageInDatabase",
+"Сформировать блок картинку": "Generate image block",
+"Изменить свойства страницы": "Edit page properties",
+"ГТ_ЗаполнитьОчиститьЯчейки": "GT_FillClearCells",
+"Телеграм_ОтправитьКартинку": "Telegram_SendImage",
+"Получает комментарий по ID": "Gets comment by ID",
+"ID оригинального сообщения": "Original message ID",
+"разрешение на методы Drive": "Drive methods permission",
+"ГД_ПолучитьСписокКаталогов": "GD_GetCatalogList",
+"Число знаков после запятой": "Number of decimal places",
+"Получить код подтверждения": "Get confirmation code",
+"ПолучитьИмяВременногоФайла": "GetTempFileName",
+"Получить информацию канала": "Get channel info",
+"Структура Из КлючИЗначение": "Structure of Key-Value",
+"Наименование новой таблицы": "New table name",
+"Путь сохранения на Dropbox": "Save path on Dropbox",
+"Телеграм_ОтправитьДокумент": "Telegram_SendDocument",
+"Скрыть главную тему форума": "Hide main forum thread",
+"ЯДиск_ПолучитьСписокФайлов": "YDisk_GetFileList",
+"ГК_СоздатьУдалитьКалендарь": "GC_CreateDeleteCalendar",
+"Мне больше нравится желтый": "I like yellow more",
+"Получить информацию о боте": "Get bot information",
+"ЯДиск_ЗагрузитьУдалитьФайл": "YDisk_UploadDeleteFile",
+"Очищает значение в ячейках": "Clears the value in cells",
+"Создать рекламную кампанию": "Create advertising campaign",
+"ДропБокс_СоздатьУдалитьТег": "Dropbox_CreateDeleteTag",
+"Описание тестового события": "TestEventDescription",
+"Создать ссылку-приглашение": "Create invitation link",
+"Телеграм_ПереслатьСообщение": "Telegram_ForwardMessage",
+"Временная отметка сообщения": "Message timestamp",
+"Слак_ПолучитьСписокОбластей": "Slack_GetRegionList",
+"ПолучитьСписокПользователей": "GetUserList",
+"ВК_СохранитьУдалитьКартинку": "VK_SaveDeleteImage",
+"Загрузить по URL и получить": "Upload by URL and get",
+"ВК_ПолучитьСтатистикуПостов": "VK_GetPostStatistics",
+"Создет новое поле в таблице": "Creates a new field in the table",
+"Путь к публикуемому объекту": "Path to the object to be published",
+"ID целевой стены или группы": "ID of the target wall or group",
+"Создать\/Удалить тему форума": "Create\/Delete forum topic",
+"Ноушн_ПолучитьПользователей": "Notion_GetUsers",
+"URL для кнопки под историей": "URL for button under the story",
+"Массив соответствий товаров": "Array of product matches",
+"Тип отправляемого сообщения": "TypeOfSentMessage",
+"ВК_СоздатьТоварСоСвойствами": "VK_CreateProductWithProperties",
+"Твиттер_СоздатьТвитСОпросом": "Twitter_CreateTweetWithPoll",
+"Сохранить картинку в альбом": "Save image to album",
+"ВК_СоздатьРекламнуюКампанию": "VK_CreateAdCampaign",
+"ID альбома, если необходимо": "Album ID, if necessary",
+"ВК_ПолучитьКатегорииТоваров": "VK_GetProductCategories",
+"ГК_ПолучитьСписокКалендарей": "GC_GetCalendarList",
+"Ключ > ID, Значение > Emoji": "Key > ID, Value > Emoji",
+"Создать товар со свойствами": "Create product with properties",
+"Отправить\/Удалить сообщение": "Send\/Delete message",
+"Путь к файлу для скачивания": "Path to the file for downloading",
+"Получает информацию о файле": "Gets information about the file",
+"СформироватьОписаниеТаблицы": "GenerateTableDescription",
+"Получить ссылку авторизации": "Get authorization link",
+"Создает историю из картинки": "Creates a story from an image",
+"ПолучитьСписокВнешнихФайлов": "GetExternalFileList",
+"URL для перехода в браузере": "URL for browser transition",
+"Отменить публикацию объекта": "Unpublish object",
+"Библиотека: Google Calendar": "Library: Google Calendar",
+"ID стены расположения поста": "ID of the wall where the post is located",
+"Массив каналов для отправки": "Array of channels for sending",
+"Очистить основной календарь": "Clear primary calendar",
+"Изменить наименование книги": "ChangeBookName",
+"разрешение на методы Sheets": "Sheets methods permission",
+"Добавить календарь в список": "Add calendar to list",
+"Удалить календарь из списка": "Remove calendar from list",
+"Массив соответствий событий": "Array of event mappings",
+"Удалить картинку из альбома": "Deletes an image from the album",
+"Отправить\/Удалить эфемерное": "Send\/Delete ephemeral",
+"Телеграм_ПолучитьОбновления": "Telegram_GetUpdates",
+"Код со страницы авторизации": "Code from the authorization page",
+"Получить информацию о диске": "Get disk information",
+"ДропБокс_ЗагрузитьФайлПоURL": "Dropbox_UploadFileByURL",
+"HEX цвет кнопок с # в начале": "HEX color of buttons with # at the beginning",
+"C:\\GDrive\\Мой диск\\data.json": "C:\\GDrive\\My Drive\\data.json",
+"Массив сформированных кнопок": "Array of formed buttons",
+"Восстановить объект к версии": "Restore object to version",
+"Создать рекламное объявление": "Create advertising post",
+"УдалитьВариантСвойстваТовара": "DeleteProductPropertyVariant",
+"ГВ_ПолучитьСсылкуАвторизации": "GV_GetAuthorizationLink",
+"Скрыть\/Показать главную тему": "Hide\/Show main topic",
+"JSON массива описаний блоков": "JSON array of block descriptions",
+"ПолучитьИнформациюОбАккаунте": "GetAccountInformation",
+"Получить список файлов папки": "Get list of folder files",
+"Получает описание поля с URL": "Gets the description of a URL field",
+"Библиотека: Google Workspace": "Library: Google Workspace",
+"Эти токены обновлять не надо": "These tokens do not need to be updated",
+"Массив соответствий подборок": "Array of selection matches",
+"Получить данные пользователя": "Get user data",
+"Показать главную тему форума": "Show main forum thread",
+"Обсуждаем: какой цвет лучше?": "Discussing: Which color is better?",
+"ПолучитьСтандартныеПараметры": "GetStandardParameters",
+"ГД_СоздатьУдалитьКомментарий": "GD_CreateDeleteComment",
+"Создает новую таблицу в базе": "Creates a new table in the base",
+"Получить информацию о канале": "Get channel information",
+"Получить ссылку на сообщение": "Get message link",
+"URL картинки иконки страницы": "URL of the page icon image",
+"Добавляет новый внешний файл": "Adds a new external file",
+"Получить список внеш. файлов": "Get external file list",
+"ПолучитьСоответствиеКартинки": "GetImageCorrespondence",
+"Загрузить\/Удалить внеш. файл": "Upload\/Delete external file",
+"Твиттер_СоздатьТекстовыйТвит": "Twitter_CreateTextTweet",
+"Отправить группу медиафайлов": "Send media group",
+"Слак_ПолучитьИнформациюОБоте": "Slack_GetBotInfo",
+"JSON файлов или путь к .json": "File JSON or path to .json",
+"Получить список комментариев": "Get list of comments",
+"Добавляет новый лист в книгу": "Adds a new sheet to the book",
+"Скрывает главную тему форума": "Hides the main forum thread",
+"Время ожидания новых событий": "Waiting time for new events",
+"Получает информацию о канале": "Gets information about the channel",
+"JSON описание товара или путь": "JSON description of the product or path",
+"разрешение на методы Calendar": "Calendar methods permission",
+"Удаляет ранее созданный товар": "Deletes a previously created product",
+"Слак_СоздатьАрхивироватьКанал": "Slack_CreateArchiveChannel",
+"Закрепить\/Открепить сообщение": "Pin\/Unpin message",
+"URL картинки обложки страницы": "URL of the page cover image",
+"Альтернативный текст картинки": "Alternate text of the image",
+"Получить отложенные сообщения": "Get scheduled messages",
+"Отправить текстовое сообщение": "Send text message",
+"Получить статистику по постам": "Get post statistics",
+"Получает список доступных баз": "Gets the list of available bases",
+"СоздатьЗаголовокАвторизацииV1": "CreateAuthorizationHeaderV1",
+"Телеграм_ОтправитьМедиагруппу": "Telegram_SendMediaGroup",
+"app_id из настроек приложения": "app_id from application settings",
+"Закрывает существующий диалог": "Closes an existing dialog",
+"Соответствие Из КлючИЗначение": "Key-Value Pair",
+"ID подборки, если нужен отбор": "Selection ID, if filtering is needed",
+"Массив соответствий каталогов": "Array of directory mappings",
+"Ошибка в данных описания поля": "Error in field description data",
+"ПолучитьТелоКакДвоичныеДанные": "GetBodyAsBinaryData",
+"Получить ссылку на скачивание": "Get download link",
+"ИзменитьВариантСвойстваТовара": "EditProductPropertyVariant",
+"Изменяет существующее событие": "Edits an existing event",
+"Соответствие из КлючИЗначение": "Map from KeyAndValue",
+"ПолучитьСписокРабочихОбластей": "GetWorkspaceList",
+"Получить данные о базе данных": "Get database information",
+"Удаляет внешний файл из Slack": "Deletes an external file from Slack",
+"Получить онлайн пользователей": "Get online users",
+"Отправить эфемерное сообщение": "Send ephemeral message",
+"ДобавитьВариантСвойстваТовара": "AddProductPropertyVariant",
+"ID блока или сам блок образец": "Block ID or block sample itself",
+"Получить список пользователей": "Get user list",
+"Создает твит с видеовложением": "Creates a tweet with a video attachment",
+"Отбор по ID каталога родителя": "Filter by parent directory ID",
+"Ноушн_ПолучитьИнформациюОБазе": "Notion_GetDatabaseInfo",
+"Твиттер_СоздатьТвитСКартинкой": "Twitter_CreateTweetWithImage",
+"Добавить пользователя к файлу": "Add user to file",
+"JSON описания или путь к .json": "JSON description or path to .json",
+"Слак_ОтправитьУдалитьЭфемерное": "Slack_SendDeleteEphemeral",
+"Получить информацию об объекте": "Get object information",
+"Изменяет ранее созданный товар": "Edits a previously created product",
+"Получить список версий объекта": "Get list of object versions",
+"Получить список опубликованных": "Get published list",
+"Создать\/Удалить составной пост": "Create\/Delete composite post",
+"Размер файла в случае отправке": "File size in case of sending",
+"ПолучитьСтрокуИзДвоичныхДанных": "GetStringFromBinaryData",
+"Добавить пользователей к папке": "Add users to folder",
+"Получить описание файла !NOCLI": "Get file description !NOCLI",
+"ЯДиск_ПолучитьИнформациюОДиске": "YDisk_GetDiskInfo",
+"Удаляет ранее созданный альбом": "Deletes a previously created album",
+"ID события календаря источника": "ID of the source calendar event",
+"Идентификатор удаляемого листа": "IdentifierOfSheetToDelete",
+"ПолучитьДвоичныеДанныеИзСтроки": "GetBinaryDataFromString",
+"Идентификатор записи в таблице": "Record identifier in the table",
+"Слак_ОтправитьУдалитьСообщение": "Slack_SendDeleteMessage",
+"Выгнать пользователя из канала": "Kick user from channel",
+"УправлениеСостояниемТемыФорума": "ManageForumThreadState",
+"СохранитьПубличныйОбъектНаДиск": "SavePublicObjectToDisk",
+"Нельзя замешивать разные типы!": "Different types cannot be mixed!",
+"ДропБокс_ПолучитьОбновитьТокен": "Dropbox_GetUpdateToken",
+"Получить информацию о странице": "Get page info",
+"ПолучитьСписокКатегорийТоваров": "GetProductCategoryList",
+"Структура, Массив из Структура": "Structure, Array of Structures",
+"Путь или набору путей к файлам": "Path or set of paths to the files",
+"Получить список внешних файлов": "Get list of external files",
+"Целевой путь создания каталога": "Target path for creating the directory",
+"Получить ссылку для скачивания": "Get download link",
+"Ноушн_ИзменитьСвойстваСтраницы": "Notion_EditPageProperties",
+"Удаляет файл или каталог по ID": "Deletes file or directory by ID",
+"Создать ссылку получения токена": "Create token retrieval link",
+"Удалить вариант свойства товара": "Delete product property variant",
+"Создает твит с вложением-гифкой": "Creates a tweet with a gif attachment",
+"Двоичные данные или путь к фото": "Binary data or path to photo",
+"Путь назначение для перемещения": "Destination path for moving",
+"Получает информацию об аккаунте": "Gets account information",
+"Не удалось записать файл лога!:": "Failed to write log file!:",
+"Телеграм_ИзменитьИмяГлавнойТемы": "Telegram_ChangeMainTopicName",
+"Получить список иконок-аватаров": "Get avatar icon list",
+"Обновляет двоичные данные файла": "Updates file binary data",
+"Получает список каталогов диска": "Gets the list of drive directories",
+"ЯДиск_ДействияПубличныхОбъектов": "YDisk_PublicObjectActions",
+"Действия с публичными объектами": "Actions with public objects",
+"Получить статус загрузки по URL": "Get upload status by URL",
+"Получает значения ячеек таблицы": "Gets cell values of the table",
+"Получить список аватаров форума": "Get forum avatars list",
+"Создает пустую подборку товаров": "Creates an empty product selection",
+"Загружает файл на сервера Slack": "Uploads a file to Slack servers",
+"только конкретному пользователю": "only to a specific user",
+"ПолучитьСписокСобытийРекурсивно": "GetEventsListRecursively",
+"Удаляет текущего бота из канала": "Removes the current bot from the channel",
+"ID чата оригинального сообщения": "Chat ID of the original message",
+"Массив из Строка,ДвоичныеДанные": "Array from String, BinaryData",
+"Copyright (c) 2019, ООО 1С-Софт": "Copyright (c) 2019, LLC 1C-Soft",
+"Отправка в канал или в чат бота": "Sending to channel or bot chat",
+"См.ПолучитьСтандартныеПараметры": "See GetStandardParameters",
+"Целевой путь для нового объекта": "Target path for the new object",
+"Получить ссылку для авторизации": "Get authorization link",
+"Получить информацию об аккаунте": "Get account information",
+"Добавляет текущего бота в канал": "Adds the current bot to the channel",
+"Создает пустой каталог на диске": "Creates an empty directory on the drive",
+"Загружает файл на облачный диск": "Uploads a file to the cloud drive",
+"Телеграм_ПолучитьИнформациюБота": "Telegram_GetBotInfo",
+"Слак_ПолучитьОтложенныеСообщения": "Slack_GetScheduledMessages",
+"ЯДиск_ПолучитьСсылкуНаСкачивание": "YDisk_GetDownloadLink",
+"ПриостановитьРекламноеОбъявление": "PauseAdvertisingAd",
+"См. ПолучитьСписокИконокАватаров": "See GetAvatarIconList",
+"Ноушн_ПолучитьДанныеПользователя": "Notion_GetUserData",
+"Слак_ПолучитьСписокПользователей": "Slack_GetUserList",
+"Создает страницу в базе-родителе": "Creates a page in the parent database",
+"Получает список подборок товаров": "Gets the list of product selections",
+"Закрывает или удаляет обсуждение": "Close or delete discussion",
+"Удаляет объект по заданному пути": "Deletes an object at the specified path",
+"Количество возвращаемых объектов": "Number of returned objects",
+"Получить описание события !NOCLI": "Get event description !NOCLI",
+"Идентификатор файла или каталога": "Identifier of the file or folder",
+"ВыполнитьЗапросСДвоичнымиДанными": "ExecuteRequestWithBinaryData",
+"Отправляет видео в чат или канал": "Sends a video to a chat or channel",
+"Массив ячеек вида А1 для очистки": "Array of cells like A1 to be cleared",
+"Получить список рабочих областей": "Get workspace list",
+"Путь к удаляемой папке или файлу": "Path to the folder or file to be deleted",
+"Удаляет объект с облачного диска": "Deletes an object from the cloud drive",
+"ПолучитьСписокОтветовНаСообщение": "GetMessageReplyList",
+"Добавить вариант свойства товара": "Add product property variant",
+"Вайбер_ПолучитьИнформациюОКанале": "Viber_GetChannelInfo",
+"Получает описание поля типа дата": "Gets the description of a date field",
+"См.ДобавитьВариантСвойстваТовара": "See AddPropertyVariant",
+"Телеграм_ПолучитьЧислоУчастников": "Telegram_GetMemberCount",
+"Изменяет имя главной темы форума": "Edits the name of the main forum thread",
+"ПолучитьСписокОбъектовРекурсивно": "GetObjectsListRecursively",
+"Телеграм_ОтправитьМестоположение": "Telegram_SendLocation",
+"Обновляет токен по Refresh token": "Updates token by Refresh token",
+"Отправляет гифку в чат или канал": "Sends a GIF to a chat or channel",
+"JSON клавиатуры или путь к .json": "Keyboard JSON or path to .json",
+"Изменить вариант свойства товара": "Edit product property variant",
+"ПолучитьСписокРекламныхКатегорий": "GetAdvertisingCategoryList",
+"Пригласить пользователей в канал": "Invite users to channel",
+"Получить описание товара. !NOCLI": "Get product description. !NOCLI",
+"Изменить имя главной темы форума": "Edit main forum thread name",
+"Ошибка в данных коллекции таблиц": "Error in table collection data",
+"Идентификатор изменяемого товара": "Identifier of the product being edited",
+"Отправка в канал или чат с ботом": "Sending to channel or bot chat",
+"Загрузить массив вложений !NOCLI": "Upload attachments array !NOCLI",
+"Массив из Строка, ДвоичныеДанные": "Array from String, BinaryData",
+"ПолучитьСписокОтложенныхСообщений": "GetDelayedMessageList",
+"Создает опрос с вариантами ответа": "Creates a poll with answer options",
+"Ноушн_ПолучитьИнформациюОСтранице": "Notion_GetPageInfo",
+"Получает информацию о книге по ID": "Gets information about the book by ID",
+"ВыполнитьЗапросМультипартРелэйтед": "ExecuteMultipartRelatedRequest",
+"Получить список категорий товаров": "Get a list of product categories",
+"сериализованный JSON ответа от VK": "Serialized JSON response from VK",
+"Закрепляет сообщение в шапке чата": "Pins a message in the chat header",
+"JSON авторизации или путь к .json": "Authorization JSON or path to .json",
+"Путь помещения загруженного файла": "Path to place the downloaded file",
+"v1.1. Поэтому что-то нужно делать": "v1.1. Therefore, something needs to be done",
+"Запрос, приходящий на http-сервис": "Request coming to the http service",
+"Открепляет сообщение в шапке чата": "Unpins a message in the chat header",
+"Ссылка на страницу сайта магазина": "Link to the store's website page",
+"Вайбер_ПолучитьДанныеПользователя": "Viber_GetUserData",
+"Предпочтительное хранение токенов": "Preferred token storage",
+"ПолучитьСписокПользователейКанала": "GetChannelUserList",
+"Скачивает файл по указанному пути": "Downloads a file at the specified path",
+"Телеграм_СоздатьУдалитьТемуФорума": "Telegram_CreateDeleteForumTopic",
+"Телеграм_СоздатьСсылкуПриглашение": "Telegram_CreateInvitationLink",
+"Твиттер_ПолучитьСсылкуАвторизации": "Twitter_GetAuthorizationLink",
+"Получает список доступных каналов": "Gets a list of available channels",
+"Соответствие изменяемых параметров": "Matching of editable parameters",
+"Скачивает файл с серверов Telegram": "Download file from Telegram servers",
+"См. ПолучитьСписокКатегорийТоваров": "See GetProductCategoryList",
+"Расширение файла в случае отправки": "File extension in case of sending",
+"Массив данных статистики по постам": "Array of post statistics data",
+"что обсуловлено наличием сразу 2-х": "which is due to the presence of two at once",
+"Устанавливает значения ячеек листа": "Sets sheet cell values",
+"Создает твит с картинкой вложением": "Creates a tweet with an image attachment",
+"Идентификатор объекта для удаления": "Identifier of the object to delete",
+"querry из Telegram.WebApp.initData": "Query from Telegram.WebApp.initData",
+"Сохранить публичный объект на диск": "Save public object to disk",
+"Получает описание поля типа булево": "Gets the description of a boolean field",
+"ID целевого чата или IDЧата*IDТемы": "Target chat ID or ChatID*TopicID",
+"ПолучитьСписокКалендарейРекурсивно": "GetCalendarsListRecursively",
+"Путь для сохранение файла на Диске": "Path for saving the file to disk",
+"Временная отметка или ID сообщения": "Timestamp or message ID",
+"Закрывает тему для новых сообщений": "Closes the thread for new messages",
+"ОбработатьДанные Telegram Mini App": "Process Telegram Mini App data",
+"Получает данные пользователя по ID": "Gets user data by ID",
+"Вайбер_ПолучитьОнлайнПользователей": "Viber_GetOnlineUsers",
+"Идентификатор обновляемого объекта": "Identifier of the object to update",
+"Сформировать ссылку получения кода": "Generate code retrieval link",
+"Телеграм_СкрытьПоказатьГлавнуюТему": "Telegram_HideShowMainTopic",
+"Вайбер_ОтправитьТекстовоеСообщение": "Viber_SendTextMessage",
+"Приостановить рекламное объявление": "Pause advertising post",
+"ЯДиск_ПолучитьСписокОпубликованных": "YDisk_GetPublishedList",
+"Изменяет свойства подборки товаров": "Edits the properties of a product selection",
+"Текст лицензии доступен по ссылке:": "License text available at:",
+"Получает список товаров сообщества": "Gets the community's product list",
+"Получить список рекламных категорий": "Get a list of advertising categories",
+"Идентификатор рабочего пространства": "Workspace identifier",
+"Получает информацию событиях канала": "Gets information about channel events",
+"Создает сокращенный URL из обычного": "Creates a shortened URL from a regular one",
+"Строка,Число,Массив из Строка,Число": "String,Number,Array of String,Number",
+"Изменяет свойства существующей базы": "Edits properties of an existing database",
+"Получает основную информацию о боте": "Gets basic information about the bot",
+"Получает информацию о текущем диске": "Gets information about the current disk",
+"Отправляет документ в чат или канал": "Sends a document to a chat or channel",
+"ПолучитьБуферДвоичныхДанныхИзСтроки": "GetBinaryDataBufferFromString",
+"Наименование создаваемого календаря": "Name of the created calendar",
+"Открывает ранее закрытое обсуждение": "Opens a previously closed discussion",
+"Получает массив календарей аккаунта": "Gets an array of account calendars",
+"Типы: audio, document, photo, video": "Types: audio, document, photo, video",
+"ID родительского блока или страницы": "Parent block or page ID",
+"ID темы. Главная, если не заполнено": "Thread ID. Main if not filled",
+"Отправляет картинку в чат или канал": "Sends an image to a chat or channel",
+"Получает информацию о внешнем файле": "Gets information about the external file",
+"Банит пользователя в выбранном чате": "Bans a user in the selected chat",
+"Строка,Соответствие Из КлючИЗначение": "String, Map From KeyAndValue",
+"Телеграм_ЗакрепитьОткрепитьСообщение": "Telegram_PinUnpinMessage",
+"Результат чтения JSON ответа сервера": "Result of reading the JSON response from the server",
+"Устанавливает цель (описание) канала": "Sets the channel purpose (description)",
+"Путь к опубликованному ранее объекту": "Path to the previously published object",
+"Перемещает объект по выбранному пути": "Moves an object to the selected path",
+"Отправляет сообщение в выбранный час": "Sends a message at a selected hour",
+"Отправляет аудиофайл в чат или канал": "Sends an audio file to a chat or channel",
+"Получает ссылку для скачивания файла": "Gets a download link for the file",
+"Отправляет опрос с вариантами ответа": "Sends a poll with answer options",
+"Получает информацию о странице по ID": "Gets information about the page by ID",
+"Возвращает список заказов сообщества": "Returns the community's order list",
+"Получить список пользователей канала": "Get channel user list",
+"Получить список ответов на сообщение": "Get list of message replies",
+"Путь к оригинальному файлу или папке": "Path to the original file or folder",
+"сериализованный JSON ответа от Viber": "serialized JSON response from Viber",
+"сериализованный JSON ответа от Slack": "Serialized JSON response from Slack",
+"Главный в группе, если есть в группе": "Main in the group, if exists in the group",
+"Получает общее число участников чата": "Gets the total number of chat participants",
+"Получить список отложенных сообщений": "Get list of delayed messages",
+"Телеграм_ОтправитьТекстовоеСообщение": "Telegram_SendTextMessage",
+"Удаляет существующее свойство товара": "Deletes the existing product property",
+"Получает статистику в разрезе постов": "Gets statistics in terms of posts",
+"Создает альбом для хранения картинок": "Creates an album to store images",
+"Удаляет комментарий к записи таблицы": "Deletes a comment for a table record",
+"Получает информацию о календаре по ID": "Gets calendar information by ID",
+"Получает статус загрузки файла по URL": "Gets the upload status of the file by URL",
+"сериализованный JSON ответа от Yandex": "serialized JSON response from Yandex",
+"СформироватьКлавиатуруИзМассиваКнопок": "CreateKeyboardFromArrayButton",
+"Телеграм_ПолучитьСписокАватаровФорума": "Telegram_GetForumAvatarsList",
+"Пример структуры\/соответствия свойств": "Example structure\/property map",
+"сериализованный JSON ответа от Notion": "Serialized JSON response from Notion",
+"Массив соответствий данных календарей": "Array of calendar data mappings",
+"Копирует лист из одной книги в другую": "Copies a sheet from one book to another",
+"Получает описание поля числового типа": "Gets the description of a numeric field",
+"Удаляет сообщение канала по timestamp": "Deletes a channel message by timestamp",
+"ID свойства, куда добавляется вариант": "Property ID where the variant is added",
+"ID версии (ревизии) для востановления": "ID of the version (revision) for restoration",
+"Перемещает событие в другой календарь": "Moves an event to another calendar",
+"сериализованный JSON ответа от Google": "serialized JSON response from Google",
+"Получает описание поля файлового типа": "Gets the description of a file field",
+"Изменяет существующее свойство товара": "Edits the existing product property",
+"Для отображения скидки\/изменения цены": "For displaying discount\/changing price",
+"ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект": "YDisk_UploadByUrlAndGetObject",
+"Сохраняет картинку в альбом сообщества": "Saves an image to the community album",
+"Получает список всех событий календаря": "Gets the list of all calendar events",
+"Получить список подборок по массиву ID": "Gets the list of selections by array of IDs",
+"Признак удаления отложенного сообщения": "Indicator of deleting a delayed message",
+"Формирует клавиатуру по массиву кнопок": "Forms a keyboard from an array of buttons",
+"Смещение в списке получаемых сообщений": "Offset in the list of received messages",
+"Создает комментарий к записи в таблице": "Creates a comment for a record in the table",
+"Получить статус асинхронного изменения": "Get asynchronous change status",
+"Получает список тегов выбранных файлов": "Gets the list of tags of the selected files",
+"сериализованный JSON ответа от Dropbox": "serialized JSON response from Dropbox",
+"Сохраняет публичный объект на ваш диск": "Saves the public object to your disk",
+"Получает список файлов бота или канала": "Gets a list of files of the bot or channel",
+"Некорректный статус управления форумом": "Incorrect forum management status",
+"Получает описание поля строкового типа": "Gets the description of a string field",
+"Получает список свойств товаров группы": "Gets the list of properties of group products",
+"Удалить полностью (Истина) или закрыть": "Delete completely (True) or close",
+"сериализованный JSON ответа от Twitter": "serialized JSON response from Twitter",
+"ПолучитьБуферДвоичныхДанныхИзHexСтроки": "GetBinaryDataBufferFromHexString",
+"сериализованный JSON ответа от Airtable": "serialized JSON response from Airtable",
+"ID существующей группы, если необходимо": "ID of the existing group, if needed",
+"Получает список опубликованных объектов": "Gets a list of published objects",
+"ОчиститьСписокЗакрепленныхСообщенийТемы": "ClearThreadPinnedMessagesList",
+"Дата отправки для отложенного сообщения": "Sending date for delayed message",
+"HTTPОтвет, Произвольный, ДвоичныеДанные": "HTTPResponse, Arbitrary, BinaryData",
+"Путь к оригинальному файлу или каталогу": "Path to the original file or directory",
+"сериализованный JSON ответа от Telegram": "Serialized JSON response from Telegram",
+"Изменяет состав существующего сообщения": "Edits the content of an existing message",
+"Перезаписывать файл при конфликте путей": "Overwrite file in case of path conflicts",
+"Получает информацию о файле или каталоге": "Gets information about a file or directory",
+"Создает комментарий к файлу или каталогу": "Creates a comment for a file or directory",
+"Удаляет текстовый тег файла или каталога": "Deletes the text tag of a file or directory",
+"Массив идентификаторов вида photo123_123": "Array of identifiers like photo123_123",
+"Удаляет календарь из списка пользователя": "Removes a calendar from the user's list",
+"Изменяет текст существующего комментария": "Changes the text of an existing comment",
+"Массив вариантов опроса, если необходимо": "Array of poll options, if necessary",
+"Получает список версий (ревизий) объекта": "Gets the list of versions (revisions) of the object",
+"Получает информацию о пользователе по ID": "Gets user information by ID",
+"Изменяет наименование существующей книги": "Changes the name of the existing book",
+"Загружает файл на диск по заданному пути": "Uploads a file to disk at the specified path",
+"Скачивает файл по указанному пути или ID": "Downloads a file by the specified path or ID",
+"Удаляет ранее созданный вариант свойства": "Deletes the previously created product property variant",
+"Добавляет список файлов к полям каталога": "Adds a list of files to the directory fields",
+"Добавляет указанных пользователей в канал": "Adds specified users to the channel",
+"Изменяет свойства существуещего календаря": "Edits properties of an existing calendar",
+"ПолучитьСсылкуСкачиванияПубличногоОбъекта": "GetDownloadLinkForPublicObject",
+"Получает список записей выбранной таблицы": "Gets the list of records of the selected table",
+"Сформировать клавиатуру по массиву кнопок": "Generate keyboard from array of buttons",
+"Удаляет указанного пользователя из канала": "Removes specified user from channel",
+"Получает список всех комментариев объекта": "Gets the list of all comments of the object",
+"Создает комментарий под выбранной записью": "Creates a comment under the selected record",
+"Публикует объект диска в публичный доступ": "Publishes the disk object for public access",
+"Изменяет наименование и|или описание базы": "Changes the name and\/or description of the base",
+"Массив двоичных данных или путей к файлам": "Array of binary data or file paths",
+"Новые или изменяемые свойства базы данных": "New or modified database properties",
+"Сформировать клавиатуру из массива кнопок": "Create a keyboard from an array of buttons",
+"См. СформироватьКлавиатуруПоМассивуКнопок": "See GenerateKeyboardFromArray",
+"действия будут выполняться от лица группы": "actions will be performed on behalf of the group",
+"Возвращает URL для авторизации в браузере": "Returns URL for browser authorization",
+"Создает пустой каталог по выбранному пути": "Creates an empty directory at the selected path",
+"|--------[через 2 ч.]-------------------|": "|--------[after 2 hrs.]-------------------|",
+"См. СформироватьКлавиатуруИзМассиваКнопок": "See CreateKeyboardFromArrayButton",
+"Получает описание поля с номером телефона": "Gets the description of a phone number field",
+"Признак исключения архивированных каналов": "Indicator of excluding archived channels",
+"Отменяет режим общего доступа для каталога": "Cancels the public access mode for the directory",
+"Получает постоянный UTL к сообщению канала": "Gets a permanent URL to the channel message",
+"Получить данные использования пространства": "Get space usage data",
+"ID поста, используемого в качетсве рекламы": "ID of the post used for advertising",
+"Отправляет файл (документ) в чат или канал": "Sends a file (document) to a chat or channel",
+"Добавляет новый товар в каталог сообщества": "Adds a new product to the community's catalog",
+"JSON клавиатуры. См.СформироватьКлавиатуру": "JSON keyboard. See FormKeyboard",
+"Разбанивает забаненного ранее пользователя": "Unbans a previously banned user",
+"Отправляет внейшний файл по списку каналов": "Sends an external file to a list of channels",
+"Очищает список событий основного календаря": "Clears the event list of the primary calendar",
+"Сформировать клавиатуру из массива кнопок:": "Create a keyboard from an array of buttons:",
+"Очистить список закрепленных сообщений темы": "Clear thread's pinned messages list",
+"Получает информацию о папке или файле по ID": "Gets information about a folder or file by ID",
+"Обновляет v2 токен при помощи refresh_token": "Updates the v2 token using the refresh_token",
+"Получает информацию о товарах по массиву ID": "Gets information about products by array of IDs",
+"Красный, желтый, синий или какой-то другой?": "Red, yellow, blue, or some other?",
+"Ошибка получения данных булево из параметра": "Error getting boolean data from parameter",
+"ID файла, к которому предоставляется доступ": "ID of the file to be accessed",
+"Удаляет ранее добавленный товар из подборки": "Removes a previously added product from the selection",
+"Получает описание поля с электронной почтой": "Gets the description of an email field",
+"Получает список отложенных сообщений канала": "Gets a list of delayed channel messages",
+"Создает рекламное объявление на основе поста": "Creates an advertising post based on a post",
+"Копирует файл или каталог по выбранному пути": "Copies a file or directory to the selected path",
+"Загружает файлы на сервер и возвращает их ID": "Uploads files to the server and returns their IDs",
+"Создает ссылку для вступления в закрытый чат": "Creates a link for joining a closed chat",
+"Переводит каталог в режим публичного доступа": "Sets the directory to public access mode",
+"Добавляет вариант для существующего свойства": "Adds a variant for an existing property",
+"Получает новый токен на основе рефреш токена": "Gets a new token based on the refresh token",
+"Показывает ранее скрытую главную тему форума": "Shows a previously hidden main forum thread",
+"Удалить объект без возможности востановления": "Delete object without the possibility of recovery",
+"Приостанавливает показ рекламного объявления": "Pauses the display of the advertising post",
+"Идентификатор новой подборки, если необходимо": "Identifier of the new selection, if needed",
+"Требования: платформа 1С версии 8.3.10 и выше": "Requirements: 1C platform version 8.3.10 and above",
+"Повторно открывает ранее закрытую тему форума": "Reopens a previously closed forum thread",
+"Получить ссылку скачивания публичного объекта": "Get download link for public object",
+"Возвращает структура клавиатуры для сообщений": "Returns a keyboard structure for messages",
+"Получает список пользователей рабочей области": "Gets a list of users in the workspace",
+"Раскомментировать, если выполняется OneScript": "Uncomment if OneScript is executed",
+"Число последних версий объекта для отображения": "Number of the latest versions of the object to display",
+"Формирует ссылку для авторизации через браузер": "Forms a link for authorization via the browser",
+"Отправляет контакт с именем и номером телефона": "Sends a contact with name and phone number",
+"Клавиатура под сообщением или на нижней панели": "Keyboard under the message or on the bottom panel",
+"Получает общую статистику сообщества за период": "Gets the overall community statistics for a period",
+"Отправляет текстовое сообщение в чат или канал": "Sends a text message to a chat or channel",
+"Список адресов почты добавляемых пользователей": "List of email addresses of users being added",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_VK.os": "Location OS: .\/OInt\/core\/Modules\/OPI_VK.os",
+"Ошибка получения двоичных данных из параметра:": "Error getting binary data from parameter:",
+"URL, по которому необходимо перейти в браузере": "URL to go to in the browser",
+"Массив имен для добавления новых листов в книгу": "Array of names to add new sheets to the book",
+"Получает список файлов с или без отбора по типу": "Gets a list of files with or without filtering by type",
+"Путь к объекту, тег которого необходимо удалить": "Path to the object whose tag needs to be deleted",
+"Получает список комментариев к записи в таблице": "Gets the list of comments for a record in the table",
+"Отправляет URL с предпросмотром в чат или канал": "Sends a URL with a preview to a chat or channel",
+"Получает список пользователей указанного канала": "Gets a list of users in the specified channel",
+"Получает календарь из списка пользователя по ID": "Gets a calendar from the user's list by ID",
+"Создает кампанию в выбранном рекламном кабинете": "Creates a campaign in the selected advertising account",
+"Получает токен по коду из авторизации в бразуере": "Gets token by code from browser authorization",
+"Получает данные строки таблицы по идентификатору": "Gets row data of the table by identifier",
+"Создает новый блок на основе существующего блока": "Creates a new block based on an existing block",
+"Добавляет сообщение в обсуждение от имени группы": "Adds a message to the discussion on behalf of the group",
+"Истина > сортировать по дате, Ложь > по алфавиту": "True > sort by date, False > alphabetically",
+"двоичные данные zip архива с содержимым каталога": "binary data of the zip archive with the contents of the directory",
+"Отменяет публикацию ранее опубликованного объекта": "Unpublishes a previously published object",
+"Путь к каталогу. Необязателен, если указан курсор": "Path to the directory. Optional if the cursor is specified",
+"Твиттер не смог обработать загруженное вами видео": "Twitter could not process the video you uploaded",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Viber.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Viber.os",
+"Идентификатор или массив индентификаторов записей": "Identifier or array of record identifiers",
+"Источник: https:github.com\/vbondarevsky\/Connector": "Source: https:github.com\/vbondarevsky\/Connector",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Slack.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Slack.os",
+"ID подборка для помещения товара, если необходимо": "Selection ID for placing the product, if needed",
+"Запрещает доступ к файлу для внешних пользователей": "Prohibits access to the file for external users",
+"ID асинхронной работы из ответа ЗагрузитьФайлПоURL": "ID of the asynchronous job from the UploadFileByURL response",
+"Добавляет новый текстовый тег к файлу или каталогу": "Adds a new text tag to a file or directory",
+"ID блока, после которого необходимо встаивть новый": "Block ID after which to insert the new one",
+"Создает новое свойство для использования в товарах": "Creates a new property for use in products",
+"Не удалось привести структуру значений к коллекции": "Failed to convert the structure of values to a collection",
+"Данные заполнения, где ключ это имя ячейки вида A1": "Fill data where the key is the cell name like A1",
+"Удаляет одну или массив записей по идентификаторам": "Deletes one or an array of records by identifiers",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Notion.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Notion.os",
+"Путь к объекту, для которого необходимо создать тег": "Path to the object for which the tag needs to be created",
+"Смещение для получение объектов не из начала списка": "Offset for getting objects not from the beginning of the list",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Dropbox.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Dropbox.os",
+"Изменяет свойства календаря из списка пользователей": "Edits the properties of a calendar from the user's list",
+"Коннектор: удобный HTTP-клиент для 1С:Предприятие 8": "Connector: convenient HTTP client for 1C:Enterprise 8",
+"Очищает список закрепленных сообщений в теме форума": "Clears the list of pinned messages in the forum thread",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Twitter.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Twitter.os",
+"Здесь собрано определение данных для работы с VK API": "Here is a collection of data definitions for working with the VK API",
+"Обрабатывает данные TMA и опредеяет их достоверность": "Processes TMA data and determines its validity",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Airtable.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Airtable.os",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_Telegram.os": "Location OS: .\/OInt\/core\/Modules\/OPI_Telegram.os",
+"Основное измерение при заполнении диапазона массивом": "Main dimension when filling the array range",
+"Загружает файл на диск, забирая его по заданному URL": "Downloads a file to disk from the specified URL",
+"Истина > кнопки выводятся в столбик, Ложь > в строку": "True > buttons are displayed in a column, False > in a row",
+"Отправляет географические координаты в чат или канал": "Sends geographic coordinates to a chat or channel",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_YandexID.os": "Location OS: .\/OInt\/core\/Modules\/OPI_YandexID.os",
+"Скачивает zip архив с содержимым указанного каталога": "Downloads a zip archive with the contents of the specified directory",
+"Написать сообщение пользователю в диалоге сообщества": "Write a message to a user in the community's dialog",
+"Описание таблиц: Ключ > имя, Значение > массив полей": "Table description: Key > name, Value > array of fields",
+"Определяет доступ к файлу для стороннего пользователя": "Defines access to the file for an external user",
+"Генерирует ссылку авторизации для перехода в браузере": "Generates an authorization link for browser transition",
+"Отправляет контакт с номером телефона в чат или канал": "Sends a contact with a phone number to a chat or channel",
+"Возвращает список пользователей рабочего пространства": "Returns a list of workspace users",
+"Изменяет имя и|или описание существующего поля таблицы": "Changes the name and\/or description of an existing table field",
+"Перемещает объект по заданному пути и пути к оригиналу": "Moves the object to the specified path and path to the original",
+"Добавляет существующий календарь в список пользователя": "Adds an existing calendar to the user's list",
+"Группирует товары на основе одинаковых наборов свойств": "Groups products based on similar sets of properties",
+"ID аккаунта. Текущий аккаунт токена, если не заполнено": "Account ID. Current token account if not filled",
+"Перезаписывать если файл с таким именем уже существует": "Overwrite if a file with the same name already exists",
+"Получает список внешних файлов пользователя или канала": "Gets a list of external files of a user or channel",
+"Получает информацию об объекте диска по заданному пути": "Gets information about a disk object at the specified path",
+"Предоставляет стороннии пользователям доступ к каталогу": "Grants external users access to the directory",
+"Перезаписывать, если файл с таким именем уже существует": "Overwrite if a file with the same name already exists",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleDrive.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleDrive.os",
+"Идентификатор файла или каталога размещения комментария": "Identifier of the file or directory where the comment is located",
+"Изменяет значение варианта существующего свойства товара": "Edits the value of an existing product property variant",
+"Соответствие данных с результатом проверки в поле passed": "Map of data with the result of verification in the passed field",
+"Получает информацию об опубликованном объекте по его URL": "Gets information about the published object by its URL",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleSheets.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleSheets.os",
+"Получает статус асинхронной работы по изменению доступов": "Gets the status of the asynchronous access change job",
+"Отправляет сообщение, которое приходит в канал, но видно": "Sends a message that arrives in the channel but is visible",
+"Получает прямую ссылку для скачивания публичного объекта": "Gets a direct link to download the public object",
+"Добавляет дополнительные поля информации для медиафайлов": "Adds additional information fields for media files",
+"Создает дочернюю страницу над другой страницей-родителем": "Creates a child page above another parent page",
+"Удаляет публичный URL у файла. Требует токен пользователя": "Removes the public URL from the file. Requires user token",
+"Получает список рабочих областей, в которых подключен бот": "Gets a list of workspaces where the bot is connected",
+"Идентификатор объекта, для которого необходим комментарий": "Identifier of the object that needs a comment",
+"Создает новую тему в группе с включенным функционалом тем": "Creates a new thread in the group with theme functionality enabled",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleCalendar.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleCalendar.os",
+"Пересылает сообщение между чатами или в рамках одного чата": "Forwards a message between chats or within a chat",
+"Загружает фото на сервер для его дальнейшего использования": "Uploads photo to server for further use",
+"Запрещает редактирование файла для стороннего пользователя": "Prohibits file editing for the external user",
+"Создает копию объекта по заданному пути и пути к оригиналу": "Creates a copy of the object at the specified path and path to the original",
+"Расположение OS: .\/OInt\/tests\/Modules\/internal\/OPI_Тесты.os": "Location OS: .\/OInt\/tests\/Modules\/internal\/OPI_Tests.os",
+"Вы можете переопределять их, передавая в качестве параметра": "You can override them by passing them as a parameter",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_GoogleWorkspace.os": "Location OS: .\/OInt\/core\/Modules\/OPI_GoogleWorkspace.os",
+"Истина > служебные поля удаляются, остается только сам блок": "True > service fields are deleted, only the block itself remains",
+"Создает публичный URL для файла. Требует токен пользователя": "Creates a public URL for the file. Requires user token",
+"Код, полученный из авторизации См.ПолучитьСсылкуАвторизации": "Code obtained from authorization See GetAuthorizationLink",
+"механизм загрузки файлов и некоторые другие из старой версии": "file upload mechanism and some others from the old version",
+"Смещение для получение вложенных объектов не из начала списка": "Offset for getting nested objects not from the beginning of the list",
+"Указатель из предыдущего запроса, если строк результата > 100": "Pointer from the previous request, if the result rows > 100",
+"Иднтификатор следующей страницы данных из предыдущего запроса": "Next page identifier of data from the previous request",
+"Открывает новый диалог с одним или несколькими пользователями": "Opens a new dialog with one or more users",
+"Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено": "String, Arbitrary, HTTPResponse, BinaryData, Undefined",
+"Токен бота чата сообщества, котрый можно получить в настройках": "Community chat bot token, which can be obtained in the settings",
+"Загружает файл на облачный диск, получая его по указанному URL": "Uploads a file to the cloud drive by fetching it from the specified URL",
+"Игнорируем проверку целостности архива, просто читаем результат": "Ignore archive integrity check, just read the result",
+"Получает статус пользователя или нескольких пользователей по ID": "Gets the status of a user or several users by ID",
+"Удаляет URL обработчика событий бота для работы в режиме Webhook": "Deletes the bot event handler URL for webhook operation",
+"Получает массив сообщений, которые являются ответом на указанное": "Gets an array of messages that are replies to the specified",
+"Расположение OS: .\/OInt\/tools\/Modules\/OPI_ПреобразованиеТипов.os": "Location OS: .\/OInt\/tools\/Modules\/OPI_TypeConversion.os",
+"Набор или массив наборов пар Ключ : Значение > Поле : Показатель": "Set or array of sets of Key : Value pairs > Field : Indicator",
+"Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок": "Keyboard, if needed, see CreateKeyboardFromArrayButton",
+"Расположение OS: .\/OInt\/tools\/Modules\/OPI_ПолучениеДанныхТестов.os": "Location OS: .\/OInt\/tools\/Modules\/OPI_TestDataRetrieval.os",
+"Идентификатор следующей страницы списка баз из перыдудщего запроса": "Next page identifier of the base list from the previous request",
+"Совпадающие поля будут перезаписаны с приоритетом параметра функции": "Matching fields will be overwritten with the parameter of the function",
+"Формирует блок с картинкой для добавления в массив блоков сообщения": "Generates a block with an image to add to the message block array",
+"ID пользователя. Для канала > администратора, для бота > получателя": "User ID. For channel > administrator, for bot > recipient",
+"Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации": "Gets token based on the code from the GetAuthorizationLink page",
+"Курсор из предыдущего запроса для получения следующего набора файлов": "Cursor from the previous request to get the next set of files",
+"на redirect_uri после авторизации через браузер есть всего 30 секунд": "on redirect_uri after authorization via the browser is only 30 seconds",
+"Загружает видео в группу с возможностью его дальнейшего использования": "Uploads video to the group for further use",
+"access_token нужно будет забрать из параметра в строке адреса браузера": "access_token will need to be taken from the parameter in the browser address bar",
+"Двоичные данные или путь к файлу при указании параметра ПутьСохранения": "Binary data or file path when SavePath parameter is specified",
+"Устанавливает URL обработчика событий бота для работы в режиме Webhook": "Set webhook URL for bot event handling in webhook mode",
+"Получает список ID товарных категорий для указания при создании товара": "Gets a list of product category IDs to specify when creating a product",
+"Получает информацию о количестве использованного дискового пространства": "Gets information on the amount of used disk space",
+"Расположение OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Инструменты.os": "Location OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Tools.os",
+"Получает соответствие ID Emoji для установки в качестве иконок тем форума": "Gets the mapping of Emoji IDs for setting as forum theme icons",
+"Получает список id рекламных категорий для создания рекламного объявления": "Gets a list of advertising category IDs for creating an advertising post",
+"Метод для вставки в http-сервис, адрес которого указывается в redirect_uri": "Method for insertion into an http service, the address of which is specified in redirect_uri",
+"Расположение OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Криптография.os": "Location OS: .\/OInt\/tools\/Modules\/internal\/Modules\/OPI_Cryptography.os",
+"URL вашего http-сервиса (или другого обработчика запросов) для авторизации": "URL of your http service (or other request handler) for authorization",
+"Отправляет местоположение по географической широте и долготе в чат или канал": "Sends location by geographic latitude and longitude to a chat or channel",
+"Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer": "From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer",
+"Размер файла. Если не заполнен > определяется автоматически скачиванием файла": "File size. If not filled in > determined automatically by downloading the file",
+"Получает код подтверждения и адрес страницы, на которой его необходимо ввести": "Gets the confirmation code and the address of the page where it needs to be entered",
+"Все права защищены. Эта программа и сопроводительные материалы предоставляются": "All rights reserved. This program and accompanying materials are provided",
+"1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1": "1, and something on 2: up to the point that they removed the ability to post tweets from v1",
+"Из Consumer Keys -> Access Token and Secret страницы настроек Twitter Developer": "From Consumer Keys -> Access Token and Secret settings page of Twitter Developer",
+"Создает одну или массив записей по описанию или массиву описаний значений полей": "Creates one or an array of records by description or an array of field value descriptions",
+"id приложения, которое необходимо создать в профиле на странице для разработчиков": "application ID that needs to be created in the profile on the developer page",
+"Вызывает метод получения токена, так как для получения токена из кода, приходящего": "Calls the token acquisition method, as for obtaining a token from the code received",
+"Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели": "Generates a simple JSON keyboard from an array of buttons for a message or bottom panel",
+"Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения": "Converts the code to a token after entering the code when executing GetConfirmationCode",
+"ID пользователя из информации о канале не подойдет для отправки сообщений через бота": "The user ID from channel information is not suitable for sending messages through the bot",
+"|--> ОбновитьТокен() ->|access_token  --> Используется в т-нии 2-х часов для запросов": "|--> RefreshToken() ->| access_token --> Used in the interval of 2 hours for requests",
+"Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя": "All pages created as children must have parent base properties",
+"Описание структур см. здесь https:pkware.cachefly.net\/webdocs\/casestudies\/APPNOTE.TXT": "Description of structures see here https:pkware.cachefly.net\/webdocs\/casestudies\/APPNOTE.TXT",
+"id группы с \"-\" в начале. Можно найти в настройках группы ВК или в ее URL, если не был": "group ID with \"-\" at the beginning. Can be found in the settings of the VK group or in its URL if not set",
+"набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен": "a set of permissions for the received key. Can be any, but offline.access is mandatory",
+"Получение ссылки для интерактивного получения токена (access_token), который необходим": "Getting a link for interactive token retrieval (access_token), which is necessary",
+"можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях": "you can use an HTTP service. Information about new messages will also be sent there",
+"Из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer": "From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer",
+"При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить": "For the next update, you need to use a new refresh_token, so hardcode",
+"Приходит вместе с access_token и используется для его обновления (время жизни access_token": "Comes together with access_token and is used to refresh it (access_token lifetime",
+"Получает токен по коду, полученному при авторизации по ссылке из ПолучитьСсылкуАвторизации": "Gets the token by the code obtained during authorization via the link from GetAuthorizationLink",
+"Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video": "Sends a set of files to a chat or channel. Media types: audio, document, photo, video",
+"Получает список первых файлов каталога или продолжает получение следующих при указании курсора": "Gets the list of the first files in the directory or continues getting the next ones when the cursor is specified",
+"который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована": "which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published",
+"что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести": "that Twitter insists on using this latest version, they somehow managed not to transfer",
+"Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook": "Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals",
+"но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные": "but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different",
+"Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать": "Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working",
+"Выполняет запрос \/getUpdates, возвращающий информацию о событиях бота. Используется при работе в polling режиме": "Executes a request \/getUpdates, returning information about bot events. Used in polling mode",
+"СоздатьСобытие": "",
+"НазваниеФайла2": "",
+"ОтправитьГифку": "",
+"ОтправитьАудио": "",
+"ОТПРАВИТЬАУДИО": "",
+"Отправка данных": "",
+"ОТПРАВИТЬССЫЛКУ": "",
+"ОтправитьСсылку": "",
+"ПОЛУЧИТЬСОБЫТИЕ": "",
+"ВводныйПараметр": "",
+"ПолучитьСобытие": "",
+"УДАЛИТЬПОДБОРКУ": "",
+"СОЗДАТЬСТРАНИЦУ": "",
+"Работа с базами": "",
+"ТекущееОписание": "",
+"СОКРАТИТЬССЫЛКУ": "",
+"ПеременнаяСреды": "",
+"СоздатьСтраницу": "",
+"Работа с тегами": "",
+"УДАЛИТЬКАРТИНКУ": "",
+"Работа с полями": "",
+"ТекстВыполнения": "",
+"ИзменитьСобытие": "",
+"ИЗМЕНИТЬСОБЫТИЕ": "",
+"ПолучитьТаблицу": "",
+"ИЗМЕНИТЬТАБЛИЦУ": "",
+"СОЗДАТЬКАЛЕНДАРЬ": "",
+"СОЗДАТЬТВИТОПРОС": "",
+"СОЗДАТЬТВИТВИДЕО": "",
+"УДАЛИТЬКАЛЕНДАРЬ": "",
+"СоздатьКалендарь": "",
+"МБ был записан в": "",
+"Работа с книгами": "",
+"УдалитьКалендарь": "",
+"Получение токена": "",
+"ОТПРАВИТЬЛОКАЦИЮ": "",
+"СОЗДАТЬТВИТГИФКИ": "",
+"ОтправитьЛокацию": "",
+"Выполняет запрос": "",
+"Работа с файлами": "",
+"ОТПРАВИТЬКОНТАКТ": "",
+"ПОЛУЧИТЬПОЛЕДАТЫ": "",
+"УдалитьСообщение": "",
+"ДобавитьПараметр": "",
+"Работа с группой": "",
+"Работа с данными": "",
+"Работа с блоками": "",
+"Работа с листами": "",
+"КопироватьОбъект": "",
+"ОбъектПроцессора": "",
+"УДАЛИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСТРАНИЦУ": "",
+"ПолучитьСтраницу": "",
+"КОПИРОВАТЬОБЪЕКТ": "",
+"НеобходимаяДлина": "",
+"СОЗДАТЬТЕМУФОРУМА": "",
+"ИЗМЕНИТЬСООБЩЕНИЕ": "",
+"Работа с каналами": "",
+"СКОПИРОВАТЬОБЪЕКТ": "",
+"ЗначениеПараметра": "",
+"УстановитьКоманду": "",
+"СообщитьРезультат": "",
+"КаталогИсходников": "",
+"СОЗДАТЬБАЗУДАННЫХ": "",
+"Работа с товарами": "",
+"ПОЛУЧИТЬПОЛЕПОЧТЫ": "",
+"АРХИВИРОВАТЬКАНАЛ": "",
+"Работа с записями": "",
+"УдалитьТемуФорума": "",
+"УДАЛИТЬТЕМУФОРУМА": "",
+"ЗАКРЫТЬТЕМУФОРУМА": "",
+"УстановитьWebhook": "",
+"УСТАНОВИТЬWEBHOOK": "",
+"ПереместитьОбъект": "",
+"ПЕРЕМЕСТИТЬОБЪЕКТ": "",
+"Работа с заказами": "",
+"ОТПРАВИТЬКАРТИНКУ": "",
+"НачальнаяФигурная": "",
+"ОтправитьДокумент": "",
+"ОТПРАВИТЬДОКУМЕНТ": "",
+"ОпубликоватьПапку": "",
+"ОПУБЛИКОВАТЬПАПКУ": "",
+"НАПИСАТЬСООБЩЕНИЕ": "",
+"АрхивироватьКанал": "",
+"ПоследняяФигурная": "",
+"НаписатьСообщение": "",
+"ОТКРЫТЬТЕМУФОРУМА": "",
+"Администрирование": "",
+"ОТКРЫТЬОБСУЖДЕНИЕ": "",
+"ЗАКРЫТЬОБСУЖДЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКБАЗ": "",
+"СОЗДАТЬОБСУЖДЕНИЕ": "",
+"ПЕРЕИМЕНОВАТЬКАНАЛ": "",
+"ПереименоватьКанал": "",
+"Команда CLI: tools": "",
+"НачальнаяТабуляция": "",
+"СОЗДАТЬКОММЕНТАРИЙ": "",
+"СоздатьКомментарий": "",
+"ИзменитьТемуФорума": "",
+"ПолучитьБазуДанных": "",
+"ПОЛУЧИТЬБАЗУДАННЫХ": "",
+"ОПУБЛИКОВАТЬОБЪЕКТ": "",
+"ОпубликоватьОбъект": "",
+"СкоприроватьОбъект": "",
+"Отправка сообщений": "",
+"Работа с таблицами": "",
+"ПОЛУЧИТЬПОЛЕССЫЛКИ": "",
+"ЗАКРЕПИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬПОЛЕФЛАЖКА": "",
+"ПОЛУЧИТЬПОЛЕНОМЕРА": "",
+"ПОЛУЧИТЬТОВАРЫПОИД": "",
+"ПереслатьСообщение": "",
+"ОТПРАВИТЬСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСТАТИСТИКУ": "",
+"ЗакрепитьСообщение": "",
+"УдалитьКомментарий": "",
+"УДАЛИТЬКОММЕНТАРИЙ": "",
+"Работа с событиями": "",
+"ПереместитьСобытие": "",
+"ПЕРЕМЕСТИТЬСОБЫТИЕ": "",
+"ОткрепитьСообщение": "",
+"УДАЛИТЬВНЕШНИЙФАЙЛ": "",
+"ОТКРЕПИТЬСООБЩЕНИЕ": "",
+"ЗагрузитьФайлПоURL": "",
+"ЗАГРУЗИТЬФАЙЛПОURL": "",
+"ЗначенияПараметров": "",
+"ТекущаяВложенность": "",
+"Данные и настройка": "",
+"ПОЛУЧИТЬОБНОВЛЕНИЯ": "",
+"ПЕРЕСЛАТЬСООБЩЕНИЕ": "",
+"ИЗМЕНИТЬТЕМУФОРУМА": "",
+"Работа с диалогами": "",
+"СГРУППИРОВАТЬТОВАРЫ": "",
+"СОЗДАТЬТВИТКАРТИНКИ": "",
+"ПОЛУЧИТЬТАБЛИЦЫБАЗЫ": "",
+"Формирование блоков": "",
+"ПолучитьТаблицыБазы": "",
+"СоздатьКопиюОбъекта": "",
+"ИЗМЕНИТЬКОММЕНТАРИЙ": "",
+"ИзменитьКомментарий": "",
+"СОЗДАТЬКОПИЮОБЪЕКТА": "",
+"ПОЛУЧИТЬСПИСОКТЕГОВ": "",
+"ДОБАВИТЬВНЕШНИЙФАЙЛ": "",
+"ДобавитьВнешнийФайл": "",
+"json (необяз. по ум": "",
+"ПОЛУЧИТЬВНЕШНИЙФАЙЛ": "",
+"ПОЛУЧИТЬДАННЫЕФАЙЛА": "",
+"ПОЛУЧИТЬКОММЕНТАРИИ": "",
+"НАПИСАТЬВОБСУЖДЕНИЕ": "",
+"СписокПользователей": "",
+"НАПИСАТЬКОММЕНТАРИЙ": "",
+"ПОЛУЧИТЬТОКЕНПОКОДУ": "",
+"СПИСОКПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьКомментарий": "",
+"ПолучитьТокенПоКоду": "",
+"ПОЛУЧИТЬКОММЕНТАРИЙ": "",
+"СДЕЛАТЬФАЙЛПРИВАТНЫМ": "",
+"ПОЛУЧИТЬПОДБОРКИПОИД": "",
+"УстановитьТемуКанала": "",
+"ВЕРНУТЬДОЧЕРНИЕБЛОКИ": "",
+"ИнформацияОПрогрессе": "",
+"СДЕЛАТЬФАЙЛПУБЛИЧНЫМ": "",
+"СделатьФайлПубличным": "",
+"СделатьФайлПриватным": "",
+"УСТАНОВИТЬТЕМУКАНАЛА": "",
+"СоздатьСтраницуВБазу": "",
+"УстановитьЦельКанала": "",
+"УСТАНОВИТЬЦЕЛЬКАНАЛА": "",
+"ОТПРАВИТЬВНЕШНИЙФАЙЛ": "",
+"Работа с сообщениями": "",
+"ПОЛУЧИТЬСПИСОКФАЙЛОВ": "",
+"ОтправитьМедиагруппу": "",
+"СОЗДАТЬСОСТАВНОЙПОСТ": "",
+"ИЗМЕНИТЬСВОЙСТВАБАЗЫ": "",
+"СОЗДАТЬСТРАНИЦУВБАЗУ": "",
+"Работа со страницами": "",
+"ВернутьДочерниеБлоки": "",
+"Изменение публикации": "",
+"ВозвращаемоеЗначение": "",
+"СОЗДАТЬТЕКСТОВЫЙТВИТ": "",
+"СоздатьСоставнойПост": "",
+"ПОЛУЧИТЬПОЛЕТЕЛЕФОНА": "",
+"ОТПРАВИТЬМЕДИАГРУППУ": "",
+"ПОЛУЧИТЬПОЛЕВЛОЖЕНИЯ": "",
+"ПОЛУЧИТЬСПИСОККАНАЛОВ": "",
+"ЗАГРУЗИТЬФОТОНАСЕРВЕР": "",
+"Аккаунт и авторизация": "",
+"Программный интерфейс": "",
+"ПОЛУЧИТЬСПИСОКЗАПИСЕЙ": "",
+"УДАЛИТЬСВОЙСТВОТОВАРА": "",
+"ПОЛУЧИТЬСПИСОКТОВАРОВ": "",
+"ПОЛУЧИТЬСПИСОКЗАКАЗОВ": "",
+"ПолучитьИсториюКанала": "",
+"СОЗДАТЬСВОЙСТВОТОВАРА": "",
+"ПОЛУЧИТЬСПИСОКСОБЫТИЙ": "",
+"ПолучитьСписокСобытий": "",
+"ПОЛУЧИТЬПОЛЕСТРОКОВОЕ": "",
+"ПОЛУЧИТЬИСТОРИЮКАНАЛА": "",
+"ПОЛУЧИТЬЗНАЧЕНИЯЯЧЕЕК": "",
+"Работа с обсуждениями": "",
+"ПОЛУЧИТЬСПИСОКСВОЙСТВ": "",
+"УДАЛИТЬТОВАРИЗПОДБОРКИ": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮБОТА": "",
+"ПолучитьИнформациюБота": "",
+"Работа с базами данных": "",
+"Работа с комментариями": "",
+"ЗАГРУЗИТЬВИДЕОНАСЕРВЕР": "",
+"ПОЛУЧИТЬСПИСОКПОДБОРОК": "",
+"Интерактивные действия": "",
+"ИЗМЕНИТЬСВОЙСТВОТОВАРА": "",
+"СформироватьКлавиатуру": "",
+"Настройки и информация": "",
+"СОЗДАТЬПОДБОРКУТОВАРОВ": "",
+"Работа с темами форума": "",
+"ПреобразоватьКодВТокен": "",
+"ДОБАВИТЬТОВАРВПОДБОРКУ": "",
+"ПРЕОБРАЗОВАТЬКОДВТОКЕН": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУ": "",
+"Управление и настройки": "",
+"ОтменитьПубликациюПапки": "",
+"УстановитьЗначенияЯчеек": "",
+"ОбеспечитьПустойКаталог": "",
+"ПолучитьЧислоУчастников": "",
+"ПОЛУЧИТЬЧИСЛОУЧАСТНИКОВ": "",
+"ПОЛУЧИТЬПУБЛИЧНЫЙОБЪЕКТ": "",
+"Непредвиденная ошибка!:": "",
+"ОТПРАВИТЬМЕСТОПОЛОЖЕНИЕ": "",
+"Не найден входной файл!": "",
+"ПолучитьПубличныйОбъект": "",
+"УСТАНОВИТЬЗНАЧЕНИЯЯЧЕЕК": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮФАЙЛА": "",
+"ИзменитьКалендарьСписка": "",
+"ИЗМЕНИТЬПОДБОРКУТОВАРОВ": "",
+"ОтменитьПубликациюФайла": "",
+"СкрытьГлавнуюТемуФорума": "",
+"ИЗМЕНИТЬКАЛЕНДАРЬСПИСКА": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБОТЕ": "",
+"ПОЛУЧИТЬКАЛЕНДАРЬСПИСКА": "",
+"ПолучитьКалендарьСписка": "",
+"Изменяет наименование и": "",
+"ПОЛУЧИТЬСПИСОККАТАЛОГОВ": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮПАПКИ": "",
+"ПолучитьИнформациюОБоте": "",
+"СКРЫТЬГЛАВНУЮТЕМУФОРУМА": "",
+"СФОРМИРОВАТЬБЛОККАРТИНКУ": "",
+"СОЗДАТЬССЫЛКУПРИГЛАШЕНИЕ": "",
+"УДАЛИТЬКАЛЕНДАРЬИЗСПИСКА": "",
+"УдалитьКалендарьИзСписка": "",
+"ИзменитьСвойстваСтраницы": "",
+"ИЗМЕНИТЬСВОЙСТВАСТРАНИЦЫ": "",
+"ПОЛУЧИТЬСПИСОККАЛЕНДАРЕЙ": "",
+"ПОЛУЧИТЬСТАТИСТИКУПОСТОВ": "",
+"СоздатьСсылкуПриглашение": "",
+"ДобавитьКалендарьВСписок": "",
+"ПолучитьСписокКалендарей": "",
+"СОЗДАТЬРЕКЛАМНУЮКАМПАНИЮ": "",
+"ДОБАВИТЬКАЛЕНДАРЬВСПИСОК": "",
+"ПОЛУЧИТЬКОДПОДТВЕРЖДЕНИЯ": "",
+"ПолучитьКодПодтверждения": "",
+"СОХРАНИТЬКАРТИНКУВАЛЬБОМ": "",
+"ПолучитьИнформациюОДиске": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОДИСКЕ": "",
+"ВосстановитьОбъектКВерсии": "",
+"ПоказатьГлавнуюТемуФорума": "",
+"ПОКАЗАТЬГЛАВНУЮТЕМУФОРУМА": "",
+"ПолучитьИнформациюОКанале": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОКАНАЛЕ": "",
+"Dropbox_ПереместитьОбъект": "",
+"ОчиститьОсновнойКалендарь": "",
+"ОЧИСТИТЬОСНОВНОЙКАЛЕНДАРЬ": "",
+"ОтменитьПубликациюОбъекта": "",
+"ИЗМЕНИТЬНАИМЕНОВАНИЕКНИГИ": "",
+"ИзменитьНаименованиеКниги": "",
+"ПОЛУЧИТЬССЫЛКУНАСООБЩЕНИЕ": "",
+"СоответствиеКомандМодулей": "",
+"ПОЛУЧИТЬССЫЛКУАВТОРИЗАЦИИ": "",
+"ОТМЕНИТЬПУБЛИКАЦИЮОБЪЕКТА": "",
+"ПолучитьСсылкуНаСообщение": "",
+"ВОССТАНОВИТЬОБЪЕКТКВЕРСИИ": "",
+"ПОЛУЧИТЬСПИСОКФАЙЛОВПАПКИ": "",
+"ВывестиСообщениеИсключения": "",
+"ПолучитьСписокКомментариев": "",
+"ДобавитьПользователяКФайлу": "",
+"ПолучитьЗначенияРекурсивно": "",
+"Работа с файлами и папками": "",
+"СоздатьРекламноеОбъявление": "",
+"ПолучитьДанныеПользователя": "",
+"ЧислоСтандартныхПараметров": "",
+"ПОЛУЧИТЬСПИСОККОММЕНТАРИЕВ": "",
+"ПОЛУЧИТЬДАННЫЕПОЛЬЗОВАТЕЛЯ": "",
+"СОЗДАТЬРЕКЛАМНОЕОБЪЯВЛЕНИЕ": "",
+"Работа с подборками товаров": "",
+"ПолучитьОнлайнПользователей": "",
+"ОТПРАВИТЬТЕКСТОВОЕСООБЩЕНИЕ": "",
+"ОтправитьТекстовоеСообщение": "",
+"ПОЛУЧИТЬОНЛАЙНПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьСтатусЗагрузкиПоURL": "",
+"ПОЛУЧИТЬСТАТУСЗАГРУЗКИПОURL": "",
+"ИЗМЕНИТЬМЕТАДАННЫЕКАЛЕНДАРЯ": "",
+"Работа с удаленными файлами": "",
+"ВЫГНАТЬПОЛЬЗОВАТЕЛЯИЗКАНАЛА": "",
+"ВыгнатьПользователяИзКанала": "",
+"ИзменитьМетаданныеКалендаря": "",
+"ОТПРАВИТЬЭФЕМЕРНОЕСООБЩЕНИЕ": "",
+"ДобавитьПользователейКПапке": "",
+"ПолучитьСсылкуДляСкачивания": "",
+"Разложить JSON на параметры": "",
+"ПолучитьИнформациюОбОбъекте": "",
+"ДОБАВИТЬПОЛЬЗОВАТЕЛЕЙКФАЙЛУ": "",
+"ПОЛУЧИТЬМЕТАДАННЫЕКАЛЕНДАРЯ": "",
+"ДобавитьПараметрФлагКоманды": "",
+"ДобавитьПользователейКФайлу": "",
+"ПОЛУЧИТЬСПИСОКВЕРСИЙОБЪЕКТА": "",
+"ДОБАВИТЬПОЛЬЗОВАТЕЛЕЙКПАПКЕ": "",
+"ОтправитьЭфемерноеСообщение": "",
+"ПОЛУЧИТЬСПИСОКПОЛЬЗОВАТЕЛЕЙ": "",
+"ПолучитьСписокВерсийОбъекта": "",
+"ПОЛУЧИТЬСПИСОКВНЕШНИХФАЙЛОВ": "",
+"ПОЛУЧИТЬССЫЛКУДЛЯСКАЧИВАНИЯ": "",
+"ПолучитьМетаданныеКалендаря": "",
+"Создать\/Удалить кооментарий": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБОБЪЕКТЕ": "",
+"ПреобразоватьBase64ВДвоичные": "",
+"ПРЕОБРАЗОВАТЬBASE64ВДВОИЧНЫЕ": "",
+"СоздатьСсылкуПолученияТокена": "",
+"Получение данных и настройка": "",
+"ПОЛУЧИТЬИНФОРМАЦИЮОБАККАУНТЕ": "",
+"Работа со свойствами товаров": "",
+"Работа со списком календарей": "",
+"ИЗМЕНИТЬИМЯГЛАВНОЙТЕМЫФОРУМА": "",
+"ПолучитьСписокИконокАватаров": "",
+"Работа с рекламным кабинетом": "",
+"ИзменитьИмяГлавнойТемыФорума": "",
+"ПОЛУЧИТЬСПИСОКИКОНОКАВАТАРОВ": "",
+"УДАЛИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"СОЗДАТЬССЫЛКУПОЛУЧЕНИЯТОКЕНА": "",
+"ПОЛУЧИТЬСПИСОКРАБОЧИХОБЛАСТЕЙ": "",
+"Работа с файлами и каталогами": "",
+"Настройки совместного доступа": "",
+"ДОБАВИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"ПРИГЛАСИТЬПОЛЬЗОВАТЕЛЕЙВКАНАЛ": "",
+"ИЗМЕНИТЬВАРИАНТСВОЙСТВАТОВАРА": "",
+"ПригласитьПользователейВКанал": "",
+"Управление публичным доступом": "",
+"СОХРАНИТЬПУБЛИЧНЫЙОБЪЕКТНАДИСК": "",
+"МаксимальныйУровеньВложенности": "",
+"ПОЛУЧИТЬСПИСОККАТЕГОРИЙТОВАРОВ": "",
+"Работа с метаданными календарей": "",
+"Служебный программный интерфейс": "",
+"СФОРМИРОВАТЬССЫЛКУПОЛУЧЕНИЯКОДА": "",
+"Двоичные данные или пути к фото": "",
+"СформироватьСсылкуПолученияКода": "",
+"Функция вернула пустое значение": "",
+"ПРИОСТАНОВИТЬРЕКЛАМНОЕОБЪЯВЛЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКРЕКЛАМНЫХКАТЕГОРИЙ": "",
+"ПОЛУЧИТЬСПИСОКОТВЕТОВНАСООБЩЕНИЕ": "",
+"ПОЛУЧИТЬСПИСОКОТЛОЖЕННЫХСООБЩЕНИЙ": "",
+"ПОЛУЧИТЬСПИСОКПОЛЬЗОВАТЕЛЕЙКАНАЛА": "",
+"ДобавитьИменованныйПараметрКоманды": "",
+"ДобавитьПозиционныйПараметрКоманды": "",
+"ПОЛУЧИТЬСТАТУСАСИНХРОННОГОИЗМЕНЕНИЯ": "",
+"ПолучитьСтатусАсинхронногоИзменения": "",
+"под записью (необяз. по ум. - Пустое": "",
+"ПОЛУЧИТЬСПИСОКОПУБЛИКОВАННЫХОБЪЕКТОВ": "",
+"ПолучитьСписокОпубликованныхОбъектов": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУПОМАССИВУКНОПОК": "",
+"СформироватьКлавиатуруПоМассивуКнопок": "",
+"См.СформироватьКлавиатуру (необяз. по": "",
+"СФОРМИРОВАТЬКЛАВИАТУРУИЗМАССИВАКНОПОК": "",
+"Главная, если не заполнено (необяз. по": "",
+"ПолучитьДанныеИспользованияПространства": "",
+"ОЧИСТИТЬСПИСОКЗАКРЕПЛЕННЫХСООБЩЕНИЙТЕМЫ": "",
+"ПОЛУЧИТЬДАННЫЕИСПОЛЬЗОВАНИЯПРОСТРАНСТВА": "",
+"ПолучитьСписокИконокАватаров (необяз. по": "",
+"ПОЛУЧИТЬССЫЛКУСКАЧИВАНИЯПУБЛИЧНОГООБЪЕКТА": "",
+"Кодировка, в которой записаны JSON данные": "",
+"Ошибка преобразовани данных параметра JSON": "",
+"конкретное значение при указании имени поля": "",
+"Похоже, что в ответе пришли двоичные данные!": "",
+"Необязателен, если указан курсор (необяз. по": "",
+"Преобразует файл с Base64 строкой в бинарный": "",
+"Не удалось получить информацию из json медиа!": "",
+"Созвращает список дочерних блоков блока-родителя": "",
+"Некорректный метод! Проверьте правильность ввода": "",
+"Выводит весь список, если не указано (необяз. по": "",
+"СформироватьКлавиатуруИзМассиваКнопок (необяз. по": "",
+"Преобразует файл с Base64 строкой в бинарный файл": "",
+"Некорректная команда! Проверьте правильность ввода": "",
+"Текущий аккаунт токена, если не заполнено (необяз. по": "",
+"Расположение OS: .\/OInt\/core\/Modules\/OPI_YandexDisk.os": "",
+"Имя поля для получения. Выводит весь список, если не указано": "",
+"вложенности разбора. На всю глубину по умолчанию (необяз. по": "",
+"Ограничение на ур. вложенности разбора. На всю глубину по умолчанию": "",
+"В следующий раз используйте опцию --out для указания пути их сохранения": "",
+"Полную документацию можно найти по адресу: (https:\/\/openintegrations.dev": "",
+"Если не заполнен > определяется автоматически скачиванием файла (необяз. по": "",
+"Показывает значения, которые можно получить из переданного JSON и возвращает": "",
+"Файл не был записан! Используйте флаг --debug для получения дополнительной информации": ""
+}