Å bygge en anonym slakk Bot ved hjelp av Ruby og Sinatra

Hvis du ikke har levd under en stein det siste året, har du hørt om Slack eller bruker det mest i din bedrift. For de som faktisk levde under en, er Slack en teamkommunikasjonsplattform som er en integrert del av tusenvis av virksomhets arbeidsflyt. Lansert i 2013 har produktets adopsjonsraten vært intet mindre enn fenomenal. Det finnes en rekke nye ting som Slack har å tilby at eksisterende kommunikasjonsverktøy mislyktes, noe som på en måte førte til meteorisk vekst.

En av sine unike tilbud er evnen til å bygge utvidelser kalt bots for moro og for produktivitet. Med den nylig lanserte Slack-plattformen er det på tide å bygge alle slags utvidelser og apps for Slack.

I dag skal vi se på hvordan man bygger en av de morsomme slakkene i Ruby. Denne boten "kan" være nyttig for deg, men hovedfokuset i denne artikkelen er å introdusere deg til Slacks innkommende webhook- og slash-kommando-APIer. Uten videre, la oss komme i gang.

Våre bot, la oss kalle det anonbot, lar folk legge anonyme meldinger i Slack. Vi vil implementere dette ved hjelp av Slacks slash-kommando-API og innkommende webhook-API. Vi bruker slash-kommandoer, fordi disse meldingene er private og kun vises til mottakeren, selv innenfor en kanal. Deretter sender vi inn innholdet som ble sendt til oss via en skråkommando til den respektive kanalen fra hvilken den ble sendt, ved hjelp av en innkommende webhook.

Sette opp prosjektet

Som nevnt skal vi bygge dette i Ruby og Sinatra. Det er en enkel app som kan bygges på vanlig Ruby, men vi bruker Sinatra for å forenkle det videre. Sinatra er et lett webramme for Ruby som er veldig nyttig for å bygge enkle webapplikasjoner som vår.

La oss begynne med å lage de nødvendige filene for vår app, som bare er to. Start med å lage en mappe for vårt prosjekt og opprett de to nevnte to filene i det:

 anonbot | | -------- app.rb | -------- Gemfile | -------- config.ru 

app.rb er der logikken går, og Gemfile er for å spesifisere perlebehovene. config.ru er nødvendig for hosting i Heroku, men det er ikke obligatorisk for appens funksjonalitet.

Legg til linjene nedenfor til vår Gemfile, og vi er klare til å forplikte prosjektet til git.

 kilde "https://rubygems.org" perle "sinatra" perle "httparty" 

Sinatra-perlen er for rammen, og vi trenger httparty å legge inn den anonyme meldingen til Slacks innkommende webhoook. Etter at perlene er lagt til, løp bunt installasjon fra innsiden av prosjektkatalogen.

En ny fil Gemfile.lock vil ha blitt opprettet nå. Nice-la oss initialisere prosjektet til git og forplikte endringene.

 git init git add -A git commit -m "Initial commit med gem requisites" 

Kode det opp

La oss komme til virksomheten. Vi skal bare ha ett API-endepunkt som Slack ringer når vår slash-kommando er påkalt. Åpne opp app.rb og legg til under linjene til den.

 krever 'sinatra' krever 'httparty' krever 'json' get '/ anonymize' gjør postback params [: text], params [: channel_id] status 200 slutten def postback message, kanal slack_webhook = ENV ['SLACK_WEBHOOK_URL'] HTTParty.post slack_webhook , body: "text" => message.to_s, "brukernavn" => "John Doe", "channel" => params [: channel_id]. to_json, overskrifter: 'content-type' => ' json ' slutten 

Så jeg antar at koden er ganske selvforklarende, men la oss raskt skumme over det. Vi krever først de nødvendige bibliotekene, og initialiserer vårt første og eneste API-endepunkt. Dette er sluttpunktet som Slack ringer når vår tilpassede slash-kommando er påkalt.

Vi får en liste over parametere sammen med meldingen, men vi er bare interessert i to parametere:

  • tekst: meldingen som ble skrevet inn etter slash kommandoen
  • CHANNEL_ID: Kanalen fra hvilken brukeren har påkalt kommandoen; Vi trenger det for å legge det tilbake til den kanalen

