PHP Profi

Реинкарнация популярного PHP-пакета для Slack

Всем привет!

Сегодня я хочу рассказать о небольшом, но популярном open source пакете и попросить у вас помощи и поддержки.

Slack

Все вы наверняка использовали Slack в своих командах для упрощения работы над проектом. В этом плане Slack - очень удобная штука.

В нём можно создать несколько каналов для разных отделов или разных команд и/или направлениений - например, фронт, бек, дев-опс,.. Можно подключить всевозможные готовые интеграции практически на любой вкус: Bitbucket, GitHub, GitLab, Jira, Trello - всё о чём вы только могли подумать, наверняка уже реализовано и уже есть готовая интеграция. А если нет, то есть отличное API, с помощью которого вы легко реализуете все ваши задумки. А скорее всего уже хотя бы раз что-то реализовывали, но об этом чуть позже.

Также вы можете подключить готовые приложения или так называемых ботов и, например, устраивать мгновенные голосования или просто узнавать погоду. Для пользователей вашего проекта вы можете реализовать бота наподобие slackbot'а, который будет автоматически отвечать на большинство часто задаваемых вопросов, а в остальных случаях "призывать" человека на помощь.

Кроме того, вы можете написать своё небольшое приложение-API, которое будет получать команды из Slack и выполнять их. В одном из своих проектов я реализовал многие возможности админки через команды Slack. Получилось очень удобно.

Однако, чаще всего мы с вами используем API Slack'а для мониторинга (серверов/логов/...) и для оповещений о каких-то событиях в приложении.

PHP пакет

Если вы в своей команде использовали Slack для мониторинга, оповещений, команд или для любых других нужд, то вы наверняка, как и я, сначала постарались найти готовый пакет, который легко подключить и использовать. И, как и я, наткнулись на хороший и популярный пакет maknz/slack.

Этот пакет на данный момент имеет порядка 2-х миллионов установок, почти 1000 звёзд и 150 форков. На этом пакете основаны 73 других пакета, включая всевозможные интеграции с различными фреймворками (Laravel, Symfony, Yii, ...) и средствами автоматизации вроде PHP-CI. Согласитесь весьма и весьма неплохо.

Пакет поддерживает PHP версии 5.4 и выше, в том числе и PHP 7. В зависимостях имеет только guzzlehttp/guzzle, при этом может использовать любую из версий ~6.0|~5.0|~4.0, что достаточно важно при совместимости с другими пакетами. Он имеет автоматическую сборку на Travis и неплохой показатель качества на Scrutinizr. Звучит уже круто!

Ещё? Ещё у этого пакета было несколько пре-релизов (0.1.0, 0.1.1, 0.2.0, 0.2.1, 0.2.2, 0.3.0) и уже внушительный послужной список в стабильном релизе - 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.6.0, 1.7.0. На GitHub'е есть баг-репорты/feature-request'ы и есть pull-request'ы от сторонних разработчиков. Т.е. уже сформировалось какое-то сообщество, которое помогает в развитии проекта.

Пробежав беглым взглядом по документации, сразу становится понятно как его использовать. Всё очень просто и понятно.

Отлично! Круто! Что ещё нужно для счастья? Ок, берём, ставим, пользуемся. Пара минут на установку и создание incoming webhook в админке Slack'а. Копируем из неё урл на хук, закидываем его в конфиг, пара строк кода для отправки и буквально через несколько минут к вам в Slack прилетает первое тестовое сообщение. Красота!

Вот как то так было и у меня. На тот момент мне нужно было немного - просто сообщение-уведомление в определённый канал. Причесав код и разложив всё по полочкам в проекте, я довольный забыл об этом.

Однако через некоторое время мне понадобилось расширить функционал и добавить в сообщение кнопочки, чтобы можно было прямо из пришедшего сообщения взаимодействовать с приложением. Просто надоело каждый раз переключаться в браузер, открывать новую вкладку, лезть в админку, логиниться... ну вы понимаете. Удобнее сразу в пришедшем сообщении ткнуть на одну из предоставляемых кнопочек.

И вот тут то меня поджидал сюрприз...

