Skip to content

Commit

Permalink
Merge pull request #32 from Foxtrot1388/master
Browse files Browse the repository at this point in the history
Mattermost incoming hook
  • Loading branch information
EvilBeaver authored Jul 12, 2023
2 parents 2403347 + 643e6b7 commit f27ae91
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 0 deletions.
12 changes: 12 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,18 @@
Сообщение = "Что-то пошло не так"; //сообщение как просто текст
Мессенджер.ОтправитьСообщение("telegram", "-***169", Сообщение);

### Mattermost

Для использования необходимо создать hook `https://developers.mattermost.com/integrate/webhooks/incoming/`.

#### Пример Mattermost

Сервер = "http://localhost";
Hook = "00000000000000000000";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализироватьТранспорт("mattermost", Новый Структура("Сервер, Hook", Сервер, Hook));
Мессенджер.ОтправитьСообщение("mattermost", "test-channel", "Всем привет!");

## Добавление новых транспортов

Для добавления нового транспорта необходимо:
Expand Down
100 changes: 100 additions & 0 deletions src/Транспорты/ТранспортMattermost.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@

///////////////////////////////////////////////////////////////////////////////////////////////
//
// Модуль транспорта отправки сообщений <ИмяТранспорта>
//
///////////////////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

КонецЕсли;

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

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

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

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

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

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

КонецЕсли;

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

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

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

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

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

КонецЕсли;

URL = СтрШаблон("/hooks/%1", ПараметрыАвторизации.Hook);

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

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

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

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

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

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

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

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

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

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

0 comments on commit f27ae91

Please sign in to comment.