Comment créer un bot Slack avec Zapier et JavaScript pour récupérer les sujets tendance sur Reddit
30 août 2022
0 minutes de lectureReddit est un bon endroit pour suivre l’actualité du développement web et, si vous êtes comme moi, vous suivez probablement des subreddits comme r/node ou r/javascript. J’ai récemment découvert une excellente façon de créer une intégration Reddit avec Zapier en utilisant uniquement mes connaissances en JavaScript : je peux ainsi partager les publications Reddit tendance dans le canal de mon équipe.
Dans cet article, vous apprendrez :
Comment créer une intégration de bot Slack.
Comment créer des workflows de déclencheurs et d’actions dans Zapier pour publier des messages dans un canal Slack.
Comment utiliser une clé API Reddit pour accéder aux publications avec les jetons d’accès et de renouvellement natifs de Reddit.
Comment accéder aux publications Reddit à l’aide du point de terminaison JSON anonyme.
Écrire du code JavaScript (compatible avec Node.js version 10, dont le support a pris fin) pour récupérer des informations sur Reddit à l’aide du client HTTP
node-fetch.
Que pouvez-vous faire avec un bot Slack ?
Ce tutoriel vous apprend à écrire un bot Slack en JavaScript, mais l’écosystème d’API riche en fonctionnalités de Zapier vous permet de connecter de nombreuses autres sources d’information à l’API du bot Slack. Bien que ce tutoriel soit consacré à JavaScript, vous pouvez également créer une application Slack bot avec Node.js et les webhooks HTTP de Zapier, à condition d’héberger vos applications Node.js dans le cloud.
Créer une intégration Reddit avec Zapier pour traiter les nouveaux sujets tendance
Qu’est-ce que Zapier ?
Zapier est une plateforme d’automatisation qui vous permet d’intégrer de nombreuses autres plateformes afin de les connecter et de créer un workflow. Elle sert principalement pour les API et les intégrations natives disponibles sur la marketplace Zapier, mais elle se distingue aussi par la possibilité d’accéder aux données brutes en entrée et en sortie des points d’intégration, et de personnaliser le workflow à l’aide de code.
Pour faciliter l’intégration du bot Slack, nous allons utiliser Zapier, qui propose déjà sa propre intégration native avec Slack. Nous n’avons donc pas besoin d’héberger notre bot sur un serveur dédié ni de créer une intégration de bot Slack distincte.
Maintenant que l’intégration du bot Slack avec Zapier est en place, voici les étapes suivantes :
Définir un calendrier d’exécution de l’intégration. Il peut s’agir d’un calendrier récurrent qui déclenche la tâche Zapier et lance le traitement.
Définir une tâche de code JavaScript personnalisée dans Zapier pour récupérer les sujets tendance qui nous intéressent depuis le point de terminaison JSON de Reddit.
Mettre en forme les sujets tendance selon nos préférences et les envoyer dans un canal Slack au moyen de l’intégration native Slack intégrée à Zapier.
Dans l’interface du workflow Zapier, le processus complet se présente ainsi :

Le déclencheur : toutes les semaines avec Schedule by Zapier
Commençons par configurer le calendrier récurrent du workflow Zapier. J’ai choisi de l’exécuter tous les lundis à 8 h UTC :

Comment automatiser les messages Slack ?
Dans ce tutoriel sur les bots Slack, nous avons choisi un calendrier précis déclenché par Zapier. Cependant, la plateforme API de Zapier propose de nombreux autres déclencheurs pour automatiser Slack. Par exemple : les mentions sur Twitter, les mises à jour de Google Sheets, les modifications d’événements Google Calendar, les mises à jour de flux RSS, et d’autres encore, que vous pouvez intégrer à votre automatisation Slack en JavaScript. Vous pouvez même automatiser les notifications de sécurité Snyk pour suivre les vulnérabilités de votre équipe !
Action : exécuter du JavaScript avec Code by Zapier
Maintenant que nous avons défini le déclencheur temporel du workflow, nous pouvons créer des actions pour effectuer certaines tâches. L’intégration Zapier nous permet de relier les données traitées par ces tâches et de les transmettre à l’action suivante de la chaîne.
Choisissez le type d’action Run JavaScript in Code by Zapier. Dans la configuration Event, choisissez Run JavaScript. La configuration initiale devrait ressembler à ceci :

