2015年12月23日 星期三

開發Slackbot的筆記

source: https://github.com/vampirewalk/vanguard

本來是想用swift開發的,但是後來想到Foundation在Linux上還沒實做 (這裡有進度),只好先用Go做了。

Slack Group設定

要先到Group裡的Apps & Custom Integrations加入Bots Integration,在這裡會得到token,等一下會給bot用。

開發

主要用的是https://github.com/nlopes/slack這個library,它實做了slack的Real Time Messaging API,底層走的是WebSocket。做出來的效果嘛,以我的slackbot為例,如下圖,只要在channel裡面貼出github repo的訊息,bot會自動返回repo的語言、star、issue數。

repobot

簡單的範例開始改,ConnectedEvent就是bot連上group,MessageEvent就是bot接收到訊息,依此類推。我的bot就是在MessageEvent把接收到的訊息做分析,如果包含Git repo,就透過https://api.github.com/repos/[user]/[repo]這個endpoint拿到repo的資料,然後再回傳。

Heroku

Bot做好之後要找個雲端放,目前我用Heroku,可以參考https://devcenter.heroku.com/articles/getting-started-with-go#introduction。要讓Go可以在Heroku上跑需要三個步驟

  1. Godep
  2. Procfile
  3. env

Godep

整個project做好後,用godep管理vender code。

godep save -r

Procfile

這邊用的是worker

worker: slackbot

設定env參數

可以透過Heroku的管理介面或是透過command設定

heroku config:set SLACK_TOKEN=YOUR_REAL_TOKEN

然後在Go裡面用下面的方式拿到實際參數,這樣就可以避免在open source時洩漏token了。

token := os.Getenv("SLACK_TOKEN")

本地測試

可以在本地建立一個.env檔,內容就是

SLACK_TOKEN=YOUR_REAL_TOKEN

然後用heroku local測試,這樣一樣可以拿到參數。

注意事項

有一點要注意的是現在bot似乎不能主動加入channel,必須先在channel裡面用invite指令邀請bot進聊天室才能讀到訊息。

/invite YOUR_BOT_USERNAME

沒有留言:

張貼留言