:::: MENU ::::

hubot-chatworkで改行を含んだ内容をChatWorkに投稿する

Pocket

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>

webhook_hubot2chatwork

うん、ちゃんと改行されてる。

Pocket


So, what do you think ?