Skip to content

Commit

Permalink
Add new transport Slack with webhook
Browse files Browse the repository at this point in the history
Add support send message to Slack message using Slack Webhook.
More https://api.slack.com/messaging/webhooks
  • Loading branch information
Kirill authored Mar 14, 2022
1 parent 2af5eed commit 3c7f919
Showing 1 changed file with 102 additions and 0 deletions.
102 changes: 102 additions & 0 deletions src/Транспорты/ТранспортСлакHook.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@

///////////////////////////////////////////////////////////////////////////////////////////////
//
// Модуль транспорта отправки сообщений slack-hook
//
///////////////////////////////////////////////////////////////////////////////////////////////

Перем ПараметрыАвторизации; // хранит структуру авторизации
Перем ОписаниеПротокола; // хранит структуру описания протокола

///////////////////////////////////////////////////////////////////////////////////////////////
// Стандартный интерфейс
///////////////////////////////////////////////////////////////////////////////////////////////

// Протокол
// Метод возвращает описание используемого протокола
//
// Возвращаемое значение:
// Структура - Описание протокола
// {
// Имя - Строка - Системное имя транспорта
// Представление - Строка - пользовательское представление транспорта
// Описание - Строка - Строковое описание транспорта
// Операторы - Структура - Возможные операторы транспорта
// }
//
Функция Протокол() Экспорт

Если ОписаниеПротокола = Неопределено Тогда

ОписаниеПротокола = Новый Структура("Имя, Представление, Описание, Операторы", "slackhook", "slack hook", "Отправка сообщений в каналы slack через webhook", Неопределено);

КонецЕсли;

Возврат ОписаниеПротокола;

КонецФункции // Протокол()

// Инициализация
// Инициализация параметров транспорта
//
// Параметры:
// ПараметрыИнициализации - Структура - набор параметров инициализации
//
Процедура Инициализация(ПараметрыИнициализации) Экспорт

Если ПараметрыИнициализации = Неопределено Тогда

Сообщить(СтрШаблон("Для инициализации транспорта %1 необходимо передавать в параметрах: ", Протокол().Представление));
Сообщить(" - Логин");
Сообщить(" - Префикс");

ВызватьИсключение СтрШаблон("Инициализация транспорта %1 невыполнена", Протокол().Представление);

КонецЕсли;

ПараметрыАвторизации = Новый Структура("Токен, Префикс", ПараметрыИнициализации.Логин, ПараметрыИнициализации.Префикс);

КонецПроцедуры // Инициализация()

// ОтправитьСообщение
// Метод отправки сообщения
//
// Параметры:
// Адресат - Строка - Адресат сообщения
// Сообщение - Строка - Текст отправляемого сообщения
// ДополнительныеПараметры - Структура - Набор дополнительных параметров
//
Процедура ОтправитьСообщение(Адресат, Сообщение, ДополнительныеПараметры = Неопределено) Экспорт

Если ПараметрыАвторизации = Неопределено Тогда

ВызватьИсключение СтрШаблон("Для отправки сообщения необходимо выполнить инициализацию транспорта %1", Протокол().Представление);

КонецЕсли;

ИмяСервера = "https://hooks.slack.com";
URL = СтрШаблон("/services/%1/%2", ПараметрыАвторизации.Префикс, ПараметрыАвторизации.Токен);

Прокси = Новый ИнтернетПрокси(Истина);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");

HTTPЗапрос = Новый HTTPЗапрос(URL, Заголовки);

ТекстСообщения = СтрЗаменить(Сообщение, Символы.ПС, "\n");
ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ВК, "\r");

ТелоЗапроса = СтрШаблон("{""text"":""%1""}", ТекстСообщения);

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

HTTP = Новый HTTPСоединение(ИмяСервера,,,, Прокси);
Ответ = HTTP.ОтправитьДляОбработки(HTTPЗапрос);

КонецПроцедуры // ОтправитьСообщение()

///////////////////////////////////////////////////////////////////////////////////////////////

ПараметрыАвторизации = Неопределено;

0 comments on commit 3c7f919

Please sign in to comment.