Slack jest bardzo fajny, jednak ma jeden minus/plus. Nie daje on możliwości zarejestrowania się użytkownikom zewnątrz. To znaczy, by się dostać, trzeba dostać zaproszenie. To nie jest takie złe. Jednak są momenty kiedy nie chcemy by nasz slack był zamknięty.

Ja na przykład kompletnie zapomniałem, że slack jest domyślnie zamknięty i wysłałem kiedyś maila zapraszając wszystkich do slacka dla devWarsztatów. Ktoś mi dopiero nieśmiało zwrócił uwagę po kilku dniach, że tam trzeba zaproszenie. Argh :) aż mnie… no nic. Przeprosiłem i obiecałem, że się poprawię. Szybko więc wziąłem się za SlackIn by ten problem naprawić. Ale wciąż w głowie miałem post Procenta, że to tylko takie ładne na papierze jest. Ale jak trzeba to trzeba. Z tą różnicą iż znałem drogę jaką przeszedł Procent i wiedziałem, że tą samą drogą nie będę chciał iść. Włączyłem zegarek i jazda.

TL;DR

Da się dość szybko i sprawnie SlackIn postawić nawet na Azure. Zmieniając tok myślenia, można znaleźć drogę, która wcześniej była niewidoczna. Jakbym miał to robić opcją deploymentową, to bym tego do tej pory nie zrobił.

Slack In

Po pierwsze nie interesowały mnie deploymenty domyślne. W szczególności, że teraz to jest jakiś Now.app – są też opcje skryptów azure, ale ja ich nie rozumiem, nie mam też czasu się nimi bawić. Więc zdecydowałem, że do SlackIn podejdę jak do normalnej aplikacji, dla której SlackIn jest po prostu dodatkiem/pluginem.

Jak się okazało, to było… całkiem rozsądne. API jest tak stworzone, by właśnie w ten sposób odpalać aplikację. Zamiast więc instalować globalnie slackin, zainstalowałem go lokalnie:

npm install --save slackin

Potem stworzyłem sobie plik server.js (azure wymaga server.js, index.js nie zostanie wychwycony), który zawierał następujący kod:

var slackin = require('slackin');

var token = process.env.slack_token || '';
var port = process.env.port || 3000;
var isDev = process.env.NODE_ENV == "development"

slackin.default({
  token: token,
  interval: 1000,
  org: 'devwarsztaty',
  silent: !isDev
}).listen(port)

Co tutaj się dzieje? Po pierwsze, wymagamy by załadować zależność slackin, potem kilka opcji konfiguracyjnych tak by nie hardcodować tego. Na końcu zaś stworzenie domyślnego slackin z parametrami.

Taki kod przetestowałem lokalnie za pomocą:

node server.js

Śmigał. Skoro śmiga lokalnie to powinien śmigać globalnie.

Azure

Dodałem kod do githuba devWarsztatowego (wraz z node_modules by się i tutaj nie męczyć z azure) i przeszedłem na stronę Azure by stworzyć aplikację. Tutaj musiałem trochę poklikać. Głównie wszystko rozeszło się o szukanie rzeczy w menu – jakieś 7 minut na tym spędziłem. Ale w końcu znalazłem, kroki jakie podjąłem to:

  • Stworzenie Web App
  • App Deployment | Deployment options i podpięcie pod github
  • Settings | Application settings i dodanie slack_token do sekcji App Settings
  • Development Tools | Console sprawdziłem czy zmienna istnieje: set slack_token
  • Odpaliłem stronę

Wszystko zajęło mi 30 minut i 30 sekund. Z czego większość czasu spędziłem na szukaniu rzeczy po menu jak i czekaniu na wgranie/załadowanie. Pracy było może z 10 minut. Więc jak potrzebujecie, to polecam, prosto i szybko da się to zrobić.

Jeszcze szybciej zaś, możecie to zrobić za pomocą Now.app – to zajmie wtedy jakieś 2-3 minuty, ale wymaga maca.