Slackbots
Een Slackbot bouwen om Slackbots te snappen
Sommige projecten beginnen niet met een grote opdracht.
Soms begint het gewoon met: hoe werkt dit eigenlijk?
Op Slack kun je naast je naam een status met een emoji instellen. Een collega en ik hadden bedacht dat we iedere dag een andere custom emoji zouden kiezen. Daar moest dan natuurlijk ook een verhaal achter zitten.
Leuk idee.
Alleen vergaten we het steeds.
Dus bouwde ik een Slackbot die ons iedere ochtend eraan herinnerde.

Een reminder voor een vergeten emoji
De eerste bot had één taak: iedere ochtend een bericht sturen dat het tijd was om een nieuwe status te kiezen.
Dat klinkt klein.
Dat was het ook.
Maar juist daardoor was het een goed experiment. De opdracht was duidelijk genoeg om iets werkends te maken, zonder dat het meteen een groot systeem hoefde te worden.
Het script begint met een lijstje berichten. Voor iedere werkdag staat er een andere tekst klaar. Op maandag vraagt de bot of het weekend is overleefd. Op vrijdag is hij vooral blij dat het bijna weekend is.
Vervolgens kijkt het script welke dag het is.
Is het zaterdag of zondag, dan stopt het script meteen. Geen statusupdate. Ook een bot mag weekend vieren.
Is het een werkdag, dan pakt het script het bericht dat bij die dag hoort.
Daarna wordt er een klein pakketje gemaakt met alleen de tekst van het bericht. Dat pakketje wordt naar een Slack webhook gestuurd.
Om het script automatisch te laten draaien, gebruikte ik GitHub Actions.
Dus eigenlijk is de hele bot een kleine ketting:
- GitHub Actions start het script.
- Het script kijkt welke dag het is.
- De juiste tekst wordt gekozen.
- De tekst wordt naar Slack gestuurd.
- En daarna verschijnt er een bericht in het kanaal.
Klaar.
Dezelfde basis, een andere bot
Toen de eerste bot werkte, gebruikte ik dezelfde basis voor een tweede versie.
Deze bot stuurde iedere dag een vraag naar een Slack kanaal. Een soort vraag van de dag, bedoeld als korte dagelijkse check-in.
Bij de eerste bot stond de inhoud nog vast in de code. Bij de tweede wilde ik dat aanpassen makkelijker werd. Daarom staan de vragen in een los tekstbestand.
Het script opent dat bestand en leest alle regels uit. Lege regels worden overgeslagen. Daardoor kan ik nieuwe vragen toevoegen zonder iets aan de code te veranderen.
Daarna telt het script hoeveel vragen er zijn.
Vervolgens kijkt het naar de datum om te bepalen welke vraag die dag aan de beurt is. Het script rekent uit hoeveel dagen er zijn verstreken sinds de laatste wijziging aan het vragenbestand.
Dat aantal dagen wordt gebruikt om een vraag uit de lijst te kiezen.
Zijn alle vragen geweest, dan begint de teller weer opnieuw bij het begin. Daardoor kan de bot blijven draaien, ook als de vragenlijst niet oneindig lang is.
Daarna wordt de vraag in een Slackbericht gezet. Bovenaan staat “Boekje open!”, daaronder de vraag van de dag en onderaan welk nummer die vraag heeft. Dan krijg je ook een idee wanneer het weer tijd is om nieuwe vragen te bedenken.
De eerste bot kiest een vaste tekst per dag. De tweede bot leest externe content in en bepaalt zelf welke vraag vandaag aan de beurt is.
Ook hier geen gigantische bot.
Maar wel net iets slimmer dan de eerste versie.
Gebouwd omdat ik benieuwd was
Dit project is geen groot ontwerptraject.
Geen interviews, geen strategiepresentatie en geen ingewikkelde flow met twaalf edge cases.
Het was vooral een excuus om iets te leren waar ik nieuwsgierig naar was. Als ik iets niet snap, wil ik weten hoe het werkt. Klein project, groot project, maakt niet uit.
Gewoon beginnen.
De eerste bot leerde me hoe je überhaupt een bericht in Slack krijgt.
De tweede leerde me hoe je dezelfde basis iets flexibeler maakt, door de inhoud los te trekken van de code.
Iedere ochtend een bericht.
En we vergaten de emoji nog steeds regelmatig.
Maar ik snap wel hoe Slackbots werken.