So erstellen Sie einen Slack-Bot mit Mendix | Mendix

Direkt zum Inhalt

So erstellen Sie einen Slack-Bot mit Mendix

So erstellen Sie einen Slack-Bot mit Mendix

Hallo zusammen und herzlich willkommen. Als Entwickler-Evangelist, der für Mendix, ein großer Teil meiner Rolle hier besteht darin, viel Zeit damit zu verbringen, die Mendix Community-Slack-Kanal (Klicken Sie hier!).

Natürlich haben wir ein paar tolle Tools in unserem Arbeitsbereich installiert, was mich zum Nachdenken brachte – was genau gehört zur Erstellung eines Slack-Bots und kann dies mit Mendix allein?

Nach einer Online-Recherche stellte sich heraus, dass jedes Beispiel, das ich fand, extrem kompliziert war und umfangreiche Programmierkenntnisse in Java, Python oder Javascript erforderte. Obwohl ich diesen Weg hätte einschlagen können, war ich fest entschlossen, dies auf eine Low-Code-Art zu tun. Ich bin jedoch froh, dass ich durchgehalten habe, denn jetzt kann ich Ihnen allen sagen, wie einfach es eigentlich ist und dass auch Sie alle einen Slack-Bot erstellen können, indem Sie Mendix und sonst nichts!

Was machen wir heute?

In diesem Tutorial erstellen wir einen Slack-Bot, der Nachrichten über eine RESTful-API senden kann. Er wird auch Ereignisse innerhalb des Kanals abonnieren, sodass der Bot auf Erwähnungen oder bestimmte Schlüsselwörter antworten kann, die in einem Kanal gesendet werden.

Erste Schritte

Bevor wir beginnen, stellen Sie sicher, dass Sie bei Slack angemeldet sind und einen Slack-Arbeitsbereich mit einem Kanal eingerichtet haben, zu dem Sie auch den Bot hinzufügen können. Da Slack außerdem Nachrichten an die veröffentlichten REST-Dienste Ihrer App sendet, empfehle ich Ihnen, während der Entwicklung Ihre App lokal zu testen, ein Tunneling-Tool zu verwenden, um Ihren lokalen Host dem Web zugänglich zu machen (ich verwende NGROK dafür).

Einrichten des Bots auf Slack

Um zu beginnen, gehen Sie zu https://api.slack.com/apps?new_classic_app=1 und klicke auf "Neue App erstellen".

Wählen "Von Grund auf neu” und geben Sie Ihrem Bot einen Namen. Ich werde einen neuen erstellen und ihn Message Bot nennen. Wählen Sie den Slack-Arbeitsbereich aus, den Sie für die Entwicklung Ihrer App erstellt haben, und klicken Sie auf „App erstellen".

Sobald Ihre App erstellt wurde, können Sie zu „OAuth und Berechtigungen” und was wir hier wollen, ist ein Token für unseren Bot, also unter „OAuth-Token für Ihren Arbeitsbereich“ sofort klicken „Am Arbeitsplatz installieren“. Jetzt wird es heißen, dass wir einen Bereich für unseren Bot hinzufügen müssen. Gehen Sie auf der Seite nach unten und Sie werden einen Abschnitt mit dem Titel „Bot-Token-Umfang”. Das ist, was wir brauchen, also klicken Sie auf „„einen OAuth-Bereich hinzufügen“, was wir wollen, ist Chat:schreiben, oder für öffentliche Kanäle Du kannst hinzufügen Chat:schreiben.öffentlich.

Dadurch erhält der Bot die Berechtigung, tatsächlich Nachrichten in einem Chat zu posten. Je nachdem, was Sie versuchen, müssen Sie möglicherweise weitere Bereiche hinzufügen. Wenn Sie also auf Fehler stoßen, sehen Sie sich diese an. So können Sie herausfinden, welche Bereiche für die Aktionen erforderlich sind, die der Bot ausführen soll.

Gehen Sie nun zurück zu OAuth und klicken Sie auf „Am Arbeitsplatz installieren“ erneut. Klicken Sie dann auf „Zulassen“ und es wird ein Bot-Token für Sie generiert.

Sie erkennen, dass es sich um ein Bot-Token handelt, wenn es etwa so beginnt: „ xoxb-Ihr_Token_Wert“.

