用 Hubot 打造聊天機器人#2 - hubot 專案部署到 heroku 連接 slack 聊天通訊軟體

在這篇文章內,開始介紹 heroku 上部署 hubot 專案並且連接 slack 聊天通訊軟體。

學習內容大綱

  1. slack 的準備
  2. hubot 的準備
  3. 部署到 Heroku
  4. 哈囉機器人來跟我對話吧
  5. 注意事項
  6. 參考

slack 的準備

在這裡假設你已經有 slack 頻道,我們從 https://my.slack.com/services/new/hubot slack 網站內的指定頻道申請 hubot 註冊

輸入機器人的名稱

在這個頁面將機器人的組態設定,Username 輸入:cube-hubot,當然你也可以自訂名稱,接著按下「Add Hubot Integration」按鈕

查看 slack token 或自訂圖標

在這一頁面,可以取得環境變數 HUBOT_SLACK_TOKEN

確認之後,就可以儲存,但務必要將 HUBOT_SLACK_TOKEN 的值複製起來,方便之後在程式上的使用。

本機端測試

安裝 hubot-slack 套件

1
$ yarn add hubot-slack

然後我們再拿剛剛建立出來的 HUBOT_SLACK_TOKEN 令牌將這組 token 放在全域,啟動看看 hubot

1
2
$ export HUBOT_SLACK_TOKEN=xoxb-*********
$ ./bin/hubot --adapter slack

輸入以下的指令,將 hubot 透過 adapter 串接起 slack 執行程序

1
$ HUBOT_SLACK_TOKEN=xoxb-********* ./bin/hubot --adapter slack

然後可以打開 slack 的 hubot 對話看看,請輸入 ping,這時候機器人回你 PONG 時就代表成功了。

部署到 Heroku

我們完成了在本機端的成功測試,因為我們不太可能一直在本機端一直開著服務,在這個步驟則是將專案程式推送到 heroku 雲端服務器上,也比較方便使用,首先在 heroku 登入之後新增一個 app

使用 heroku cli 登入

1
2
3
4
5
6
heroku login
› Warning: heroku update available from 7.22.4 to 7.24.1.
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/4b02d9c9-2e5d-4b84-9b93-4bd8dc64eb46...
Logging in... done
Logged in as xxxxxxx@gmail.com

將程式推上 heroku

1
2
3
4
5
6
$ cd cube-hubot
$ git init
$ heroku git:remote -a cube-hubot
$ git add .
$ git commit -am "hubot init"
$ git push heroku master

heroku 設定 HUBOT_SLACK_TOKEN 環境變數

1
2
3
4
$ heroku config:add HUBOT_SLACK_TOKEN=xoxb-*********
$ heroku config:add HEROKU_URL=https://cube-hubot.herokuapp.com
$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web_url | cut -d= -f2)
$ heroku config

此時你就可以發現你的 slack 上的 hubot 已經上線了,那麼你就可以照著剛剛本機端測試一樣的方式看看。
打開 slack 的 hubot 對話輸入 ping,這時候機器人回你 PONG 時就代表成功了。

由於 pingPONG 的一來一回的對話是預設的,不免俗的希望機器人有更多豐富的內容通知。

所以,有了這麼棒的聊天機器人環境,我們就可以在專案上的 scripts 資料夾裡寫點程式讓機器人回應一下

哈囉機器人來跟我對話吧

由於 hubot 的預設程式是用 coffeescript 語法,而這個語言可以到 這裡學習Coffeescript,相信你也可以學習很快。那麼接下來請在 scripts 資料夾新增一個 hello.coffee 檔案,內容輸入

1
2
3
module.exports = (robot) ->  
robot.respond /hello/i, (msg) ->
msg.send "world!"

這個意思是全域的讓 hubot 等待監聽用戶輸入 hello,確認跟文字相符之後,就回傳一個叫 world! 的字眼。將檔案存檔之後,請將它推上 heroku

1
2
3
$ git add .
$ git commit -am "add hello file"
$ git push heroku master

輸入 hello 就會回傳 world!

good. 大功告成喔,如此一來,在這環境之下,可以撰寫一些希望機器人幫你做事的服務,比如查氣象、查股價、查youtube影片、查照片 等等,聽起來很美妙對吧!

注意事項

  • 如果在創建 hubot 沒有將 adapter 適配器裝上 slack 的話,請修改專案的 Procfile 檔案填入:web: bin/hubot -a slack ,這個更改之後在推到 heroku git push heroku master
  • heroku 的免費方案是每 24 小時就會停機 6 小時,我們可以使用 hubot-heroku-keepalive 套件讓他維持 keep alive 維持活著狀態。

參考