Для начала, я увидел, что нужного функционала нет в стабильном релизе (1.7.0), а есть только в master'е. Ну, думаю, не страшно. "Погоняю" пока на нестабильном, а как выйдет стейбл-версия, переключусь. Реализовав нужный функционал, я увидел, что он не работает и в пакете есть баг. Ну не страшно - везде есть баги, от этого никуда не денешься, тем более это нестабильная версия. В этот момент я подумал, что неплохо бы отрепортить на GitHub'е, но решил ещё глянуть код. Я залез в исходник и достаточно быстро нашёл причину. Ну раз так, значит можно и пул-реквест заслать. Я радостно полез на GitHub в поисках нет ли уже такого баг-репорта. И он был. Ну почти... В одной из задач по улучшению пакета я нашёл коммент, который описывал данную проблему. И тут я обратил внимание на дату... commented on Jul 6, 2016... Что-то тут не так... А когда был последний коммит?.. Посмотрел: Latest commit 89ff7b2 on Feb 23, 2017. При этом, единственное, что есть в этом коммите - это добавление в README.md фразы "Note: this package is no longer being actively maintained.". Вот это сюрприз!!!

Проект заброшен и уже давно. А ведь у меня он уже в трёх проектах используется. Если вы тоже активно используете Slack в своих проектах, то думаю у вас стоит тот же пакет, а возможно даже сталкивались с подобными проблемами. Пакет хороший и удобный, но вот как-то не сложилось. Придётся искать альтернативы. И как выяснилось, альтернатив то особо и нет. Писать с нуля свой - не хочется. Да и не пропадать ведь такому добру!

Новый пакет alek13/slack

Что ж! Я решил оживить проект и обеспечить его поддержкой. Я создал форк alek13/slack. Создал для него сборку на Travis, подключил Scrutinizr и автопроверялку актуальности зависимостей. Создал workspace в Slack для общения контрибьюторов и просто тех, кто использует пакет и у кого появились вопросы.

На данный момент в репозитории уже существуют некоторые наработки в master-ветке, которые не были ещё выпущены. Некоторые из них, я уже вытащил из истории гита и выпустил новый релиз 1.8.0 и небольшой 1.8.1.

В дальнейшем будут добавлены те существующие наработки, которые можно вытащить в версию 1.х, опираясь на обратную совместимость и придерживаясь SemVer. Остальные будут перенесены в версию 2.0. Также в новой версии мы продолжим задумки автора оригинального пакета - такие, как вынесение интеграции с Laravel в отдельный пакет, улучшение функционала Attachment'ов и поддержка нескольких комманд. Возможно что-то будет вынесено в версию 3.0.

Я не стал менять названия namespace'ов и классов из соображений обратной совместимости. И не стану их менять в версии 2.0. Так что если вы используете этот пакет вам будет достаточно просто заменить его на новый:

composer remove maknz/slack
composer require alek13/slack

Помощь

Но, как вы и сами понимаете, одному мне будет тяжело. По разным причинам, начиная с того, что это всё-таки open source :). Поэтому я хочу попросить у вас помощи, чтобы возродить этот замечательный, популярный, удобный, но заброшенный пакет.

Для начала было бы неплохо рассказать php-сообществу о новом пакете, просто о том что он существует. Поэтому я бы попросил вас сделать репост этой статьи, рассказать коллегам и друзьям и, например, если вы общаетесь где-то в тематических чатах или форумах, то скинуть ссылку на эту статью.

Далее, если мы взгянем на поиск на Packagist, то пакет находится только на 6 странице. И это понятно: пакет новый, ещё мало установок, никто пока что о нём не знает, мало звёзд,.. и т.д. Поэтому я бы попросил вас зайти на GitHub и поставить звезду этому пакету.

Если вы уже используете оригинальный пакет и вам чего-то не хватает или вам "мешает" какой-то баг, обязательно дайте нам знать и создайте issue на GitHub. А также я бы попросил вас заменить в вашем проекте старый пакет на новый и протестировать. Если вдруг что-то "всплывёт", создайте, пожалуйста, баг-репорт на GitHub. Если же всё пройдёт хорошо, дайте знать - например, в Slack или отпишите здесь в комментах.

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

Присоединяйтесь к Slack-workspace'у по любым вопросам, относящимся к этому пакету.


Как использовать: Slack. Отправка простого сообщения.

2018-01-10

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
evgwed (6 лет назад)

А не ловушка ли эта, как тут: https://habrahabr.ru/company/ruvds/blog/346442/

alek13 (6 лет назад)

Привет, @evgwed.

:) интересное, конечно, высказывание.

Phpprofi был создан для контента, интересного профессиональным разработчикам php. Мы стараемся находить наиболее интересные материалы и делиться своим опытом, как в этой статье. Возможно, призыв ставить звёздочки на гитхабе может при определенном взгляде показаться подозрительным, в таком случае просто не делайте этого.

Ну и обрати внимание, что это не перевод, а статья, написанная человеком из команды phpprofi, а мы дорожим своей репутацией.