1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-25 02:42:28 +02:00
OpenIntegrations/OInt/core/Modules/OPI_Slack.os
2024-04-22 07:56:45 +00:00

709 lines
37 KiB
Plaintext

// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область УправлениеИНастройки
// Получить информацию о боте
// Получает основную информацию о боте
//
// Параметры:
// Токен - Строка - Токен бота - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный 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";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("cursor", Курсор, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаССообщениями
// Отправить сообщение
// Отправляет сообщение в выбранный час
//
// Параметры:
// Токен - Строка - Токен бота - token
// Канал - Строка - Идентификатор канала - channel
// Текст - Строка - Текст сообщения - text
// ДатаОтправки - Дата - Дата отправки для отложенного сообщения - date
// Блоки - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ОтправитьСообщение(Знач Токен, Знач Канал, Знач Текст = "", Знач ДатаОтправки = "", Знач Блоки = "") Экспорт
Строка_ = "Строка";
ЕстьДата = ЗначениеЗаполнено(ДатаОтправки);
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Если ЗначениеЗаполнено(Блоки) И Не ТипЗнч(Блоки) = Тип(Строка_) Тогда
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, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Закрыть диалог
// Закрывает существующий диалог
//
// Параметры:
// Токен - Строка - Токен бота
// Диалог - Строка - ID диалога
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ЗакрытьДиалог(Знач Токен, Знач Диалог) Экспорт
URL = "https://slack.com/api/conversations.close";
Ответ = УправлениеДиалогом(Токен, Диалог, URL);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ФормированиеБлоков
// Сформировать блок картинку
// Формирует блок с картинкой для добавления в массив блоков сообщения
//
// Параметры:
// URL - Строка - URL картинки
// АльтернативныйТекст - Строка - Альтернативный текст картинки
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Блок картинки
Функция СформироватьБлокКартинку(Знач 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, Параметры, Заголовки);
КонецЕсли;
Возврат Ответ;
КонецФункции
#КонецОбласти