Costruire un Bot anonimo Slack usando Ruby e Sinatra

Se non hai vissuto sotto un sasso per l'anno scorso, avrai sentito parlare di Slack o probabilmente lo stai usando nella tua azienda. Per coloro che in realtà vivevano sotto uno, Slack è una piattaforma di comunicazione di squadra che è parte integrante dei flussi di lavoro di migliaia di aziende. Lanciato nel 2013, il tasso di adozione del prodotto è stato a dir poco fenomenale. Ci sono una serie di nuove cose che Slack ha da offrire che gli strumenti di comunicazione esistenti hanno fallito, cosa che in un certo senso ha portato alla sua crescita meteorica.

Una delle sue offerte uniche è la possibilità di creare estensioni chiamate bot per divertimento e produttività. Con il recente lancio della piattaforma Slack, è giunto il momento di creare ogni sorta di estensioni e app per Slack.

Oggi esamineremo come costruire uno di quei divertenti slack bot in Ruby. Questo bot "potrebbe" esserti utile, ma l'obiettivo principale di questo articolo è quello di farti conoscere le API di comando webhook e slash in arrivo di Slack. Senza ulteriori indugi, iniziamo.

Il nostro bot, chiamiamolo anonbot, consente alle persone di inviare messaggi anonimi su Slack. Lo implementeremo utilizzando l'API di comando slash di Slack e l'API webhook in entrata. Utilizziamo i comandi di barra, perché questi messaggi sono privati ​​e vengono mostrati al destinatario anche all'interno di un canale. Quindi, utilizzando un webhook in arrivo, pubblicheremo il contenuto che ci è stato inviato tramite un comando di barra sul rispettivo canale da cui è stato inviato.

Impostazione del progetto

Come notato, lo stiamo costruendo in Ruby e Sinatra. È una semplice app che può essere costruita su semplice Ruby, ma stiamo usando Sinatra per semplificare ulteriormente. Sinatra è una struttura web leggera per Ruby che è molto utile per creare semplici applicazioni web come la nostra.

Iniziamo creando i file necessari per la nostra app, che sono solo due. Inizia creando una cartella per il nostro progetto e crea al suo interno i seguenti due file:

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

app.rb è dove va la logica, e Gemfile è per specificare i requisiti della gemma. config.ru è richiesto per l'hosting in Heroku, ma non è obbligatorio per la funzionalità dell'app.

Aggiungi le linee sottostanti al nostro Gemfile e siamo pronti a impegnare il progetto in git.

 fonte "https://rubygems.org" gemma "sinatra" gemma "httparty" 

La gemma sinatra è per il framework, e abbiamo bisogno di httparty per inviare il messaggio anonimo al webhoook in arrivo di Slack. Dopo aver aggiunto le gemme, corri installazione bundle dall'interno della directory del progetto.

Un nuovo file Gemfile.lock sarà stato creato ora. Bello, inizializziamo il nostro progetto in git e commettiamo le modifiche.

 git init git add -A git commit -m "Inizializza con i requisiti della gemma" 

Codice It Up

Andiamo al business. Avremo solo un endpoint API che Slack chiama quando viene richiamato il nostro comando slash. Aprire app.rb e aggiungere le linee sottostanti ad esso.

 richiede 'sinatra' richiede 'httparty' richiede 'json' get '/ anonymize' fai postback params [: text], params [: channel_id] status 200 end def messaggio postback, canale slack_webhook = ENV ['SLACK_WEBHOOK_URL'] HTTParty.post slack_webhook , body: "text" => message.to_s, "username" => "John Doe", "channel" => params [: channel_id]. to_json, header: 'content-type' => 'application / json ' fine 

Quindi immagino che il codice sia piuttosto auto-esplicativo, ma cerchiamo di superarlo rapidamente. Per prima cosa richiediamo le librerie necessarie e inizializzando il nostro primo e unico endpoint dell'API. Questo è l'endpoint che Slack chiama ogni volta che viene invocato il nostro comando barra personalizzata.

