Einen Slack-Bot mit Zapier und JavaScript erstellen, um aktuelle Reddit-Themen abzurufen
30. August 2022
0 Min. LesezeitReddit ist eine gute Anlaufstelle, um bei Neuigkeiten rund um die Webentwicklung auf dem Laufenden zu bleiben. Wenn es Ihnen wie mir geht, folgen Sie wahrscheinlich Subreddits wie r/node oder r/javascript. Kürzlich habe ich eine großartige Möglichkeit entdeckt, mit meinen JavaScript-Kenntnissen eine Zapier-Reddit-Integration zu erstellen – so kann ich aktuelle Reddit-Beiträge im Channel meines Teams teilen.
In diesem Artikel erfahren Sie:
Wie Sie eine Slack-Bot-Integration erstellen.
Wie Sie in Zapier Trigger- und Aktions-Workflows einrichten, um Nachrichten in einem Slack-Channel zu posten.
Wie Sie mit einem Reddit-API-Schlüssel über native Reddit Access Tokens und Refresh Tokens auf Beiträge zugreifen.
Wie Sie über den anonymen JSON-Endpunkt auf Reddit-Beiträge zugreifen.
JavaScript-Code schreiben (kompatibel mit Node.js Version 10, beachten Sie: Diese Version hat das Supportende erreicht), um mit dem HTTP-Client
node-fetchReddit-Informationen abzurufen.
Was können Sie mit einem Slack-Bot tun?
In diesem Tutorial erfahren Sie, wie Sie einen Slack-Bot in JavaScript schreiben. Das umfangreiche API-Ökosystem von Zapier ermöglicht es Ihnen jedoch, viele weitere Informationsquellen mit der Slack-Bot-API zu verbinden. Dieses Slack-Bot-Tutorial konzentriert sich zwar auf JavaScript, aber Sie können mit den HTTP-Webhooks von Zapier auch eine Slack-Bot-Node.js-Anwendung schreiben, wenn Sie Ihre Node.js-Anwendungen in der Cloud hosten.
Eine Zapier-Reddit-Integration erstellen, um neue aktuelle Themen zu verarbeiten
Was ist Zapier?
Zapier ist eine Automatisierungsplattform, mit der Sie viele andere Plattformen integrieren können, um sie miteinander zu verbinden und einen Workflow zu erstellen. Zapier wird vor allem für APIs und native Integrationen genutzt, sofern diese im Zapier Marketplace verfügbar sind. Besonders leistungsfähig ist die Plattform jedoch, weil sie Ihnen Rohdaten aus den Integrationspunkten bereitstellt und Sie den Workflow-Prozess mithilfe von Code anpassen können.
Für die Slack-Bot-Integration verwenden wir Zapier. Die Plattform bietet bereits eine native Integration mit Slack. Das bedeutet, dass wir unseren Bot weder auf einem dedizierten Server hosten noch eine weitere separate Slack-Bot-Integration erstellen müssen.
Nachdem wir die Slack-Bot-Integration mit Zapier eingerichtet haben, sind die nächsten Schritte:
Einen Zeitplan für die Ausführung der Integration festlegen. Dabei kann es sich um einen wiederkehrenden Zeitplan handeln, nach dem die Zapier-Aufgabe ausgelöst und die Verarbeitung gestartet wird.
Eine benutzerdefinierte JavaScript-Code-Aufgabe in Zapier einrichten, um die für uns interessanten aktuellen Themen über den JSON-Endpunkt von Reddit abzurufen.
Die aktuellen Themen nach unseren Wünschen formatieren und sie über die integrierte native Slack-Bot-Integration von Zapier an einen Slack-Channel senden.
In der Zapier-Workflow-Oberfläche sieht der gesamte Prozess so aus:

Der Trigger: jede Woche über Schedule by Zapier
Zunächst richten wir den wiederkehrenden Zeitplan für den Zapier-Workflow ein. Ich habe mich dafür entschieden, ihn jeden Montag um 8:00 Uhr UTC auszuführen:

Wie automatisieren Sie Slack-Nachrichten?
In diesem Slack-Bot-Tutorial verwenden wir einen zeitgesteuerten Trigger von Zapier. Die Zapier-API-Plattform bietet jedoch viele weitere Trigger, mit denen sich Slack-Automatisierungen auslösen lassen. Dazu gehören beispielsweise Twitter-Erwähnungen, Google-Sheets-Aktualisierungen, Änderungen an Google-Kalenderterminen und RSS-Feed-Aktualisierungen. Diese und weitere Optionen können Sie in Ihre Slack-Bot-JavaScript-Automatisierung einbinden. Sie können sogar Snyk-Sicherheitsbenachrichtigungen automatisieren, um Schwachstellen in Ihrem Team nachzuverfolgen!
Aktion: JavaScript mit Code by Zapier ausführen
Nachdem wir den zeitbasierten Trigger für den Workflow festgelegt haben, können wir Aktionen erstellen, die bestimmte Aufgaben ausführen. Mit der Zapier-Integration können wir die in diesen Aufgaben verarbeiteten Daten verbinden und an die nächste Aktion in der Kette weitergeben.
Wählen Sie als Aktion den Typ Run JavaScript in Code by Zapier. Wählen Sie in der Konfiguration unter Event die Option Run JavaScript. Die erste Einrichtung sollte so aussehen:

