Entspannung ist Entwickelt sich schnell zum neuen Industriestandard für Teamkommunikation. existieren Tatsächlich ist es so beliebt, dass ich Slack tippe Als ich Google wie erwartet eingab, war das erste Ergebnis die Definition dieses Wortes. aus dem Wörterbuch. Die Website von Slack liegt knapp dahinter!
Das ist Fast unbekannt für das häufigste Wort im englischen Wörterbuch. Normalerweise folgen auf die Definitionen von Google Links zu mehreren Top-Wörterbüchern Webseite.
Darin Im Grunde ist Slack ein Messaging-System. Es ermöglicht direkte Nachrichtenübermittlung an Teams Mitgliedschaft und Erstellung von Kanälen (privat oder öffentlich), um Echtzeit zu ermöglichen Teamkommunikation und Zusammenarbeit. Erfahren Sie mehr Weitere Informationen zu Slack finden Sie unter Slack Merkmale.
Zu dieser Zeit Irgendwann fragen Sie sich vielleicht, wo Node.js ins Spiel kommt. Wie ich bereits erwähnt habe, ist Slack im Grunde genommen ein Messaging-System. Es ist jedoch unendlich erweiterbar Mass angefertigt. Slack bietet ein sehr flexibles System zur individuellen Anpassung Ihrer Teamintegration inklusive:
Dabei In diesem Artikel werde ich zeigen, wie man mit Node.js einen Slack-Bot erstellt Kann zur Slack-Konfiguration Ihres Teams hinzugefügt werden.
Entspannung Die Aufgabe des Bots besteht darin, von Slack gesendete Ereignisse zu empfangen und zu verarbeiten. Es wird eine große Anzahl von Ereignissen gesendet Für Ihren Bot kommt hier Node.js ins Spiel. wir müssen uns entscheiden, es nicht zu tun Kümmern Sie sich einfach darum, welche Ereignisse behandelt werden sollen und wie mit jedem einzelnen Ereignis umzugehen ist.
Für Einige häufige Ereignisse, die der Bot verarbeiten wird, sind beispielsweise:
member_joined_channel
member_left_channel
消息
Dabei In diesem Artikel werde ich eine Node.js-Anwendung und einen Slack-Bot erstellen, der hinzugefügt werden kann zu Ihrem Teamprojekt hinzufügen, um bestimmte Aktionen basierend auf Ereignissen durchzuführen erhalten.
Zuerst muss ich einen Bot auf Slack erstellen. Es können zwei Arten von Bots erstellt werden:
In diesem Artikel geht es um die Erstellung eines benutzerdefinierten Bots, denn wenn Sie vorhaben, Apps auf Slack zu schreiben und zu veröffentlichen, wäre der App-Bot-Benutzer besser geeignet. Da ich möchte, dass dieser Bot für mein Team privat ist, reicht ein benutzerdefinierter Bot aus.
Benutzerdefinierte Bots können hier erstellt werden: https://my.slack.com/apps/A0F7YS25R-bots. Wenn Sie bereits bei Ihrem Slack-Konto angemeldet sind, wählen Sie links die Schaltfläche „Konfiguration hinzufügen“ aus. Andernfalls melden Sie sich bitte bei Ihrem Slack-Konto an, bevor Sie fortfahren. Wenn Sie kein Slack-Konto haben, können Sie sich kostenlos anmelden. Dadurch gelangen Sie auf eine neue Seite, auf der Sie nach dem Benutzernamen Ihres Bots gefragt werden. Geben Sie jetzt Ihren Benutzernamen ein und achten Sie dabei darauf, die Benennungsrichtlinien von Slack zu befolgen. Nachdem Sie einen wunderbaren Bot-Namen ausgewählt haben, klicken Sie auf
Bot-Konfiguration hinzufügen. Nach erfolgreicher Erstellung des Bots leitet Slack Sie zu einer Seite weiter, die eine weitere Anpassung des Bots ermöglicht. Ich überlasse diesen Teil Ihrem kreativen Selbst. Das Einzige, was diese Seite erfordert, ist ein
API-Token, das mit xoxb-
beginnt. Ich kann dieses Token zur späteren Verwendung an einen sicheren Ort kopieren oder diese Seite einfach geöffnet lassen, bis wir das Token für unsere Node.js-Anwendung benötigen.
Konfiguration
Erstellen oder wählen Sie einen vorhandenen Kanal aus, mit dem Ihr Bot interagieren wird. Wenn ich einen neuen Bot teste, entscheide ich mich dafür, einen neuen Kanal zu erstellen. Merken Sie sich unbedingt den Kanalnamen, da Sie ihn in Kürze in der App benötigen.
Für meinen Slack Bot werde ich eine neue Node.js-Anwendung erstellen, indem ich den
-Prozess durchführe. Mit einer Eingabeaufforderung, die auf den Ort eingestellt ist, an dem Ihre Anwendung installiert werden soll, können Sie die folgenden Befehle ausführen:mkdir slackbot cd slackbot npm init
Wenn du npm init
,这会启动一个实用程序来帮助您配置新项目。它询问的第一件事是名称。它默认我的为 slackbot
nicht kennst, finde ich es cool. Wenn Sie Ihren Anwendungsnamen ändern möchten, ist jetzt Ihre Chance; andernfalls drücken Sie Enter, um mit dem nächsten Konfigurationsschritt fortzufahren. Die nächsten Optionen sind Version und Beschreibung. Ich habe beide Optionen als Standard beibehalten und einfach die Enter-Taste gedrückt, um mit der Auswahl beider Optionen fortzufahren.
Als nächstes ist der Einstiegspunkt erforderlich. Der Standardwert ist index.js
;然而,很多人喜欢使用 app.js
。我不想参加这场辩论,并且考虑到我的应用程序不需要密集的项目结构,我将把我的应用程序保留为默认值 index.js
.
Nachdem Sie sich von einem Streit erholt haben, der möglicherweise so hitzig war wie Tabulatoren vs. Leerzeichen, geht die Konfiguration mit ein paar Fragen weiter:
Für die Zwecke dieses Artikels habe ich alle Optionen als Standard beibehalten. Sobald alle Optionen konfiguriert wurden, wird vor der Erstellung eine Bestätigung angezeigt. Drücken Sie die Eingabetaste, um die Konfiguration abzuschließen
package.json
SDK eingeben
Um die Interaktion mit Slack zu erleichtern, werde ich auch das Slack Developer Kit wie unten gezeigt installieren:
npm install @slack/client --save
Vorausgesetzt, der von mir gewählte
Einstiegspunktlag
in der Datei.Der Code beginnt mit zwei Modulen aus dem Slack-Entwickler-Toolkit:
var RtmClient = require('@slack/client').RtmClient; var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;
index.js
,是时候创建此文件了。 Slack 开发人员工具包网站上的示例大约有 20 行代码。我将一次将其分解为几行,只是为了解释这些行的作用。但请注意,所有这些行都应包含在您的 index.js
ist das Ereignis, auf das der Bot wartet. Nachdem Sie diese Module eingebunden haben, können Sie den Roboter instanziieren und starten:
var rtm = new RtmClient('xoxb-*************************************'); rtm.start();
RtmClient
一旦实例化,将成为引用 RTM API 的机器人对象。 CLIENT_EVENTS
Ersetzen Sie unbedingt das obfuskierte API-Tokenoben durch das Token, das Sie während des Slack-Bot-Erstellungsprozesses erhalten haben.
In meiner -Funktion wird die Sitzung des Bots initialisiert. Dadurch wird versucht, meinen Bot zu authentifizieren. Wenn mein Bot erfolgreich eine Verbindung zu Slack herstellt, wird ein Ereignis gesendet, das es meiner Anwendung ermöglicht, fortzufahren. Diese Ereignisse werden sofort angezeigt.
Nach der Instanziierung des Clients wird innerhalb eines der Ereignisse ein erstellt. RtmClient
上调用 start
let channel;
Variablen werden verwendet, um bestimmte Aktionen auszuführen, z. B. das Senden von Nachrichten an den Kanal, mit dem der Bot verbunden ist. channel
变量,该变量将立即填充到 CLIENT_EVENTS
rtm.start();
) und dem Bot ein gültiges API-Tokenchannel
gegeben wird, wird ein werden generierte RTM.AUTHENTICATED
-Nachricht senden. Die nächsten paar Zeilen achten auf dieses Ereignis:
rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => { for (const c of rtmStartData.channels) { if (c.is_member && c.name ==='jamiestestchannel') { channel = c.id } } console.log(`Logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}`); });
Wenn das Ereignis RTM.AUTHENTICATED
empfangen wird, führt der vorangehende Code eine for
-Schleife in der Slack-Teamkanalliste aus. In meinem Fall habe ich gezielt nach rtm.start();
) 并为机器人提供有效的 API 令牌时,会生成一个 将发送 RTM.AUTHENTICATED
jamiestestchannel
gespeichert. RTM.AUTHENTICATED
事件时,前面的代码会在 Slack 团队频道列表中执行 for
循环。就我而言,我专门寻找jamiestestchannel并确保我的机器人是该频道的成员。当满足该条件时,通道 ID 将存储在 channel
) angezeigt wird, zu dem er gehört. ${rtmStartData.self.name}
) 和团队名称成功进行身份验证(${rtmStartData.team.name}
) ausgelöst, das anzeigt, dass der Bot vollständig verbunden ist und mit Slack interagieren kann. Die nächste Codezeile erstellt einen Ereignis-Listener; bei Erfolg ein RTM.RTM_CONNECTION_OPENED
Hallo! Die Nachricht wird an diesen Kanal gesendet (in meinem Fall jamiestestchannel).
rtm.on(CLIENT_EVENTS.RTM.RTM_CONNECTION_OPENED, function () { rtm.sendMessage("Hello!", channel); });
node index.js
RTM.AUTHENTICATED
。RTM.RTM_CONNECTION_OPENED
事件消息时,会发生这种情况。在继续和进一步增强我的应用程序之前,现在是回顾一下我到目前为止所做的工作的好时机:
index.js
文件,该文件使用我的自定义机器人中的 API 令牌 创建 RtmClient
。RTM.AUTHENTICATED
创建了一个事件侦听器,用于查找我的机器人所属的 Slack 频道。RTM.RTM_CONNECTION_OPENED
创建了一个事件侦听器,用于向我的 Slack 频道发送Hello!消息。现在是真正的乐趣开始的时候了。 Slack 提供(我没有数)至少 50 个不同的事件可供我的自定义机器人监听和选择性处理。正如您从 Slack 事件列表中看到的,某些事件是 RTM API(我们正在使用的)自定义的,而其他事件是 Events API 自定义的。在撰写本文时,我的理解是 Node.js SDK 仅支持 RTM。
为了完成我的机器人,我将处理 message
事件;当然,这可能是最复杂的事件之一,因为它支持大量子类型,我稍后将探讨这些子类型。
以下是 Slack 中最基本的 message
事件的示例:
{ "type": "message", "channel": "C2147483705", "user": "U2147483697", "text": "Hello world", "ts": "1355517523.000005" }
在这个 basic object, the three most important things I care about are:
频道
。我希望确保此消息属于我的机器人所属的频道。用户
。这将使我能够直接与用户交互或根据用户身份执行特定操作。text
。这可能是最重要的部分,因为它包含消息的内容。我的机器人只想响应某些类型的消息。有些消息更为复杂。它们可以包含许多子属性,例如:
edited
:一个子对象,描述哪个用户编辑了消息以及消息发生的时间。subtype
:定义多种不同类型之一的字符串,例如channel_join、channel_leave等。
is_starred
:一个布尔值,指示此消息是否已加星标。
pinned_to
:已固定此消息的通道数组。
reactions
:一组反应对象,定义反应是什么(例如捂脸)、反应发生的次数以及对消息做出这种反应的用户数组。
我将扩展之前创建的 index.js
来监听 message
事件。为了减少代码冗余,以下示例将仅包含与 message
事件增强相关的部分代码。
必须做的第一件事是为我将要收听的 RTM_EVENTS
添加一个新模块。我已将其放置在我之前的两个模块下方:
var RTM_EVENTS = require('@slack/client').RTM_EVENTS;
处理 message
事件的代码我将放置在文件的底部。为了测试 message
事件是否正常工作,我创建了一个新的事件侦听器,它将 message
对象记录到控制台,如下所示:
rtm.on(RTM_EVENTS.MESSAGE, function(message) { console.log(message); });
我现在可以重新运行我的 Node 应用程序 (node index.js
)。当我在频道中输入消息时,以下内容将记录到我的控制台:
{ type: 'message', channel: 'C6TBHCSA3', user: 'U17JRET09', text: 'hi', ts: '1503519368.000364', source_team: 'T15TBNKNW', team: 'T15TBNKNW' }
到目前为止,一切都很好。我的机器人已成功接收消息。下一个增量步骤是确保消息属于我的机器人所在的频道:
rtm.on(RTM_EVENTS.MESSAGE, function(message) { if (message.channel === channel) console.log(message); });
现在,当我运行我的应用程序时,如果 message
事件适用于我的机器人所属的 channel
,我只会看到调试消息。
我现在将扩展应用程序以向频道发送自定义消息,演示如何在消息中标记用户:
rtm.on(RTM_EVENTS.MESSAGE, function(message) { if (message.channel === channel) rtm.sendMessage("Stop, everybody listen, <@" + message.user + "> has something important to say!", message.channel); });
现在,当任何人在频道中输入消息时,我的机器人都会发送自己的消息,如下所示:“停下来,大家听着,@endyourif 有重要的事情要说!”
好吧,不是很有用。相反,我将通过增强 message
事件侦听器以响应特定命令来完成我的机器人。这将通过执行以下操作来完成:
message
的 text
部分拆分为一个数组。为了轻松检测我的机器人是否被提及,我需要创建一个新变量来存储我的机器人用户 ID。下面是更新的代码部分,我之前在其中设置了 channel
变量。现在,它还将我的机器人的用户 ID 存储在名为 bot
的变量中。
let channel; let bot; rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => { for (const c of rtmStartData.channels) { if (c.is_member && c.name ==='jamiestestchannel') { channel = c.id } } console.log(`Logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}`); bot = '<@' + rtmStartData.self.id + '>'; });
通过设置 bot
变量,我通过充实之前创建的 message
事件监听器来完成我的机器人,如下所示:
rtm.on(RTM_EVENTS.MESSAGE, function(message) { if (message.channel === channel) { if (message.text !== null) { var pieces = message.text.split(' '); if (pieces.length > 1) { if (pieces[0] === bot) { var response = '<@' + message.user + '>'; switch (pieces[1].toLowerCase()) { case "jump": response += '"Kris Kross will make you jump jump"'; break; case "help": response += ', currently I support the following commands: jump'; break; default: response += ', sorry I do not understand the command "' + pieces[1] + '". For a list of supported commands, type: ' + bot + ' help'; break; } rtm.sendMessage(response, message.channel); } } } } });
以下代码将数组中的 text
对象的 message
属性基于空格进行拆分。接下来,我确保数组中至少有两个元素,最好是我的机器人和要执行的命令。
当数组中的第一个元素与我的机器人匹配时,我对数组中的第二个元素执行 switch
语句:命令。当前支持的命令有jump 和help。当一条消息发送到看起来像“@jamiestest跳转”的频道时,我的机器人将向原始用户回复一条特殊消息。
如果该命令未被识别,它将落入我的 switch
的默认 case 语句中,并使用如下所示的通用命令进行响应:“@endyourif,抱歉,我不明白命令“hi”。有关受支持命令的列表,请键入:@jamiestest help"。
此时 point, my bot is complete! If you are interested in further enhancing your bot, here's a list of ideas:
team_join
事件来处理新团队成员的加入。当新团队成员加入时,最好向他们发送各种入职信息和/或文件,欢迎他们加入您的团队。Das obige ist der detaillierte Inhalt vonErstellen Sie einen Node.js-basierten Slack-Bot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!