Sobald Sie das haben, können wir es zusammen mit der Kanal-ID verwenden, um als Bot eine Nachricht an den Kanal zu senden. Zu diesem Zweck habe ich eine einfache App vorbereitet, und was ich hier erstellen werde, ist, hier eine Methode hinzuzufügen, um als Bot mithilfe der Slack-API eine Nachricht zu senden

Senden von Nachrichten als Bot

Dieser Build funktioniert in fast jedem herkömmlichen Programmier-Stack, der HTTP-Methoden oder REST-Aufrufe verwenden kann (Java, JavaScript, Python usw.) – Sie können ihn sogar ausprobieren in Postman bevor Sie mit der Entwicklung Ihrer App beginnen. Alles, was wir tun müssen, ist, ein Authentifizierungssystem für unsere App mit Slack zu erstellen, dann müssen wir die API zum Posten von Nachrichten integrieren und dann müssen wir einen REST-Endpunkt veröffentlichen, über den Slack Nachrichten für Ereignisse im Kanal posten kann

Ereignisse können Nachrichten, Reaktionen, Erwähnungen im Kanal und mehr sein. Stellen Sie sich Slack-Ereignisse als ähnlich einem Web-Hook vor.

Um Ihre Nachricht an den Dienst zu senden, müssen Sie den Endpunkt des Dienstes angeben. In diesem Fall ist es https://slack.com/api/chat.postMessage

Da der Endpunkt den Typ der HTTP-Methode als POST beschreibt, müssen wir sicherstellen, dass wir auch hier POST verwenden.

Sie benötigen außerdem einige Header. Wir möchten einen Header hinzufügen für Inhaltstyp und das muss sein 'Anwendung/json‘Als nächstes brauchen wir einen weiteren Header namens Genehmigung, und hier können wir das Token unseres Bots verwenden, das wir zuvor erhalten haben. Der Wert dieses Headers sollte 'Träger', dann ein Raum ' ', und dann deine Token-Wert.

Um nun eine Nachricht zu senden, müssen wir einen JSON-Text bereitstellen, da dies eine POST-HTTP-Methode ist. Hier ist eine vereinfachte Struktur, die wir verwenden werden. Sie können die vollständige API-Dokumentationsseite einsehen. werden auf dieser Seite erläutert.

{
  “channel”:”{1}”,
  “text”:”{2}”
}