Öffnen Sie anschließend die Konfiguration Setup up action. Hier fügen wir den relevanten JavaScript-Code ein, der Informationen zu unseren aktuellen Themen über den Reddit-API-Endpunkt abruft.
So verwenden Sie einen Reddit-API-Schlüssel
Es gibt verschiedene Möglichkeiten, Reddit-Neuigkeiten abzurufen. Wir stellen Ihnen zwei Möglichkeiten vor, um Updates zu interessanten Reddit-Threads zu erhalten:
Einen Reddit-API-Schlüssel verwenden, für den Sie sich mit einem Reddit-Benutzerkonto registrieren müssen.
Einen öffentlich zugänglichen Reddit-API-Endpunkt verwenden.
Wenn Sie lediglich Lesezugriff auf Subreddits und aktuelle Beiträge benötigen, verwenden Sie den einfacheren Workflow ohne Reddit-oAuth-API. Springen Sie dazu zum zweiten Teil dieses Kapitels zum Reddit-API-Zugriff.
Einen Reddit-API-Schlüssel registrieren
Rufen Sie zunächst die Reddit API application preferences auf und klicken Sie unten auf dem Bildschirm auf Create an app. Geben Sie anschließend die Informationen zu Ihrem API-Anwendungsfall ein. Legen Sie als Anwendungstyp webapp fest und geben Sie eine Redirect-URI an, über die die Access Tokens verarbeitet werden.

Anschließend erhalten Sie eine ClientID und ein ClientSecret, mit denen Sie API-Aufrufe durchführen können. Falls Sie unsicher sind, wie Sie die Reddit-API abfragen und den Reddit-oAuth-Workflow durchlaufen, lesen Sie weitere Einführungs-Tutorials, zum Beispiel dieses zum Scraping von Reddit.
Beachten Sie, dass Sie die Reddit’s API Access terms lesen sollten, um sich mit den Regeln und Bedingungen für den Zugriff auf die Reddit-API vertraut zu machen.
Reddit-API-JavaScript-Beispiel
Wir konzentrieren uns darauf, interessante Reddit-Threads mit JavaScript abzurufen. Dafür benötigen wir die oben erwähnten Anmeldedaten ClientID und ClientSecret sowie den Wert refresh_token. Dieser ist vorhanden, wenn Sie sich für die Erstellung eines permanenten Reddit-oAuth-Access-Tokens entschieden haben.
Das folgende Beispiel zeigt, wie Sie mit nativem JavaScript-Code und einem Reddit-API-Schlüssel Beiträge eines Subreddits abfragen. Ersetzen Sie den Text ABCD im folgenden Codeausschnitt durch die oben genannten Reddit-Anmeldedaten, damit der Code ordnungsgemäß funktioniert:
Dieser Reddit-API-JavaScript-Codeausschnitt verwendet den refresh_token, um die Reddit-API abzufragen und ein access_token anzufordern. Sobald wir das Reddit-API-Access-Token erhalten haben, können wir eine neue HTTP-Anfrage erstellen, die aktuelle Reddit-Beiträge aus dem Subreddit r/node abruft. Zum Schluss durchlaufen wir alle Beitragsdaten und erstellen eine Nachrichtenzeichenfolge, die an die nächste Aktion weitergegeben wird.
Zwei wichtige Anmerkungen zum vorherigen Codeausschnitt:
Beachten Sie, dass die korrekte und aktuelle API-Abfrage der Reddit-Daten den in
params2verwendeten Abfrageparametertnutzt. In einigen veralteten Tutorials und Anleitungen wird jedoch weiterhintimeerwähnt.Ein weiterer interessanter Punkt: Da Zapier uns auf eine alte Version von
node-fetchbeschränkt, die mit einer Node.js-Runtime-Version ohne Support (Node.js v10) ausgeführt wird, können Sie das URL-Objekt direkt für HTTP-Anfragen verwenden:js const url2 = new URL('https://oauth.reddit.com/r/node/top'); const res2 = await fetch(url2, settings2);
Weitere API-Operationen finden Sie in der vollständigen und aktuellen Reddit-API-Dokumentation. Dort sind alle verfügbaren Endpunkte zu Reddit-Konten, Verlauf, Subreddit-Moderation und weiteren Funktionen aufgeführt.
Reddit-Informationen über den öffentlichen JSON-Endpunkt abfragen
Bevor wir mit der nächsten JavaScript-Zapier-Aktion fortfahren, sehen wir uns kurz an, wie Sie eine Reddit-API abfragen können, ohne sich per oAuth oder mit einem anderen API-Schlüssel zu authentifizieren.
Reddit stellt Informationen zu Subreddit-Threads im JSON-Format über den folgenden öffentlichen Endpunkt bereit, für den keine Authentifizierung erforderlich ist:
Sie können auch die Top-Beiträge dieses Subreddits abrufen und einen Zeitraum angeben, indem Sie die folgenden Abfrageparameter hinzufügen:
Die JSON-Antwort von Reddit sieht etwa so aus:
Die JavaScript-Antwort der Zapier-Aktion formatieren
Unabhängig davon, wie Sie die Reddit-JSON-Daten abgerufen und formatiert haben, müssen wir sie für die nächste Slack-Bot-Integration aufbereiten. Sie können dies vollständig in der vorherigen JavaScript-Zapier-Aktion erledigen oder als eigene Zapier-Aktion ausführen. So können Sie sie wiederverwenden, falls sich die Reddit-Formatierungsmethode ändert.
Der Codeausschnitt ist recht einfach. Er zeigt, wie Sie in einer JavaScript-Zapier-Aktion über die Variable inputData Eingaben entgegennehmen und diese auch als Ausgabe bereitstellen:
Die Darstellung als Array ist nicht unbedingt erforderlich. So weisen Sie Zapier jedoch an, die nachfolgenden Aktionen nach dieser Aktion für jedes Payload-Element (oder jeden Objektwert) im Array mehrfach auszuführen.
Der folgende Screenshot dient als Referenz:

