>
鑰匙要點
>您將看到傳出的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中文網其他相關文章!