Slackify

Cоздание уведомлений из MODX в чат-сервис Slack.
Версия 0.8.2-pl
Дата выпуска 27.03.2017
Загрузки 51
Просмотры 6 503
Внимание, этот компонент требует версию PHP 5.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.

Компонент добавляет набор классов, используя которые можно удобно настроить уведомления с сайта на 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