Firmowy hackaton czyli walka z Bot Framework
Wczoraj razem z kolegą z zespołu wzięliśmy udział w 12 godzinnym hackatonie organizowanym przez naszą firmę. Technologia dowolna, tematy wybierane z listy zgłoszonych przez pracowników.
Wybraliśmy temat związany z naszym zespołem. Mianowicie zabraliśmy się za robienie mechanizmu do kudosów online. Projekt nazwaliśmy „Kudospol”.
Kudosy w naszej firmie to forma nagradzania/punktowania osób z zespołu. Kudosa można dostać np. pomagając komuś, zgłaszając ciekawe pomysły, rozwiązując jakiś problem itd. Jest to zabawa przyczyniająca się do zdrowej rywalizacji i wymiany wiedzy.
Do tej pory kudosy w zespole były reprezentowane przez fizyczne żetony. Jednak od momentu rozproszenia się zespołu sama idea podupadła bo ciężko było dawać kudosa osobom spoza jednej lokalizacji.
Ta technologia!
Musieliśmy przygotować coś co będzie jednocześnie działało online i było proste w użyciu. Padł pomysł zrobienia bota do komunikatora Microsoft Teams, który jest główną formą komunikacji wewnątrz firmy.
Ponieważ komunikator od Microsoftu to i bot również powstawał w technologii Microsoftu. Konkretnie użyliśmy Microsoft Bot Framework.
Biblioteka ma gotowe wersje dla kilku technologii. My wybraliśmy NodeJS jako coś czego przy okazji można się poduczyć.
Działanie
Pomysł był taki, że bot powinien działać w ramach kanałów na Teamsach i umożliwiać obsługę z poziomu zwykłych wiadomości.
Ostatecznie w podstawowej wersji udało nam się zawrzeć:
- Obsługę dawania kudosa poprzez polecenie '+ Osoba’. Nawet zadział mechanizm wspominania osób w konwersacji dzięki czemu mieliśmy za darmo ograniczenie dawania kudosów tylko dla osób na kanale.
- Wyświetlanie listy wyników. Zarówno wszystkich jak i top 3 posortowanego wg ilości.
- Ograniczenie ilości kudosów do wykorzystania. Takie ograniczenie działało w przypadku fizycznych żetonów gdzie mieliśmy do dyspozycji 5 sztuk dlatego postanowiliśmy przenieść ten mechanizm również do wersji online
- Resetowanie wyników w obrębie konwersacji. Kudosy są rozliczane co 2-3 tygodnie kiedy to osoba z największą ilością otrzymanych sztuk dostaje małą nagrodę np. czekoladę. W tym momencie jest potrzeba przywrócenia początkowej ilości kudosów i rozpoczęcia zabawy ponownie.
Nie zdążyliśmy dodać obsługi bazy danych więc na razie całość działa w pamięci i służy głównie prezentacji pomysłu.
Mamy jeszcze kilka pomysłów, które fajnie by było dodać jednak obecna wersja po dodaniu zapisu do bazy jak najbardziej nadaje się do wykorzystania chociażby w naszym zespole.
Problemy
Pewnie udało by się bardziej dopracować cały projekt gdyby nie kilka mniejszych lub większych problemów. Z tych najbardziej dotkliwych to tak:
- Wymóg zastosowania serwera z SSL do testów „na produkcji”. Żeby użyć bota w prawdziwych Teamsach musieliśmy go zarejestrować. Rejestracja wymagała podania jego endpointa na serwerze, z których połączenie by było wykonywane przez https. To całkowicie pogrzebało nasze szanse na użycie Azurowego VPSa z zainstalowanym Ubuntu. Ostatecznie musieliśmy skorzystać z dedykowanej usługi Bot Service na platformie Microsoft Azure. 4h z 12 stracone na zabawę w DevOpsów…
- Marna dokumentacja. Obsługa MS Teams w Bot Frameworku została dodana relatywnie niedawno przez co dokumentacja nadal powstaje, a przykładów jest jak na lekarstwo. Chcąc obsłużyć mechanizmy specyficzne dla tego czatu, jak np. wspominanie osoby w rozmowie musieliśmy czasami wręcz metodą prób i błędów wyświetlać testowo dane „na produkcji”
- Problem z łatwym testowaniem. Co prawda istnieje Bot Framework Emulator, który pozwala testować bota lokalnie. Problem powstaje jednak kiedy chcemy użyć mechanizmów specyficznych dla MS Teams bo tych emulator nie obsługuje, a to one sprawiały najwięcej kłopotów. Dlatego każdą zmianę trzeba było commitować, uruchamiać i testować na prawdziwym czacie. Koledzy z zespołu chyba już mieli dosyć naszej testowej konwersacji w Teamsach :P
Pytanko Czy nie mogliście utworzyć w Teamsach dla 2 osób do testów?;)
Teamsy działają tak, że bota się instaluje dla całego zespołu, a nie pojedynczego czatu więc musielibyśmy tworzyć nowy zespół i do niego dołączać, żeby testować bota bez spamowania. Nie było na to czasu tym bardziej, że dopiero zagłębialiśmy się w to jak boty działają.