Beachten Sie, dass Sie in Studio Pro möglicherweise fügen Sie eine zusätzliche geschweifte Klammer { hinzu vor der Anfrage.

Diese Anfrage wurde auf das Wesentliche reduziert – sie hat nur einen Kanal, der eine Zeichenfolge ist, und einen Text, der ebenfalls eine Zeichenfolge ist. Es gibt viele andere Optionen, die Sie verwenden können, wie z. B. Anhänge und Symbole und viele andere coole Dinge. Schauen Sie sich also die Dokumentationsseiten an und probieren Sie ein bisschen herum. Sie können sehen, dass ich hier Platzhalter verwende, nur um meine Werte aus dem Mikrofluss mit dem Standard in die Anfrage zu übergeben Mendix REST-Aktion.

Es sendet uns eine Antwort zurück, aber das bearbeite ich hier nicht. Stattdessen können Sie Ihre App ausführen und testen. Wenn sie erfolgreich ist, sollten Sie beim Aufrufen dieses Mikroflusses eine Nachricht im Kanal sehen!

Um das Senden von Nachrichten zu testen, benötigen Sie Ihre Kanal-ID, die Sie aus der URL des Slack-Kanals erhalten (der letzte Wert nach dem letzten '/' in der URL für Ihren Kanal). Anschließend können Sie Ihre erste Nachricht als Ihr Bot senden! Denken Sie daran, dass Sie zuerst sicherstellen müssen, dass Ihr Bot zum Kanal hinzugefügt wird. Verwenden Sie dazu einfach die Bots @Erwähnung im Kanal und fügen Sie sie hinzu.

Ihre Nachrichten sollten nun von Ihrem Mendix App zu Slack und erscheinen im Kanal, als ob der Bot sie gesendet hätte, wann immer Sie diesen Mikroflow ausführen.

Abonnieren Sie Ihre App für Ereignisse im Kanal

Damit Slack Nachrichten an unsere Mendix App müssen wir Ereignisse in den Einstellungen unseres Slack-Bots aktivieren. Durch Aktivieren dieser Funktion veröffentlicht Slack Updates an den veröffentlichten REST-Dienst unserer App. Wir können dies verwenden, um Logik zu implementieren, um verschiedene Arten von Ereignissen zu verarbeiten, die ein Benutzer bei Verwendung des Kanals auslösen kann. Sie können bestimmte Ereignisse abonnieren, für die Sie bestimmte Endpunkte einrichten können, oder Sie können alle Updates an denselben Endpunkt veröffentlichen und Ihre eigene Logik für die Verarbeitung jedes einzelnen Ereignisses erstellen. Dies kann beispielsweise gut verwendet werden, um den Bot etwas tun zu lassen, wenn jemand auf eine Nachricht reagiert oder wenn ein neuer Benutzer einem Kanal beitritt. Für meinen Build habe ich nur einen Ereignisendpunkt hinzugefügt und dann die gesamte Logik im Mikrofluss verarbeitet, der vom veröffentlichten REST-Dienst in meinem aufgerufen wird. Mendix App

Gehen Sie dazu zu „Event Subscriptions|“ in api.slack.com.

Schalten Sie „Ereignisse aktivieren“ ein, und Sie sehen ein Feld für die Anforderungs-URL. An diesem Punkt müssen wir mit dem zuvor erwähnten Tool einen Tunnel öffnen. Das Tool NGROK öffnet eine sichere Verbindung von Ihrem lokalen Host und stellt sie dem Web auf sichere Weise als verfügbaren Endpunkt zur Verfügung.

Öffnen Sie Ihren Datei-Explorer und suchen Sie die heruntergeladene Datei ngrok.exe. Öffnen Sie diese EXE nun in Ihrem Terminal oder in der Eingabeaufforderung. Sie können auch einfach auf die EXE-Datei klicken, um sie in Ihrem Terminal zu öffnen. Geben Sie dann „ngrok http {IHRE MENDIX-APP-PORTNUMMER}", ich verwende normalerweise Port 8080 als Standard Mendix app config, aber dies funktioniert mit jeder beliebigen Portnummer, zum Beispiel „ngrok http5000” würde funktionieren, solange Ihr Mendix Die App ist auch so eingestellt, dass sie auf Port 5000 ausgeführt wird.

Drücken Sie die Eingabetaste und ngrok öffnet den Endpunkt. Sie sollten ungefähr Folgendes sehen:

Sie sollten wissen, dass dadurch sowohl HTTP- als auch HTTPS-Endpunkte geöffnet werden. Slack erfordert die Verwendung von HTTPS.

Verarbeiten von Ereignissen in Mendix

Wir haben jetzt einen Live-Endpunkt, den wir in Slack verwenden können, aber wir müssen darauf zurückkommen, nachdem wir unseren veröffentlichten REST-Dienst eingerichtet haben.

Wechseln Sie zurück zu Studio Pro, klicken Sie mit der rechten Maustaste in Ihren Projekt-Explorer und wählen Sie unter „Andere“ die Option zum Hinzufügen eines veröffentlichten REST-Dienstes.

Geben Sie Ihrem Dienst einen Namen, ich habe meinen „SlackBot“ genannt, und klicken Sie dann auf OK

Fügen Sie als nächstes dem Dienst eine Ressource namens „SlackEvent“ hinzu und klicken Sie auf OK

Fügen Sie dann dem Dienst eine Operation hinzu. Hier definieren wir die Methode unserer API (GET, POST, PUT, PATCH, DELETE), konfigurieren ihren eigenen Operationspfad und konfigurieren einen Mikrofluss, um die Logik für den Endpunkt zu handhaben.

Es ist nicht erforderlich, einen Operationspfad festzulegen. Standardmäßig sieht der Endpunkt etwa so aus:

https://{LocalHost}/rest/{Service_Name}/{Version_Number}/{Resource_Name}/{Operation_Path}

Hier ist ein Beispiel, wie Sie Ihren Vorgang einrichten könnten:

Wir haben jetzt eine gültige URL, die Anfragen annehmen kann, aber es gibt noch mehr zu tun, bevor wir alle Ereignistypen verarbeiten können … Authentifizierung.

Authentifizierung

Am Anfang war ich hier etwas verwirrt, aber eigentlich ist es ziemlich einfach. Wenn wir den Ereignisendpunkt in Slack hinzufügen, sendet deren API eine Herausforderung an den Endpunkt mit einem „Challenge“-Wert im Anforderungstext, wie hier gezeigt:

{
  "token":"your_token",
  "challenge":"your_ChallangeValue",
  "type":"url_verification"
}

Alles, was Sie tun müssen, ist, ihnen diese Challenge-Zeichenfolge zu Beginn Ihres Flows zurückzusenden, wenn er zum ersten Mal aufgerufen wird.

Festlegen der RequestURL für Ereignisse in Slack

Wenn alles richtig ist, können wir eine URL formulieren, die wir auf der Seite „Slack Events Subscriptions“ hinzufügen können. Die URL sollte eine Kombination aus Ihrem NGROK-https-Endpunkt sein, und der Rest ist der Service-Endpunkt für Ihren veröffentlichten Service.

Etwas wie: https://{NGROK_HTTPS_URL}/{Your_Published_Rest_Operation}

So sah meins am Ende aus:

https://ff98-86-181-134-55.ngrok.io/rest/slackbot/v1/SlackEvent/Event

Denken Sie daran, dass NGROK nur für die Entwicklung gedacht ist und daher alle 2 Stunden eine Zeitüberschreitung auftritt. Danach müssen Sie eine neue URL für Ihren lokalen Host generieren. Sobald Sie in der Produktion sind, ist dies nicht mehr erforderlich. Sie können einfach Ihre Cloud-URL verwenden.

Sie können diesen Wert als Anforderungs-URL auf der Ereignisseite festlegen. Wenn Sie erfolgreich waren, teilt Ihnen Slack mit, dass der Endpunkt überprüft wurde.

Wenn etwas schief geht, können Sie Ihren Microflow wie gewohnt debuggen, indem Sie REST-Nutzung und REST-Veröffentlichung Protokollebenen können Ihnen über die Konsole möglicherweise auch dabei helfen, mehr Einblick in die Störungen zu erhalten.

Das Letzte, was wir erledigen müssen, bevor Sie die Aktionen Ihres Bots anpassen können, ist sicherzustellen, dass er sich selbst erkennt. Andernfalls kann eine Endlosschleife entstehen. Der Bot kann sich selbst auslösen, wenn er eine Nachricht an die Gruppe sendet, wenn wir seine eigene Aktivität im Kanal nicht herausfiltern.

Dazu müssen wir die Anforderungsnutzlast importieren, die Slack dem REST-Dienst unserer App zur Verfügung stellt. Die Nutzlast sieht folgendermaßen aus:

{
 "token":"dKyT4vmA1NJLt6vq8o1WurMd",
 "team_id":"T02LUP42T19",
 "api_app_id":"A02MJE1059N",
 "event":{
   "bot_id":"B02NK4L1XHN",
   "type":"message",
   "text":"Hello from Mendix",
   "user":"U02MEPHFY2K",
   "ts":"1637273612.003700",
   "team":"T02LUP42T19",
   "bot_profile":{
    "id":"B02NK4L1XHN",
    "deleted":false,
    "name":"message bot",
    "updated":1637253238,
    "app_id":"A02MEP8D37Z",
    "icons":{
     "image_36":"https://a.slack-edge.com/80588/img/plugins/app/bot_36.png",
     "image_48":"https://a.slack-edge.com/80588/img/plugins/app/bot_48.png",
     "image_72":"https://a.slack-edge.com/80588/img/plugins/app/service_72.png"
       },
      "team_id":"T02LUP42T19"
     },
    "channel":"C02LRPR0XGD",
    "event_ts":"1637273612.003700",
    "channel_type":"channel"
   },
   "type":"event_callback",
   "event_id":"Ev02MGFCNHP1",
   "event_time":1637273612,
   "authorizations":[
    {
     "enterprise_id":null,
     "team_id":"T02LUP42T19",
     "user_id":"U02LUPJ8T4J",
     "is_bot":true,
     "is_enterprise_install":false
    }
  ],
  "is_ext_shared_channel":false,
  "event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUMDJMVVA0MlQxOSIsImFpZCI6IkEwMk1KRTEwNTlOIiwiY2lkIjoiQzAyTFJQUjBYR0QifQ"
}

Erstellen Sie eine JSON-Struktur, fügen Sie das JSON ein und klicken Sie auf Rfrisch Im Abschnitt „Struktur“ können Sie zuvor auf „OK“ klicken, um das Fenster zu schließen.

Erstellen Sie als Nächstes eine Importzuordnung und wählen Sie unter Schemaquelle die von Ihnen erstellte JSON-Struktur aus. Stellen Sie sicher, dass alle Felder ausgewählt sind, um alle gewünschten Details zu erhalten, oder wählen Sie aus, was Sie benötigen.

Klicken Sie auf „OK“, um das Fenster zu schließen, und wählen Sie dann oben links im Zuordnungseditor die Option „Automatisch zuordnen“.

Sie sollten jetzt so etwas sehen:

Verwenden Sie abschließend diese Zuordnung, um die HTTP-Anforderung zu importieren, und fügen Sie eine Prüfung hinzu, um festzustellen, ob es sich bei dem Benutzer, der die Nachricht gepostet hat, um einen Bot handelt. Wenn dies der Bot ist, tun Sie nichts und geben Sie leer zurück.

Sie können nun alle Ereignisse auf die von Ihnen gewünschte Weise behandeln. Meine schnelle Vorgehensweise hierfür war die Verwendung von Enthält und Finde Schlüsselwörter, um den Inhalt der Nachricht zu überprüfen. Mit dieser Methode können Sie so viele exklusive Splits hinzufügen, wie Sie möchten. Auf diese Weise können Sie einen Konversationsbaum im Mikrofluss erstellen, eine einfache Möglichkeit, Dinge zu tun (Sie könnten dies jedoch noch weiter ausbauen und jede Antwort in der Datenbank speichern, wodurch dieses Setup zur Laufzeit konfigurierbar wäre). Um diese Antwort zu senden, verwenden Sie einfach die PostMessage-API erneut, die wir zuvor zum Senden von Testnachrichten verwendet haben.

So sieht mein Beispiel aus

Slash-Befehle

Was zum Teufel sind Schrägstrichbefehle? Einfach ausgedrückt ähneln sie Web-Hooks. Wenn der Benutzer ein bestimmtes Schlüsselwort (Setup in Slack) mit einem vorangestellten Schrägstrich „/“ eingibt, sendet Slack Updates an einen eindeutigen Endpunkt.

Das ist wirklich der größte Unterschied zwischen Ereignissen und Schrägstrichbefehlen. Fügen Sie einfach eine neue Methode zu Ihrem veröffentlichten REST-Dienst hinzu. In meinem Beispiel habe ich es einfach gehalten. Wenn der Benutzer /ping eingibt, antwortet der Bot mit „pong“. Ein bisschen wie „Hallo Welt“, ich weiß, aber ich habe hier hauptsächlich herumgespielt.

Fügen Sie einen neuen Endpunkt hinzu und geben Sie als Betriebspfad „Ping“ ein. Auch dies ist eine POST-Methode.

Legen Sie dann im Mikrofluss, der die Logik verarbeitet, einfach das Inhaltsattribut für die Antwort auf „Pong“ fest.

Gehen Sie schließlich in Slack im linken Menü zu Slash-Befehlen und klicken Sie auf „Neuen Befehl erstellen“.

Ihr Endpunkt ist wieder eine Kombination aus der URL von NGROK und der URL Ihrer HTTP-Methode.

Alles fertig

Glückwunsch, Sie haben es bis zum Ziel geschafft. Sie können jetzt Ihre App testen und Ihren Bot kennenlernen! Vergessen Sie nicht, dass Sie Ihren Bot zum Slack-Kanal hinzufügen müssen, damit er Updates erhält, die an den Ereignisendpunkt gesendet werden. Senden Sie einfach @YourBotName in Slack und Sie werden aufgefordert, den Bot für Sie hinzuzufügen. Da die API von Slack so viele andere Funktionen bietet, lassen Sie es mich bitte wissen, wenn Sie einen Artikel zu etwas Speziellerem möchten.

Bevor Sie gehen, hier ein kurzes Gespräch, das ich mit meinem Bot geführt habe –

Viel Spaß beim Codieren!

Wählen Sie Ihre Sprache