首页 > web前端 > js教程 > Slack Bot入门

Slack Bot入门

Lisa Kudrow
发布: 2025-02-20 12:30:12
原创
981 人浏览过

Slack Bot入门

Slack是鼓励团队成员更好地沟通的流行工具。它带有许多有用的功能和服务,包括第三方集成和Webhook支持。 Slack Webhooks可以很有趣且有用,并且很容易设置。在本教程中,我们将使用Node.js和Heroku设置一个简单的服务器,该服务器将从Slack作为“ bot”响应您的团队的消息。熟悉JavaScript和Git将有帮助。如果您以前从未使用过git,请查看Git,以供初学者开始。还假定访问Slack帐户,但请放心 - 它们是免费的!

>

钥匙要点

简化了
    Slack Bot:设置Slack Bot涉及通过Slack的Web界面创建集成,配置Webhooks和使用Node.js并Express创建与Slack Messages交互的服务器。
  • > node.js和Heroku部署:使用服务器设置的Express框架和Heroku部署机器人,确保可以在线访问bot。
  • > bot互动逻辑:开发机器人的逻辑以响应Slack中的特定命令,例如问候用户或诸如DICE掷骰之类的处理命令,并在JSON中格式化了响应。
  • >
  • >扩展机器人功能:探索诸如斜线命令和传入的Webhooks之类的进一步集成以增强bot功能,从而在Slack Channels中实现更具交互性和动态响应。
  • >
  • >持续开发和集成:通过与各种API(例如Github,Yelp)集成来拓宽机器人的实用性,鼓励进行持续的开发,使其成为团队协作和生产力的多功能工具。
  • >
  • 创建一个新的松弛集成
>从Slack Web界面中,在团队名称旁边左上角打开菜单,然后选择“配置集成”。在这里,您可以看到一个仪表板,其中包含所有可用的集成。在DIY集成和自定义下滚动到最底部,并添加一个传出的Webhook。阅读简短描述,然后单击“添加添加传出的网络钩集成”。

>您将看到传出的Webhook配置以及请求和响应有效载荷的外观的示例。我们的第一个机器人将在调用时简单地迎接用户。为此,我们将允许钩子在任何频道上聆听触发单词“ Hello”。 我们不知道它将发布的URL,因此我们将稍后再回到此页面。Slack Bot入门>

创建Web服务器

我们将在Node.js上使用Express 4来构建简单的Web服务器。>

>为您的应用创建一个新目录,然后运行NPM INIT生成您的软件包。在您的软件包中,json依赖项,包括“ express”:“^4.x.x”和“ body-parser”:“^1.x.x”。 Body-Parser软件包将用于解析从Slack发送的有效载荷。创建名为app.js的服务器文件。在这里,我们将需要必要的模块,添加Body Parser中间件,错误处理程序和测试路线。然后,我们告诉服务器开始侦听。

<span>var express = require('express');
</span><span>var bodyParser = require('body-parser');
</span>
<span>var app = express();
</span><span>var port = process.env.PORT || 3000;
</span>
<span>// body parser middleware
</span>app<span>.use(bodyParser.urlencoded({ extended: true }));
</span>
<span>// test route
</span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') });
</span>
<span>// error handler
</span>app<span>.use(function (err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(400).send(err.message);
</span><span>});
</span>
app<span>.listen(port, function () {
</span>  <span>console.log('Slack bot listening on port ' + port);
</span><span>});</span>
登录后复制
登录后复制
登录后复制
登录后复制

>使用节点应用程序运行服务器并验证访问http:// localhost:3000响应“ Hello World!”。

>

编写bot逻辑

创建一个名为hellobot.js

的文件

这个模块将是我们的机器人逻辑所在的地方。它将包含一个带有状态代码200的消息的导出功能。我们将从Slack发送给服务器的数据开始,然后我们将以自己的正确格式有效载荷进行响应。为此,让我们重新审视我们在配置集成下的传出Webhook。传出的数据示例显示了当触发外部网络时的所有信息Slack发送的所有信息。

>

Slack Bot入门

>您可以看到,某些数据对于身份验证或路由很有用,但是现在我们将重点关注user_name属性。使用此值,我们可以将个性化的问候发送给用户。

