Slack Bot入門
>
鑰匙要點簡化了
- 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)集成來拓寬機器人的實用性,鼓勵進行持續的開發,使其成為團隊協作和生產力的多功能工具。
- >
- 創建一個新的鬆弛集成
>您將看到傳出的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!”。
>編寫bot邏輯
創建一個名為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是一項方便的服務,可幫助您在很少的時間內免費在線獲取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輸入字段中,並在掛鉤的名稱和圖標(如果需要)的名稱和圖標上。 。
>還有一個步驟可以使機器人在線:我們需要給它一個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並測試!
如果您沒有得到響應,請返回並檢查您的代碼。您可以使用終端命令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
登入後複製
看起來不錯!讓我們部署它。
>重新部署到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訪問令牌秘密,並且不與任何人共享。您還應該驗證機器人收到的任何數據,以確保其來自受信任的來源。此外,您應該定期更新機器人的代碼以修復任何安全漏洞。 >
>登錄後,您會看到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類型來創建骰子滾動聊天命令。
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
登入後複製
看起來不錯!讓我們部署它。
>重新部署到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訪問令牌秘密,並且不與任何人共享。您還應該驗證機器人收到的任何數據,以確保其來自受信任的來源。此外,您應該定期更新機器人的代碼以修復任何安全漏洞。 >
>在上一節中,我們使用了一個傳出的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和節點模塊都可以使您實現這兩個目標。
- >使用github api向您展示打開拉請求
- >使用Yelp API幫助您的團隊決定午餐 的機器人
- > Google為您搜索的機器人
- >僅與流行語和行話與您交談的機器人
- 如果您想出好主意,請分享您的代碼!機器人製作很有趣,而且它們從來沒有更容易創建。 >
>如何創建一個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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。