Développez ensuite la configuration Setup up action, où nous ajouterons le code JavaScript nécessaire pour récupérer les informations sur les sujets tendance depuis le point de terminaison de l’API Reddit.
Comment utiliser une clé API Reddit
Il existe plusieurs façons de récupérer l’actualité de Reddit. Nous allons présenter deux méthodes pour recevoir des mises à jour sur les fils Reddit qui vous intéressent :
Utiliser une clé API Reddit, ce qui nécessite de créer un compte utilisateur Reddit.
Utiliser un point de terminaison de l’API Reddit accessible au public.
Si vous avez uniquement besoin d’un accès en lecture aux subreddits et aux publications tendance, utilisez le workflow le plus simple, sans passer par l’API OAuth de Reddit, et rendez-vous à la deuxième partie de ce chapitre sur l’accès à l’API Reddit.
S’inscrire pour obtenir une clé API Reddit
Commencez par accéder aux préférences des applications de l’API Reddit, puis cliquez sur le bouton Create an app en bas de l’écran. Saisissez ensuite les informations correspondant à votre cas d’utilisation de l’API. Vous devez définir le type d’application sur webapp et fournir un URI de redirection pour traiter les jetons d’accès.

Vous recevrez alors votre ClientID et votre ClientSecret, qui vous permettront d’effectuer des appels d’API. Si vous ne savez pas comment interroger l’API Reddit ni suivre le workflow OAuth de Reddit, consultez d’autres tutoriels de prise en main, comme celui sur le scraping de Reddit.
Il est important de lire les conditions d’accès à l’API Reddit afin de connaître les règles et les conditions que vous devez respecter.
Exemple d’utilisation de l’API Reddit avec JavaScript
Nous allons nous concentrer sur la récupération des fils Reddit intéressants avec JavaScript. Pour cela, nous aurons besoin des identifiants ClientID et ClientSecret mentionnés plus haut, ainsi que de la valeur refresh_token, disponible si vous avez choisi de créer un jeton d’accès OAuth Reddit permanent.
Voici un bon exemple d’utilisation d’une clé API Reddit pour interroger les publications d’un subreddit avec du code JavaScript natif. Remplacez le texte ABCD ci-dessous par les identifiants Reddit mentionnés plus haut pour que l’extrait de code fonctionne correctement :
Cet extrait de code JavaScript pour l’API Reddit utilise refresh_token pour interroger l’API Reddit et demander un access_token. Une fois le jeton d’accès à l’API Reddit obtenu, nous pouvons créer une nouvelle requête HTTP pour récupérer les publications tendance envoyées au subreddit r/node. Enfin, nous parcourons toutes les données des publications et créons une chaîne de message qui sera transmise à l’action suivante.
Deux points importants à retenir de l’extrait de code précédent :
Vous remarquerez que la méthode correcte et à jour pour interroger les données Reddit consiste à utiliser le paramètre de requête
t, dansparams2. Pourtant, certains tutoriels et guides obsolètes mentionnent encore l’utilisation detime.Autre point intéressant : Zapier nous limitant à une ancienne version de
node-fetch, exécutée sur une version de Node.js en fin de vie (Node.js v10), vous pouvez utiliser directement l’objet URL pour effectuer des requêtes HTTP :js const url2 = new URL('https://oauth.reddit.com/r/node/top'); const res2 = await fetch(url2, settings2);
Pour les autres opérations d’API, consultez la page complète et à jour de la documentation de l’API Reddit, qui répertorie tous les points de terminaison disponibles pour les comptes Reddit, l’historique, la modération des subreddits et d’autres fonctionnalités.
Interroger les informations Reddit avec le point de terminaison JSON public
Avant de passer à l’action JavaScript Zapier suivante, voyons rapidement comment interroger l’API Reddit sans authentification OAuth ni autre type de clé API.
Reddit met à disposition les informations sur les fils de subreddit au format JSON via le point de terminaison suivant, qui est public et ne nécessite aucune authentification :
Vous pouvez aussi demander les publications Top de ce subreddit et préciser une période en ajoutant les paramètres de requête suivants :
La réponse JSON de Reddit ressemblera à ceci :
Mettre en forme la réponse JavaScript de l’action Zapier
Quelle que soit la méthode utilisée pour obtenir et mettre en forme les données JSON de Reddit, nous devons les préparer pour l’intégration du bot Slack suivante. Vous pouvez le faire entièrement dans l’action JavaScript Zapier précédente ou créer une action Zapier dédiée, afin de pouvoir la réutiliser si la méthode de mise en forme des données Reddit change.
Cet extrait de code est assez simple : il montre comment accepter une entrée dans une action JavaScript Zapier à l’aide de la variable inputData et la fournir également en sortie :
La représentation sous forme de tableau n’est pas strictement nécessaire, mais elle permet à Zapier de savoir qu’il doit répéter plusieurs fois les actions suivantes, en utilisant chaque charge utile (ou valeur d’objet) du tableau.
Voici une capture d’écran à titre de référence :

