2017年5月21日

Hubot 教學 (3) - 建立 Scripts ( Create scripts for your Hubot )

安裝與設定 Hubot 中我們已經將 Hubot 建立好,接著本篇將繼續介紹如何新增、撰寫 Scripts 讓你的 Hubot 與 Slack 結合起來。(If you want to read this article in English, you can visit here)



前置作業
開始之前,再確認一下你有成功安裝 Node.js 與 npm,指令如下:
# 查看 Node.js 版本
nodejs -v

# 查看 npm 版本
npm -v


新增自訂 Scripts
在之前的教學中,我們透過 Yo 建立 Hubot 後,你可以在整個 Hubot 專案裡看到有一個 scripts 資料夾,Hubot 啟動後會自動讀取這個資料夾裡面的 Scripts,所以這也就是我們接下來新增 Script 所要放置的地方。現在,讓我們新增一個簡單的 Script,你可以使用 JavaScript 或者是 CoffeeScript:
module.exports = (robot) ->

  # Show some information
  # 用法: show_info
  robot.respond /show_info/i, (msg) ->

    # 傳回多行文字訊息
    msg.reply """Put your information here
    and here ....
    and here ....
    """
由上面簡單的範例你可以看到,Hubot 透過 robot.respond 來針對你所輸入指令做出反應,然後再利用 reply 回傳資料或是文字訊息。除了 respond 以外你也可以使用 hear。而 respond 與 hear 的差別在於,respond 只針對你所輸入的文字完全符合的狀況下才會做出反應,而 hear 則是會檢查文字中是否有符合的字串。下面則是比較進階的用法:
  # Call a HTTP API
  # 用法: call-http [param1] [param2]
  robot.respond /call-http (.*) (.*)/i, (msg) ->

    # 取得指令給予的 2 個參數
    data = JSON.stringify({
      param1: msg.match[1]
      param2: msg.match[2]
    })

    # 送出 POST Request,並傳回訊息
    msg.http('/url/to/your/service')
      .header('Content-Type', 'application/json')
      .post(data) (err, res, body) ->
        if res
          if res.statusCode isnt 200
            msg.reply "Something goes wrong ..."
            return
          msg.reply "Return your data or messages"
        else
          msg.reply "Something goes wrong ..."

最後記得你自己建立的檔案 ( .js 或者是 .coffee ) 要放在 Scripts 資料夾底下。


整合 Hubot 與 Slack
我們剛剛建立的 Script 還沒有辦法正常的運作,因為 Slack 還不知道你 Hubot 的存在,所以我們需要去 Slack 上面註冊一個 Hubot。進入 Slack 後,點選 Apps & Integrations 然後選擇 Bot,在 Bot 列表中選擇新增一個 Hubot。新增完成後,你可以看到有一個 API_token,這個 Token 就是唯一能讓你的 Hubot 與 Slack 正常運作的關鍵。


啟動 Hubot
使用 API_token 方式有兩種,一種是啟動時加入參數,方法如下:
HUBOT_SLACK_TOKEN=your-api-token ./bin/hubot --adapter slack
或者把 API_token 加到你的環境變數中即可,如此一來我們就完成所有設定的步驟。接下來,你就可以開始在 Slack 中對 Hubot 下達指令。


Environment :
  ・ Debian
Reference :
  ・ Hubot