Slackify

Cоздание уведомлений из MODX в чат-сервис Slack.
Версия 0.8.2-pl
Дата выпуска 27.03.2017
Загрузки 51
Просмотры 8 206
Внимание, этот компонент несовместим с MODX 3.

Компонент добавляет набор классов, используя которые можно удобно настроить уведомления с сайта на MODX в чат Slack. Особенность пакета — уже готовые плагины для 404 ошибок, Tickets и miniShop2.

API у Slack довольно простое и по сути, чтобы отправить сообщение в него, нужно на заданный URL (incoming-hook) отправить POST-запрос с переменной payload, в которой в JSON формате передать сообщение и возможные параметры. По сути, все так и происходит, но для удобства и наглядности я создал несколько классов, которые отвечают за определенные куски сообщения.


Перед созданием и отправкой сообщения нужно обязательно подключить сервис Slackify. Делается это так:


$slackify = $modx->getService('slackify');
Можно также переопределить от кого и куда слать сообщение.
$message->from('Дядя Ваня')->to('@alroniks');
Для того, чтобы отправить сообщение, достаточно создать объект сообщения и отправить его. Довольно просто.
$message = new Message('I am Message');
$slackify->send($message);

Кроме простых текстовых сообщений Slack умеет еще так называемые «вложения» (attachment). Это что-то вроде блоков внутри сообщения. Для работы с ними создан класс Attachment, методы которого могут добавлять в него дополнительную информацию.


Например, создадим плагин, который будет писать в чат о том, что на сайте добавили новый комментарий в Tickets (полный код плагина есть в пакете, некоторые детали опущены).


$a = new Attachment();
$a = new Attachment();
$a->setPretext('Кто-то оставил комментарий в важной теме на сайте');

$a->setColor(new Color('#00FF00')); // green
$a->setAuthor(new Author($comment->get('name'), 'mailto:' . $comment->get('email')));

$a->setTitle(new Title("оставил комментарий к тикету '{$ticket->get('pagetitle')}'"));
$a->setText($comment->get('text'));

$a->addField(new Field('Дата', $comment->get('createdon'), true));
$a->addField(new Field('Опубликован', $comment->get('published') ? 'True' : 'False', true));
$a->addField(new Field('Тикет', new Link($modx->makeUrl($ticket->get('id'), 'web', '', 'full'), $ticket->get('pagetitle'))));

$message = new Message('*Новый комментарий*');
$message->attach($a);

$slackify->send($message);

Все довольно просто. Классы, отвечающие за отдельные поля следуют паттерну value-object. Так же используется type hinting в методах, что гарантирует целостность данных.


Данный компонент уже содержит несколько готовых к употреблению плагинов, но в первую очередь он нужен для того, чтобы на базе него делать свои уведомления, заточенные под конкретные нужны. Примеры всех плагинов можно посмотреть тут – github.com/Alroniks/modx-slackify/tree/master/core/components/slackify/elements/plugins.



Установка и настройка


Для того, чтобы отправлять сообщения в чаты или конкретным участникам, нужно создать incoming-webhook в Slack. Как это делается можно почитать тут – api.slack.com/incoming-webhooks. Хук можно настроить прямо в Slack, но API при этом позволяет переопределить заданные по умолчанию параметры.


При установке пакет требует ввести ссылку на сам хук и задать канал по умолчанию, куда будут сыпаться уведомления.



Как это выглядит в Slack

Уведомление о 404 ошибке:


Уведомление о новом тикете:


Уведомление о новом комментарии:


Уведомление о новом заказе:


Уведомление об изменении статуса заказа. Цвета берутся из статусов в настройках MS2:


Обсуждение компонента в сообществе MODX.PRO
Документация на английском доступна на GitHub – github.com/Alroniks/modx-slackify.

Slackify 0.8.2-pl (27 марта, 2017)

  • Исправлена ошибка в плагине ms2OrderStatusSlackify для minishop2, когда не мог быть найден нужный modAction

Slackify 0.8.1-pl (28 сентября, 2015)

  • Исправлена ошибка когда MODX не мог загрузить Slackify как сервис

Последние обсуждения в сообществе MODX.pro