Construirea unui Bot anonim Slack folosind Ruby și Sinatra

Dacă nu ați trăit sub o stâncă pentru ultimul an, ați auzit despre Slack sau cel mai probabil îl utilizați în compania dvs. Pentru cei care au trăit de fapt sub unul, Slack este o platformă de comunicare în echipă, care face parte integrantă din fluxurile de lucru ale mii de companii. Lansat în 2013, rata de adopție a produsului nu a fost deloc fenomenală. Există o serie de lucruri noi pe care Slack trebuie să le ofere că instrumentele de comunicare existente nu au reușit, ceea ce a dus într-un fel la creșterea sa meteorică.

Una dintre ofertele sale unice este abilitatea de a construi extensii numite boti pentru distracție și pentru productivitate. Odată cu lansarea recentă a platformei Slack, este timpul să construim tot felul de extensii și aplicații pentru Slack.

Astăzi vom analiza cum să construim unul din acei boturi distractivi în Ruby. Acest bot ar putea fi util pentru dvs., dar obiectivul principal al acestui articol este să vă prezinte API-urile de comandă de intrare și de slash ale Slack. Fără să mai vorbim, să începem.

Botezul nostru, să îl numim anonbot, permite oamenilor să posteze mesaje anonime în Slack. Vom implementa acest lucru folosind API-ul de comandă slash Slash și API-ul webhook de intrare. Utilizăm comenzi slash, deoarece aceste mesaje sunt private și sunt afișate doar destinatarului chiar și în interiorul unui canal. Apoi, folosindu-ne un webhook de intrare, vom posta înapoi conținutul care ne-a fost trimis printr-o comandă slash la canalul respectiv din care a fost trimis.

Configurarea proiectului

Așa cum am notat, vom construi acest lucru în Ruby și Sinatra. Este o aplicație simplă care ar putea fi construită pe un Ruby simplu, dar folosim Sinatra pentru ao simplifica mai departe. Sinatra este un cadru web ușor pentru Ruby, care este foarte util pentru construirea de aplicații web simple ca ale noastre.

Să începem prin crearea fișierelor necesare pentru aplicația noastră, care sunt doar două. Începeți prin a crea un dosar pentru proiectul nostru și creați în el două fișiere menționate mai jos:

 anonotă | -------- app.rb | -------- Gemfile | -------- config.ru 

app.rb este locul în care logica merge și Gemfile este pentru a specifica rechizite bijuterii. config.ru este necesar pentru găzduirea în Heroku, dar nu este obligatoriu pentru funcționalitatea aplicației.

Adăugați liniile de mai jos în Gemfile noastre și suntem gata să vă angajăm proiectul în git.

 sursă "https://rubygems.org" bijuterie "sinatra" bijuterie "httparty" 

Bijutectura sinatra este pentru cadru, și avem nevoie de httparty pentru a posta mesajul anonim la Slack's webhoook de intrare. După adăugarea pietrelor, rulați instalare pachet din interiorul directorului de proiect.

Un nou fișier Gemfile.lock va fi creat acum. Nisa - să ne inițializăm proiectul în git și să facem schimbările.

 git init git adăuga -A git commit -m "Comit inițial cu rechizite bijuterie" 

Codificați-l

Să ajungem la afaceri. Vom avea doar un singur punct final API pe care Slack îl sună atunci când este invocată comanda noastră slash. Deschide app.rb și adăugați liniile de mai jos.

 trebuie să creezi un mesaj de postback înapoi, canal slack_webhook = ENV ['SLACK_WEBHOOK_URL'] HTTParty.post slack_webhook , corp: "text" => message.to_s, "username" => "John Doe", "canal" => params [: channel_id] to_json, headers: 'content-type' => json ' sfârșitul 

Deci, cred că codul este destul de explicativ, dar hai să o luăm repede. În primul rând, solicităm bibliotecile necesare și inițializăm primul și singurul obiectiv final API. Acesta este punctul final pe care Slack îl sună de fiecare dată când este invocată comanda noastră personalizată.

