首頁 > web前端 > js教程 > Slack Bot入門

Slack Bot入門

Lisa Kudrow
發布: 2025-02-20 12:30:12
原創
974 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板