Eine Channel-Nachricht in Slack senden
Nun sind wir beim letzten Schritt der Reddit-Automatisierung mit einem Slack-Bot angekommen: Wir posten die in den vorherigen Schritten verarbeitete Nachricht in einem Slack-Channel.
Authentifizieren Sie Zapier dazu als allgemeine Integrationsanwendung in Slack und erteilen Sie der Anwendung Zugriff auf Ihre Slack-Channels sowie weitere Berechtigungen, zum Beispiel zum Posten von Nachrichten.
Fügen Sie eine neue Zapier-Aktion hinzu und wählen Sie unter Application die Option Slack. Wählen Sie im Feld Event die Option Send Channel Message. Rufen Sie anschließend die Option Choose Account auf und geben Sie idealerweise Ihr Slack-Konto an, damit die Nachrichten über Ihr Benutzerprofil gesendet werden. Alternativ können Sie das Slack-Box-Integrationskonto als allgemeinen Benutzer verwenden.
An diesem Punkt sollte es etwa so aussehen:

Rufen Sie anschließend Set up action auf und geben Sie die folgenden Informationen ein:
Den Channel, in dem die Nachricht gepostet werden soll (in der Benutzeroberfläche mit der Option Channel bezeichnet)
Die Option Message Text, die bereits mit dem Feld
Messageder vorherigen Zapier-Aktion ausgefüllt sein sollte
Die Einrichtung sollte etwa so aussehen:

Zum Schluss können Sie einen manuellen Testlauf dieses Zapier-Workflows starten. Das Ergebnis sollte etwa so aussehen:

Nachdem Sie den Zapier-Workflow überprüft und getestet haben, klicken Sie auf die Schaltfläche Publish Zap. Dadurch wird der Workflow aktiviert und anhand des von uns festgelegten wiederkehrenden Zeitplans ausgeführt.
Wie verbinden Sie die Slack-API mit anderen APIs?
Mit Zapier können Sie Slack-Bot-APIs erstellen, die weit mehr können, als nur eine Channel-Nachricht zu senden. Hier sind einige Ideen für Slack-Bot-JavaScript-Anwendungen, die Sie mit Zapier umsetzen können: eine Slack-Nachricht senden, wenn eine Zeile in einem Google Sheet aktualisiert wird; bevorstehende Google-Kalendertermine in einem Slack-Channel teilen; neue Twitter-Erwähnungen in Slack teilen oder Ihren Slack-Status während Google-Kalenderterminen oder abhängig von anderen Aktivitäten aktualisieren, die Sie mit Zapier-APIs verbinden können.
Sie haben eine Zapier-Reddit-Integration erstellt!
Heute haben wir gelernt, wie Sie einen Slack-Bot erstellen, der automatisch eine Nachricht mit den aktuell beliebtesten Reddit-News in einem Channel postet – mithilfe eines öffentlich zugänglichen JSON-Endpunkts oder eines Reddit-oAuth-API-Schlüssels.
Abschließend noch ein Hinweis: Wenn Sie eine Slack-Bot-Integration mit JavaScript-Code erstellen, sollten Sie die relevanten JavaScript-Sicherheitspraktiken befolgen und die damit verbundenen Risiken kennen, damit Sicherheitsprobleme Ihr Unternehmen nicht gefährden.
