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