diff --git "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\241\320\273\320\260\320\272Hook.os" "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\241\320\273\320\260\320\272Hook.os" new file mode 100644 index 0000000..c934e4b --- /dev/null +++ "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\241\320\273\320\260\320\272Hook.os" @@ -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Запрос); + +КонецПроцедуры // ОтправитьСообщение() + +/////////////////////////////////////////////////////////////////////////////////////////////// + +ПараметрыАвторизации = Неопределено;