Als je het afgelopen jaar niet onder een steen hebt geleefd, heb je over Slack gehoord of gebruik je het waarschijnlijk in je bedrijf. Voor degenen die daadwerkelijk onder één leven hebben geleefd, is Slack een teamcommunicatieplatform dat een integraal onderdeel is van de werkstromen van duizenden bedrijven. Gelanceerd in 2013, de adoptiegraad van het product is niets minder dan fenomenaal. Er zijn een aantal nieuwe dingen die Slack te bieden heeft waar de bestaande communicatiemiddelen niet in slaagden, wat op een bepaalde manier leidde tot zijn snelle groei.
Een van zijn unieke aanbiedingen is de mogelijkheid om extensies te bouwen met de naam bots voor plezier en voor productiviteit. Met de recente lancering van het Slack-platform is het de hoogste tijd om allerlei soorten extensies en apps voor Slack te bouwen.
Vandaag gaan we kijken hoe we een van die leuke slap bots in Ruby kunnen bouwen. Deze bot "kan" nuttig voor u zijn, maar de belangrijkste focus van dit artikel is om u kennis te laten maken met de binnenkomende webhook- en slash-opdracht-API's van Slack. Zonder verder oponthoud gaan we aan de slag.
Onze bot, laten we het anonbot noemen, laat mensen anonieme berichten plaatsen in Slack. We zullen dit implementeren met behulp van de Slash-opdrachtregel-API en de inkomende webhook-API. We gebruiken slash-opdrachten, omdat die berichten privé zijn en alleen aan de ontvanger worden getoond, zelfs binnen een kanaal. Vervolgens gebruiken we een inkomende webhook om de inhoud die ons is verzonden via een slash-opdracht naar het betreffende kanaal te verzenden..
Zoals opgemerkt, gaan we dit in Ruby en Sinatra bouwen. Het is een eenvoudige app die zou kunnen worden gebouwd op gewone Ruby, maar we gebruiken Sinatra om het verder te vereenvoudigen. Sinatra is een lichtgewicht webraamwerk voor Ruby dat erg handig is voor het bouwen van eenvoudige webapplicaties zoals die van ons.
Laten we beginnen met het maken van de benodigde bestanden voor onze app, die slechts twee zijn. Begin met het maken van een map voor ons project en maak de onderstaande twee bestanden erin:
anonbot | | -------- app.rb | -------- Gemfile | -------- config.ru
app.rb
is waar de logica naar toe gaat, en Gemfile
is voor het specificeren van de edelsteenbenodigdheden. config.ru
is vereist voor hosting in Heroku, maar het is niet verplicht voor de functionaliteit van de app.
Voeg de onderstaande regels toe aan ons Gemfile en we zijn klaar om het project in git te zetten.
bron "https://rubygems.org" gem "sinatra" gem "httparty"
De sinatra-edelsteen is voor het raamwerk en we hebben httparty nodig om het anonieme bericht te plaatsen op de binnenkomende webhoook van Slack. Nadat de edelstenen zijn toegevoegd, uitvoeren bundel installeren
vanuit de projectdirectory.
Een nieuw bestand Gemfile.lock
zal nu zijn gemaakt. Nice-laten we ons project initialiseren in git en de veranderingen doorvoeren.
git init git add -A git commit -m "Oorspronkelijke commit met gem-vereisten"
Laten we naar het bedrijf gaan. We gaan slechts één API-eindpunt hebben dat door Slack wordt aangeroepen wanneer onze slash-opdracht wordt aangeroepen. Doe open app.rb
en voeg de onderstaande regels eraan toe.
vereisen 'sinatra' vereisen 'httparty' vereisen 'json' get '/ anonymize' doen postback params [: tekst], params [: channel_id] status 200 end def postback bericht, kanaal slack_webhook = ENV ['SLACK_WEBHOOK_URL'] HTTParty.post slack_webhook , body: "text" => message.to_s, "gebruikersnaam" => "John Doe", "channel" => params [: channel_id]. to_json, headers: 'content-type' => 'application / json ' einde
Dus ik vermoed dat de code behoorlijk voor de hand ligt, maar laten we er snel overheen scrollen. We hebben eerst de benodigde bibliotheken nodig en initialiseren ons eerste en enige API-eindpunt. Dit is het eindpunt dat Slack aanroept wanneer onze aangepaste slash-opdracht wordt aangeroepen.
We zullen een lijst met parameters samen met het bericht krijgen, maar we zijn alleen geïnteresseerd in twee parameters:
tekst
: het bericht dat is ingetypt volgens de slash-opdrachtKanaal Nr
: het kanaal van waaruit de gebruiker de opdracht heeft aangeroepen; we hebben het nodig om het op dat kanaal te plaatsenDe postback
methode zorgt ervoor dat het bericht met de webhook-URL wordt gepost naar Slack. We specificeren de tekst en vervangen de gebruikersnaam en het kanaal dat wordt ingesteld tijdens het configureren van de webhook. Er is een nieuwe optie die Slack heeft geïntroduceerd in de slash-opdracht. Dit is een snelle en eenvoudige manier om dit in slechts twee regels te doen - we zullen het later zien.
Door dat te doen, zijn we allemaal klaar met de functionaliteit van de app. Voeg de onderstaande regels toe aan config.ru
voordat u de wijzigingen doorvoert en onze app implementeert.
vereisen './app' run Sinatra :: Toepassing
Dit bestand is vereist voor Heroku om het app-type te herkennen en om serververzoeken te starten. Laten we de veranderingen vastleggen:
git add -A git commit -m "App-functionaliteit toevoegen"
Als u de Herball Toolbelt niet hebt, is het tijd om het nu te installeren. Als het al is geïnstalleerd, maakt u een Heroku-app en implementeert u onze glanzende nieuwe bot.
heroku creëer appok-naam heroku deploy
Dus we hebben onze bot met succes gemaakt en geïmplementeerd. Yay! Het is tijd om de Slack-kant van de dingen af te maken.
We gebruiken hier twee typen extensies: slash-opdracht en inkomende webhook, dus we moeten deze twee afzonderlijk configureren. Ga naar Apps configureren en klik op de schuine streepopdrachten en Configuratie toevoegen op de volgende pagina.
Geef een slash-commando naar keuze - je kunt zo ondeugend mogelijk zijn. Ik heb het voor de hand liggende gekozen / anonbot
. Nadat u de slash-opdracht hebt ingevoerd, vult u op de volgende pagina het URL-veld in met de nieuw geïmplementeerde Heroku-URL.
https: //.herokuapp.com/anonymize
Merk op dat we een a hebben opgegeven https
eindpunt. Het is belangrijk dat u dit controleert, aangezien Slack de communicatie-eindpunten aanbeveelt https
. Stel ook de methode in als KRIJGEN
, en dan kun je de integratie opslaan.
Ga vervolgens naar hetzelfde eindpunt van Configure Apps en selecteer deze keer Inkomende WebHooks, en op de Configuratie pagina, selecteer het gewenste kanaal, want we gaan het hoe dan ook vervangen in ons bericht. Maak op de resulterende pagina een notitie van de Webhook-URL
.
Nu we de webhook-url hebben, stelt u deze in als Heroku's omgevingsvariabele zodat we de show kunnen starten. Voer vanuit de opdrachtregel in de projectdirectory:
heroku config: set SLACK_WEBHOOK_URL = https: //hooks.slack.com/services/your-webhook-url
En voor het goede nieuws zijn we klaar! Laten we onze ondeugende nieuwe bot testen. Typ uw slash-opdracht gevolgd door een bericht om uw teamleden te laten schrikken.
Dit is hoe het antwoord in het kanaal zou zijn.
Nou ja, niemand zou het goed kunnen raden!
Zoals ik al zei, is er een eenvoudige alternatieve manier om dit te doen. We moeten het binnenkomende deel van de webhook volledig verwijderen en in plaats daarvan reageren op de eerste oproep die Slack maakt met de tekst en de response_type
zoals in_channel
. Zo ziet app.rb eruit met die methode:
get '/ anonymize' do content_type: json : text => params [: text],: response_type => "in_channel". to_json end
Deze functie is onlangs door Slack geïntroduceerd. Door de response_type
zoals in_channel
, we geven het antwoord openbaar weer, wat anders privé is. Ik ging niet verder met deze methode omdat het de bedoeling is om te laten zien hoe gemakkelijk de twee extensies zijn.
Zo eenvoudig, toch? De bedoeling van deze zelfstudie is om u een idee te geven van een aantal extensies die Slack te bieden heeft, en ik denk dat het tevreden is. Alle voorbeeldcodes die in deze zelfstudie worden gebruikt, worden op GitHub gehost.
Ik dank u voor het lezen van dit artikel en ik hoop dat het uw doelen heeft gediend. Tot de volgende keer!