[Slackify] – удобный уведомлятор в Slack для MODX
Привет, друзья.
На прошлой неделе меня однажды утром осенила мысль «а что, если» и не отпускала, пока не доделал все, что хотел. А сделал вот что: написал компонент, который добавляет набор классов, используя которые можно удобно настроить уведомления с сайта на MODX в чат Slack. Особенная фишка пакета — это уже готовые плагины для 404 ошибок, Tickets и miniShop2. Но, по порядку.
В основном репозитории – modx.com/extras/package/slackify
В репозитории modstore.pro – modstore.pro/packages/alerts-mailing/slackify
Кому не терпится, то документация на английском доступна на GitHub – github.com/Alroniks/modx-slackify. Там же и исходники и последний пакет во вкладке Релизы.
ВАЖНО! Данный плагин не работает на php ниже версии 5.4. Он даже не установится. Делать версию для 5.3 или ниже не буду, даже не просите. Обновляйте свои дырявые ведра до нормальных версий.
API у Slack довольно простое и по сути, чтобы отправить сообщение в него, нужно на заданный URL (incoming-hook) отправить POST-запрос с переменной payload, в которой в JSON формате передать сообщение и возможные параметры. По сути, все так и происходит, но для удобства и наглядности я создал несколько классов, которые отвечают за определенные куски сообщения.
Подробно расписывать по каждому не буду, так как все есть в readme на GitHub (мой английский прост, разберетесь что к чему). Расскажу лишь о базовых вещах.
Перед созданием и отправкой сообщения нужно обязательно подключить сервис Slackify. Делается это так:
Кроме простых текстовых сообщений Slack умеет еще так называемые «вложения» (attachment). Это что-то вроде блоков внутри сообщения. Для работы с ними создан класс Attachment, методы которого могут добавлять в него дополнительную информацию.
Например, создадим плагин, который будет писать в чат о том, что на сайте добавили новый комментарий в Tickets (полный код плагина есть в пакете, некоторые детали я опустил).
Все довольно просто. Классы, отвечающие за отдельные поля следуют паттерну 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.
Пакет пока проходит все нужные процедуры в репозиториях, но собранный архив можно скачать на странице релизов на GitHub – github.com/Alroniks/modx-slackify/releases.
Либо можно собрать пакет самому. Для этого не нужно даже иметь установленный MODX. Да-да, я решил эту проблемку, расскажу в отдельной заметке. Делаем как указано ниже и забираем готовый zip в папке _packages.
Буду рад тестам и отзывам. А так же предлагайте ситуации, в случае которых можно было бы отправлять сообщения в Slack. В планах пополнять список плагинов, включенных в пакет по умолчанию.
На прошлой неделе меня однажды утром осенила мысль «а что, если» и не отпускала, пока не доделал все, что хотел. А сделал вот что: написал компонент, который добавляет набор классов, используя которые можно удобно настроить уведомления с сайта на MODX в чат Slack. Особенная фишка пакета — это уже готовые плагины для 404 ошибок, Tickets и miniShop2. Но, по порядку.
В основном репозитории – modx.com/extras/package/slackify
В репозитории modstore.pro – modstore.pro/packages/alerts-mailing/slackify
Кому не терпится, то документация на английском доступна на GitHub – github.com/Alroniks/modx-slackify. Там же и исходники и последний пакет во вкладке Релизы.
ВАЖНО! Данный плагин не работает на php ниже версии 5.4. Он даже не установится. Делать версию для 5.3 или ниже не буду, даже не просите. Обновляйте свои дырявые ведра до нормальных версий.
API у Slack довольно простое и по сути, чтобы отправить сообщение в него, нужно на заданный URL (incoming-hook) отправить POST-запрос с переменной payload, в которой в JSON формате передать сообщение и возможные параметры. По сути, все так и происходит, но для удобства и наглядности я создал несколько классов, которые отвечают за определенные куски сообщения.
Подробно расписывать по каждому не буду, так как все есть в readme на GitHub (мой английский прост, разберетесь что к чему). Расскажу лишь о базовых вещах.
Перед созданием и отправкой сообщения нужно обязательно подключить сервис 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->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.
Пакет пока проходит все нужные процедуры в репозиториях, но собранный архив можно скачать на странице релизов на GitHub – github.com/Alroniks/modx-slackify/releases.
Либо можно собрать пакет самому. Для этого не нужно даже иметь установленный MODX. Да-да, я решил эту проблемку, расскажу в отдельной заметке. Делаем как указано ниже и забираем готовый zip в папке _packages.
git clone --recursive git@github.com:Alroniks/modx-slackify.git
cd modx-slackify/_build && php build.transport.php
Буду рад тестам и отзывам. А так же предлагайте ситуации, в случае которых можно было бы отправлять сообщения в Slack. В планах пополнять список плагинов, включенных в пакет по умолчанию.
Комментарии: 18
А как картинки прикреплять?
Например, «Пользователь загрузил новую картинку в профиль»
Например, «Пользователь загрузил новую картинку в профиль»
Добавить через attachment.
$a->setImage('url/path/to/image');
$a->setThumb('url/path/to/thumb');
Очень круто!
[2015-09-27 22:18:10] (ERROR @ /index.php) Could not load class: slackify from slackify.
[2015-09-27 22:18:10] (ERROR @ /index.php) Problem getting service slackify, instance of class slackify, from path
modhost.pro
Покажите, что у вас в системной настройке extension_packages и в каком случае возникает эта ошибка? Если пишете свой плагин, нужно обязательно написать в начале $slackify = $modx->getService('slackify');
Выложил фикс modx.com/extras/package/slackify После обновления все ок должно быть.
Сценарий:
— Установил пустой сайт;
— установил Slackify;
— создал канал test, создал Incoming Webhook;
— при инсталляции пакета указал webhook url;(https://hooks.slack.com/services/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) и канал #test;
— создал 404 ошибку;
— после установки компонента при вводе некорректного адреса открывается пустая страница и сообщение не отправляется;
— деинсталирую дополнение — 404 ошибка открывается корректно.
Доступ на сутки:
s3047.h4.modhost.pro/manager/
Логин: s3047
Пароль: Qjubi7Mp9t5V
— Установил пустой сайт;
— установил Slackify;
— создал канал test, создал Incoming Webhook;
— при инсталляции пакета указал webhook url;(https://hooks.slack.com/services/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) и канал #test;
— создал 404 ошибку;
— после установки компонента при вводе некорректного адреса открывается пустая страница и сообщение не отправляется;
— деинсталирую дополнение — 404 ошибка открывается корректно.
Доступ на сутки:
s3047.h4.modhost.pro/manager/
Логин: s3047
Пароль: Qjubi7Mp9t5V
Спасибо за ошибку. Проблема в регистре имен файлов и папок. Тестировал в маке, там регистр не учитывается.
Быстрый фикс такой — переименовать файл Slackify.class.php и папку Slackify внутри model в нижний регистр. Фикс будет после обеда.
Быстрый фикс такой — переименовать файл Slackify.class.php и папку Slackify внутри model в нижний регистр. Фикс будет после обеда.
Уже отправил Леониду. Ещё в пятницу, ждём его.
В смысле, лучше сразу с фиксом выложить.
С обновлением — заработало. Спасибо!
Теперь и в modstore.pro — modstore.pro/packages/alerts-mailing/slackify
2.4.0-pl
[2015-09-29 00:04:53] (ERROR @ /index.php) Entry point for Slackify not defined in system settings
на 2.4.1 работает
В этом случае ошибка (на самом деле не совсем) более чем очевидна. Достаточно перевести фразу «Entry point for Slackify not defined in system settings» и все станет понятно.
Оба сайта на modhost.pro, настройки идентичны.
Что в системной настройке slackify_entrypoint?
Добрый день. При оформлении заказа в minishop2 2.4.9-pl
вылетала 500 ошибка
[Fri Mar 10 13:09:01.054721 2017] [:error] [pid 20254] [client x.x.x.x:59151] PHP Fatal error: Uncaught Error: Call to a member function get() on null in /public_html/core/cache/includes/elements/modplugin/16.include.cache.php:42
за комментировал 42 строку, и все вроде заработало. Но без ссылки на заказ.
вылетала 500 ошибка
[Fri Mar 10 13:09:01.054721 2017] [:error] [pid 20254] [client x.x.x.x:59151] PHP Fatal error: Uncaught Error: Call to a member function get() on null in /public_html/core/cache/includes/elements/modplugin/16.include.cache.php:42
за комментировал 42 строку, и все вроде заработало. Но без ссылки на заказ.
$link = new Link(rtrim(MODX_SITE_URL, '/') . MODX_MANAGER_URL . "index.php?a={$action->get('id')}#&order={$order->get('id')}", $order->get('num'));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.