// OneScript: ./OInt/core/Modules/OPI_Bitrix24.os
// Lib: Bitrix24
// CLI: bitrix24

// 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
// BSLLS:LineLength-off

//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params

// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"

#Область ПрограммныйИнтерфейс

#Область НастройкиИАдминистрирование

// Получить ссылку авторизации приложения
// Формирует ссылку для авторизации через браузер
//
// Параметры:
//  Домен    - Строка - Адрес битрикс вида portal.bitrix24.com - domain
//  ClientID - Строка - Client ID из настроек приложения       - clientid
//
// Возвращаемое значение:
//  Строка - URL для перехода в браузере
Функция ПолучитьСсылкуАвторизацииПриложения(Знач Домен, Знач ClientID) Экспорт

    OPI_ПреобразованиеТипов.ПолучитьСтроку(Домен);
    OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);

    Если Не СтрНачинаетсяС(Домен, "http") Тогда
        URL = "https://" + Домен;
    КонецЕсли;

    Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
        URL = URL + "/";
    КонецЕсли;

    URL = URL + "oauth/authorize/?client_id=" + ClientID;

    Возврат URL;

КонецФункции

// Получить токен
// Получает токен по коду авторизации
//
// Параметры:
//  ClientID     - Строка - Client ID из настроек приложения       - clientid
//  ClientSecret - Строка - Client secret из настроек приложения   - clientsecret
//  Code         - Строка - Code из авторизации через браузер      - code
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьТокен(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт

    URL     = "https://oauth.bitrix.info/oauth/token/";
    Строка_ = "Строка";

    Параметры = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("grant_type"   , "authorization_code", Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("client_id"    , ClientID            , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("client_secret", ClientSecret        , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("code"         , Code                , Строка_, Параметры);

    Ответ = OPI_Инструменты.Get(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Обновить токен
// Обновляет токен по Refresh токену
//
// Параметры:
//  ClientID     - Строка - Client ID из настроек приложения      - clientid
//  ClientSecret - Строка - Client secret из настроек приложения  - clientsecret
//  Refresh      - Строка - Refresh токен                         - refresh
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач Refresh) Экспорт

    URL     = "https://oauth.bitrix.info/oauth/token/";
    Строка_ = "Строка";

    Параметры = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("grant_type"   , "refresh_token"     , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("client_id"    , ClientID            , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("client_secret", ClientSecret        , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("refresh_token", Refresh             , Строка_, Параметры);

    Ответ = OPI_Инструменты.Get(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Серверное время
// Получает текущее серверное время
//
// Примечание:
// Метод в документации API: [server_time](@dev.1c-bitrix.ru/rest_help/general/server_time.php)
//
// Параметры:
//  URL   - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен - Строка - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СерверноеВремя(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "server.time");
    Ответ     = OPI_Инструменты.Get(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСЖивойЛентой

// Создать новость
// Создает новую новость в ленте
//
// Примечание:
// Метод в документации API: [log.blogpost.add](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_add.php)
//
// Параметры:
//  URL       - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена                   - url
//  Текст     - Строка - Текст новости                                                                      - text
//  Видимость - Строка - Массив или 1 получатель: UA все, SGn р. группа, Un пользователь, DRn отдел, Gn группа - vision
//  Файлы     - Соответствие Из КлючИЗначение - Ключ > имя файла, значение > путь или двоичные данные       - files
//  Заголовок - Строка - Заголовок новости                                                                  - title
//  Важное    - Булево - Помечает новость как важную                                                        - important
//  Токен     - Строка - Токен авторизации, если используется не вебхук                                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьНовость(Знач URL
    , Знач Текст
    , Знач Видимость = "UA"
    , Знач Файлы = ""
    , Знач Заголовок = ""
    , Знач Важное = Ложь
    , Знач Токен = "") Экспорт

    ПривестиБулево(Важное);

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.add");
    OPI_Инструменты.ДобавитьПоле("POST_MESSAGE", Текст     , Строка_ , Параметры);
    OPI_Инструменты.ДобавитьПоле("POST_TITLE"  , Заголовок , Строка_ , Параметры);
    OPI_Инструменты.ДобавитьПоле("DEST"        , Видимость , "Массив", Параметры);
    OPI_Инструменты.ДобавитьПоле("IMPORTANT"   , Важное    , Строка_ , Параметры);

    Если ЗначениеЗаполнено(Файлы) Тогда

        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Файлы);

        МассивФайлов = НормализоватьФайлы(Файлы);

        Если Не МассивФайлов.Количество() = 0 Тогда
            Параметры.Вставить("FILES", МассивФайлов);
        КонецЕсли;

    КонецЕсли;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить новость
// Изменяет новость в ленте
//
// Примечание:
// Метод в документации API: [log.blogpost.update](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_update.php)
//
// Параметры:
//  URL       - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена                    - url
//  IDНовости - Строка, Число - ID новости                                                                   - postid
//  Текст     - Строка - Текст новости                                                                       - text
//  Видимость - Строка - Массив или 1 получатель: UA все, SGn р. группа, Un пользователь, DRn отдел, Gn группа - vision
//  Файлы     - Соответствие Из КлючИЗначение - Ключ > имя файла, значение > путь или двоичные данные        - files
//  Заголовок - Строка - Заголовок новости                                                                   - title
//  Токен     - Строка - Токен авторизации, если используется не вебхук                                      - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьНовость(Знач URL
    , Знач IDНовости
    , Знач Текст
    , Знач Видимость = "UA"
    , Знач Файлы = ""
    , Знач Заголовок = ""
    , Знач Токен = "") Экспорт

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.update");
    OPI_Инструменты.ДобавитьПоле("POST_MESSAGE", Текст     , Строка_ , Параметры);
    OPI_Инструменты.ДобавитьПоле("POST_TITLE"  , Заголовок , Строка_ , Параметры);
    OPI_Инструменты.ДобавитьПоле("DEST"        , Видимость , "Массив", Параметры);
    OPI_Инструменты.ДобавитьПоле("POST_ID"     , IDНовости , Строка_ , Параметры);

    Если ЗначениеЗаполнено(Файлы) Тогда

        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Файлы);

        МассивФайлов = НормализоватьФайлы(Файлы);

        Если Не МассивФайлов.Количество() = 0 Тогда
            Параметры.Вставить("FILES", МассивФайлов);
        КонецЕсли;

    КонецЕсли;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить новость
// Удаляет новость из ленты по выбранному ID
//
// Примечание:
// Метод в документации API: [log.blogpost.delete](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_delete.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDНовости - Строка, Число - ID новости для удаления                                          - postid
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьНовость(Знач URL, Знач IDНовости, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.delete");
    OPI_Инструменты.ДобавитьПоле("POST_ID", IDНовости, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить список просмотревших важное
// Возвращает список пользователей, просмотревших выбранное важное сообщение
//
// Примечание:
// Метод в документации API: [log.blogpost.getusers.important](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_getusers_important.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDНовости - Строка, Число - ID важной новости                                                - postid
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокПросмотревшихВажное(Знач URL, Знач IDНовости, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.getusers.important");
    OPI_Инструменты.ДобавитьПоле("POST_ID", IDНовости, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить новости
// Получает нвости или одну новость с отобором по ID или доступности
//
// Примечание:
// Метод в документации API: [log.blogpost.get](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_get.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDНовости - Строка, Число - ID важной новости                                                - postid
//  Отбор - Строка - Отбор новостей по доступу: UA все, SGn раб. группа, Un пользователь, DRn отдел, Gn группа - sel
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьНовости(Знач URL, Знач IDНовости = "", Знач Отбор = "UA", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.get");

    OPI_Инструменты.ДобавитьПоле("POST_ID"   , IDНовости, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("LOG_RIGHTS", Отбор    , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить комментарий новости
// Добавляет комментарий к новости
//
// Примечание:
// Метод в документации API: [log.blogcomment.add](@dev.1c-bitrix.ru/rest_help/log/log_blogcomment_add.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDНовости - Строка, Число - ID новости                                                       - postid
//  Текст     - Строка        - Текст комментария                                                - text
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьКомментарийНовости(Знач URL, Знач IDНовости, Знач Текст, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogcomment.add");

    OPI_Инструменты.ДобавитьПоле("POST_ID", IDНовости, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("TEXT"   , Текст    , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить получателей к новости
// Добавляет новые группы или пользователей в получатели
//
// Примечание:
// Метод в документации API: [log.blogpost.share](@dev.1c-bitrix.ru/rest_help/log/log_blogpost_share.php)
//
// Параметры:
//  URL       - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена                      - url
//  IDНовости - Строка, Число - ID новости                                                                     - postid
//  Видимость - Строка - Массив или 1 получатель: UA все, SGn р. группа, Un пользователь, DRn отдел, Gn группа - vision
//  Токен     - Строка - Токен авторизации, если используется не вебхук                                        - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьПолучателейКНовости(Знач URL, Знач IDНовости, Знач Видимость, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "log.blogpost.share");

    OPI_Инструменты.ДобавитьПоле("POST_ID", IDНовости, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("DEST"   , Видимость, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСЗадачами

// Получить задачу
// Получает задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.get](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_get.php)
//
// Параметры:
//  URL       - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи  - Число,Строка - ID задачи                                                        - task
//  Токен     - Строка       - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.get", Токен);
    Возврат Ответ;

КонецФункции

// Получить список задач
// Получает список задач (50 шт. за запрос максимум) с фильтром или без (см. ПолучитьСтруктуруФильтраЗадач)
//
// Примечание:
// Метод в документации API: [tasks.task.list](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_list.php)
//
// Параметры:
//  URL      - Строка                     - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Фильтр   - Структура из КлючИЗначение - Структура отбора задач (см. ПолучитьСтруктуруФильтраЗадач)       - filter
//  Отступ   - Число, Строка              - Отступ от начала списка для полчения задач > 50 шт. рекурсивно   - offset
//  Токен    - Строка                     - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокЗадач(Знач URL, Знач Фильтр = "", Знач Отступ = 0, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.list");
    OPI_Инструменты.ДобавитьПоле("filter", Фильтр, "Коллекция", Параметры);
    OPI_Инструменты.ДобавитьПоле("start" , Отступ, "Строка"   , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Создать задачу
// Создает новую задачу по структуре полей (см. ПолучитьСтруктуруЗадачи)
//
// Примечание:
// Метод в документации API: [tasks.task.add](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_add.php)
//
// Параметры:
//  URL            - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена         - url
//  СтруктураПолей - Структура Из КлючИЗначение - Структура полей задачи (см. ПолучитьСтруктуруЗадачи) - fields
//  Токен          - Строка                     - Токен авторизации, если используется не вебхук       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьЗадачу(Знач URL, Знач СтруктураПолей, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.add");
    OPI_Инструменты.ДобавитьПоле("fields", СтруктураПолей, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить задачу
// Изменяет существующую задачу
//
// Примечание:
// Метод в документации API: [tasks.task.update](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_update.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  СтруктураПолей - Структура Из КлючИЗначение - Структура полей задачи                               - fields
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьЗадачу(Знач URL, Знач IDЗадачи, Знач СтруктураПолей, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.update");
    OPI_Инструменты.ДобавитьПоле("fields", СтруктураПолей, "Коллекция", Параметры);
    OPI_Инструменты.ДобавитьПоле("taskId", IDЗадачи      , "Строка"   , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить задачу
// Удаляет задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_delete.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.delete", Токен);
    Возврат Ответ;

КонецФункции

// Добавить файл в задачу
// Прикрепляет файл к выбранной задаче
//
// Примечание:
// Метод в документации API: [tasks.task.files.attach](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_files_attach.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDФайла        - Число, Строка - ID Файла                                                           - fileid
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьФайлВЗадачу(Знач URL, Знач IDЗадачи, Знач IDФайла, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.files.attach");
    OPI_Инструменты.ДобавитьПоле("fileId", IDФайла , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("taskId", IDЗадачи, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Принять задачу
// Принимает задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.approve](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_approve.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПринятьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.approve", Токен);
    Возврат Ответ;

КонецФункции

// Отклонить задачу
// Отклоняет задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.disapprove](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_disapprove.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтклонитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.disapprove", Токен);
    Возврат Ответ;

КонецФункции

// Завершить задачу
// Завершает задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.complete](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_complete.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗавершитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.complete", Токен);
    Возврат Ответ;

КонецФункции

// Возобновить задачу
// Возвращает в работу задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.renew](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_renew.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВозобновитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.renew", Токен);
    Возврат Ответ;

КонецФункции

// Отложить задачу
// Откладывает задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.defer](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_defer.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтложитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.defer", Токен);
    Возврат Ответ;

КонецФункции

// Приостановить задачу
// Приостанавливает задачу по ID
//
// Примечание:
// Метод в документации API: [tasks.task.pause](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_pause.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПриостановитьЗадачу(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.pause", Токен);
    Возврат Ответ;

КонецФункции

// Начать выполнение задачи
// Начинает выполнение задачи по ID
//
// Примечание:
// Метод в документации API: [tasks.task.start](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_start.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция НачатьВыполнениеЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.start", Токен);
    Возврат Ответ;

КонецФункции

// Начать наблюдать за задачей
// Начинает наблюдение за задачей по ID
//
// Примечание:
// Метод в документации API: [tasks.task.startwatch](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_startwatch.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция НачатьНаблюдатьЗаЗадачей(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.startwatch", Токен);
    Возврат Ответ;

КонецФункции

// Прекратить наблюдать за задачей
// Прекращает наблюдение за задчей по ID
//
// Примечание:
// Метод в документации API: [tasks.task.stopwatch](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_stopwatch.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПрекратитьНаблюдатьЗаЗадачей(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.stopwatch", Токен);
    Возврат Ответ;

КонецФункции

// Делегировать задачу
// Делегирует задачу на другого пользователя
//
// Примечание:
// Метод в документации API: [tasks.task.delegate](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_delegate.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  IDПользователя - Число,Строка - ID пользователя исполнителя                                        - user
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДелегироватьЗадачу(Знач URL, Знач IDЗадачи, Знач IDПользователя, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.delegate");
    OPI_Инструменты.ДобавитьПоле("taskId", IDЗадачи      , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("userId", IDПользователя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить задачу в избранное
// Добавляет задачу в список избранного
//
// Примечание:
// Метод в документации API: [tasks.task.favorite.add](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_favorite_add.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьЗадачуВИзбранное(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.favorite.add", Токен);
    Возврат Ответ;

КонецФункции

// Убрать задачу из избранного
// Удаляет задачу из списка избранного
//
// Примечание:
// Метод в документации API: [tasks.task.favorite.remove](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_favorite_remove.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УбратьЗадачуИзИзбранного(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.favorite.remove", Токен);
    Возврат Ответ;

КонецФункции

// Получить историю задачи
// Получает историю изменений задачи
//
// Примечание:
// Метод в документации API: [tasks.task.history.list](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_history_list.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьИсториюЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.history.list", Токен);
    Возврат Ответ;

КонецФункции

// Проверить доступ к задаче
// Проверяет доступность задачи для пользователей
//
// Примечание:
// Метод в документации API: [tasks.task.getaccess](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_getaccess.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDЗадачи     - Число,Строка     - ID задачи                                                         - task
//  Пользователи - Массив из Строка - ID пользователей для проверки доступа                             - users
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПроверитьДоступКЗадаче(Знач URL, Знач IDЗадачи, Знач Пользователи = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.getaccess");
    OPI_Инструменты.ДобавитьПоле("taskId", IDЗадачи    , "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("users" , Пользователи, "Массив"   , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отключить звук задачи
// Устанавливает режим Без звука для задачи
//
// Примечание:
// Метод в документации API: [tasks.task.mute](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/mute_unmute.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтключитьЗвукЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.mute", Токен);
    Возврат Ответ;

КонецФункции

// Включить звук задачи
// Отключает режим Без звука для задачи
//
// Примечание:
// Метод в документации API: [tasks.task.unmute](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/mute_unmute.php)
//
// Параметры:
//  URL            - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число,Строка - ID задачи                                                          - task
//  Токен          - Строка       - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВключитьЗвукЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.unmute", Токен);
    Возврат Ответ;

КонецФункции

// Создать зависимость задач
// Создает зависимость одной задачи от другой
//
// Примечание:
// Метод в документации API: [task.dependence.add](@dev.1c-bitrix.ru/rest_help/tasks/task/dependence/task_dependence_add.php)
//
// Параметры:
//  URL         - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена      - url
//  IDИсточника - Строка, Число - ID задачи источника связи                                             - taskfrom
//  IDПриемника - Строка, Число - ID задачи приемника связи                                             - taskto
//  ТипСвязи    - Строка, Число - Тип связи: 0 старт>старт, 1 старт>финиш, 2 финиш>старт, 3 финиш>финиш - linktype
//  Токен       - Строка        - Токен авторизации, если используется не вебхук                        - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьЗависимостьЗадач(Знач URL, Знач IDИсточника, Знач IDПриемника, Знач ТипСвязи, Знач Токен = "") Экспорт

    Строка_ = "Строка";

    OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипСвязи);

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.dependence.add");
    OPI_Инструменты.ДобавитьПоле("taskIdFrom", IDИсточника, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("taskIdTo"  , IDПриемника, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("linkType"  , ТипСвязи   , Строка_, Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить зависимость задач
// Удаляет зависимость одной задачи от другой
//
// Примечание:
// Метод в документации API: [task.dependence.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/dependence/task_dependence_delete.php)
//
// Параметры:
//  URL         - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена      - url
//  IDИсточника - Строка, Число - ID задачи источника связи                                             - taskfrom
//  IDПриемника - Строка, Число - ID задачи приемника связи                                             - taskto
//  ТипСвязи    - Строка, Число - Тип связи: 0 старт>старт, 1 старт>финиш, 2 финиш>старт, 3 финиш>финиш - linktype
//  Токен       - Строка        - Токен авторизации, если используется не вебхук                        - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьЗависимостьЗадач(Знач URL, Знач IDИсточника, Знач IDПриемника, Знач ТипСвязи, Знач Токен = "") Экспорт

    Строка_ = "Строка";

    OPI_ПреобразованиеТипов.ПолучитьСтроку(ТипСвязи);

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.dependence.delete");
    OPI_Инструменты.ДобавитьПоле("taskIdFrom", IDИсточника, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("taskIdTo"  , IDПриемника, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("linkType"  , ТипСвязи   , Строка_, Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить план задач на день
// Получает план задач на день текущего пользователя
//
// Примечание:
// Метод в документации API: [task.planner.getlist](@dev.1c-bitrix.ru/rest_help/tasks/task/planner/getlist.php)
//
// Параметры:
//  URL   - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  Токен - Строка - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьПланЗадачНаДень(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.planner.getlist");

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить структуру задачи
// Получает структуру с описанем полей для создания задачи
//
// Примечание:
// Метод в документации API: [tasks.task.getFields](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_getFields.php)
//
// Параметры:
//  URL       - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен     - Строка - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСтруктуруЗадачи(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.getFields");
    Ответ     = OPI_Инструменты.Get(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить структуру фильтра задач
// Возвращает структуру полей для фильтрации задач в методе ПолучитьСписокЗадач
//
// Параметры:
//  Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
//
// Возвращаемое значение:
//  Структура Из КлючИЗначение - Структура полей
Функция ПолучитьСтруктуруФильтраЗадач(Знач Пустая = Ложь) Экспорт

    // Подробнее
    // https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_list.php

    OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);

    СтруктураФильтра = Новый Структура;
    СтруктураФильтра.Вставить("ID"               , "<идентификатор задачи>");
    СтруктураФильтра.Вставить("PARENT_ID"        , "<идентификатор родительской задачи>");
    СтруктураФильтра.Вставить("GROUP_ID"         , "<идентификатор рабочей группы>");
    СтруктураФильтра.Вставить("CREATED_BY"       , "<постановщик>");
    СтруктураФильтра.Вставить("STATUS_CHANGED_BY", "<пользователь, последним изменивший статус задачи>");
    СтруктураФильтра.Вставить("PRIORITY"         , "<приоритет>");
    СтруктураФильтра.Вставить("FORUM_TOPIC_ID"   , "<идентификатор темы форума>");
    СтруктураФильтра.Вставить("RESPONSIBLE_ID"   , "<исполнитель>");
    СтруктураФильтра.Вставить("TITLE"            , "<название задачи (можно искать по шаблону [%_])>");
    СтруктураФильтра.Вставить("TAG"              , "<тэг>");
    СтруктураФильтра.Вставить("REAL_STATUS"      , "<статус задачи>");
    СтруктураФильтра.Вставить("MARK"             , "<оценка>");
    СтруктураФильтра.Вставить("SITE_ID"          , "<идентификатор сайта>");
    СтруктураФильтра.Вставить("ADD_IN_REPORT"    , "<задача в отчете (Y|N)>");
    СтруктураФильтра.Вставить("DATE_START"       , "<дата начала выполнения>");
    СтруктураФильтра.Вставить("DEADLINE"         , "<крайний срок>");
    СтруктураФильтра.Вставить("CREATED_DATE"     , "<дата создания>");
    СтруктураФильтра.Вставить("CLOSED_DATE"      , "<дата завершения>");
    СтруктураФильтра.Вставить("CHANGED_DATE"     , "<дата последнего изменения>");
    СтруктураФильтра.Вставить("ACCOMPLICE"       , "<идентификатор соисполнителя>");
    СтруктураФильтра.Вставить("AUDITOR"          , "<идентификатор наблюдателя>");
    СтруктураФильтра.Вставить("DEPENDS_ON"       , "<идентификатор предыдущей задачи>");
    СтруктураФильтра.Вставить("ONLY_ROOT_TASKS"  , "<только задачи, которые не являются подзадачами (Y|N)>");
    СтруктураФильтра.Вставить("STAGE_ID"         , "<стадия>");
    СтруктураФильтра.Вставить("UF_CRM_TASK"      , "<элементы CRM>");
    СтруктураФильтра.Вставить("STATUS"
        , "<статус для сортировки. Аналогичен REAL_STATUS, но имеет дополнительно три мета-статуса>");

    Если Пустая Тогда
        Для Каждого Фильтр Из СтруктураФильтра Цикл
            Фильтр.Значение = "";
        КонецЦикла;
    КонецЕсли;

    //@skip-check constructor-function-return-section
    Возврат СтруктураФильтра;

КонецФункции

#КонецОбласти

#Область РаботаСПользовательскимиПолямиЗадач

// Получить список пользовательских полей задачи
// Получает список пользовательских полей для задач
//
// Примечание:
// Метод в документации API: [task.item.userfield.getlist](@dev.1c-bitrix.ru/rest_help/tasks/task/userfield/getlist.php)
//
// Параметры:
//  URL        - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен      - Строка - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокПользовательскихПолейЗадачи(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.item.userfield.getlist");

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить пользовательское поле задачи
// Добавляет новое пользовательское поле для добавления в задачу
//
// Примечание:
// Метод в документации API: [task.item.userfield.add](@dev.1c-bitrix.ru/rest_help/tasks/task/userfield/add.php)
//
// Параметры:
//  URL        - Строка                     - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Тип        - Строка                     - Тип поля: string, double, date, boolean                   - type
//  Имя        - Строка                     - Текстовый идентификатор (наименование) поля               - fieldname
//  ВнешнийКод - Строка                     - Внешний текстовый идентификатор поля                      - externalid
//  Заголовок  - Строка                     - Заголовок поля                                            - title
//  Подпись    - Структура Из КлючИЗначение - Подпись в форме. Ключ: en или ru, Значение: Текст подписи - label
//  Токен      - Строка                     - Токен авторизации, если используется не вебхук            - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьПользовательскоеПолеЗадачи(Знач URL
    , Знач Тип
    , Знач Имя
    , Знач ВнешнийКод = ""
    , Знач Заголовок = ""
    , Знач Подпись = ""
    , Знач Токен = "") Экспорт

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.item.userfield.add");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("USER_TYPE_ID"   , Тип       , Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("FIELD_NAME"     , Имя       , Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("XML_ID"         , ВнешнийКод, Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("LABEL"          , Заголовок , Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("EDIT_FORM_LABEL", Подпись   , "Коллекция", Поля);

    OPI_Инструменты.ДобавитьПоле("PARAMS", Поля, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить пользовательское поле задачи
// Изменяет пользовательское поле задачи
//
// Примечание:
// Метод в документации API: [task.item.userfield.update](@dev.1c-bitrix.ru/rest_help/tasks/task/userfield/update.php)
//
// Параметры:
//  URL        - Строка                     - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПоля     - Строка, Число              - ID поля для изменения                                     - fieldid
//  ВнешнийКод - Строка                     - Внешний текстовый идентификатор поля                      - externalid
//  Заголовок  - Строка                     - Заголовок поля                                            - title
//  Подпись    - Структура Из КлючИЗначение - Подпись в форме. Ключ: en или ru, Значение: Текст подписи - label
//  Токен      - Строка                     - Токен авторизации, если используется не вебхук            - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьПользовательскоеПолеЗадачи(Знач URL
    , Знач IDПоля
    , Знач ВнешнийКод = ""
    , Знач Заголовок = ""
    , Знач Подпись = ""
    , Знач Токен = "") Экспорт

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.item.userfield.update");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("XML_ID"         , ВнешнийКод, Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("LABEL"          , Заголовок , Строка_    , Поля);
    OPI_Инструменты.ДобавитьПоле("EDIT_FORM_LABEL", Подпись   , "Коллекция", Поля);

    OPI_Инструменты.ДобавитьПоле("ID"  , IDПоля, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("DATA", Поля  , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить пользовательское поле задачи
// Получает информацию о пользовательском поле задачи
//
// Примечание:
// Метод в документации API: [task.item.userfield.get](@dev.1c-bitrix.ru/rest_help/tasks/task/userfield/get.php)
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDПоля - Строка, Число - ID поля для получения                                              - fieldid
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьПользовательскоеПолеЗадачи(Знач URL, Знач IDПоля, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.item.userfield.get");

    OPI_Инструменты.ДобавитьПоле("ID", IDПоля, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить пользовательское поле задачи
// Удаляет пользовательское поле задачи
//
// Примечание:
// Метод в документации API: [task.item.userfield.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/userfield/delete.php)
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDПоля - Строка, Число - ID поля для удаления                                               - fieldid
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьПользовательскоеПолеЗадачи(Знач URL, Знач IDПоля, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.item.userfield.delete");

    OPI_Инструменты.ДобавитьПоле("ID", IDПоля, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСЧеклистамиЗадач

// Добавить элемент чеклиста задачи
// Добавляет новый элемент чеклиста задачи
//
// Примечание:
// Метод в документации API: [task.checklistitem.add](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/add.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  Текст          - Строка        - Текст (заголовок) пункта чек листа                                 - text
//  Выполнен       - Булево        - Отметить пункт как выполненный                                     - complete
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач Текст, Знач Выполнен = Ложь, Токен = "") Экспорт

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.checklistitem.add");
    Поля      = Новый Структура;

    ПривестиБулево(Выполнен);

    OPI_Инструменты.ДобавитьПоле("TITLE"      , Текст   , Строка_, Поля);
    OPI_Инструменты.ДобавитьПоле("IS_COMPLETE", Выполнен, Строка_, Поля);

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("FIELDS", Поля    , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить элемент чеклиста задачи
// Изменяет текст элемента чеклиста задачи
//
// Примечание:
// Метод в документации API: [task.checklistitem.update](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/update.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDЭлемента     - Число, Строка - ID элемента чеклиста                                               - element
//  Текст          - Строка        - Текст (заголовок) пункта чек листа                                 - text
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Текст, Знач Токен = "") Экспорт

    Строка_ = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.checklistitem.update");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("TITLE", Текст, Строка_, Поля);

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи  , Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDЭлемента, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("FIELDS", Поля      , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить элемент чеклиста задачи
// Удаляет элемент из чеклиста задачи
//
// Примечание:
// Метод в документации API: [task.checklistitem.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/delete.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDЭлемента     - Число, Строка - ID элемента для удаления                                           - element
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Токен = "") Экспорт

    Ответ = УправлениеЭлементомЧеклиста(URL, IDЗадачи, IDЭлемента, "task.checklistitem.delete", Токен);

    Возврат Ответ;

КонецФункции

// Получить чеклист задачи
// Получает список элементов чеклиста задачи
//
// Примечание:
// Метод в документации API: [task.checklistitem.getlist](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/getlist.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьЧеклистЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.checklistitem.getlist");

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи  , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить элемент чеклиста задачи
// Получить элемент чеклиста задачи по ID
//
// Примечание:
// Метод в документации API: [task.checklistitem.get](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/get.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDЭлемента     - Число, Строка - ID элемента для получения                                          - element
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Токен = "") Экспорт

    Ответ = УправлениеЭлементомЧеклиста(URL, IDЗадачи, IDЭлемента, "task.checklistitem.get", Токен);

    Возврат Ответ;

КонецФункции

// Выполнить элемент чеклиста задачи
// Помечает элемент чеклиста задачи как выполненный
//
// Примечание:
// Метод в документации API: [task.checklistitem.complete](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/complete.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDЭлемента     - Число, Строка - ID элемента                                                        - element
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВыполнитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Токен = "") Экспорт

    Ответ = УправлениеЭлементомЧеклиста(URL, IDЗадачи, IDЭлемента, "task.checklistitem.complete", Токен);

    Возврат Ответ;

КонецФункции

// Возобновить элемент чеклиста задачи
// Снимает пометку элемента как выполненного
//
// Примечание:
// Метод в документации API: [task.checklistitem.renew](@dev.1c-bitrix.ru/rest_help/tasks/task/checklistitem/renew.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDЗадачи       - Число, Строка - ID задачи                                                          - task
//  IDЭлемента     - Число, Строка - ID элемента                                                        - element
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВозобновитьЭлементЧеклистаЗадачи(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Токен = "") Экспорт

    Ответ = УправлениеЭлементомЧеклиста(URL, IDЗадачи, IDЭлемента, "task.checklistitem.renew", Токен);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСКомментариямиИРезультатамиЗадач

// Получить список комментариев задачи
// Полчает список комментариев пользователей к задаче по ID
//
// Примечание:
// Метод в документации API: [task.commentitem.getlist](@dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/getlist.php)
//
// Параметры:
//  URL       - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDЗадачи  - Число, Строка  - ID задачи                                                         - task
//  Токен     - Строка         - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокКомментариевЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "task.commentitem.getlist", Токен);
    Возврат Ответ;

КонецФункции

// Получить комменатрий задачи
// Получает информацию о комментарии задачи по ID
//
// Примечание:
// Метод в документации API: [task.commentitem.get](@dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/get.php)
//
// Параметры:
//  URL           - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDЗадачи      - Число, Строка  - ID задачи                                                         - task
//  IDКомментария - Число, Строка  - ID комментария                                                    - comment
//  Токен         - Строка         - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьКомменатрийЗадачи(Знач URL, Знач IDЗадачи, Знач IDКомментария, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.commentitem.get");
    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDКомментария, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить комментарий задачи
// Создает комментарий к задаче
//
// Примечание:
// Метод в документации API: [task.commentitem.add](@dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/add.php)
//
// Параметры:
//  URL       - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDЗадачи  - Число, Строка  - ID задачи                                                         - task
//  Текст     - Строка         - Текст комментария                                                 - text
//  Токен     - Строка         - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьКомментарийЗадачи(Знач URL, Знач IDЗадачи, Знач Текст, Знач Токен = "") Экспорт

    Параметры   = НормализоватьАвторизацию(URL, Токен, "task.commentitem.add");

    Комментарий = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("POST_MESSAGE", Текст, "Строка", Комментарий);

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи   , "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("FIELDS", Комментарий, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить комментарий задачи
// Изменяет текст комментария задачи
//
// Примечание:
// Метод в документации API: [task.commentitem.update](@dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/update.php)
//
// Параметры:
//  URL           - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDЗадачи      - Число, Строка  - ID задачи                                                         - task
//  IDКомментария - Число, Строка  - ID комментария                                                    - comment
//  Текст         - Строка         - Текст комментария                                                 - text
//  Токен         - Строка         - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьКомментарийЗадачи(Знач URL, Знач IDЗадачи, Знач IDКомментария, Знач Текст, Знач Токен = "") Экспорт

    Строка_     = "Строка";

    Параметры   = НормализоватьАвторизацию(URL, Токен, "task.commentitem.update");

    Комментарий = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("POST_MESSAGE", Текст, "Строка", Комментарий);

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи     , Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDКомментария, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("FIELDS", Комментарий  , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить комментарий
// Удаляет существующий комментарий задачи
//
// Примечание:
// Метод в документации API: [task.commentitem.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/delete.php)
//
// Параметры:
//  URL                  - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи             - Число, Строка  - ID задачи                                                        - task
//  IDКомментария        - Число, Строка  - ID удаляемого комментария                                        - comment
//  Токен                - Строка         - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьКомментарийЗадачи(Знач URL, Знач IDЗадачи, Знач IDКомментария, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.commentitem.delete");

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDКомментария, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить список результатов
// Получает список результатов задачи
//
// Примечание:
// Метод в документации API: [tasks.task.result.list](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_result.list.php)
//
// Параметры:
//  URL       - Строка       - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи  - Число,Строка - ID задачи                                                        - task
//  Токен     - Строка       - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокРезультатов(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Ответ = УправлениеЗадачей(URL, IDЗадачи, "tasks.task.result.list", Токен);
    Возврат Ответ;

КонецФункции

// Создать результат из комментария
// Создает результат задачи из комментария
//
// Примечание:
// Метод в документации API: [tasks.task.result.addFromComment](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_result_addFromComment.php)
//
// Параметры:
//  URL                  - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКомментария        - Число, Строка  - ID комментария                                                   - comment
//  Токен                - Строка         - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьРезультатИзКомментария(Знач URL, Знач IDКомментария, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.result.addFromComment");
    OPI_Инструменты.ДобавитьПоле("commentId", IDКомментария, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить результат из комментария
// Удаляет ранее созданный результат из комментария
//
// Примечание:
// Метод в документации API: [tasks.task.result.deleteFromComment](@dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_result_deleteFromComment.php)
//
// Параметры:
//  URL                  - Строка         - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКомментария        - Число, Строка  - ID комментария                                                   - comment
//  Токен                - Строка         - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьРезультатИзКомментария(Знач URL, Знач IDКомментария, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "tasks.task.result.deleteFromComment");
    OPI_Инструменты.ДобавитьПоле("commentId", IDКомментария, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить структуру комментария
// Получает структуру полей комментария
//
// Параметры:
//  Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
//
// Возвращаемое значение:
//  Структура Из КлючИЗначение - Структура полей
Функция ПолучитьСтруктуруКомментария(Знач Пустая = Ложь) Экспорт

    // Подробнее
    // https://dev.1c-bitrix.ru/rest_help/tasks/task/commentitem/add.php

    OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);

    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("AUTHOR_ID"            , "<идентификатор автора комментария>");
    СтруктураПолей.Вставить("AUTHOR_NAME"          , "<Имя пользователя (опционально)>");
    СтруктураПолей.Вставить("AUTHOR_EMAIL"         , "<E-mail пользователя (опционально)>");
    СтруктураПолей.Вставить("USE_SMILES"           , "<(Y|N) - парсить или нет комментарии на наличие смайлов>");
    СтруктураПолей.Вставить("POST_MESSAGE"         , "<Текст сообщения>");
    СтруктураПолей.Вставить("UF_FORUM_MESSAGE_DOC" , "<Массив файлов с диска для прикрепления>");

    Если Пустая Тогда
        Для Каждого Поле Из СтруктураПолей Цикл
            Поле.Значение = "";
        КонецЦикла;
    КонецЕсли;

    //@skip-check constructor-function-return-section
    Возврат СтруктураПолей;

КонецФункции

#КонецОбласти

#Область Канбан

// Добавить стадию канбана
// Добавляет стабию канбана или Моего плана
//
// Примечание:
// Метод в документации API: [task.stages.add](@dev.1c-bitrix.ru/rest_help/tasks/task/kanban/task_stages_add.php)
//
// Параметры:
//  URL              - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  Наименование     - Строка        - Наименование новой стадии                                            - title
//  Цвет             - Строка        - HEX цвета новой стадии                                               - color
//  IDПредыдущей     - Строка, Число - ID стадии, после которой необходимо вставить новую (в начало по ум.) - prevstage
//  IDСущности       - Строка, Число - ID группы или пользователя владельца канбан. Свой по умолчанию       - entityid
//  КакАдминистратор - Булево        - Позволяет добавлять стадии без проверки прав (для администраторов)   - admin
//  Токен            - Строка        - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьСтадиюКанбана(Знач URL
    , Знач Наименование
    , Знач Цвет = "FFD800"
    , Знач IDПредыдущей = 0
    , Знач IDСущности = 0
    , Знач КакАдминистратор = Ложь
    , Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.stages.add");
    Поля      = Новый Структура;

    ПривестиБулево(КакАдминистратор);

    OPI_Инструменты.ДобавитьПоле("TITLE"    , Наименование    , Строка_, Поля);
    OPI_Инструменты.ДобавитьПоле("COLOR"    , Цвет            , Строка_, Поля);
    OPI_Инструменты.ДобавитьПоле("AFTER_ID" , IDПредыдущей    , Строка_, Поля);
    OPI_Инструменты.ДобавитьПоле("ENTITY_ID", IDСущности      , Строка_, Поля);
    OPI_Инструменты.ДобавитьПоле("isAdmin"  , КакАдминистратор, Строка_, Поля);

    Параметры.Вставить("fields", Поля);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить стадию канбана
// Изменяет свойства существующей стадии канбана или Моего плана
//
// Примечание:
// Метод в документации API: [task.stages.update](@dev.1c-bitrix.ru/rest_help/tasks/task/kanban/task_stages_update.php)
//
// Параметры:
//  URL              - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  Наименование     - Строка        - Новое наименование стадии                                            - title
//  IDСтадии         - Строка, Число - ID стадии для изменения                                              - stage
//  Цвет             - Строка        - HEX нового цвета стадии                                              - color
//  IDПредыдущей     - Строка, Число - ID стадии, после которой необходимо вставить выбранную               - prevstage
//  КакАдминистратор - Булево        - Позволяет добавлять стадии без проверки прав (для администраторов)   - admin
//  Токен            - Строка        - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьСтадиюКанбана(Знач URL
    , Знач Наименование
    , Знач IDСтадии
    , Знач Цвет = ""
    , Знач IDПредыдущей = 0
    , Знач КакАдминистратор = Ложь
    , Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.stages.update");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("TITLE"    , Наименование    , Строка_ , Поля);
    OPI_Инструменты.ДобавитьПоле("COLOR"    , Цвет            , Строка_ , Поля);
    OPI_Инструменты.ДобавитьПоле("AFTER_ID" , IDПредыдущей    , Строка_ , Поля);
    OPI_Инструменты.ДобавитьПоле("isAdmin"  , КакАдминистратор, "Булево", Поля);

    OPI_Инструменты.ДобавитьПоле("id"    , IDСтадии, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("fields", Поля    , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить стадию канбана
// Удаляет стадию канбана или Моего плана, при условии, что в ней нет задач
//
// Примечание:
// Метод в документации API: [task.stages.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/kanban/task_stages_delete.php)
//
// Параметры:
//  URL              - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDСтадии         - Строка, Число - ID стадии для удаления                                             - stage
//  КакАдминистратор - Булево        - Позволяет добавлять стадии без проверки прав (для администраторов) - admin
//  Токен            - Строка        - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьСтадиюКанбана(Знач URL, Знач IDСтадии, Знач КакАдминистратор = Ложь, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.stages.delete");

    ПривестиБулево(КакАдминистратор);

    OPI_Инструменты.ДобавитьПоле("id"     , IDСтадии        , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("isAdmin", КакАдминистратор, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить стадии канбана
// Получает информацию о стадиях Канбана или Моего плана
//
// Примечание:
// Метод в документации API: [task.stages.get](@dev.1c-bitrix.ru/rest_help/tasks/task/kanban/task_stages_get.php)
//
// Параметры:
//  URL              - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDСущности       - Строка, Число - ID группы или пользователя владельца канбан. Свой по умолчанию    - entityid
//  КакАдминистратор - Булево        - Позволяет получать стадии без проверки прав (для администраторов) - admin
//  Токен            - Строка        - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСтадииКанбана(Знач URL, Знач IDСущности = 0, Знач КакАдминистратор = Ложь, Знач Токен = "") Экспорт

    IDСущности = OPI_Инструменты.ЧислоВСтроку(IDСущности);
    Параметры  = НормализоватьАвторизацию(URL, Токен, "task.stages.get");

    ПривестиБулево(КакАдминистратор);

    OPI_Инструменты.ДобавитьПоле("entityId", IDСущности      , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("isAdmin" , КакАдминистратор, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Перенести задачу в стадию канбана
// Переносит задачу в выбранную стадию канбана
//
// Примечание:
// Метод в документации API: [task.stages.movetask](@dev.1c-bitrix.ru/rest_help/tasks/task/kanban/task_stages_movetask.php)
//
// Параметры:
//  URL      - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена            - url
//  IDЗадачи - Строка, Число - ID задачи для переноса                                                      - task
//  IDСтадии - Строка, Число - ID стадии                                                                   - stage
//  Перед    - Строка, Число - ID задачи, перед которой надо поставить выбранную (если не заполнено После) - before
//  После    - Строка, Число - ID задачи, после которой надо поставить выбранную (если не заполнено Перед) - after
//  Токен    - Строка        - Токен авторизации, если используется не вебхук                              - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПеренестиЗадачуВСтадиюКанбана(Знач URL
    , Знач IDЗадачи
    , Знач IDСтадии
    , Знач Перед = 0
    , Знач После = 0
    , Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.stages.movetask");

    OPI_Инструменты.ДобавитьПоле("id"     , IDЗадачи, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("stageId", IDСтадии, Строка_, Параметры);

    Если ЗначениеЗаполнено(Перед) Тогда

        OPI_Инструменты.ДобавитьПоле("before", Перед, Строка_, Параметры);

    Иначе

        OPI_ПреобразованиеТипов.ПолучитьСтроку(После);
        OPI_Инструменты.ДобавитьПоле("after", После, Строка_, Параметры);

    КонецЕсли;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область УчетРабочегоВремени

// Добавить трудозатраты задачи
// Добавляет информацию о затраченном времени пользователя в задачу
//
// Примечание:
// Метод в документации API: [task.elapseditem.add](@dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/add.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи       - Строка, Число - ID задачи для добавления затрат                                  - task
//  Время          - Строка, Число - Затраченное время в секундах                                     - amount
//  IDПользователя - Строка, Число - ID пользователя, затратившего время                              - user
//  Текст          - Строка        - Текст комментария трудозатраты                                   - text
//  ДатаУстановки  - Строка        - Дата установки трудозатрат                                       - date
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьТрудозатратыЗадачи(Знач URL
    , Знач IDЗадачи
    , Знач Время
    , Знач IDПользователя = ""
    , Знач Текст = ""
    , Знач ДатаУстановки = ""
    , Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.elapseditem.add");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("SECONDS"     , Время         , Строка_  , Поля);
    OPI_Инструменты.ДобавитьПоле("COMMENT_TEXT", Текст         , Строка_  , Поля);
    OPI_Инструменты.ДобавитьПоле("USER_ID"     , IDПользователя, Строка_  , Поля);
    OPI_Инструменты.ДобавитьПоле("CREATED_DATE", ДатаУстановки , "ДатаISO", Поля);

    OPI_Инструменты.ДобавитьПоле("TASKID"  , IDЗадачи, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("ARFIELDS", Поля    , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить трудозатраты задачи
// Удаляет запись о трудозатратах из задачи
//
// Примечание:
// Метод в документации API: [task.elapseditem.delete](@dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/delete.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи  - Строка, Число - ID задачи для добавления затрат                                  - task
//  IDЗаписи  - Строка, Число - ID записи о трудозатратах                                        - record
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьТрудозатратыЗадачи(Знач URL, Знач IDЗадачи, Знач IDЗаписи, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.elapseditem.delete");

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDЗаписи, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить список трудозатрат задачи
// Получает список записей о трудозатратах задачи
//
// Примечание:
// Метод в документации API: [task.elapseditem.getlist](@dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/getlist.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи  - Строка, Число - ID задачи                                                        - task
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокТрудозатратЗадачи(Знач URL, Знач IDЗадачи, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.elapseditem.getlist");

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить трудозатраты задачи
// Получает информацию о записи трудозатрат задачи по ID
//
// Примечание:
// Метод в документации API: [task.elapseditem.get](@dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/get.php)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи  - Строка, Число - ID задачи                                                        - task
//  IDЗаписи  - Строка, Число - ID записи о трудозатратах                                        - record
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьТрудозатратыЗадачи(Знач URL, Знач IDЗадачи, Знач IDЗаписи, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.elapseditem.get");

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDЗаписи, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить трудозатраты задачи
// Изменяет данные записи о трудозатратах задачи
//
// Примечание:
// Метод в документации API: [task.elapseditem.update](@dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/update.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЗадачи       - Строка, Число - ID задачи                                                        - task
//  IDЗаписи       - Строка, Число - ID записи о трудозатратах                                        - record
//  Время          - Строка, Число - Затраченное время в секундах                                     - amount
//  Текст          - Строка        - Текст комментария трудозатраты                                   - text
//  ДатаУстановки  - Строка        - Дата установки трудозатрат                                       - date
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьТрудозатратыЗадачи(Знач URL
    , Знач IDЗадачи
    , Знач IDЗаписи
    , Знач Время
    , Знач Текст = ""
    , Знач ДатаУстановки = ""
    , Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "task.elapseditem.update");
    Поля      = Новый Структура;

    OPI_Инструменты.ДобавитьПоле("SECONDS"     , Время         , Строка_  , Поля);
    OPI_Инструменты.ДобавитьПоле("COMMENT_TEXT", Текст         , Строка_  , Поля);
    OPI_Инструменты.ДобавитьПоле("CREATED_DATE", ДатаУстановки , "ДатаISO", Поля);

    OPI_Инструменты.ДобавитьПоле("TASKID"  , IDЗадачи, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID"  , IDЗаписи, Строка_    , Параметры);
    OPI_Инструменты.ДобавитьПоле("ARFIELDS", Поля    , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Начать учет времени
// Начинает учет времени пользователя
//
// Примечание:
// Метод в документации API: [timeman.open](@dev.1c-bitrix.ru/rest_help/timeman/base/timeman_open.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена          - url
//  IDПользователя - Строка, Число - ID пользователя для учета. Текущий по умолчанию                           - userid
//  Время          - Дата          - Время начала учета. Дата должна совпадать с текущей. Текущее время по ум. - time
//  Отчет          - Строка - Причина изменения. Обязателен при указании Время и отключенном свободном графике - report
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                            - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция НачатьУчетВремени(Знач URL
    , Знач IDПользователя = ""
    , Знач Время = ""
    , Знач Отчет = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "timeman.open");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка"  , Параметры);
    OPI_Инструменты.ДобавитьПоле("TIME"   , Время         , "ДатаISOZ", Параметры);
    OPI_Инструменты.ДобавитьПоле("REPORT" , Отчет         , "Строка"  , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Завершить учет времени
// Завершает учет времени пользователя
//
// Примечание:
// Метод в документации API: [timeman.close](@dev.1c-bitrix.ru/rest_help/timeman/base/timeman_close.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена           - url
//  IDПользователя - Строка, Число - ID пользователя для учета. Текущий по умолчанию                            - userid
//  Время          - Дата          - Время заверш. учета. Дата должна совпадать с текущей. Текущее время по ум. - time
//  Отчет          - Строка - Причина изменения. Обязателен при указании Время и отключенном свободном графике  - report
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                             - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗавершитьУчетВремени(Знач URL
    , Знач IDПользователя = ""
    , Знач Время = ""
    , Знач Отчет = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "timeman.close");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка"  , Параметры);
    OPI_Инструменты.ДобавитьПоле("TIME"   , Время         , "ДатаISOZ", Параметры);
    OPI_Инструменты.ДобавитьПоле("REPORT" , Отчет         , "Строка"  , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Приостановить учет времени
// Приостанавливает учет времени пользователя
//
// Примечание:
// Метод в документации API: [timeman.pause](@dev.1c-bitrix.ru/rest_help/timeman/base/timeman_pause.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователя - Строка, Число - ID пользователя для учета. Текущий по умолчанию                  - userid
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПриостановитьУчетВремени(Знач URL, Знач IDПользователя = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "timeman.pause");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка" , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить статус учета времени
// Получает статус учета времени пользователя
//
// Примечание:
// Метод в документации API: [timeman.status](@dev.1c-bitrix.ru/rest_help/timeman/base/timeman_status.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователя - Строка, Число - ID пользователя для учета. Текущий по умолчанию                  - userid
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСтатусУчетаВремени(Знач URL, Знач IDПользователя = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "timeman.status");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка" , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить настройки учета времени
// Получает настройки учета времени пользователя
//
// Примечание:
// Метод в документации API: [timeman.settings](@dev.1c-bitrix.ru/rest_help/timeman/base/timeman_settings.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователя - Строка, Число - ID пользователя для учета. Текущий по умолчанию                  - userid
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьНастройкиУчетаВремени(Знач URL, Знач IDПользователя = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "timeman.settings");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка" , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСХранилищами

// Получить список хранилищ
// Получает список доступных хранилищ файлов
//
// Примечание:
// Метод в документации API: [disk.storage.getlist](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_getlist.php)
//
// Параметры:
//  URL       - Строка  - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  Токен     - Строка  - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокХранилищ(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.storage.getlist");
    Ответ     = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить хранилище приложения
// Получает информацию о хранилище с которым может работать приложение для хранения своих данных
//
// Примечание:
// Метод в документации API: [disk.storage.getforapp](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_getforapp.php)
//
// Параметры:
//  URL       - Строка  - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  Токен     - Строка  - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьХранилищеПриложения(Знач URL, Знач Токен = "") Экспорт

    Параметры    = НормализоватьАвторизацию(URL, Токен, "disk.storage.getforapp");
    Ответ        = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить хранилище
// Получает информацию о хранилище по ID
//
// Примечание:
// Метод в документации API: [disk.storage.get](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_get.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDХранилища  - Строка, Число    - Идентификатор хранилища                                           - storageid
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьХранилище(Знач URL, Знач IDХранилища, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDХранилища, "disk.storage.get", Токен);
    Возврат Ответ;

КонецФункции

// Переименовать хранилище
// Изменяет имя хранилища (только для хранилища приложения см. ПолучитьСписокХранилищПриложения)
//
// Примечание:
// Метод в документации API: [disk.storage.rename](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_rename.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDХранилища  - Строка, Число    - Идентификатор хранилища                                           - storageid
//  Наименование - Строка           - Новое наименование хранилища                                      - title
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПереименоватьХранилище(Знач URL, Знач IDХранилища, Знач Наименование, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.storage.rename");

    OPI_Инструменты.ДобавитьПоле("id"     , IDХранилища , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("newName", Наименование, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить содержимое хранилища
// Получает список файлов и каталогов, находящихся в корне хранилища
//
// Примечание:
// Метод в документации API: [disk.storage.getchildren](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_getchildren.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDХранилища  - Строка, Число    - Идентификатор хранилища                                           - storageid
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСодержимоеХранилища(Знач URL, Знач IDХранилища, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDХранилища, "disk.storage.getchildren", Токен);
    Возврат Ответ;

КонецФункции

// Создать каталог в хранилище
// Создает пустой каталог в хранилище
//
// Примечание:
// Метод в документации API: [disk.storage.addfolder](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_addfolder.php)
//
// Параметры:
//  URL          - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDХранилища  - Строка - Идентификатор хранилища                                           - storageid
//  Наименование - Строка - Имя каталога                                                      - title
//  Токен        - Строка - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьКаталогВХранилище(Знач URL, Знач IDХранилища, Знач Наименование, Знач Токен = "") Экспорт

    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);

    СтруктураПапки = Новый Структура("NAME", Наименование);

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.storage.addfolder");

    OPI_Инструменты.ДобавитьПоле("id"  , IDХранилища   , "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("data", СтруктураПапки, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСКаталогами

// Получить информацию о каталоге
// Получает информацию о каталоге
//
// Примечание:
// Метод в документации API: [disk.folder.get](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_get.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDКаталога   - Строка, Число    - Идентификатор каталога                                            - folderid
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьИнформациюОКаталоге(Знач URL, Знач IDКаталога, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDКаталога, "disk.folder.get", Токен);
    Возврат Ответ;

КонецФункции

// Создать подкаталог
// Создает каталог внутри другого каталога
//
// Примечание:
// Метод в документации API: [disk.folder.addsubfolder](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_addsubfolder.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDКаталога   - Строка, Число    - Идентификатор каталога родителя                                   - folderid
//  Наименование - Строка           - Наименование нового каталога                                      - title
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьПодкаталог(Знач URL, Знач IDКаталога, Знач Наименование, Знач Токен = "") Экспорт

    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);

    СтруктураПапки = Новый Структура("NAME", Наименование);

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.addsubfolder");

    OPI_Инструменты.ДобавитьПоле("id"  , IDКаталога    , "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("data", СтруктураПапки, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Скопировать каталог
// Копирует один каталог в другой
//
// Примечание:
// Метод в документации API: [disk.folder.copyto](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_copyto.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDКаталога   - Строка, Число    - Идентификатор каталога                                            - folderid
//  IDПриемника  - Строка, Число    - ID каталога назначения                                            - tagetid
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СкопироватьКаталог(Знач URL, Знач IDКаталога, Знач IDПриемника, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.copyto");

    OPI_Инструменты.ДобавитьПоле("id"            , IDКаталога , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("targetFolderId", IDПриемника, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Переместить каталог
// Перемещает один каталог внутрь другого
//
// Примечание:
// Метод в документации API: [disk.folder.moveto](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_moveto.php)
//
// Параметры:
//  URL          - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDКаталога   - Строка, Число    - Идентификатор каталога                                            - folderid
//  IDПриемника  - Строка, Число    - ID каталога назначения                                            - tagetid
//  Токен        - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПереместитьКаталог(Знач URL, Знач IDКаталога, Знач IDПриемника, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.moveto");

    OPI_Инструменты.ДобавитьПоле("id"            , IDКаталога , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("targetFolderId", IDПриемника, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить каталог
// Удаляет каталог с подкаталогами
//
// Примечание:
// Метод в документации API: [disk.folder.deletetree](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_deletetree.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога   - Строка, Число          - Идентификатор удаляемого каталога                                - folderid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьКаталог(Знач URL, Знач IDКаталога, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDКаталога, "disk.folder.deletetree", Токен);
    Возврат Ответ;

КонецФункции

// Получить внешнюю ссылку каталога
// Получает внешнюю ссылку для доступа к каталогу
//
// Примечание:
// Метод в документации API: [disk.folder.getExternalLink](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_getexternallink.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога   - Строка, Число          - Идентификатор каталога                                           - folderid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьВнешнююСсылкуКаталога(Знач URL, Знач IDКаталога, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDКаталога, "disk.folder.getExternalLink", Токен);
    Возврат Ответ;

КонецФункции

// Получить дочерние элементы каталога
// Получает дочерние элементы каталога
//
// Примечание:
// Метод в документации API: [disk.folder.getchildren](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_getchildren.php)
//
// Параметры:
//  URL        - Строка                     - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога - Строка, Число              - Идентификатор каталога                                         - folderid
//  Фильтр     - Структура из КлючИЗначение - Отбор элементов (См. ПолучитьСтруктуруФильтраКаталога)         - filter
//  Токен      - Строка                     - Токен авторизации, если используется не вебхук                 - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьДочерниеЭлементыКаталога(Знач URL, Знач IDКаталога, Знач Фильтр = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.getchildren");
    OPI_Инструменты.ДобавитьПоле("id"    , IDКаталога, "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("filter", Фильтр    , "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Поместить каталог в корзину
// Перемещает каталог в корзину удаляемых файлов
//
// Примечание:
// Метод в документации API: [disk.folder.markdeleted](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_markdeleted.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога   - Строка, Число          - Идентификатор каталога                                           - folderid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПоместитьКаталогВКорзину(Знач URL, Знач IDКаталога, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDКаталога, "disk.folder.markdeleted", Токен);
    Возврат Ответ;

КонецФункции

// Восстановить каталог
// Восстанавливает каталог из корзины
//
// Примечание:
// Метод в документации API: [disk.folder.restore](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_restore.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога   - Строка, Число          - Идентификатор каталога                                           - folderid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВосстановитьКаталог(Знач URL, Знач IDКаталога, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDКаталога, "disk.folder.restore", Токен);
    Возврат Ответ;

КонецФункции

// Переименовать каталог
// Изменяет имя каталога
//
// Примечание:
// Метод в документации API: [disk.folder.rename](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_rename.php)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDКаталога   - Строка, Число - Идентификатор каталога                                           - folderid
//  Наименование - Строка        - Новое наименование каталога                                      - title
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПереименоватьКаталог(Знач URL, Знач IDКаталога, Знач Наименование, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.rename");

    OPI_Инструменты.ДобавитьПоле("id"     , IDКаталога  , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("newName", Наименование, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить структуру фильтра каталога
// Возвращает структуру полей для фильтрации дочерних элементов каталога
//
// Примечание:
// Метод в документации API: [disk.folder.getfields](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_getfields.php)
//
// Параметры:
//  URL    - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена                       - url
//  Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания типов полей - empty
//  Токен  - Строка - Токен авторизации, если используется не вебхук                                         - token
//
// Возвращаемое значение:
//  Структура Из КлючИЗначение - Структура полей
Функция ПолучитьСтруктуруФильтраКаталога(Знач URL, Знач Пустая = Ложь, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.getfields");
    Фильтр    = Новый Структура;

    Ответ = OPI_Инструменты.Post(URL, Параметры);
    Поля  = Ответ["result"];

    Для Каждого Поле Из Поля Цикл

        Имя       = Поле.Ключ;
        Описание  = Поле.Значение;

        Если Описание["USE_IN_FILTER"] Тогда

            ТипДанных = ?(Пустая, "", Описание["TYPE"]);
            Фильтр.Вставить(Имя, ТипДанных);

        КонецЕсли;

    КонецЦикла;

    Возврат Фильтр;

КонецФункции

#КонецОбласти

#Область РаботаСФайлами

// Загрузить файл в хранилище
// Загружает файл в выбранное хранилище
//
// Примечание:
// Метод в документации API: [disk.storage.uploadfile](@dev.1c-bitrix.ru/rest_help/disk/storage/disk_storage_uploadfile.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Наименование - Строка                 - Наименование файла с расширением для сохранения                - title
//  Файл         - Строка, ДвоичныеДанные - Файл для загрузки                                              - file
//  IDХранилища  - Строка                 - Идентификатор хранилища для загрузки                           - storageid
//  Доступы      - Строка                 - Массив доступов по задачам, если необходимо                    - rights
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                 - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗагрузитьФайлВХранилище(Знач URL
    , Знач Наименование
    , Знач Файл
    , Знач IDХранилища
    , Знач Доступы = ""
    , Знач Токен = "") Экспорт

    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDХранилища);
    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);

    Метод = "disk.storage.uploadfile";

    ДанныеФайла     = Новый Структура("NAME", Наименование);
    СодержимоеФайла = Новый Соответствие();
    СодержимоеФайла.Вставить(Наименование, Файл);

    Параметры = НормализоватьАвторизацию(URL, Токен, Метод);
    OPI_Инструменты.ДобавитьПоле("data"  , ДанныеФайла, "Коллекция", Параметры);
    OPI_Инструменты.ДобавитьПоле("rights", Доступы    , "Массив"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("id"    , IDХранилища, "Строка"   , Параметры);

    МассивФайла = НормализоватьФайлы(СодержимоеФайла);

    Если Не МассивФайла.Количество() = 0 Тогда
        Параметры.Вставить("fileContent", МассивФайла[0]);
    КонецЕсли;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Загрузить файл в каталог
// Загружает переданный файл в каталог
//
// Примечание:
// Метод в документации API: [disk.folder.uploadfile](@dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_uploadfile.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Наименование - Строка                 - Наименование файла с расширением для сохранения                - title
//  Файл         - Строка, ДвоичныеДанные - Файл для загрузки                                              - file
//  IDКаталога   - Строка                 - Идентификатор каталога для загрузки                            - folderid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                 - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ЗагрузитьФайлВКаталог(Знач URL, Знач Наименование, Знач Файл, Знач IDКаталога, Знач Токен = "") Экспорт

    OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.folder.uploadFile");
    OPI_Инструменты.ДобавитьПоле("id", IDКаталога, "Строка", Параметры);

    Ответ     = OPI_Инструменты.Get(URL, Параметры);
    Результат = Ответ["result"];

    Если ЗначениеЗаполнено(Результат) Тогда

        ИмяПоля     = Результат["field"];
        URLЗагрузки = Результат["uploadUrl"];

        Если ЗначениеЗаполнено(ИмяПоля) И ЗначениеЗаполнено(URLЗагрузки) Тогда

            ИмяПоля     = СокрЛП(ИмяПоля);
            URLЗагрузки = СокрЛП(URLЗагрузки);
            ИмяФайла    = ИмяПоля + "|" + Наименование;

            СоответствиеФайла = Новый Соответствие;
            СоответствиеФайла.Вставить(ИмяФайла, Файл);

            Ответ = OPI_Инструменты.PostMultipart(URLЗагрузки, , СоответствиеФайла, "");

        КонецЕсли;

    КонецЕсли;

    Возврат Ответ;

КонецФункции

// Получить информацию о файле
// Получает информацию о файле по ID
//
// Примечание:
// Метод в документации API: [disk.file.get](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_get.php)
//
// Параметры:
//  URL      - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла  - Строка, Число    - Идентификатор файла                                               - fileid
//  Токен    - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьИнформациюОФайле(Знач URL, Знач IDФайла, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDФайла, "disk.file.get", Токен);
    Возврат Ответ;

КонецФункции

// Удалить файл
// Удаляет файл по ID
//
// Примечание:
// Метод в документации API: [disk.file.delete](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_delete.php)
//
// Параметры:
//  URL          - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла      - Строка, Число          - Идентификатор удаляемого файла                                    - fileid
//  Токен        - Строка                 - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьФайл(Знач URL, Знач IDФайла, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDФайла, "disk.file.delete", Токен);
    Возврат Ответ;

КонецФункции

// Получить внешнюю ссылку файла
// Получает внешнюю ссылку для доступа к файлу
//
// Примечание:
// Метод в документации API: [disk.file.getExternalLink](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_getexternallink.php)
//
// Параметры:
//  URL      - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла  - Строка, Число    - Идентификатор файла                                               - fileid
//  Токен    - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьВнешнююСсылкуФайла(Знач URL, Знач IDФайла, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDФайла, "disk.file.getExternalLink", Токен);
    Возврат Ответ;

КонецФункции

// Поместить файл в корзину
// Перемещает файл в корзину удаляемых файлов
//
// Примечание:
// Метод в документации API: [disk.file.markdeleted](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_markdeleted.php)
//
// Параметры:
//  URL      - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла  - Строка, Число    - Идентификатор файла                                               - fileid
//  Токен    - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПоместитьФайлВКорзину(Знач URL, Знач IDФайла, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDФайла, "disk.file.markdeleted", Токен);
    Возврат Ответ;

КонецФункции

// Восстановить файл
// Восстанавливает файл из корзины
//
// Примечание:
// Метод в документации API: [disk.file.restore](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_restore.php)
//
// Параметры:
//  URL      - Строка           - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла  - Строка, Число    - Идентификатор файла                                               - fileid
//  Токен    - Строка           - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВосстановитьФайл(Знач URL, Знач IDФайла, Знач Токен = "") Экспорт

    Ответ = УправлениеФайлом(URL, IDФайла, "disk.file.restore", Токен);
    Возврат Ответ;

КонецФункции

// Скопировать файл
// Копирует файл из одного расположения в другое
//
// Примечание:
// Метод в документации API: [disk.file.copyto](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_copyto.php)
//
// Параметры:
//  URL        - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла    - Строка, Число - ID файла для копирования                                          - fileid
//  IDКаталога - Строка, Число - ID каталога размещения копии                                      - folderid
//  Токен      - Строка        - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СкопироватьФайл(Знач URL, Знач IDФайла, Знач IDКаталога, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.file.copyto");

    OPI_Инструменты.ДобавитьПоле("id"            , IDФайла   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("targetFolderId", IDКаталога, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Переместить файл
// Перемещает файл из одного расположения в другое
//
// Примечание:
// Метод в документации API: [disk.file.moveto](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_moveto.php)
//
// Параметры:
//  URL        - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена  - url
//  IDФайла    - Строка, Число - ID файла для перемещения                                          - fileid
//  IDКаталога - Строка, Число - ID каталога нового размещения                                     - folderid
//  Токен      - Строка        - Токен авторизации, если используется не вебхук                    - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПереместитьФайлВКаталог(Знач URL, Знач IDФайла, Знач IDКаталога, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.file.moveto");

    OPI_Инструменты.ДобавитьПоле("id"            , IDФайла   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("targetFolderId", IDКаталога, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Переименовать файл
// Изменяет имя существующего файла
//
// Примечание:
// Метод в документации API: [disk.file.rename](@dev.1c-bitrix.ru/rest_help/disk/file/disk_file_rename.php)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDФайла      - Строка, Число - Идентификатор файла                                              - fileid
//  Наименование - Строка        - Новое наименование каталога                                      - title
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПереименоватьФайл(Знач URL, Знач IDФайла, Знач Наименование, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "disk.file.rename");

    OPI_Инструменты.ДобавитьПоле("id"     , IDФайла     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("newName", Наименование, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область РаботаСЧатамиИДиалогами

// Создать чат
// Создает новый чат на основе структуры полей
//
// Примечание:
// Метод в документации API: [im.chat.add](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12093)
//
// Параметры:
//  URL           - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  СтруктураЧата - Структура Из КлючИЗначение - Структура полей чата. См. ПолучитьСтруктуруЧата  - fields
//  Токен         - Строка - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьЧат(Знач URL, Знач СтруктураЧата, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.add");

    Для Каждого Элемент Из СтруктураЧата Цикл
        Параметры.Вставить(Элемент.Ключ, Элемент.Значение);
    КонецЦикла;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить список пользователей чата
// Получает список пользователей чата по ID
//
// Примечание:
// Метод в документации API: [im.chat.user.list](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12095)
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  IDЧата - Строка, Число - ID чата                                                              - chat
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокПользователейЧата(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Ответ = УправлениеЧатом(URL, IDЧата, "im.chat.user.list", Токен);
    Возврат Ответ;

КонецФункции

// Покинуть чат
// Исключает текущего пользователя из чата
//
// Примечание:
// Метод в документации API: [im.chat.leave](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12101)
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  IDЧата - Строка, Число - ID чата                                                              - chat
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПокинутьЧат(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Ответ = УправлениеЧатом(URL, IDЧата, "im.chat.leave", Токен);
    Возврат Ответ;

КонецФункции

// Получить пользователей
// Получает информацию о пользователях для диалога
//
// Примечание:
// Метод в документации API: [im.user.list.get ](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=11493)
//
// Параметры:
//  URL             - Строка                  - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователей - Массив Из Строка, Число - ID пользователя или нескольких пользователей                     - users
//  Токен           - Строка                  - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьПользователей(Знач URL, Знач IDПользователей, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.user.list.get");

    OPI_Инструменты.ДобавитьПоле("ID", IDПользователей, "Массив", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Добавить пользователей в чат
// Добавляет пользователей в чат по массиву ID
//
// Примечание:
// Метод в документации API: [im.chat.user.add](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12097)
//
// Параметры:
//  URL             - Строка                  - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата          - Строка, Число           - ID чата                                                          - chat
//  IDПользователей - Массив из Строка, Число - ID пользователей для добавления                                  - users
//  СкрытьИсторию   - Булево                  - Скрыть старые сообщения от новых пользователей                   - hide
//  Токен           - Строка                  - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ДобавитьПользователейВЧат(Знач URL
    , Знач IDЧата
    , Знач IDПользователей
    , Знач СкрытьИсторию = Ложь
    , Знач Токен = "") Экспорт

    ПривестиБулево(СкрытьИсторию);

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.user.add");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID"     , IDЧата         , "Строка"   , Параметры);
    OPI_Инструменты.ДобавитьПоле("USERS"       , IDПользователей, "Коллекция", Параметры);
    OPI_Инструменты.ДобавитьПоле("HIDE_HISTORY", СкрытьИсторию  , "Строка"   , Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Исключить пользователя из чата
// Исключает выбранного пользователя из чата
//
// Примечание:
// Метод в документации API: [im.chat.user.delete](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12099)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата          - Строка, Число - ID чата                                                          - chat
//  IDПользователя  - Строка, Число - ID пользователя                                                  - user
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИсключитьПользователяИзЧата(Знач URL, Знач IDЧата, Знач IDПользователя, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.user.delete");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата        , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить заголовок чата
// Изменяет текст заголовка чата
//
// Примечание:
// Метод в документации API: [im.chat.updateTitle](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12105)
//
// Параметры:
//  URL       - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата    - Строка, Число - ID чата                                                          - chat
//  Заголовок - Строка        - Новый текст заголовка                                            - title
//  Токен     - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьЗаголовокЧата(Знач URL, Знач IDЧата, Знач Заголовок, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.updateTitle");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("TITLE"  , Заголовок, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить цвет чата
// Изменяет цвет чата для мобильного приложения
//
// Примечание:
// Метод в документации API: [im.chat.updateTitle](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12105)
// Доступные цвета: RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата - Строка, Число - ID чата                                                          - chat
//  Цвет   - Строка        - Новый цвет чата                                                  - color
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьЦветЧата(Знач URL, Знач IDЧата, Знач Цвет, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.updateColor");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("COLOR"  , Цвет  , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить картинку чата
// Устанавливает новую картинку чата
//
// Примечание:
// Метод в документации API: [im.chat.updateAvatar](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12109)
//
// Параметры:
//  URL      - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата   - Строка, Число          - ID чата                                                          - chat
//  Картинка - Строка, ДвоичныеДанные - Данные файла картинки                                            - picture
//  Токен    - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьКартинкуЧата(Знач URL, Знач IDЧата, Знач Картинка, Знач Токен = "") Экспорт

    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);

    Картинка  = Base64Строка(Картинка);
    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.updateAvatar");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата  , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("AVATAR" , Картинка, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Сменить владельца чата
// Изменяет пользователя владельца чата
//
// Примечание:
// Метод в документации API: [im.chat.setOwner](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12111)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата          - Строка, Число - ID чата                                                          - chat
//  IDПользователя  - Строка, Число - ID пользователя                                                  - user
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СменитьВладельцаЧата(Знач URL, Знач IDЧата, Знач IDПользователя, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.setOwner");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата        , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отключить уведомления чата
// Отключает уведомлений чата
//
// Примечание:
// Метод в документации API: [im.chat.mute](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=11473)
//
// Параметры:
//  URL      - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата   - Строка, Число          - ID чата                                                          - chat
//  Токен    - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтключитьУведомленияЧата(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Ответ = УправлениеЗвукомЧата(URL, IDЧата, Истина, Токен);
    Возврат Ответ;

КонецФункции

// Включить уведомления чата
// Включает уведомления в чате
//
// Примечание:
// Метод в документации API: [im.chat.mute](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=11473)
//
// Параметры:
//  URL      - Строка                 - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата   - Строка, Число          - ID чата                                                          - chat
//  Токен    - Строка                 - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ВключитьУведомленияЧата(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Ответ = УправлениеЗвукомЧата(URL, IDЧата, Ложь, Токен);
    Возврат Ответ;

КонецФункции

// Получить список сообщений чата
// Получает список из 20 сообщений чата или диалога, в зависимости от указания IDПервого и IDПоследнего
//
// Примечание:
// Метод в документации API: [im.dialog.messages.get](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=11479)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  IDПоследнего - Строка, Число - ID последнего загруженного сообщения                             - last
//  IDПервого    - Строка, Число - ID первого загруженного сообщения                                - first
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокСообщенийЧата(Знач URL
    , Знач IDЧата
    , Знач IDПоследнего = ""
    , Знач IDПервого = ""
    , Знач Токен = "") Экспорт

    Строка_ = "Строка";

    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоследнего);
    OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПервого);

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.messages.get");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID", IDЧата      , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("LAST_ID"  , IDПоследнего, Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("FIRST_ID" , IDПервого   , Строка_, Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить диалог
// Получает информацию о диалоге по ID
//
// Примечание:
// Метод в документации API: [im.dialog.get](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12886)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьДиалог(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.get");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID", IDЧата, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить список пользователей диалога
// Получает список участников далога
//
// Примечание:
// Метод в документации API: [im.dialog.users.list](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=23800)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСписокПользователейДиалога(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.users.list");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID", IDЧата, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отправить уведомление о вводе
// Отправляет в чат статус Вам пишут...
//
// Примечание:
// Метод в документации API: [im.dialog.writing](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=23802)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтправитьУведомлениеОВводе(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.writing");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID", IDЧата, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить статус пользователя
// Получает статус (онлайн) текущего пользователя
//
// Примечание:
// Метод в документации API: [im.user.status.get](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=11497)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСтатусПользователя(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.user.status.get");

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Установить статус пользователя
// Устанавливает статус (онлайн) текущего пользователя
//
// Примечание:
// Метод в документации API: [im.user.status.set](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=11499)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Статус       - Строка, Число - Статус пользователя: online, dnd, away                           - status
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УстановитьСтатусПользователя(Знач URL, Знач Статус, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.user.status.set");

    OPI_Инструменты.ДобавитьПоле("STATUS", Статус, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Прочитать все
// Отмечает все сообщения во всех доступных чатах как прочитанные
//
// Примечание:
// Метод в документации API: [im.dialog.read.all](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=23804)
//
// Параметры:
//  URL   - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен - Строка - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПрочитатьВсе(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.read.all");
    Ответ     = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить каталог файлов чата
// Получает каталог для хранения фйлов чата
//
// Примечание:
// Метод в документации API: [im.disk.folder.get](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=11483)
//
// Параметры:
//  URL    - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  IDЧата - Строка, Число - ID чата                                                              - chat
//  Токен  - Строка        - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьКаталогФайловЧата(Знач URL, Знач IDЧата, Знач Токен = "") Экспорт

    Ответ = УправлениеЧатом(URL, IDЧата, "im.disk.folder.get", Токен);
    Возврат Ответ;

КонецФункции

// Получить структуру чата
// Получает структуру полей чата
//
// Параметры:
//  Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания типов полей - empty
//
// Возвращаемое значение:
//  Структура Из КлючИЗначение - Структура полей
Функция ПолучитьСтруктуруЧата(Знач Пустая = Ложь) Экспорт

    OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);

    СтруктураЧата = Новый Структура;
    СтруктураЧата.Вставить("TYPE"       , "<Тип чата OPEN (публичный) | CHAT (по приглашениям)>");
    СтруктураЧата.Вставить("TITLE"      , "<Заголовок чата>");
    СтруктураЧата.Вставить("DESCRIPTION", "<Описание чата>");
    СтруктураЧата.Вставить("COLOR"      , "<Цвет чата: RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, ...>");
    СтруктураЧата.Вставить("MESSAGE"    , "<Первое приветственное сообщение в чате>");
    СтруктураЧата.Вставить("USERS"      , "<Массив участников чата>");
    СтруктураЧата.Вставить("AVATAR"     , "<Аватар чата в base64 формате>");
    СтруктураЧата.Вставить("OWNER_ID"   , "<Идентификатор владельца чата. Текущий пользователь, если не указано>");

    Если Пустая Тогда
        Для Каждого Элемент Из СтруктураЧата Цикл
            Элемент.Значение = "";
        КонецЦикла;
    КонецЕсли;

    //@skip-check constructor-function-return-section
    Возврат СтруктураЧата;

КонецФункции

#КонецОбласти

#Область РаботаССообщениями

// Отправить сообщение
// Отправляет сообщение в диалог
//
// Примечание:
// Метод в документации API: [im.message.add](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12115)
//
// Параметры:
//  URL      - Строка              - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата   - Строка, Число       - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  Текст    - Строка              - Текст сообщения                                                  - text
//  Вложения - Массив из Структура - Массив блоков вложений                                           - blocks
//  Токен    - Строка              - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтправитьСообщение(Знач URL, Знач IDЧата, Знач Текст, Знач Вложения = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.message.add");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID", IDЧата  , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE"  , Текст   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ATTACH"   , Вложения, "Массив", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить сообщение
// Изменяет сообщение в диалоге
//
// Примечание:
// Метод в документации API: [im.message.update](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12117)
//
// Параметры:
//  URL         - Строка              - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDСообщения - Строка, Число       - ID сообщения для изменения                                       - message
//  Текст       - Строка              - Новый текст сообщения                                            - text
//  Вложения    - Массив из Структура - Новый массив блоков вложений                                     - blocks
//  Токен       - Строка              - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьСообщение(Знач URL, Знач IDСообщения, Знач Текст = "", Знач Вложения = "", Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.message.update");

    OPI_Инструменты.ДобавитьПоле("MESSAGE_ID", IDСообщения, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE"   , Текст      , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ATTACH"    , Вложения   , "Массив", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Установить реакцию на сообщение
// Устанавливает или снимает реакцию на сообщение
//
// Примечание:
// Метод в документации API: [im.message.like](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12121)
//
// Параметры:
//  URL         - Строка              - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDСообщения - Строка, Число       - ID сообщения                                                     - message
//  Токен       - Строка              - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УстановитьРеакциюНаСообщение(Знач URL, Знач IDСообщения, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.message.like");

    OPI_Инструменты.ДобавитьПоле("MESSAGE_ID", IDСообщения, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить сообщение
// Удаляет сообщение в диалоге
//
// Примечание:
// Метод в документации API: [im.message.delete](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12119)
//
// Параметры:
//  URL         - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDСообщения - Строка, Число - ID сообщения для удаления                                        - message
//  Токен       - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьСообщение(Знач URL, Знач IDСообщения, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.message.delete");

    OPI_Инструменты.ДобавитьПоле("MESSAGE_ID", IDСообщения  , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отправить файл
// Отправляет файл диска в чат по ID
//
// Примечание:
// Метод в документации API: [im.disk.file.commit](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=11485)
//
// Параметры:
//  URL      - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата   - Строка, Число - ID чата                                                          - chat
//  IDФайла  - Строка, Число - ID файла, загруженного при помощи ЗагрузитьФайлВКаталог          - fileid
//  Описание - Строка        - Описание файла                                                   - description
//  Токен    - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтправитьФайл(Знач URL, Знач IDЧата, Знач IDФайла, Знач Описание = "", Знач Токен = "") Экспорт

    Строка_   = "Строка";

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.disk.file.commit");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID"  , IDЧата  , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("UPLOAD_ID", IDФайла , Строка_, Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE"  , Описание, Строка_, Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отметить сообщение как прочитанное
// Отмечает выбранное сообщение и все сообщения до него как прочитанные
//
// Примечание:
// Метод в документации API: [im.dialog.read](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12053)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  IDСообщения  - Строка, Число - ID последнего прочитанного сообщения                             - message
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтметитьСообщениеКакПрочитанное(Знач URL, Знач IDЧата, Знач IDСообщения, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.read");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID" , IDЧата     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE_ID", IDСообщения, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Отметить сообщение как непрочитанное
// Отмечает выбранное сообщение и все сообщения после него как непрочитанные
//
// Примечание:
// Метод в документации API: [im.dialog.unread](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&LESSON_ID=12055)
//
// Параметры:
//  URL          - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDЧата       - Строка, Число - ID чата (chatXXX) или пользователя (XXX) для диалога             - chat
//  IDСообщения  - Строка, Число - ID послднего непрочитанного сообщения                            - message
//  Токен        - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ОтметитьСообщениеКакНепрочитанное(Знач URL, Знач IDЧата, Знач IDСообщения, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.dialog.unread");

    OPI_Инструменты.ДобавитьПоле("DIALOG_ID" , IDЧата     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE_ID", IDСообщения, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить блок картинки
// Формирует картинку для отправки в функции ОтправитьСообщение
//
// Примечание:
// Блоки в документации API: [Ссылка](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&CHAPTER_ID=07867)
//
// Параметры:
//  Наименование - Строка - Наименование картинки     - title
//  URL          - Строка - URL картинки для отправки - url
//
// Возвращаемое значение:
//  Структура - Блок с картинкой
Функция ПолучитьБлокКартинки(Знач Наименование, Знач URL) Экспорт

    СтруктураКартинки = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("NAME", Наименование, "Строка", СтруктураКартинки);
    OPI_Инструменты.ДобавитьПоле("LINK", URL         , "Строка", СтруктураКартинки);

    //@skip-check constructor-function-return-section
    Возврат Новый Структура("IMAGE", СтруктураКартинки);

КонецФункции

// Получить блок файла
// Формирует блок файла для отправки в функции ОтправитьСообщение
//
// Примечание:
// Блоки в документации API: [Ссылка](@dev.1c-bitrix.ru/learning/course/?COURSE_ID=93&CHAPTER_ID=07867)
//
// Параметры:
//  Наименование - Строка - Наименование картинки  - title
//  URL          - Строка - URL файла для отправки - url
//
// Возвращаемое значение:
//  Структура - Блок с файлом
Функция ПолучитьБлокФайла(Знач Наименование, Знач URL) Экспорт

    СтруктураКартинки = Новый Структура;
    OPI_Инструменты.ДобавитьПоле("NAME", Наименование, "Строка", СтруктураКартинки);
    OPI_Инструменты.ДобавитьПоле("LINK", URL         , "Строка", СтруктураКартинки);

    //@skip-check constructor-function-return-section
    Возврат Новый Структура("FILE", СтруктураКартинки);

КонецФункции

#КонецОбласти

#Область РаботаСУведомлениями

// Создать персональное уведомление
// Создает персональное уведомление пользователю
//
// Примечание:
// Метод в документации API: [im.notify.personal.add](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=12129)
//
// Параметры:
//  URL            - Строка              - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDПользователя - Строка, Число       - ID пользователя для отправки уведомления                           - user
//  Текст          - Строка              - Текст уведомления                                                  - text
//  Тег            - Строка              - Тег уникальности Если уже существет, то другие увед. будут удалены - tag
//  Вложения       - Массив из Структура - Массив блоков вложений                                             - blocks
//  Токен          - Строка              - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьПерсональноеУведомление(Знач URL
    , Знач IDПользователя
    , Знач Текст
    , Знач Тег = ""
    , Знач Вложения = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.notify.personal.add");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE", Текст         , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("TAG"    , Тег           , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ATTACH" , Вложения      , "Массив", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Создать системное уведомление
// Создает системное уведомление пользователю
//
// Примечание:
// Метод в документации API: [im.notify.system.add](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=12131)
//
// Параметры:
//  URL            - Строка              - URL внешнего вебхука или адрес Bitrix24 при использовании токена   - url
//  IDПользователя - Строка, Число       - ID пользователя для отправки уведомления                           - user
//  Текст          - Строка              - Текст уведомления                                                  - text
//  Тег            - Строка              - Тег уникальности Если уже существет, то другие увед. будут удалены - tag
//  Вложения       - Массив из Структура - Массив блоков вложений                                             - blocks
//  Токен          - Строка              - Токен авторизации, если используется не вебхук                     - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьСистемноеУведомление(Знач URL
    , Знач IDПользователя
    , Знач Текст
    , Знач Тег = ""
    , Знач Вложения = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.notify.system.add");

    OPI_Инструменты.ДобавитьПоле("USER_ID", IDПользователя, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MESSAGE", Текст         , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("TAG"    , Тег           , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ATTACH" , Вложения      , "Массив", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить уведомление
// Удаляет уведомление по ID
//
// Примечание:
// Метод в документации API: [im.notify.delete](@dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=12133)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDУведомления  - Строка, Число - ID уведомления для удаления                                      - notif
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьУведомление(Знач URL, Знач IDУведомления, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.notify.delete");

    OPI_Инструменты.ДобавитьПоле("ID", IDУведомления, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область УправлениеПодразделениями

// Создать подразделение
// Создает новое подразделение
//
// Примечание:
// Метод в документации API: [department.add](@dev.1c-bitrix.ru/rest_help/departments/department_add.php)
//
// Параметры:
//  URL            - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Наименование   - Строка        - Наименование подразделения                                       - title
//  IDРодителя     - Строка, Число - ID родительского подразделения                                   - parentid
//  IDРуководителя - Строка, Число - ID руководителя подразделения                                    - headid
//  Токен          - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьПодразделение(Знач URL
    , Знач Наименование
    , Знач IDРодителя = ""
    , Знач IDРуководителя = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "department.add");

    OPI_Инструменты.ДобавитьПоле("NAME"   , Наименование  , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("PARENT" , IDРодителя    , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("UF_HEAD", IDРуководителя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить подразделение
// Изменяет существующее подразделение
//
// Примечание:
// Метод в документации API: [department.update](@dev.1c-bitrix.ru/rest_help/departments/department_update.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПодразделения - Строка, Число - ID подразделения                                                 - depid
//  Наименование    - Строка        - Наименование подразделения                                       - title
//  IDРодителя      - Строка, Число - ID родительского подразделения                                   - parentid
//  IDРуководителя  - Строка, Число - ID руководителя подразделения                                    - headid
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьПодразделение(Знач URL
    , Знач IDПодразделения
    , Знач Наименование = ""
    , Знач IDРодителя = ""
    , Знач IDРуководителя = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "department.update");

    OPI_Инструменты.ДобавитьПоле("ID"     , IDПодразделения, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("NAME"   , Наименование   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("PARENT" , IDРодителя     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("UF_HEAD", IDРуководителя , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить подразделения
// Получает список подразделений по ID или фильтру
//
// Примечание:
// Метод в документации API: [department.get](@dev.1c-bitrix.ru/rest_help/departments/department_get.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПодразделения - Строка, Число - Выбор по ID подразделения                                        - depid
//  Наименование    - Строка        - Фильтр по наименованию                                           - title
//  IDРодителя      - Строка, Число - Фильтр по родителю                                               - parentid
//  IDРуководителя  - Строка, Число - Фильтр по руководителю                                           - headid
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьПодразделения(Знач URL
    , Знач IDПодразделения = ""
    , Знач Наименование = ""
    , Знач IDРодителя = ""
    , Знач IDРуководителя = ""
    , Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "department.get");

    OPI_Инструменты.ДобавитьПоле("ID"     , IDПодразделения, "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("NAME"   , Наименование   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("PARENT" , IDРодителя     , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("UF_HEAD", IDРуководителя , "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Удалить подразделение
// Удаляет подразделение по ID
//
// Примечание:
// Метод в документации API: [department.delete](@dev.1c-bitrix.ru/rest_help/departments/department_delete.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПодразделения - Строка, Число - ID подразделения для удаления                                    - depid
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция УдалитьПодразделение(Знач URL, Знач IDПодразделения, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "department.delete");

    OPI_Инструменты.ДобавитьПоле("ID", IDПодразделения, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти

#Область УправлениеПользователями

// Получить текущего пользователя
// Получает информацию о текущем пользователе
//
// Примечание:
// Метод в документации API: [user.current](@dev.1c-bitrix.ru/rest_help/users/user_current.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьТекущегоПользователя(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.current");

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить пользователя
// Получает информацию о пользователе по ID
//
// Примечание:
// Метод в документации API: [user.get](@dev.1c-bitrix.ru/rest_help/users/user_get.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователя  - Строка, Число - ID пользователя для получения                                    - userid
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьПользователя(Знач URL, Знач IDПользователя, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.get");

    OPI_Инструменты.ДобавитьПоле("ID", IDПользователя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Создать пользователя
// Создает нового пользователя по структуре полей
//
// Примечание:
// Метод в документации API: [user.add](@dev.1c-bitrix.ru/rest_help/users/user_add.php)
// Если нужно добавить пользователя экстранета, то в полях необходимо передать: EXTRANET: Y и SONET_GROUP_ID: [...]
// Если нужно добавить пользователя интранета, то обязательно передаётся: UF_DEPARTMENT: [...]
//
// Параметры:
//  URL             - Строка - URL внешнего вебхука или адрес Bitrix24 при использовании токена           - url
//  СтруктураПолей  - Структура Из КлючИЗначение - Данные пользователя. См. ПолучитьСтурктуруПользователя - fields
//  Токен           - Строка                     - Токен авторизации, если используется не вебхук         - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция СоздатьПользователя(Знач URL, Знач СтруктураПолей, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.add");

    Для Каждого Поле Из СтруктураПолей Цикл
        Параметры.Вставить(Поле.Ключ, Поле.Значение);
    КонецЦикла;

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить пользователя
// Изменяет данные пользователя
//
// Примечание:
// Метод в документации API: [user.update](@dev.1c-bitrix.ru/rest_help/users/user_update.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена    - url
//  IDПользователя  - Строка, Число              - ID пользователя для изменения                          - userid
//  СтруктураПолей  - Структура Из КлючИЗначение - Данные пользователя. См. ПолучитьСтурктуруПользователя - fields
//  Токен           - Строка                     - Токен авторизации, если используется не вебхук         - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьПользователя(Знач URL, Знач IDПользователя, Знач СтруктураПолей, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.update");

    Для Каждого Поле Из СтруктураПолей Цикл
        Параметры.Вставить(Поле.Ключ, Поле.Значение);
    КонецЦикла;

    OPI_Инструменты.ДобавитьПоле("ID", IDПользователя, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Изменить статус пользователя
// Активирует или деактивирует (увольняет) выбранного пользователя
//
// Параметры:
//  URL              - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  IDПользователя   - Строка, Число - ID пользователя для изменения                                    - userid
//  Уволить          - Булево        - Истина > Деактивация, Ложь > Активация                           - fire
//  Токен            - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ИзменитьСтатусПользователя(Знач URL, Знач IDПользователя, Знач Уволить = Истина, Знач Токен = "") Экспорт

    Активен = Не Уволить;

    ПривестиБулево(Активен);

    Параметры = Новый Структура("ACTIVE", Активен);

    Ответ = ИзменитьПользователя(URL, IDПользователя, Параметры, Токен);

    Возврат Ответ;

КонецФункции

// Найти пользователей
// Получает список пользователей по заданному фильтру
//
// Примечание:
// Метод в документации API: [user.update](@dev.1c-bitrix.ru/rest_help/users/user_update.php)
//
// Параметры:
//  URL              - Строка  - URL внешнего вебхука или адрес Bitrix24 при использовании токена     - url
//  СтруктураФильтра - Структура Из КлючИЗначение - Фильтр. См. ПолучитьСтруктуруФильтраПользователей - filter
//  Токен            - Строка  - Токен авторизации, если используется не вебхук                       - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция НайтиПользователей(Знач URL, Знач СтруктураФильтра, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.search");

    OPI_Инструменты.ДобавитьПоле("FILTER", СтруктураФильтра, "Коллекция", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить стурктуру пользователя
// Получает структурау полей для создания или изменения пользователя
//
// Примечание:
// Метод в документации API: [user.fields](@dev.1c-bitrix.ru/rest_help/users/user_fields.php)
//
// Параметры:
//  URL             - Строка        - URL внешнего вебхука или адрес Bitrix24 при использовании токена - url
//  Токен           - Строка        - Токен авторизации, если используется не вебхук                   - token
//
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - сериализованный JSON ответа от Bitrxi24
Функция ПолучитьСтурктуруПользователя(Знач URL, Знач Токен = "") Экспорт

    Параметры = НормализоватьАвторизацию(URL, Токен, "user.fields");

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

// Получить структуру фильтра пользователей
// Возвращает структуру полей для фильтрации пользователей в методе НайтиПользователей
//
// Параметры:
//  Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
//
// Возвращаемое значение:
//  Структура Из КлючИЗначение - Структура полей
Функция ПолучитьСтруктуруФильтраПользователей(Знач Пустая = Ложь) Экспорт

    OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);

    СтруктураФильтра = Новый Структура;
    СтруктураФильтра.Вставить("NAME"              , "<имя>");
    СтруктураФильтра.Вставить("LAST_NAME"         , "<фамилия>");
    СтруктураФильтра.Вставить("WORK_POSITION"     , "<должность>");
    СтруктураФильтра.Вставить("UF_DEPARTMENT_NAME", "<название подразделения>");
    СтруктураФильтра.Вставить("USER_TYPE"         , "<тип: employee, extranet, email>");

    Если Пустая Тогда
        Для Каждого Фильтр Из СтруктураФильтра Цикл
            Фильтр.Значение = "";
        КонецЦикла;
    КонецЕсли;

    //@skip-check constructor-function-return-section
    Возврат СтруктураФильтра;

КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПривестиБулево(Значение)

    OPI_ПреобразованиеТипов.ПолучитьБулево(Значение);
    Значение = ?(Значение, "Y", "N");

КонецПроцедуры

Функция НормализоватьАвторизацию(URL, Знач Токен, Знач Метод = "")

    OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
    OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);

    Параметры             = Новый Структура;
    ЭтоАвторизацияТокеном = ЗначениеЗаполнено(Токен);

    МассивЛишнихЭлементов = Новый Массив;
    МассивЛишнихЭлементов.Добавить("https://");
    МассивЛишнихЭлементов.Добавить("http://");
    МассивЛишнихЭлементов.Добавить("www.");

    Для Каждого УдаляемыйЭлемент Из МассивЛишнихЭлементов Цикл
        URL = СтрЗаменить(URL, УдаляемыйЭлемент, "");
    КонецЦикла;

    URL = СокрЛП(URL);

    Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
        URL = URL + "/";
    КонецЕсли;

    Если ЭтоАвторизацияТокеном Тогда

        Если Не СтрЗаканчиваетсяНа(URL, "rest/") Тогда
            URL = URL + "rest/";
        КонецЕсли;

        Параметры.Вставить("auth", Токен);

    КонецЕсли;

    Если ЗначениеЗаполнено(Метод) Тогда
        URL = URL + СокрЛП(Метод);
    КонецЕсли;

    Возврат Параметры;

КонецФункции

Функция НормализоватьФайлы(Знач Файлы)

    НормализованныеФайлы = Новый Массив;

    Если ТипЗнч(Файлы) = Тип("Соответствие") Тогда

        Для Каждого Файл Из Файлы Цикл

            ТекущийМассив = Новый Массив;
            ТекущийФайл   = Файл.Значение;
            ТекущееИмя    = Файл.Ключ;

            OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ТекущийФайл);
            OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееИмя);

            ТекущийМассив.Добавить(ТекущееИмя);
            ТекущийМассив.Добавить(Base64Строка(ТекущийФайл));

            НормализованныеФайлы.Добавить(ТекущийМассив);

        КонецЦикла;

    КонецЕсли;

    Возврат НормализованныеФайлы;

КонецФункции

Функция УправлениеЗадачей(Знач URL, Знач IDЗадачи, Знач Метод, Знач Токен = "")

    Параметры = НормализоватьАвторизацию(URL, Токен, Метод);
    OPI_Инструменты.ДобавитьПоле("taskId", IDЗадачи, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

Функция УправлениеФайлом(Знач URL, Знач IDФайла, Знач Метод, Знач Токен = "")

    Параметры = НормализоватьАвторизацию(URL, Токен, Метод);
    OPI_Инструменты.ДобавитьПоле("id", IDФайла, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

Функция УправлениеЭлементомЧеклиста(Знач URL, Знач IDЗадачи, Знач IDЭлемента, Знач Метод, Знач Токен = "")

    Параметры = НормализоватьАвторизацию(URL, Токен, Метод);

    OPI_Инструменты.ДобавитьПоле("TASKID", IDЗадачи  , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("ITEMID", IDЭлемента, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

Функция УправлениеЧатом(Знач URL, Знач IDЧата, Знач Метод, Знач Токен = "")

    Параметры = НормализоватьАвторизацию(URL, Токен, Метод);
    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

Функция УправлениеЗвукомЧата(Знач URL, Знач IDЧата, Знач Выключить, Знач Токен = "")

    ПривестиБулево(Выключить);

    Параметры = НормализоватьАвторизацию(URL, Токен, "im.chat.mute");

    OPI_Инструменты.ДобавитьПоле("CHAT_ID", IDЧата   , "Строка", Параметры);
    OPI_Инструменты.ДобавитьПоле("MUTE"   , Выключить, "Строка", Параметры);

    Ответ = OPI_Инструменты.Post(URL, Параметры);

    Возврат Ответ;

КонецФункции

#КонецОбласти