De postback Metoden tar seg av å legge ut meldingen ved hjelp av webhook-URL til Slack. Vi spesifiserer teksten og overstyrer brukernavnet og kanalen som skal settes mens du konfigurerer webhaken. Det er et nytt alternativ som Slack introduserte i slash kommandoen, som er en rask og enkel måte å gjøre dette på bare to linjer-vi ser det senere.

Ved å gjøre det, er vi alle ferdige med appens funksjonalitet. Legg til linjene nedenfor til config.ru før du forplikter endringene og distribuerer appen vår.

 krever './app' kjøre Sinatra :: Søknad 

Denne filen kreves for Heroku å gjenkjenne apptypen og for å starte betjeningsforespørsler. La oss begå endringene:

 git add -A git commit -m "Legg til app funksjonalitet" 

Hvis du ikke har Heroku-verktøyet, er det på tide å installere det nå. Hvis den allerede er installert, opprett en Heroku app og distribuere vår skinnende nye bot.

 heroku lage appbot-navn heroku distribuere 

Så vi har vellykket opprettet vår bot og distribuert den. Jippi! Det er på tide å fullføre den slanke siden av tingene.

Konfigurere slakkutvidelsen

Vi bruker to typer utvidelser her-slash kommando og innkommende webhook-så vi må konfigurere de to av dem separat. Gå til Konfigurer Apps, og klikk på slash kommandoer og Legg til konfigurasjon på neste side.

Gi en skråkommando av ditt valg - du kan være så skadelig som mulig. Jeg har valgt det åpenbare / anonbot. Når du har skrevet inn slash kommandoen, fyller du på URL-feltet på den neste siden med den nylig distribuerte Heroku-nettadressen.

 https: //.herokuapp.com/anonymize 

Legg merke til at vi har angitt en https endepunkt. Det er viktig at du sjekker det siden Slack anbefaler kommunikasjonsendepunktene å være https. Sett også Metoden som , og da kan du lagre integrasjonen.

Deretter går du til samme Konfigurer Apps-endepunkt, og denne gangen velger du Innkommende Webhooks, og på konfigurasjon side, velg hvilken kanal du vil, siden vi allikevel vil tilsidesette den i vår melding. På den resulterende siden, gjør et notat av Webhook URL.

Nå som vi har webhook-nettadressen, sett den som Herokus miljøvariabel slik at vi kan starte showet. Fra kommandolinjen inne i prosjektkatalogen, kjør:

 heroku config: sett SLACK_WEBHOOK_URL = https: //hooks.slack.com/services/your-webhook-url 

Og for den glade nyheten, er vi ferdige! La oss teste vår onde nye bot. Skriv opp skråstrekommandoen din, etterfulgt av en melding for å skremme gruppemedlemmene dine.

Slik svarer svaret i kanalen.

Vel, ingen kunne gjette det riktig!

The Short Way

Som jeg allerede nevnte, er det en enkel alternativ måte å gjøre dette på. Vi må kvitte seg med den innkommende webhook-delen helt og i stedet svare på det opprinnelige samtalen Slack gjør med teksten og response_type som in_channel. Slik ser app.rb ut ved å bruke denne metoden:

 få '/ anonymize' gjør content_type: json : text => params [: tekst],: response_type => "in_channel". to_json end 

Denne funksjonen ble introdusert nylig av Slack. Ved å spesifisere response_type som in_channel, Vi viser responsen offentlig, som er privat ellers. Jeg gikk ikke videre med denne metoden fordi intensjonen er å vise hvor enkelt de to utvidelsene er.

Konklusjon

Så enkelt, ikke sant? Hensikten med denne opplæringen er å gi deg et glimt av et par utvidelser som Slack har å tilby, og jeg synes det er fornøyd. Alle prøvekoden som brukes i denne opplæringen, er vert på GitHub.

Jeg takker for at du har lest denne artikkelen, og jeg håper det tjente dine formål. Til neste gang!