mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-27 02:43:54 +02:00
1a6dd86410
Теперь не номер версии нужно менять только в 1С - в остальных местах поменяется сам; не нужно больше определять список модулей в Convert и список библиотек в CLI parse - в конверт подтянется из комментария в bsl, а в CLIP - из OS (как уже делается в доках)
1056 lines
56 KiB
Plaintext
1056 lines
56 KiB
Plaintext
// Расположение OS: ./OInt/core/Modules/OPI_Slack.os
|
|
// Библиотека: Slack
|
|
// Команда CLI: slack
|
|
|
|
// MIT License
|
|
|
|
// Copyright (c) 2023 Anton Tsitavets
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
|
|
// The above copyright notice and this permission notice shall be included in all
|
|
// copies or substantial portions of the Software.
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// SOFTWARE.
|
|
|
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
|
|
|
// BSLLS:IncorrectLineBreak-off
|
|
// BSLLS:Typo-off
|
|
|
|
// Раскомментировать, если выполняется OneScript
|
|
#Использовать "../../tools"
|
|
|
|
#Область ПрограммныйИнтерфейс
|
|
|
|
#Область УправлениеИНастройки
|
|
|
|
// Получить информацию о боте
|
|
// Получает основную информацию о боте
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьИнформациюОБоте(Знач Токен) Экспорт
|
|
|
|
URL = "https://slack.com/api/auth.test";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить список рабочих областей
|
|
// Получает список рабочих областей, в которых подключен бот
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокРабочихОбластей(Знач Токен, Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/auth.teams.list";
|
|
Ответ = ПолучениеОбщихДанных(Токен, URL, Курсор);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить список пользователей
|
|
// Получает список пользователей рабочей области
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокПользователей(Знач Токен, Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/users.list";
|
|
Ответ = ПолучениеОбщихДанных(Токен, URL, Курсор);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаССообщениями
|
|
|
|
// Отправить сообщение
|
|
// Отправляет сообщение в выбранный час
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Текст - Строка - Текст сообщения - text
|
|
// ДатаОтправки - Дата - Дата отправки для отложенного сообщения - date
|
|
// Блоки - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ОтправитьСообщение(Знач Токен, Знач Канал, Знач Текст = "", Знач ДатаОтправки = "", Знач Блоки = "") Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
ЕстьДата = ЗначениеЗаполнено(ДатаОтправки);
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Если ЗначениеЗаполнено(Блоки) И ТипЗнч(Блоки) = Тип(Строка_) Тогда
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блоки);
|
|
|
|
Если ТипЗнч(Блоки) = Тип("Массив") Тогда
|
|
|
|
Для Н = 0 По Блоки.ВГраница() Цикл
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Блоки[Н]);
|
|
КонецЦикла;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал, Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("text" , Текст, Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("blocks" , Блоки, "Массив" , Параметры);
|
|
|
|
Если ЕстьДата Тогда
|
|
|
|
URL = "https://slack.com/api/chat.scheduleMessage";
|
|
OPI_Инструменты.ДобавитьПоле("post_at", ДатаОтправки, "Дата", Параметры);
|
|
|
|
Иначе
|
|
|
|
URL = "https://slack.com/api/chat.postMessage";
|
|
|
|
КонецЕсли;
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Отправить эфемерное сообщение
|
|
// Отправляет сообщение, которое приходит в канал, но видно
|
|
// только конкретному пользователю
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Текст - Строка - Текст сообщения - text
|
|
// Пользователь - Строка - ID пользователя - user
|
|
// Блоки - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ОтправитьЭфемерноеСообщение(Знач Токен
|
|
, Знач Канал
|
|
, Знач Текст = ""
|
|
, Знач Пользователь = ""
|
|
, Знач Блоки = "") Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
|
|
Если ЗначениеЗаполнено(Блоки) И Не ТипЗнч(Блоки) = Тип(Строка_) Тогда
|
|
OPI_ПреобразованиеТипов.ПолучитьМассив(Блоки);
|
|
КонецЕсли;
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("text" , Текст , Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("user" , Пользователь, Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("blocks" , Блоки , "Коллекция", Параметры);
|
|
|
|
URL = "https://slack.com/api/chat.postEphemeral";
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Изменить сообщение
|
|
// Изменяет состав существующего сообщения
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Отметка - Строка - Временная отметка сообщения - stamp
|
|
// Текст - Строка - Новый текст сообщения - text
|
|
// МассивБлоков - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ИзменитьСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач Текст = "", Знач МассивБлоков = "") Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
URL = "https://slack.com/api/chat.update";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("text" , Текст , Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("ts" , Отметка , Строка_ , Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("blocks" , МассивБлоков, "Коллекция", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Удалить сообщение
|
|
// Удаляет сообщение канала по timestamp
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Отметка - Строка - Временная отметка или ID сообщения - stamp
|
|
// ЭтоОтложенное - Булево - Признак удаления отложенного сообщения - issheduled
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция УдалитьСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач ЭтоОтложенное = Ложь) Экспорт
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоОтложенное);
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Если ЭтоОтложенное Тогда
|
|
URL = "https://slack.com/api/chat.deleteScheduledMessage";
|
|
ПолеОтметки = "scheduled_message_id";
|
|
Иначе
|
|
URL = "https://slack.com/api/chat.delete";
|
|
ПолеОтметки = "ts";
|
|
КонецЕсли;
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel" , Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле(ПолеОтметки, Отметка, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить список отложенных сообщений
|
|
// Получает список отложенных сообщений канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокОтложенныхСообщений(Знач Токен, Знач Канал, Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/chat.scheduledMessages.list";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить ссылку на сообщение
|
|
// Получает постоянный UTL к сообщению канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Отметка - Строка - Временная отметка или ID сообщения - stamp
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСсылкуНаСообщение(Знач Токен, Знач Канал, Знач Отметка) Экспорт
|
|
|
|
URL = "https://slack.com/api/chat.getPermalink";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel" , Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("message_ts", Отметка, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить список ответов на сообщение
|
|
// Получает массив сообщений, которые являются ответом на указанное
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Отметка - Строка - Временная отметка или ID сообщения - stamp
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокОтветовНаСообщение(Знач Токен, Знач Канал, Знач Отметка, Знач Курсор = "") Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
URL = "https://slack.com/api/conversations.replies";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("cursor" , Курсор , Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("ts" , Отметка, Строка_, Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСКаналами
|
|
|
|
// Получить список каналов
|
|
// Получает список доступных каналов
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИсключатьАрхивированные - Булево - Признак исключения архивированных каналов - notarchived
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокКаналов(Знач Токен, Знач ИсключатьАрхивированные = Ложь, Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.list";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("exclude_archived", ИсключатьАрхивированные, "Булево", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("cursor" , Курсор , "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить список пользователей канала
|
|
// Получает список пользователей указанного канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Идентификатор канала - channel
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокПользователейКанала(Знач Токен, Знач Канал, Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.members";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Создать канал
|
|
// Создает новый канал
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Название - Строка - Наименование канала - title
|
|
// Приватный - Булево - Создать канал приватным - private
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция СоздатьКанал(Знач Токен, Знач Название, Знач Приватный = Ложь) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.create";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("name" , Название , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("is_private", Приватный, "Булево", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Архивировать канал
|
|
// Архивирует активный канал
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция АрхивироватьКанал(Знач Токен, Знач Канал) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.archive";
|
|
Ответ = УправлениеДиалогом(Токен, Канал, URL);
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить канал
|
|
// Получает информацию о канале
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьКанал(Знач Токен, Знач Канал) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.info";
|
|
Ответ = УправлениеДиалогом(Токен, Канал, URL, "GET");
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить историю канала
|
|
// Получает информацию событиях канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьИсториюКанала(Знач Токен, Знач Канал) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.history";
|
|
Ответ = УправлениеДиалогом(Токен, Канал, URL, "GET");
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Пригласить пользователей в канал
|
|
// Добавляет указанных пользователей в канал
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
// МассивПользователей - Массив Из Строка - Массив ID пользователей - users
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПригласитьПользователейВКанал(Знач Токен, Знач Канал, Знач МассивПользователей) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.invite";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПользователей);
|
|
МассивПользователей = СтрСоединить(МассивПользователей, ",");
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("users" , МассивПользователей, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Выгнать пользователя из канала
|
|
// Удаляет указанного пользователя из канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
// Пользователь - Строка - ID пользователя - user
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ВыгнатьПользователяИзКанала(Знач Токен, Знач Канал, Знач Пользователь) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.kick";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("user" , Пользователь, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Вступить в канал
|
|
// Добавляет текущего бота в канал
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ВступитьВКанал(Знач Токен, Знач Канал) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.join";
|
|
Ответ = УправлениеДиалогом(Токен, Канал, URL);
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Покинуть канал
|
|
// Удаляет текущего бота из канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПокинутьКанал(Знач Токен, Знач Канал) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.leave";
|
|
Ответ = УправлениеДиалогом(Токен, Канал, URL);
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Установить тему канала
|
|
// Устанавливает тему канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
// Тема - Строка - Тема канала - theme
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция УстановитьТемуКанала(Знач Токен, Знач Канал, Знач Тема) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.setTopic";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("topic" , Тема , "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Установить цель канала
|
|
// Устанавливает цель (описание) канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
// Цель - Строка - Цель канала - purpose
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция УстановитьЦельКанала(Знач Токен, Знач Канал, Знач Цель) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.setPurpose";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("purpose", Цель , "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Переименовать канал
|
|
// Изменяет название канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - ID канала - channel
|
|
// Название - Строка - Новое название канала - title
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПереименоватьКанал(Знач Токен, Знач Канал, Знач Название) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.rename";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("name" , Название, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСДиалогами
|
|
|
|
// Открыть диалог
|
|
// Открывает новый диалог с одним или несколькими пользователями
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// МассивПользователей - Массив из Строка - Массив ID пользователей - users
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ОткрытьДиалог(Знач Токен, Знач МассивПользователей) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.open";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПользователей);
|
|
МассивПользователей = СтрСоединить(МассивПользователей, ",");
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("users", МассивПользователей, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Закрыть диалог
|
|
// Закрывает существующий диалог
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Диалог - Строка - ID диалога - conv
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ЗакрытьДиалог(Знач Токен, Знач Диалог) Экспорт
|
|
|
|
URL = "https://slack.com/api/conversations.close";
|
|
Ответ = УправлениеДиалогом(Токен, Диалог, URL);
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСФайлами
|
|
|
|
// Получить список файлов
|
|
// Получает список файлов бота или канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Канал для отбора - channel
|
|
// НомерСтраницы - Число, Строка - Номер страницы - page
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокФайлов(Знач Токен, Знач Канал = "", Знач НомерСтраницы = 1) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.list";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("page" , НомерСтраницы, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Загрузить файл
|
|
// Загружает файл на сервера Slack
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Файл - Строка,ДвоичныеДанные - Файл для загрузки - file
|
|
// ИмяФайла - Строка - Имя файла с расширением - filename
|
|
// Заголовок - Строка - Имя файла в Slack - title
|
|
// Канал - Строка - ID канала - channel
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач ИмяФайла, Знач Заголовок, Знач Канал = "") Экспорт
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяФайла);
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
|
|
|
|
Строка_ = "Строка";
|
|
Upload_url = "upload_url";
|
|
File_id = "file_id";
|
|
URL = "https://slack.com/api/files.getUploadURLExternal";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
Размер = Файл.Размер();
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("filename", ИмяФайла, Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("length" , Размер , Строка_, Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
URL = Ответ[Upload_url];
|
|
Идентификатор = Ответ[File_id];
|
|
|
|
Если Не ЗначениеЗаполнено(URL) Или Не ЗначениеЗаполнено(Идентификатор) Тогда
|
|
Возврат Ответ;
|
|
КонецЕсли;
|
|
|
|
Файлы = Новый Соответствие;
|
|
Файлы.Вставить(ИмяФайла, Файл);
|
|
|
|
Ответ = OPI_Инструменты.PostMultipart(URL, , Файлы, , Заголовки);
|
|
URL = "https://slack.com/api/files.completeUploadExternal";
|
|
ФайлСлак = Новый Структура("id, title", Идентификатор, Заголовок);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("filename" , ИмяФайла, Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("channel_id", Канал , Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("files" , ФайлСлак, "Массив", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить данные файла
|
|
// Получает информацию о файле
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьДанныеФайла(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.info";
|
|
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL, "GET");
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Удалить файл
|
|
// Удаляет файл на Slack
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция УдалитьФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.delete";
|
|
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Сделать файл публичным
|
|
// Создает публичный URL для файла. Требует токен пользователя
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен пользователя - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция СделатьФайлПубличным(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.sharedPublicURL";
|
|
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Сделать файл приватным
|
|
// Удаляет публичный URL у файла. Требует токен пользователя
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен пользователя - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция СделатьФайлПриватным(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.revokePublicURL";
|
|
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСУдаленнымиФайлами
|
|
|
|
// Получить список внешних файлов
|
|
// Получает список внешних файлов пользователя или канала
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// Канал - Строка - Канал для отбора - channel
|
|
// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьСписокВнешнихФайлов(Знач Токен, Знач Канал = "", Знач Курсор = "") Экспорт
|
|
|
|
URL = "https://slack.com/api/files.remote.list";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить внешний файл
|
|
// Получает информацию о внешнем файле
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ПолучитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.remote.info";
|
|
Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Добавить внешний файл
|
|
// Добавляет новый внешний файл
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// URL - Строка - URL к внешнему файлу - url
|
|
// Заголовок - Строка - Заголовок файла для Slack - title
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ДобавитьВнешнийФайл(Знач Токен, Знач URL, Знач Заголовок) Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
URL = "https://slack.com/api/files.remote.add";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
UID = Строка(Новый УникальныйИдентификатор());
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("external_url", URL , Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("external_id" , UID , Строка_, Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("title" , Заголовок , Строка_, Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Отправить внешний файл
|
|
// Отправляет внейшний файл по списку каналов
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
// МассивКаналов - Массив Из Строка - Массив каналов для отправки - channels
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция ОтправитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла, Знач МассивКаналов) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.remote.share";
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКаналов);
|
|
МассивКаналов = СтрСоединить(МассивКаналов, ",");
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("file" , ИдентификаторФайла , "Строка", Параметры);
|
|
OPI_Инструменты.ДобавитьПоле("channels", МассивКаналов , "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Удалить внешний файл
|
|
// Удаляет внешний файл из Slack
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен бота - token
|
|
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
|
|
Функция УдалитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
|
|
|
|
URL = "https://slack.com/api/files.remote.remove";
|
|
Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ФормированиеБлоков
|
|
|
|
// Сформировать блок картинку
|
|
// Формирует блок с картинкой для добавления в массив блоков сообщения
|
|
//
|
|
// Параметры:
|
|
// URL - Строка - URL картинки - picture
|
|
// АльтернативныйТекст - Строка - Альтернативный текст картинки - alt
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие Из КлючИЗначение - Блок картинки
|
|
Функция СформироватьБлокКартинку(Знач URL, Знач АльтернативныйТекст = "") Экспорт
|
|
|
|
Строка_ = "Строка";
|
|
|
|
Блок = Новый Соответствие;
|
|
OPI_Инструменты.ДобавитьПоле("type" , "image" , Строка_, Блок);
|
|
OPI_Инструменты.ДобавитьПоле("image_url", URL , Строка_, Блок);
|
|
OPI_Инструменты.ДобавитьПоле("alt_text" , АльтернативныйТекст , Строка_, Блок);
|
|
|
|
Возврат Блок;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#КонецОбласти
|
|
|
|
#Область СлужебныеПроцедурыИФункции
|
|
|
|
Функция ПолучитьЗаголовокАвторизации(Знач Токен)
|
|
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
|
|
|
Заголовки = Новый Соответствие;
|
|
Заголовки.Вставить("Authorization", "Bearer " + Токен);
|
|
Возврат Заголовки;
|
|
|
|
КонецФункции
|
|
|
|
Функция УправлениеДиалогом(Знач Токен, Знач Канал, Знач URL, Знач ВидЗапроса = "POST")
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
ВидЗапроса = вРег(ВидЗапроса);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("channel", Канал, "Строка", Параметры);
|
|
|
|
Если ВидЗапроса = "POST" Тогда
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
Иначе
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
КонецЕсли;
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
Функция УправлениеФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL, Знач ВидЗапроса = "POST")
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
ВидЗапроса = вРег(ВидЗапроса);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры);
|
|
|
|
Если ВидЗапроса = "POST" Тогда
|
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
|
Иначе
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
КонецЕсли;
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПолучениеОбщихДанных(Знач Токен, Знач URL, Знач Курсор)
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("cursor", Курсор, "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
Функция УправлениеВнешнимФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL)
|
|
|
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
|
|
Параметры = Новый Структура;
|
|
OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|