>
钥匙要点
>您将看到传出的Webhook配置以及请求和响应有效载荷的外观的示例。我们的第一个机器人将在调用时简单地迎接用户。为此,我们将允许钩子在任何频道上聆听触发单词“ Hello”。 我们不知道它将发布的URL,因此我们将稍后再回到此页面。>
我们将在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!”。
>创建一个名为hellobot.js
的文件这个模块将是我们的机器人逻辑所在的地方。它将包含一个带有状态代码200的消息的导出功能。我们将从Slack发送给服务器的数据开始,然后我们将以自己的正确格式有效载荷进行响应。为此,让我们重新审视我们在配置集成下的传出Webhook。传出的数据示例显示了当触发外部网络时的所有信息Slack发送的所有信息。
>
>您可以看到,某些数据对于身份验证或路由很有用,但是现在我们将重点关注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模块。
<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仪表板。单击右上角的创建新应用。请按照提供的说明在您的计算机上登录到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>
。
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>
>
您的机器人现在应该在线,因此请返回Slack并测试!
如果您没有得到响应,请返回并检查您的代码。您可以使用终端命令heroku log来查看有关请求的详细信息以及您添加的任何console.log()语句。
不太困难,是吗?我们成功地建立了一个Slack的Webhook,将应用程序部署到Heroku,并让两个人互相交谈!比简单的“ Hello World”计划要多一些,但更有意义。现在,我们已经运行了服务器,我们可以轻松添加更多钩子和响应。 Hellobot非常友好,但这并不有用。在下一节中,我们将使用Slack的其他Webhook类型来创建骰子滚动聊天命令。
>在上一节中,我们使用了一个传出的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>
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>
让我们从初始化一些变量并解析输入开始。我们将设置一些默认值,以防用户要省略输入。
><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
看起来不错!让我们部署它。
>由于我们使用Heroku的配置var存储我们的Webhook的令牌,因此请不要忘记将其设置在应用程序的设置菜单中。
然后,使用git添加新文件,提交您的更改,然后推到Heroku遥控器。 Heroku将安装节点模块并启动服务器。在测试它之前,让我们开始实时观看日志: Heroku logs -t
>我们的钩子都设置了,我们的滚动命令应准备好。尝试一些卷!如果某些事情不起作用,您可以使用Heroku日志进行调试。要完整查看完整的应用程序,请查看此github repo。
>这两个机器人演示了您开始编写自己的聊天机器人和集成所需的所有工具。您可以将许多服务集成到机器人中,也可以尝试建立令人信服的对话伙伴。 API和节点模块都可以使您实现这两个目标。
>如何创建一个Slack Bot?创建Slack Bot涉及几个步骤。首先,您需要访问Slack API网站并创建新的机器人用户。您需要给机器人一个名字,然后选择一个将在其中运行的工作区。创建机器人后,您将收到一个机器人用户OAuth访问令牌,您将使用该代码来验证代码中的bot。然后,您可以使用JavaScript或Python(例如JavaScript)开始编写机器人代码。您将使用Slack API发送和接收消息。
>您可以在Slack Bot中添加许多功能关于您想要做什么。例如,您可以对机器人进行编程以响应特定命令或关键字,发送计划的消息,甚至与其他API集成以从外部来源获取数据。您还可以在机器人的消息中添加交互式元素,例如按钮或下拉菜单。
>我如何使我的Slack Bot与用户相互作用?通过对用户进行编程以响应消息或命令来与用户进行交互。您可以使用消息事件来收听传入消息,以及chat.postmessage方法发送消息。您还可以在机器人的消息中添加交互式元素(例如按钮),哪些用户可以单击以触发操作。
>
>我如何处理Slack Bot中的错误?通过使用编程语言中的错误处理技术,您的Slack Bot中的错误。例如,在JavaScript中,您可以使用尝试...捕获语句来捕获和处理错误。您还可以使用错误事件来侦听机器人运行时发生的任何错误。我可以自定义Slack Bot的外观吗?您的松弛机器人。创建它时,您可以为机器人设置自定义图标和名称。您还可以通过使用附件或块来自定义机器人消息的外观,从而允许您添加颜色,图像和其他格式。如何确保我的Slack Bot的安全性? 🎜>您可以通过遵循最佳的机器人开发实践来确保Slack Bot的安全性。这包括使您的机器人用户oauth访问令牌秘密,并且不与任何人共享。您还应该验证机器人收到的任何数据,以确保其来自受信任的来源。此外,您应该定期更新机器人的代码以修复任何安全漏洞。
以上是Slack Bot入门的详细内容。更多信息请关注PHP中文网其他相关文章!