hubot-chatwork を使っていて、どうにも困ったのが ChatWork 記法の少なさ。
なによりも改行を行なう記法がなく API から利用するときすごく困っていた。
今回いろいろ試して改行を含んだテキストを送ることができたのでメモ。
ついでにインストール方法もメモ。
nodejs のインストール
$ curl --silent --location https://rpm.nodesource.com/setup | sudo bash -
$ sudo yum -y install nodejs npm
hubot のインストール
$ sudo npm install -g yo generator-hubot
$ yo hubot --adapter chatwork
_____________________________
/ \
//\ | Extracting input for |
////\ _____ | self-replication process |
//////\ /_____\ \ /
======= |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|
? Owner name <email>
? Bot name cwbot
? Description A simple helpful robot for your Company
hubot 作成時の注意!
作成する bot の名前を「hubot」とすると以下のようにエラーになります。
Linux ユーザー名は hubot でもいいけど、bot の名前は別のものにしましょう。
npm ERR! Linux 2.6.32-504.el6.x86_64
npm ERR! argv "node" "/usr/bin/npm" "install" "hubot" "hubot-scripts" "hubot-diagnostics" "hubot-help" "hubot-heroku-keepalive" "hubot-google-images" "hubot-google-translate" "hubot-pugme" "hubot-maps" "hubot-redis-brain" "hubot-rules" "hubot-shipit" "hubot-chatwork" "--save"
npm ERR! node v0.10.36
npm ERR! npm v3.5.3
npm ERR! code ENOSELF
npm ERR! Refusing to install hubot as a dependency of itself
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /home/hubot/hubot/npm-debug.log
デプロイ先は heroku
なにも設定せずとも heroku logs とか見られるし、やっぱ楽だよね。
$ cd cwbot
$ heroku login
$ heroku create
$ git init
$ heroku git:remote -a floating-everglades-xxxx
$ heroku config:set HUBOT_CHATWORK_API_RATE=[request/1hour]
$ heroku config:set HUBOT_CHATWORK_ROOMS=[ROOM ID]
$ heroku config:set HUBOT_CHATWORK_TOKEN=[API TOKEN]
$ heroku config:set TZ="Asia/Tokyo"
$ vi script/webhook.coffee
※後述
$ git add. && git commit -m 'update' && git push heroku master
webhook の POST を受けて整形してチャットに流すサンプル
試したいのが改行を含んで返すということだけだけど、
webhook の処理をちょうど書いていたのでサンプルもそれに沿う。
# Description:
# Accepts webhook POSTs and delivers to Chatwork
#
# Dependencies:
# None
#
# Configurations:
# HUBOT_CHATWORK_ROOMS
# HUBOT_CHATWORK_TOKEN
#
# Commands:
#
module.exports = (robot) ->
robot.router.post '/cwbot/hooks/:room', (req, res) ->
room = if req.params.room? then req.params.room else process.env.HUBOT_CHATWORK_ROOMS
data = req.body
message = "[info][title]#{data.info.status}: #{data.info.name}[/title]"
message += """
status: #{data.info.status}
url: #{data.info.url}
Item values:
[code]#{data.item.key} : #{data.item.value}[/code][/info]
"""
robot.messageRoom room, message
# Respond to request
res.writeHead 200, { 'Content-Type': 'text/plain' }
res.end 'Thanks'
[title]や[code]など直後には暗黙の改行が入るが、
通常のテキストだけでは改行を表すことができない。
もちろん html タグも使えないし、「\n」も使えなかった。
だがヒアドキュメントだと ChatWork API 経由でも改行が適用された!
coffee script では「"""」か「'''」で囲めばヒアドキュメントになる。
ダブルコーテーションのときのみ「#{}」で変数を埋め込める。
curl で叩いて確認
curl -sS -H 'Content-type: application/json' -X POST -d "{\"info\":{\"name\":\"hogehoge\",\"status\":\"true\",\"url\":\"http://example.com\"},\"item\":{\"key\":\"0001\",\"value\":\"fugafuga\"}}" https://<hubothost>/cwbot/hooks/<room id>
うん、ちゃんと改行されてる。