Construire un Slack Bot anonyme en utilisant Ruby et Sinatra

Si vous ne vivez pas sous un rocher depuis un an, vous avez entendu parler de Slack ou vous l'utilisez probablement dans votre entreprise. Pour ceux qui en ont réellement vécu, Slack est une plate-forme de communication d'équipe faisant partie intégrante des flux de travail de milliers d'entreprises. Lancé en 2013, le taux d'adoption du produit a été phénoménal. Slack offre un certain nombre de nouveautés que les outils de communication existants ont échouées, ce qui a en quelque sorte conduit à sa croissance fulgurante..

Une de ses offres uniques est la possibilité de créer des extensions appelées bots pour le plaisir et la productivité. Avec le lancement récent de la plate-forme Slack, il est grand temps de créer toutes sortes d'extensions et d'applications pour Slack..

Aujourd'hui, nous allons voir comment créer l'un de ces slack bots amusants en Ruby. Ce bot «pourrait» vous être utile, mais le but principal de cet article est de vous présenter les API de commande webhook et slash entrantes de Slack. Sans plus tarder, commençons.

Notre bot, appelons-le anonbot, permet aux gens de poster des messages anonymes dans Slack. Nous allons implémenter cela en utilisant l'API de commande slash de Slack et l'API entrante webhook. Nous utilisons des commandes slash, car ces messages sont privés et ne sont montrés au destinataire que dans un canal. Ensuite, à l'aide d'un crochet Web entrant, nous renverrons le contenu qui nous a été envoyé via une commande slash au canal respectif à partir duquel il a été envoyé..

Mise en place du projet

Comme indiqué, nous allons construire cela en Ruby et Sinatra. C'est une application simple qui pourrait être construite sur Ruby, mais nous utilisons Sinatra pour la simplifier davantage. Sinatra est un framework web léger pour Ruby très utile pour la création d'applications web simples comme la nôtre..

Commençons par créer les fichiers nécessaires pour notre application, qui ne sont que deux. Commencez par créer un dossier pour notre projet et créez les deux fichiers mentionnés ci-dessous:

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

app.rb est où la logique va, et Gemfile est pour spécifier les qualités de gem. config.ru est requis pour l'hébergement dans Heroku, mais ce n'est pas obligatoire pour la fonctionnalité de l'application.

Ajoutez les lignes ci-dessous à notre Gemfile et nous sommes prêts à engager le projet dans git.

 source "https://rubygems.org" gem "sinatra" gem "httparty" 

La gemme sinatra est pour le framework, et nous avons besoin de httparty pour poster le message anonyme sur le webhoook entrant de Slack. Une fois les gemmes ajoutés, lancez installation groupée depuis l'intérieur du répertoire du projet.

Un nouveau fichier Gemfile.lock aura été créé maintenant. Nice, initialisons notre projet dans git et validons les modifications.

 git init git add -A git commit -m "Commit initial avec les conditions de gem" 

Code It Up

Allons au business. Nous n'allons avoir qu'un seul point de terminaison API que Slack appelle lorsque notre commande slash est appelée. S'ouvrir app.rb et ajoutez les lignes ci-dessous.

 require 'sinatra' require 'httparty' require 'json' get '/ anonymize' ne pas poster messages params [: texte], params [: channel_id] statut 200 message final de publication, canal slack_webhook = ENV ['SLACK_WEBHOOK_URL'] , body: "text" => message.to_s, "username" => "John Doe", "channel" => params [: channel_id]. to_json, en-têtes: 'content-type' => 'application / json ' end 

Je suppose donc que le code est assez explicite, mais parcourons-le rapidement. Nous avons d’abord besoin des bibliothèques nécessaires et initialisé notre premier et unique noeud final d’API. C'est le point final que Slack appelle chaque fois que notre commande slash personnalisée est appelée..

Nous aurons une liste de paramètres avec le message, mais nous ne nous intéressons qu'à deux paramètres:

  • texte: le message tapé après la commande slash
  • Identifiant de la chaine: le canal à partir duquel l'utilisateur a appelé la commande; nous en avons besoin pour le poster sur cette chaîne

