kendur adalah Cepat menjadi standard industri baharu untuk komunikasi pasukan. wujud Malah, ia sangat popular sehingga apabila saya menaip slack Apabila saya memasuki Google, seperti yang dijangkakan, hasil pertama ialah definisi perkataan ini. daripada kamus. Laman web Slack berada di tempat kedua!
Ini adalah Hampir tidak pernah terdengar untuk perkataan yang paling biasa dalam kamus bahasa Inggeris. Lazimnya, takrifan Google diikuti dengan pautan ke beberapa kamus teratas laman web.
di dalamnya Pada asasnya, Slack ialah sistem pemesejan. Ia membenarkan pemesejan terus kepada pasukan Keahlian dan cipta saluran (swasta atau awam) untuk memudahkan masa nyata Komunikasi dan kerjasama pasukan. belajar lagi Untuk maklumat tentang Slack, anda boleh melihat Slack's Ciri-ciri.
Pada masa ini Pada satu ketika, anda mungkin tertanya-tanya di mana Node.js masuk. Seperti yang saya nyatakan, pada tahap paling asasnya, Slack ialah sistem pemesejan; Walau bagaimanapun, ia boleh dikembangkan tanpa had dibuat khas. Slack menawarkan sistem yang sangat fleksibel untuk menyesuaikan anda Integrasi pasukan, termasuk:
Dalam ini Dalam artikel ini, saya akan menunjukkan cara mencipta bot Slack menggunakan Node.js Boleh ditambah pada konfigurasi Slack pasukan anda.
longgar Tugas Bot adalah menerima acara yang dihantar oleh Slack dan memprosesnya. Sebilangan besar acara akan dihantar kepada bot anda, di sinilah Node.js masuk. kita mesti memutuskan untuk tidak Hanya ambil berat tentang acara yang hendak dikendalikan dan cara mengendalikan setiap acara individu.
untuk Contohnya, beberapa peristiwa biasa yang akan dikendalikan oleh bot ialah:
ahli_joined_channel
member_joined_channel
member_left_channel
消息
在这个 文章中,我将创建一个 Node.js 应用程序和一个可以添加的 Slack Bot 到您的团队项目以根据事件执行特定操作 收到。
首先,我需要在 Slack 上创建一个机器人。可以创建两种类型的机器人:
本文将创建一个自定义机器人,因为如果您计划在 Slack 上编写和发布应用程序,那么应用程序机器人用户会更合适。鉴于我希望这个机器人对我的团队来说是私有的,自定义机器人就足够了。
可以在此处创建自定义机器人:https://my.slack.com/apps/A0F7YS25R-bots。如果您已经登录 Slack 帐户,请选择左侧的添加配置按钮;否则,请先登录您的 Slack 帐户,然后再继续。如果您没有 Slack 帐户,可以免费注册。
这将带您进入一个新页面,要求您提供机器人的用户名。立即输入您的用户名,确保遵循 Slack 的命名指南。选择一个精彩的机器人名称后,请按添加机器人配置。
成功创建机器人后,Slack 会将您重定向到允许进一步自定义机器人的页面。我会把这部分留给你创造性的自己。此页面唯一需要的是以 xoxb-
开头的 API 令牌。我可以将此令牌复制到安全位置以供以后使用,也可以简单地将此页面保持打开状态,直到我们需要 Node.js 应用程序的令牌为止。
在继续编写代码之前,还需要两个 Slack 配置:
现在我已经配置了 Slack Bot,是时候转到 Node.js 应用程序了。如果您已经安装了 Node.js,则可以继续下一步。如果您尚未安装 Node.js,我建议您首先访问 Node.js 下载页面并选择适合您系统的安装程序。
对于 my Slack Bot, I am going to create a new Node.js application by running through the npm init
ahli_left_channel
#🎜🎜#
#🎜🎜#Mesej
#🎜🎜#
#🎜🎜#
#🎜🎜#Dalam ini
Dalam artikel ini, saya akan mencipta aplikasi Node.js dan Slack Bot yang boleh ditambah
kepada projek pasukan anda untuk melakukan tindakan khusus berdasarkan acara
menerima. #🎜🎜#
#🎜🎜#Pertama, saya perlu mencipta bot pada Slack. Dua jenis bot boleh dibuat: #🎜🎜#
#🎜🎜#
#🎜🎜#custombot#🎜🎜#
#🎜🎜#Buat apl dan tambah pengguna bot#🎜🎜#
#🎜🎜#
#🎜🎜#Artikel ini akan mencipta bot tersuai kerana jika anda bercadang untuk menulis dan menerbitkan aplikasi di Slack, pengguna App Bot akan lebih sesuai. Memandangkan saya mahu bot ini menjadi peribadi kepada pasukan saya, bot tersuai sudah memadai. #🎜🎜#
#🎜🎜#Buat bot Slack tersuai#🎜🎜#
#🎜🎜# Bot tersuai boleh dibuat di sini: https://my.slack.com/apps/A0F7YS25R-bots. Jika anda sudah log masuk ke akaun Slack anda, pilih butang Tambah Konfigurasi di sebelah kiri jika tidak, sila log masuk ke akaun Slack anda sebelum meneruskan. Jika anda tidak mempunyai akaun Slack, anda boleh mendaftar secara percuma. #🎜🎜#
#🎜🎜# Ini akan membawa anda ke halaman baharu yang meminta anda memberikan nama pengguna bot anda. Masukkan nama pengguna anda sekarang, pastikan anda mengikuti garis panduan penamaan Slack. Setelah anda memilih nama bot yang hebat, tekan Tambah konfigurasi bot. #🎜🎜#
#🎜🎜#Selepas berjaya mencipta bot, Slack akan mengubah hala anda ke halaman yang membenarkan penyesuaian lanjut bot. Saya akan menyerahkan bahagian ini kepada diri kreatif anda. Satu-satunya perkara yang diperlukan oleh halaman ini ialah token API bermula dengan xoxb-
. Saya boleh menyalin token ini ke lokasi yang selamat untuk kegunaan kemudian, atau saya boleh terus membuka halaman ini sehingga kami memerlukan token untuk aplikasi Node.js kami. #🎜🎜#
npm init
Dengan gesaan arahan yang ditetapkan ke tempat anda ingin aplikasi anda dipasang, anda boleh menjalankan arahan berikut:#🎜🎜#mkdir slackbot cd slackbot npm init
Jika anda tidak biasa dengan npm init
, ini melancarkan utiliti untuk membantu anda mengkonfigurasi projek baharu anda. Perkara pertama yang diminta ialah nama. Ia lalai saya kepada slackbot
dan saya gembira dengan itu. Jika anda ingin menukar nama aplikasi anda, sekarang adalah peluang anda jika tidak, tekan Enter untuk meneruskan ke langkah konfigurasi seterusnya. Pilihan seterusnya ialah Versi dan Penerangan. Saya meninggalkan kedua-dua pilihan sebagai lalai dan hanya tekan Enter untuk terus memilih kedua-dua pilihan. npm init
,这会启动一个实用程序来帮助您配置新项目。它询问的第一件事是名称。它默认我的为 slackbot
,我对此感到满意。如果您想更改您的应用程序名称,现在就是机会;否则,请按Enter继续下一步配置步骤。接下来的选项是版本和描述。我将这两个选项都保留为默认值,只需按 Enter 键继续选择这两个选项。
接下来要求的是入口点。默认为 index.js
;然而,很多人喜欢使用 app.js
。我不想参加这场辩论,并且考虑到我的应用程序不需要密集的项目结构,我将把我的应用程序保留为默认值 index.js
。
当您从可能像制表符与空格一样激烈的争论中恢复过来后,配置将继续,并提出几个问题:
对于 the purposes of this article, I've left all options as their default. Finally, once all options have been configured, a confirmation of the package.json
file is displayed prior to creating it. Press Enter to complete the configuration.
为了更轻松地与 Slack 交互,我还将安装 Slack 开发者工具包,如下所示:
npm install @slack/client --save
你终于准备好编写一些代码了吗?我当然是。首先,我将使用 Slack 开发者工具包网站上的示例代码,该代码使用实时消息 API (RTM) 发布一条 Slack 消息,并进行一些调整。
鉴于我选择的入口点是 index.js
,是时候创建此文件了。 Slack 开发人员工具包网站上的示例大约有 20 行代码。我将一次将其分解为几行,只是为了解释这些行的作用。但请注意,所有这些行都应包含在您的 index.js
文件中。
代码首先包含 Slack 开发人员工具包中的两个模块:
var RtmClient = require('@slack/client').RtmClient; var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;
RtmClient
一旦实例化,将成为引用 RTM API 的机器人对象。 CLIENT_EVENTS
是机器人将侦听的事件。
包含这些模块后,就可以实例化并启动机器人了:
var rtm = new RtmClient('xoxb-*************************************'); rtm.start();
请务必将上面混淆的 API 令牌替换为您在 Slack Bot 创建过程中获得的令牌。
在我的 RtmClient
上调用 start
函数将初始化机器人的会话。这将尝试验证我的机器人。当我的机器人成功连接到 Slack 时,将发送事件,允许我的应用程序继续进行。这些事件将立即显示。
实例化客户端后,将创建一个 channel
变量,该变量将立即填充到 CLIENT_EVENTS
事件之一内。
let channel;
channel
变量将用于执行特定操作,例如向机器人连接的通道发送消息。
当 RTM 会话启动 (rtm.start();
) 并为机器人提供有效的 API 令牌时,会生成一个 将发送 RTM.AUTHENTICATED
消息。接下来的几行监听此事件:
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}`); });
当收到 RTM.AUTHENTICATED
事件时,前面的代码会在 Slack 团队频道列表中执行 for
循环。就我而言,我专门寻找jamiestestchannel并确保我的机器人是该频道的成员。当满足该条件时,通道 ID 将存储在 channel
变量中。
为了帮助调试,会记录一条控制台消息,其中显示一条消息,表明机器人已通过显示其名称 (${rtmStartData.self.name}
) 和团队名称成功进行身份验证(${rtmStartData.team.name}
) 它属于。
机器人经过身份验证后,会触发另一个事件 (RTM.RTM_CONNECTION_OPENED
index.js
namun, ramai orang lebih suka menggunakan app.js
. Saya tidak mahu masuk ke perdebatan ini, dan memandangkan permohonan saya tidak memerlukan struktur projek yang padat, saya akan meninggalkan aplikasi saya dengan index.js</code lalai >. </em>
</p>Selepas anda pulih daripada pertengkaran yang mungkin hangat seperti tab lwn. ruang, konfigurasi diteruskan dengan beberapa soalan: <p>
<ul>
<li>Arahan ujian</li>
<li>repositori git</li>
<li>kata kunci</li>
<li>Pengarang</li>
<li>Lesen</li>
</ul>
</p>Untuk tujuan artikel ini, saya telah meninggalkan semua pilihan sebagai lalai Akhirnya, setelah semua pilihan telah dikonfigurasikan, pengesahan fail <code class="inline">package.json
dipaparkan sebelum ini. untuk menciptanya. Tekan Enter untuk melengkapkan konfigurasi.
rtm.on(CLIENT_EVENTS.RTM.RTM_CONNECTION_OPENED, function () { rtm.sendMessage("Hello!", channel); });
index.js
, sudah tiba masanya untuk mencipta fail ini. Contoh di laman web Slack Developer Toolkit ialah kira-kira 20 baris kod. Saya akan memecahkannya beberapa baris pada satu masa hanya untuk menerangkan perkara yang dilakukan oleh baris. Tetapi sila ambil perhatian bahawa semua baris ini harus disertakan dalam fail index.js
anda. 🎜
🎜Kod bermula dengan dua modul daripada kit alat pembangun Slack: 🎜
node index.js
RtmClient
Sebaik sahaja digunakan, ia akan menjadi objek robot yang merujuk kepada API RTM. CLIENT_EVENTS
ialah peristiwa yang bot akan dengar. 🎜
🎜Selepas memasukkan modul ini, anda boleh membuat instantiat dan memulakan robot: 🎜
{ "type": "message", "channel": "C2147483705", "user": "U2147483697", "text": "Hello world", "ts": "1355517523.000005" }
start
pada RtmClient
saya akan memulakan sesi bot. Ini akan cuba mengesahkan bot saya. Apabila bot saya berjaya menyambung ke Slack, acara dihantar, membenarkan permohonan saya diteruskan. Acara ini akan dipaparkan serta-merta. 🎜
🎜Selepas membuat seketika pelanggan, pembolehubah channel
akan dibuat, yang akan segera diisi dalam salah satu acara CLIENT_EVENTS
. 🎜
var RTM_EVENTS = require('@slack/client').RTM_EVENTS;
channel
akan digunakan untuk melakukan tindakan tertentu, seperti menghantar mesej ke saluran yang disambungkan bot. 🎜
🎜Apabila sesi RTM dimulakan (rtm.start();
) dan token API yang sah diberikan kepada bot, RTM.AUTHENTICATED
akan dihantar. Beberapa baris seterusnya mendengar acara ini: 🎜
rtm.on(RTM_EVENTS.MESSAGE, function(message) { console.log(message); });
RTM.AUTHENTICATED
diterima, kod sebelumnya melaksanakan gelung for
dalam senarai saluran pasukan Slack. Dalam kes saya, saya secara khusus mencari 🎜jamiestestchannel🎜 dan memastikan bot saya adalah ahli saluran itu. Apabila syarat ini dipenuhi, ID saluran disimpan dalam pembolehubah channel
. 🎜
${rtmStartData.self.name}
) dan nama pasukan Authenticate ( ${rtmStartData.team.name}
) miliknya. 🎜
🎜Selepas bot disahkan, satu lagi peristiwa (RTM.RTM_CONNECTION_OPENED
) dicetuskan, yang menunjukkan bahawa bot telah disambungkan sepenuhnya dan boleh mula berinteraksi dengan Slack. Baris kod berikut mencipta pendengar acara apabila berjaya, 🎜Hello! 🎜Mesej akan dihantar ke saluran itu (dalam kes saya, 🎜jamiestestchannel🎜). 🎜
{ 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); });
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
事件来处理新团队成员的加入。当新团队成员加入时,最好向他们发送各种入职信息和/或文件,欢迎他们加入您的团队。Atas ialah kandungan terperinci Buat bot Slack berasaskan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!