Vom primi o listă de parametri împreună cu mesajul, dar suntem interesați doar de doi parametri:

  • text: mesajul care a fost introdus în urma comenzii slash
  • CHANNEL_ID: canalul de la care utilizatorul a invocat comanda; avem nevoie să îl punem înapoi pe canalul respectiv

postback metoda se ocupă de postarea mesajului utilizând URL-ul Webhook la Slack. Specificăm textul și înlocuim numele de utilizator și canalul care va fi setat în timpul configurării site-ului web. Există o nouă opțiune pe care Slack a introdus-o în comanda slash, care este o modalitate rapidă și ușoară de a face acest lucru în doar două rânduri - o vom vedea mai târziu.

Prin aceasta, suntem cu toții făcuți cu funcționalitatea aplicației. Adăugați liniile de mai jos la config.ru înainte de a comite schimbările și de a implementa aplicația noastră.

 cereți "./app" Run Sinatra :: Aplicație 

Acest fișier este necesar pentru ca Heroku să recunoască tipul aplicației și să înceapă să difuzeze cereri. Să facem schimbările:

 adăugați git -A git commit -m "Adăugați funcționalitatea aplicației" 

Dacă nu aveți centura de instrumente Heroku, este timpul să o instalați acum. Dacă este deja instalat, creați o aplicație Heroku și implementați botul nostru strălucitor.

 heroku creează numele de heroku al appbot-name 

Așa că am creat cu succes botul nostru și l-am desfășurat. Ura! Este timpul să terminați partea Slack a lucrurilor.

Configurarea extensiei de oprire

Folosim aici două tipuri de extensii - comandă și intrare - astfel încât trebuie să le configuram separat. Accesați Configurare aplicații și faceți clic pe comenzile slash și Adăugați Configurație pe pagina următoare.

Dă-i o comandă slash după alegerea ta - poți fi cât de rău posibil. Am ales ceea ce este evident / anonbot. Odată ce ați introdus comanda Slash, pe pagina următoare, completați câmpul de adresă URL cu noua adresă URL a Heroku.

 https: //.herokuapp.com/anonymize 

Rețineți că am specificat a https punct final. Este important să o verificați de când Slack recomandă ca punctele finale de comunicare să fie https. De asemenea, setați metoda ca OBȚINE, și apoi puteți salva integrarea.

Apoi, mergeți la același punct de configurare Configure Apps și selectați de această dată WebHooks primite, și pe configurație selectați orice canal doriți, deoarece, oricum, o vom suprascrie în mesajul nostru. În pagina care rezultă, faceți o notă despre Webhook URL.

Acum, dacă avem adresa URL webhook, setați-o ca variabilă de mediu a lui Heroku, astfel încât să putem începe spectacolul. Din linia de comandă din interiorul directorului de proiect, executați:

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

Și pentru știrile fericite, am terminat! Hai să ne testeze botul nostru rău. Introduceți comanda dvs. de slash, urmată de un mesaj pentru a sparge membrii echipei.

Acesta este modul în care răspunsul ar fi în canal.

Ei bine, nimeni nu a putut ghici bine!

Calea scurtă

Așa cum am menționat deja, există o modalitate alternativă simplă de a face acest lucru. Trebuie să scăpăm complet de partea de intrare și să răspundem la apelul inițial pe care Slack îl face cu textul și response_type la fel de in_channel. Acesta este modul în care app.rb va arăta folosind metoda respectivă:

 primi '/ anonymize' face content_type: json : text => params [: text],: answer_type => "in_channel". 

Această caracteristică a fost introdusă recent de Slack. Prin specificarea response_type la fel de in_channel, afișăm răspunsul în mod public, care altfel este privat. Nu am făcut această metodă, deoarece intenția este să arătăm cât de ușor sunt cele două extensii.

Concluzie

Atât de simplu, nu? Intenția acestui tutorial este să vă dați o privire la câteva extensii pe care Slack le oferă și cred că este mulțumit. Toate exemplele de cod utilizate în acest tutorial sunt găzduite pe GitHub.

Vă mulțumesc că ați citit acest articol și sper că a servit scopurilor voastre. Pana data viitoare!

Cod