le postback méthode se charge de poster le message en utilisant l’URL webhook de Slack. Nous spécifions le texte et ignorions le nom d'utilisateur et le canal qui seront définis lors de la configuration du Webhook. Slack a introduit une nouvelle option dans la commande slash, un moyen rapide et facile de le faire en deux lignes seulement. Nous le verrons plus tard..

En faisant cela, nous en avons tous terminé avec la fonctionnalité de l'application. Ajoutez les lignes ci-dessous à config.ru avant de valider les changements et de déployer notre application.

 nécessite './app' lance Sinatra :: Application 

Ce fichier est requis pour que Heroku puisse reconnaître le type d'application et commencer à répondre aux demandes. Engageons les changements:

 git add -A git commit -m "Ajouter une fonctionnalité d'application" 

Si vous n'avez pas la ceinture d'outils Heroku, il est temps de l'installer maintenant. S'il est déjà installé, créez une application Heroku et déployez notre tout nouveau robot..

 heroku créer appbot-name heroku deploy 

Nous avons donc réussi à créer notre bot et à le déployer. Yay! Il est temps de finir le côté slack.

Configuration de l'extension Slack

Nous utilisons deux types d'extensions ici: la commande slash et le Webhook entrant. Nous devons donc les configurer séparément. Allez à Configurer les applications et cliquez sur les commandes slash et Ajouter une configuration à la page suivante.

Donnez une barre oblique de votre choix, vous pouvez être aussi espiègle que possible. J'ai choisi l'évident / anonbot. Une fois que vous avez saisi la commande slash, dans la page suivante, renseignez le champ URL avec la nouvelle URL Heroku déployée..

 https: //.herokuapp.com/anonymize 

Notez que nous avons spécifié un https point final. Il est important que vous le vérifiiez, Slack recommandant que les terminaux de communication soient https. Définissez également la méthode comme OBTENIR, et alors vous pouvez enregistrer l'intégration.

Ensuite, accédez au même point de terminaison Configure Apps et sélectionnez cette fois WebHooks entrants, et sur le Configuration page, sélectionnez le canal que vous voulez, car de toute façon nous allons le remplacer dans notre message. Sur la page résultante, notez le URL Webhook.

Maintenant que nous avons l'URL webhook, définissez-la comme variable d'environnement de Heroku afin que nous puissions commencer le spectacle. A partir de la ligne de commande dans le répertoire du projet, exécutez:

 Paramètres de configuration: définir SLACK_WEBHOOK_URL = https: //hooks.slack.com/services/your-webhook-url 

Et pour la bonne nouvelle, nous avons terminé! Testons notre nouveau robot malicieux. Tapez votre commande slash suivie d'un message pour effrayer les membres de votre équipe.

Voici comment la réponse serait dans le canal.

Eh bien, personne ne pouvait le deviner!

Le chemin court

Comme je l'ai déjà mentionné, il existe un moyen simple de le faire. Nous devons nous débarrasser complètement de la partie Webhook entrante et répondre à l'appel initial que Slack fait avec le texte et le type_réponse comme in_channel. Voici à quoi app.rb ressemblera en utilisant cette méthode:

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

Cette fonctionnalité a été introduite récemment par Slack. En spécifiant le type_réponse comme in_channel, nous affichons la réponse publiquement, ce qui est privé sinon. Je ne suis pas allé de l'avant avec cette méthode parce que l'intention est de montrer à quel point les deux extensions sont faciles.

Conclusion

Si simple, non? L’intention de ce tutoriel est de vous donner un aperçu de quelques extensions que Slack a à offrir, et je pense que cela est satisfait. Tous les exemples de code utilisés dans ce tutoriel sont hébergés sur GitHub..

Je vous remercie d'avoir lu cet article et j'espère qu'il vous a servi. Jusqu'à la prochaine fois!