Avremo un elenco di parametri insieme al messaggio, ma siamo interessati solo a due parametri:

  • testo: il messaggio che è stato digitato seguendo il comando slash
  • Canale ID: il canale da cui l'utente ha richiamato il comando; ne abbiamo bisogno per postarlo di nuovo su quel canale

Il postback metodo si occupa di pubblicare il messaggio utilizzando l'URL webhook su Slack. Stiamo specificando il testo e sovrascrivendo il nome utente e il canale che verranno impostati durante la configurazione del webhook. C'è una nuova opzione che Slack ha introdotto nel comando slash che è un modo semplice e veloce per farlo in due sole righe - lo vedremo più tardi.

In tal modo, abbiamo finito con le funzionalità dell'app. Aggiungi le linee sottostanti a config.ru prima di accettare le modifiche e distribuire la nostra app.

 richiede './app' esegui Sinatra :: Application 

Questo file è necessario affinché Heroku riconosca il tipo di app e inizi a servire le richieste. Apportiamo le modifiche:

 git add -A git commit -m "Aggiungi funzionalità dell'app" 

Se non hai il cinturino Heroku, è ora di installarlo ora. Se è già installato, crea un'app di Heroku e distribuisci il nostro nuovo e brillante bot.

 heroku crea la distribuzione di heroku nome-appbot 

Quindi abbiamo creato con successo il nostro bot e lo abbiamo implementato. Sìì! È ora di finire il lato Slack delle cose.

Configurazione dell'estensione allentata

Stiamo utilizzando due tipi di estensioni qui: comando barra e webhook in entrata, quindi dobbiamo configurarne separatamente due. Vai a Configura app e fai clic sui comandi barra e Aggiungi configurazione nella pagina successiva.

Dai un comando di taglio a tua scelta: puoi essere il più dispettoso possibile. Ho scelto l'ovvio / anonbot. Dopo aver digitato il comando barra, nella pagina successiva inserire il campo URL con l'URL Heroku appena distribuito.

 https: //.herokuapp.com/anonymize 

Si noti che abbiamo specificato a https endpoint. È importante controllarlo poiché Slack raccomanda che gli endpoint di comunicazione siano https. Impostare anche il metodo come OTTENERE, e quindi puoi salvare l'integrazione.

Successivamente, vai allo stesso endpoint Configure Apps e questa volta selezionare WebHook in arrivo, e sul Configurazione pagina, seleziona il canale che preferisci, poiché in ogni caso lo sovrascriviamo nel nostro messaggio. Nella pagina risultante, prendi nota di URL Webhook.

Ora che abbiamo l'URL di webhook, impostalo come variabile d'ambiente di Heroku in modo che possiamo avviare lo spettacolo. Dalla riga di comando all'interno della directory del progetto, eseguire:

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

E per le buone notizie, abbiamo finito! Mettiamo alla prova il nostro nuovo bot birichino. Digitare il comando barra seguito da un messaggio per far sobbalzare i membri del team.

Questo è come la risposta sarebbe nel canale.

Beh, nessuno poteva indovinare giusto!

La via corta

Come ho già detto, esiste un modo semplice e alternativo per farlo. Dobbiamo eliminare del tutto la parte del webhook in arrivo e invece rispondere alla chiamata iniziale che Slack fa con il testo e il response_type come in_channel. Ecco come apparirà app.rb usando quel metodo:

 prendi '/ anonymize' fai content_type: json : text => params [: text],: response_type => "in_channel". to_json end 

Questa funzione è stata introdotta di recente da Slack. Specificando il response_type come in_channel, stiamo visualizzando la risposta pubblicamente, che è privata altrimenti. Non sono andato avanti con questo metodo perché l'intenzione è di mostrare quanto siano facili le due estensioni.

Conclusione

Così semplice, vero? L'intenzione di questo tutorial è di dare un'occhiata a un paio di estensioni che Slack ha da offrire, e penso che sia soddisfatto. Tutto il codice di esempio utilizzato in questo tutorial è ospitato su GitHub.

Ti ringrazio per aver letto questo articolo, e spero che sia servito ai tuoi scopi. Fino alla prossima volta!