仕事中に会議とかの司会がよくわからないタイミングで回ってくるのでbotに聞いたら返してくれるのを作りたいというのがやろっかなの大元。
とりあえず、動くまでになったけど色々と大変だったので備忘録として。
構成はSlack+Hubot。
slack bot
で検索したらHubotが一番多かったからこれを利用。
前提
- npm 使える(install済み)
- slack使う(slackよくわかんなくても大丈夫)
- herokuアカウント持ち
- herokuについてのある程度の理解(herokuの説明はしない)
Slackで個人用のチームを作る
ちょっと前まではできなかったみたいだけど今は複数のチームを単一のslack内で管理できるのでみんなガンガン個人用とか立てるといいよ。
Slack: Where work happens
Create new teamする。
Hubotの準備というか作成?
準備
楽そうなのでyoとgenerator-hubotをインストール
$ npm install -g yo generator-hubot
作成
適当な場所にボットの名前でフォルダを作成(別にボットの名前じゃなくてもいいし名前はなんでもいい)
$ mkdir bot-name
$ cd bot-name
$ yo hubot
しばらくすると色々聞かれます。
Owner/Bot name/Descriptionは適当になんでもいいっす。
Bot adapterというのがどの環境というかアプリでボット使うか見たいなやつ。
defaultがcampfireになっていますが、今回はslackが対象なのでslackと入力。
これの説明がないHOWTO解説が多くて結局英語読んだよ!
? Owner tkatsura
? Bot name bot-name
? Description A simple helpful robot for your Company
? Bot adapter slack
終わったら、その場でbin/hubot
すると対話型のコンソールに。
なんかそのままだと普通に改行されていないのでなんかやるたびにエンター押すといいよ。
最初入力見えねーし。
$ bin/hubot
bot-name> [Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script.
Your hubot-scripts.json is empty, so you just need to remove it.
[Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)`
[Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
bot-name> bot-name ping
bot-name> PONG
bot-name> exit
諸々エラーが出てますが、適切に対応してください。
ERROR hubot-heroku-alive included
はherokuでの利用目的用のエラーなのでここではスルーするといいよ。
bot-name $ rm hubot-scripts.json
bot-name $ git init
bot-name $ git add .
bot-name $ git commit -m 'first commit'
[master (root-commit) 299e0b0] first commit
9 files changed, 388 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .gitignore
create mode 100644 Procfile
create mode 100644 README.md
create mode 100755 bin/hubot
create mode 100644 bin/hubot.cmd
create mode 100644 external-scripts.json
create mode 100644 package.json
create mode 100644 scripts/example.coffee
herokuに展開
ボット名でherokuAppを作成(ここも別になんでもいいっす)
bot-name $ heroku create bot-name
Creating ⬢ bot-name... done
https://bot-name.herokuapp.com/ | https://git.heroku.com/bot-name.git
bot-name $ git push heroku master
...
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (13/13), 5.92 KiB | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
...
bot-name $ heroku open
画面にCannot GET /
が表示されていればここまでの工程は成功。
slackのチームとの関連づけ
App Directory | SlackでHubotと検索すると出てくるやつに色々登録。
さっきチームを作った場合はすでにログインしてると思うのでそのままAdd Configuration
するとBOTの名前なんにするんって聞かれる。
これはyo hubot
で言うところのbot nameにするのがいいと思う。
混乱しなくて済むし。
するとHubotに必要なAPIKEYとか色々出てくる。
herokuへ諸々を設定
APIKEYとか設定。
あとHUBOTはRedisを使うのでadd-on設定するの忘れてた。
$ heroku config:set HUBOT_SLACK_TOKEN=************************************
$ heroku addons:create redistogo:nano
色々調べたところこれだけでもいいっぽい?
他のだとTEAMとかBOTNAMEとか設定してたりするけど必要ないらしい。
ちゃんと英語読めばわかるかも。
そのほかにfreeでheroku使う場合は規定の時間の間だけ起動し続けられるようにHUBOT_HEROKU_KEEPALIVE_URL
を設定するといいらしい。
オプションとしてHUBOT_HEROKU_WAKEUP_TIME
(起きる時間)とかHUBOT_HEROKU_SLEEP_TIME
(寝る時間)とかHUBOT_HEROKU_KEEPALIVE_INTERVAL
(ノックするインターバルタイム:default:5分)とかを設定できるそうです。
そこらへんはご自由にどうぞ。
ここまですることですでにslackのチームにbotがユーザーとして招待されているはず。
適当なチャンネルに招待して、bot-name ping
でPONG
と返ってくれば成功。
自分用に改変
ここまでが全部準備でここからが本番。
と言ってもあとは自由にして欲しいんだけど、入口だけ。
自分でボットの動きを作りたい場合はscripts
フォルダ内に名前はなんでもいんだけど例えばtest.coffee
を作る。
ほかに特に設定は必要なくて勝手に読み込んでくれるのでスクリプトの内容だけを気にすればいい。
どう言う風に書いたらいいかはscripts
フォルダ内にすでにsample.coffee
があるのでそれのコメントアウトを外して見てどれがどう言う風に動いているかとか確認しながら改変していくといいかも。
# Description:
# 今日のランチ何にするかランダムで出力してくれる
module.exports = (robot) ->
lunch = ['らーめん','イタリアン','中華','カレー','うどん・そば','肉']
robot.hear /lunch/i, (res) ->
res.send res.random lunch
ちなみにローカルで一回確認できるのでエラーなどの確認はそのままローカル環境で確認するといいかも。
問題があればhubotと対話する前にエラーが出て進めない。
$ bin/hubot
bot-name> lunch
bot-name> ラーメン
bot-name> exit
OKの場合はこのままheroku環境にdeployすることでslackでも確認できる。
$ git add .
$ git commit -m 'Add lunch rand'
$ git push heroku master
これでおk。あとは好きにボットを調整してみるといい。
サンプルに結構色々のってるのでそれをちょっと改変するだけでもそれなりのものができると思う。