Slack au service de l'ambiance au travail

Par Thibaud Robelain & Flavien Raynaud, le 18.09.2015

La communication dans une équipe composée de dizaines de personnes se révèle souvent difficile, c’est pourquoi utiliser un logiciel de messagerie adapté devenait une nécessité chez Applidium. Nous avons décidé d’essayer Slack, qui nous a au final convaincu grâce aux nombreuses fonctionnalités dont il dispose.

En plus des messages directs, Slack permet de créer deux différents types de groupes, les publics et privés. Un groupe public est accessible par tous, un groupe privé est caché de l’ensemble des membres et accessible uniquement sur invitation. Slack s’est peu à peu substitué aux classiques emails, ce qui nous a permis d’améliorer notre réactivité.

Les intégrations Slack

La beauté de Slack vient du fait qu’il dispose d’un grand nombre de services normalement non inclus dans les logiciels classiques de messagerie, ces services étant disponibles sous le nom d’intégrations. Par exemple, chez Applidium, nous utilisons des intégrations pour nos outils tels que IFTTT, Jenkins, et Google Drive, qui nous facilitent la vie au quotidien.

En plus de ces intégrations “pré-configurées”, Slack permet aux développeurs de créer leurs propres intégrations de deux manières différentes, appelées “Incoming Webhooks” ou “Outgoing Webhooks”. Ces deux types d’intégrations permettent à des serveurs externes de communiquer avec l’API de Slack, soit en recevant des messages issus de groupes Slack, soit en envoyant du contenu afin que Slack le retransmette sur un groupe prédéfini.

Les “Incoming Webhooks”, comme le nom l’indique, permettent d’envoyer des données à Slack. Nous allons vous décrire comment nous les avons utilisés afin de créer un bot qui se charge de créer des paires avec nos employés afin qu’ils déjeunent ensemble le lendemain.
Les “Outgoing WebHooks”, quant à eux, permettent de recevoir des données issues des groupes Slack. Ce type d’intégration permet au serveur désigné de traiter les données en interne puis de répondre à Slack avec du texte à afficher dans le groupe concerné s’il le souhaite.

Cyril – un exemple d’Incoming Webhook

Comme nous l’avons mentionné précédemment, les incoming webhooks permettent à des systèmes externes de poster des messages sur des groupes. Ils fonctionnent de manière très simple: un admin Slack peut créer un incoming webhook dans le groupe qu’il désire (public ou privé), et une URL Slack est créée pour cette intégration. Le système externe peut ensuite envoyer une requête HTTP de type POST avec un payload en JSON, ce payload étant ensuité affiché de la bonne manière sur le groupe correspondant.

Chaque vendredi midi, les membres de l’équipe sont répartis en paires et sortent manger ensemble, afin de faire plus ample connaissance. Puisqu’il est très fastidieux de réaliser chaque semaine plusieurs dizaines de paires, nous avons développé un bot prénommé Cyril (en honneur à Cyril Lignac) et lui avons donné l’URL de l’incoming webhook créé à cet effet.

Chaque jeudi, Cyril se réveille et génère des paires aléatoires en se basant sur les utilisateurs actuellement connectés sur notre groupe #general (incluant tous les membres de notre organisation).

Voici un exemple de ce que nous envoyons à Slack :

{
  "text": "Et voici votre partenaire gourmand et
           croquant pour le déjeuner : ……"
}

Une fois reçu par Slack, ce payload est affiché de la manière suivante :

Zizou – un exemple d’Outgoing Webhook

La pause déjeuner chez Applidium est un moment de détente, rythmé par des batailles endiablées de Super Smash Bros ou d’épiques rencontres de FIFA. Nous désirions garder l’historique de nos matchs de FIFA afin de pouvoir récompenser l’étoile montante ou bien le grand perdant de la semaine, et, pour ça, nous avons écrit notre propre bot : Zizou. C’est un exemple typique d’utilisation qu’on peut faire des Outgoing Webhooks.

Nous avons créé un groupe appelé #fifa, pour lequel nous avons configuré un outgoing webhook utilisant le mot “fifa”. Chaque message commençant par “fifa” est envoyé à notre serveur qui héberge Zizou sous la forme d’une requête HTTP POST. Ce message est structuré de la sorte :

{
  "token": "YOUR_SLACK_TOKEN",
  "text": "fifa stats @player",
  "trigger_word": "fifa"
}

Nous voulions que zizou établisse un classement automatique des joueurs, en utilisant les scores des matchs, mais aussi les équipes utilisées. En gardant ça à l’esprit, nous avons établi un ensemble de commandes accessibles directement depuis slack pour aider les joueurs à sauvegarder leurs matchs de la manière la plus simple possible. Voici la liste des commandes actuellement disponibles sur zizou :

  fifa addteam team atk mid def // ajoute une équipe
  fifa teams // liste les équipes disponibles
  fifa stats @slack_user
  fifa match @slack_user team score @slack_user2 team score
  fifa 2v2 @user @user team score @user @user team score
  fifa undo // supprime le dernier match enregistré
  fifa ribery // renvoie une magnifique citation de Ribery
  fifa challenge @slack_usr time(optional)
  fifa ranking // donne le classement complet de la ligue
  fifa r // donne le classement en version mobile
  fifa ranking2 // classement 2v2 complet
  fifa r2 // classement 2v2 en version mobile

En interne, zizou utilise un classement Elo, système d’évaluation de niveau pour des jeux qui se jouent en général à deux joueurs (tels que les échecs). L’algorithme a été légèrement modifié afin d’incorporer deux choses : le niveau relatif des deux équipes qui s’affrontent, et le score final du match. Ainsi, une large victoire aura plus d’impact qu’une victoire par faible différence de score. De plus, gagner contre le Real Madrid avec Saint-Etienne augmentera les points gagnés par le joueur stéphanois et les points perdus par le joueur madrilène.

Au 10 septembre, soit 3 mois et demi après son intégration sur Slack, Zizou totalise plus de 200 matchs enregistrés.

Code source

Si ce que vous avez lu vous a donné envie d’avoir votre propre Cyril ou Zizou sur Slack, c’est possible ! Vous trouverez le code source sur notre github.

Et si vous êtes amateur de beau jeu, n’oubliez pas de regarder nos plus beaux buts sur le Twitch Fifapplidium !