>
module<span>.exports = function (req<span>, res, next</span>) {
</span>  <span>var userName = req.body.user_name;
</span>  <span>var botPayload = {
</span>    <span>text : 'Hello, ' + userName + '!'
</span>  <span>};
</span>
  <span>// avoid infinite loop
</span>  <span>if (userName !== 'slackbot') {
</span>    <span>return res.status(200).json(botPayload);
</span>  <span>} else {
</span>    <span>return res.status(200).end();
</span>  <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
登录后复制

>在这里我们创建我们的botpayload对象。唯一必要的属性是botpayload.text,它定义了我们响应时机器人将显示的内容。向用户添加文本属性,并使用JSON响应和200个状态代码。请注意,我们的机器人的响应是我们即将推出的Webhook的触发单词!为了避免无限循环,我们可以检查身体的用户_NAME。即使在聊天中,所有钩子都以“ Slackbot”的形式贴上“ Slackbot”。我们可以使用这个事实来防止我们的钩子对自己的反应。

返回app.js,需要顶部的bot模块。>

然后,添加一条通道,该路由会聆听帖子到 /hello。
<span>var hellobot = require('./hellobot');</span>
登录后复制
登录后复制

>让我们快速测试。使用节点应用程序再次运行该应用程序,在另一个终端窗口中,使用卷发来确保该应用按照我们的期望进行响应。 (注意:由于我们的机器人在这里仅寻找一个值,因此无需在我们的测试中包括整个Slack有效载荷)。
app<span>.post('/hello', hellobot);</span>
登录后复制
登录后复制

如果我们的应用程序有效,我们应该看到一个看起来像这样的响应:
curl -X POST --data "user_name=foobar" http://localhost:3000/hello
登录后复制
登录后复制
>

现在,是时候将我们的机器人放在网上了。
<span>{"text":"Hello, foobar!"}</span>
登录后复制
登录后复制
>

>在Heroku

上部署该应用程序

Heroku是一项方便的服务,可帮助您在很少的时间内免费在线获取Web服务器。部署是通过将您的代码推到其自动部署和运行的GIT服务器中来进行的。在Heroku上创建一个帐户或登录您的帐户,如果您已经有一个帐户。>

>登录后,您会看到Heroku仪表板。单击右上角的创建新应用。请按照提供的说明在您的计算机上登录到Heroku。部署很容易,但是有很多值得知道您第一次部署应用程序。设置应用程序时,请确保遵循本指南。我们将在此过程中进行一些双重检查,但是其中有很多不错的信息,这些信息超出了本文的范围。

>在我们部署机器人之前,我们需要告诉Heroku如何运行该应用程序。这是通过创建procfile来完成的。您的procfile只需要一行:

<span>var express = require('express');
</span><span>var bodyParser = require('body-parser');
</span>
<span>var app = express();
</span><span>var port = process.env.PORT || 3000;
</span>
<span>// body parser middleware
</span>app<span>.use(bodyParser.urlencoded({ extended: true }));
</span>
<span>// test route
</span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') });
</span>
<span>// error handler
</span>app<span>.use(function (err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(400).send(err.message);
</span><span>});
</span>
app<span>.listen(port, function () {
</span>  <span>console.log('Slack bot listening on port ' + port);
</span><span>});</span>
登录后复制
登录后复制
登录后复制
登录后复制
>完成此操作后,您可以进行更改并将其推向Heroku。 Heroku会自动安装节点模块,您会看到部署的结果。如果一切顺利,您将在底部看到指向应用程序的链接。复制该URL,然后再次访问您的Outs Out Webhook的配置页面。将您复制的URL添加到附加 /Hello路由的URL输入字段中,并在挂钩的名称和图标(如果需要)的名称和图标上。

Slack Bot入门

>还有一个步骤可以使机器人在线:我们需要给它一个dyno。在终端中,输入:

module<span>.exports = function (req<span>, res, next</span>) {
</span>  <span>var userName = req.body.user_name;
</span>  <span>var botPayload = {
</span>    <span>text : 'Hello, ' + userName + '!'
</span>  <span>};
</span>
  <span>// avoid infinite loop
</span>  <span>if (userName !== 'slackbot') {
</span>    <span>return res.status(200).json(botPayload);
</span>  <span>} else {
</span>    <span>return res.status(200).end();
</span>  <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
登录后复制
这告诉Heroku给您的应用程序一个网络工作者。小心;您的应用程序每月只能获得一个免费的点!

>

您的机器人现在应该在线,因此请返回Slack并测试!

Slack Bot入门如果您没有得到响应,请返回并检查您的代码。您可以使用终端命令heroku log来查看有关请求的详细信息以及您添加的任何console.log()语句。

>

不太困难,是吗?我们成功地建立了一个Slack的Webhook,将应用程序部署到Heroku,并让两个人互相交谈!比简单的“ Hello World”计划要多一些,但更有意义。现在,我们已经运行了服务器,我们可以轻松添加更多钩子和响应。 Hellobot非常友好,但这并不有用。在下一节中,我们将使用Slack的其他Webhook类型来创建骰子滚动聊天命令。

dicebot - 使用Slack命令和输入的Webhooks

>在上一节中,我们使用了一个传出的Webhook,该Webhook聆听聊天以获取触发单词,向我们的服务器发送了一条消息,并显示了响应。在本节中,我们将使用其他两个工具来创建自定义集成:斜线命令和传入的Webhooks。访问配置集成页面,并查看DIY集成和自定义下的其他选项。让我们从添加Slash命令集成开始。阅读简短描述,将命令设置为“/roll”,然后添加集成。下一页显示配置。您会看到,传出数据看起来类似于我们之前配置的传出网络曲目。我们将使用本节的最后一节中创建的应用程序,因此我们可以使用相同的URL,但是这次我们将发布到路由 /滚动。

>。

请注意,Slash命令集成可以响应用户,但只能以私有方式响应。如果您只能看到骰子,骰子卷有什么用? Slack建议使用与斜杠命令同时使用传入的网络钩发送消息进行聊天。返回到“配置集成”页面,然后添加传入的Webhook。阅读说明,选择一个通道,然后添加钩子。不用担心您选择的频道;我们可以在机器人的响应中指定频道。因为我们可以选择应用程序中的频道,所以这意味着我们还可以将此集成使用用于创建的任何其他机器人。传入的Webhook的配置方式不多,但是它确实有很多重要信息来构建机器人的响应有效负载。最重要的部分是Webhook URL。我们将从应用程序中发布此消息,以将消息发送到Slack。

>

响应服务器的斜线命令

>由于我们将Slash命令指向了路由 /滚动,因此我们可以将该路由与HelloBot一起添加到服务器。我们将使用一个秘密URL进行进入挂钩,因此,如果您想公开代码,最好将其隐藏起来。做到这一点的好方法是使用Heroku的config vars。

>我们还将请求添加到我们的软件包中,以与传入的钩子一起使用:>

<span>var express = require('express');
</span><span>var bodyParser = require('body-parser');
</span>
<span>var app = express();
</span><span>var port = process.env.PORT || 3000;
</span>
<span>// body parser middleware
</span>app<span>.use(bodyParser.urlencoded({ extended: true }));
</span>
<span>// test route
</span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') });
</span>
<span>// error handler
</span>app<span>.use(function (err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(400).send(err.message);
</span><span>});
</span>
app<span>.listen(port, function () {
</span>  <span>console.log('Slack bot listening on port ' + port);
</span><span>});</span>
登录后复制
登录后复制
登录后复制
登录后复制
现在,我们将添加dicebot.js。 DiceBot将导出一个功能,但我们需要两个其他功能:一个功能:一个要发布到传入的Webhook,另一个要滚动骰子。

module<span>.exports = function (req<span>, res, next</span>) {
</span>  <span>var userName = req.body.user_name;
</span>  <span>var botPayload = {
</span>    <span>text : 'Hello, ' + userName + '!'
</span>  <span>};
</span>
  <span>// avoid infinite loop
</span>  <span>if (userName !== 'slackbot') {
</span>    <span>return res.status(200).json(botPayload);
</span>  <span>} else {
</span>    <span>return res.status(200).end();
</span>  <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
登录后复制
众所周知,骰子的类型多于六面骰子。其他骰子有四个侧面,八个侧面,十个侧面,二十个侧面等等!滚动这些骰子时使用特殊符号: d 。因此,滚动两个六面骰子被注明为“ 2d6”。我们可以让用户使用此表示法滚动多个骰子,但是我们必须检查用户的正确输入。

让我们从初始化一些变量并解析输入开始。我们将设置一些默认值,以防用户要省略输入。

>
<span>var express = require('express');
</span><span>var bodyParser = require('body-parser');
</span>
<span>var app = express();
</span><span>var port = process.env.PORT || 3000;
</span>
<span>// body parser middleware
</span>app<span>.use(bodyParser.urlencoded({ extended: true }));
</span>
<span>// test route
</span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') });
</span>
<span>// error handler
</span>app<span>.use(function (err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(400).send(err.message);
</span><span>});
</span>
app<span>.listen(port, function () {
</span>  <span>console.log('Slack bot listening on port ' + port);
</span><span>});</span>
登录后复制
登录后复制
登录后复制
登录后复制

>上面的正则表达式对于解析骰子掷骰非常可靠,并将值限制为两位数的数字,因此用户不会发疯。如果用户弄乱了他们的语法,我们会发出提示。

> 用用户输入将骰子滚动骰子非常容易。请参阅此线程,以说明随机滚动的工作原理。对于真正的随机卷,您可以联系Random.org API。让我们写下卷函数。

然后,在我们的主要功能中,我们将进行一些滚动并构建一条消息以响应。让我们包含滚筒的名称,以便其他用户可以看到谁使用 /滚动命令。
module<span>.exports = function (req<span>, res, next</span>) {
</span>  <span>var userName = req.body.user_name;
</span>  <span>var botPayload = {
</span>    <span>text : 'Hello, ' + userName + '!'
</span>  <span>};
</span>
  <span>// avoid infinite loop
</span>  <span>if (userName !== 'slackbot') {
</span>    <span>return res.status(200).json(botPayload);
</span>  <span>} else {
</span>    <span>return res.status(200).end();
</span>  <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
登录后复制

>我们将消息添加到botpayload.text属性中,并在总计周围进行一些松弛格式,以使其大胆。我们还可以使用响应有效载荷配置名称,图标和频道。我们将根据频道设置频道,用户向“滚动命令”发布。 Slack建议使用有效载荷中的频道名称,但这意味着我们必须使用“#”进行预处理。相反,我们可以使用频道ID,这将使我们能够在公共渠道和私人组中发布。对于图标,存在方便的模具表情符号,尽管您可以使用icon_url提供更好的图像。

<span>var hellobot = require('./hellobot');</span>
登录后复制
登录后复制

有效载荷看起来不错。让我们编写发送函数。我选择仅将路径令牌存储在Heroku的配置var中。确保将身体作为JSON的字符串发送。

app<span>.post('/hello', hellobot);</span>
登录后复制
登录后复制

在我们的主要功能中,我们将启动发送请求。如果有效,我们可以用空的200响应斜线命令。如果没有,我们可以使用send()回调中的值来构建错误。这将触发app.js中的错误处理程序并发送回400,该400将通知用户错误。

curl -X POST --data "user_name=foobar" http://localhost:3000/hello
登录后复制
登录后复制

>让我们运行服务器并再次卷曲。这次,我们需要包括channel_id。您可以使用Slack API测试仪查找正确的Channel_ID。由于已经设置了传入的Webhook,因此应该听到我们的服务器调用它。我们还需要在环境中包括传入的Webhook路径,因为该应用程序还没有在Heroku上。

>
<span>{"text":"Hello, foobar!"}</span>
登录后复制
登录后复制

web: node app
登录后复制
heroku ps:scale web=1
登录后复制

看起来不错!让我们部署它。Slack Bot入门

>重新部署到Heroku

>由于我们使用Heroku的配置var存储我们的Webhook的令牌,因此请不要忘记将其设置在应用程序的设置菜单中。

然后,使用git添加新文件,提交您的更改,然后推到Heroku遥控器。 Heroku将安装节点模块并启动服务器。在测试它之前,让我们开始实时观看日志: Heroku logs -t

>我们的钩子都设置了,我们的滚动命令应准备好。尝试一些卷!如果某些事情不起作用,您可以使用Heroku日志进行调试。要完整查看完整的应用程序,请查看此github repo。

>

持续开发

这两个机器人演示了您开始编写自己的聊天机器人和集成所需的所有工具。您可以将许多服务集成到机器人中,也可以尝试建立令人信服的对话伙伴。 API和节点模块都可以使您实现这两个目标。>

其他一些机器人的想法:

    >使用github api向您展示打开拉请求的机器人
  • >使用Yelp API帮助您的团队决定午餐
  • 的机器人
  • > Google为您搜索的机器人
  • >仅与流行语和行话与您交谈的机器人
  • 如果您想出好主意,请分享您的代码!机器人制作很有趣,而且它们从来没有更容易创建。
  • >
经常询问有关Slack Bots的问题(常见问题解答)

>如何创建一个Slack Bot?

创建Slack Bot涉及几个步骤。首先,您需要访问Slack API网站并创建新的机器人用户。您需要给机器人一个名字,然后选择一个将在其中运行的工作区。创建机器人后,您将收到一个机器人用户OAuth访问令牌,您将使用该代码来验证代码中的bot。然后,您可以使用JavaScript或Python(例如JavaScript)开始编写机器人代码。您将使用Slack API发送和接收消息。

>

>我可以将一些有用的功能添加到我的Slack Bot?

>您可以在Slack Bot中添加许多功能关于您想要做什么。例如,您可以对机器人进行编程以响应特定命令或关键字,发送计划的消息,甚至与其他API集成以从外部来源获取数据。您还可以在机器人的消息中添加交互式元素,例如按钮或下拉菜单。

>我如何测试我的松散bot?

>您可以通过邀请将其邀请到您的频道中测试您的Slack Bot工作区并与之互动。您可以将消息发送到机器人并检查是否正确响应。您也可以使用Slack API的方法进行测试,例如API.test和auth.test方法。

>我可以在多个工作区中使用我的Slack Bot吗?您在多个工作区中的松弛机器人。您需要在需要操作的每个工作区中安装机器人。每个工作区都会有自己的机器人用户OAuth访问令牌,您将使用它来验证您的bot。

>如何提高Slack Bot的性能?一种方法是通过减少不必要的API调用或处理来优化代码。您也可以使用缓存来存储您的机器人经常使用的数据,从而减少了重复API调用的需求。此外,您可以使用异步编程技术允许您的机器人同时执行多个任务。

>

>我如何使我的Slack Bot与用户相互作用?通过对用户进行编程以响应消息或命令来与用户进行交互。您可以使用消息事件来收听传入消息,以及chat.postmessage方法发送消息。您还可以在机器人的消息中添加交互式元素(例如按钮),哪些用户可以单击以触发操作。

我可以将我的Slack Bot与其他服务集成在一起吗?

是的,您可以集成您的Slack Slack带有其他服务的机器人。 Slack提供了各种API和功能,使您可以与外部服务集成。例如,您可以使用传入的Webhooks接收来自其他服务的数据,或者可以将数据发送到其他服务。

>

>我如何处理Slack Bot中的错误?通过使用编程语言中的错误处理技术,您的Slack Bot中的错误。例如,在JavaScript中,您可以使用尝试...捕获语句来捕获和处理错误。您还可以使用错误事件来侦听机器人运行时发生的任何错误。

我可以自定义Slack Bot的外观吗?您的松弛机器人。创建它时,您可以为机器人设置自定义图标和名称。您还可以通过使用附件或块来自定义机器人消息的外观,从而允许您添加颜色,图像和其他格式。

如何确保我的Slack Bot的安全性? 🎜>您可以通过遵循最佳的机器人开发实践来确保Slack Bot的安全性。这包括使您的机器人用户oauth访问令牌秘密,并且不与任何人共享。您还应该验证机器人收到的任何数据,以确保其来自受信任的来源。此外,您应该定期更新机器人的代码以修复任何安全漏洞。

>

以上是Slack Bot入门的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板