Envoyer un message dans un canal Slack
Nous voici à la dernière étape de la création de l’automatisation Reddit avec un bot Slack : publier dans un canal Slack le message traité lors des étapes précédentes.
Pour ce faire, assurez-vous d’avoir authentifié Zapier en tant qu’application d’intégration générale dans Slack et de lui avoir accordé l’accès à la liste de vos canaux Slack ainsi que les autres autorisations nécessaires, comme la publication de messages.
Ajoutez une nouvelle action Zapier et choisissez Slack comme Application. Dans le champ Event, choisissez Send Channel Message. Ensuite, sélectionnez Choose Account et, idéalement, connectez votre compte Slack pour que les messages soient envoyés depuis votre profil. Vous pouvez aussi utiliser le compte d’intégration Slack comme utilisateur générique.
À ce stade, l’écran devrait ressembler à ceci :

Passez ensuite à Set up action et saisissez les informations suivantes :
Le canal où publier le message (indiqué par l’option Channel dans l’interface)
L’option Message Text, qui devrait être préremplie avec le champ
Messagede l’action Zapier précédente
La configuration devrait ressembler à ceci :

Enfin, vous pouvez lancer un test manuel de ce workflow Zapier. Le résultat devrait ressembler à ceci :

Après avoir vérifié et testé le workflow Zapier, cliquez sur le bouton Publish Zap pour activer le workflow et lancer l’automatisation selon le calendrier récurrent défini comme déclencheur.
Comment connecter l’API Slack à d’autres API ?
Avec Zapier, vous pouvez créer des API de bot Slack qui vont au-delà de l’envoi de messages dans un canal. Voici quelques idées de projets JavaScript pour un bot Slack avec Zapier : envoyer un message Slack lorsqu’une ligne Google Sheets est mise à jour, publier dans un canal Slack les événements Google Calendar à venir, partager les nouvelles mentions Twitter dans Slack, ou simplement mettre à jour votre statut Slack pendant vos événements Google Calendar ou selon d’autres activités que vous pouvez connecter aux API Zapier.
Vous avez créé une intégration Reddit avec Zapier !
Aujourd’hui, nous avons appris à créer un bot Slack qui publie automatiquement dans un canal les actualités Reddit les plus tendance, à partir d’un point de terminaison JSON accessible au public ou d’une clé API OAuth Reddit.
Pour conclure, si vous créez une intégration de bot Slack reposant sur du code JavaScript, veillez à suivre les bonnes pratiques de sécurité JavaScript et à comprendre les risques associés, afin de ne pas exposer votre entreprise à des problèmes de sécurité.



