最近社内でhubot × slackを使って、社内のコミュニケーションを取りやすくするために盛り上げてます。
そもそもhubotとは何なのか、から雑談対話APIを導入するまでブログしていきたいと思います。
■HUBOTとは
GitHub社が開発したチャットbot開発・実行フレームワークで、
開発フローに組み込むことで開発を楽にすることができます。
本来の使い方はそんな感じなんですが、せっかくなのでbotくんとコミュニケーション取りたいなと思い、
docomo雑談対話APIを使ってみました。
まずはhubotの環境構築から説明します。
■インストールする前に
slack側でhubotの設定をしましょう
1. slack hubotのapiを作成
https://slack.com/apps/search?q=hubot
アクセスしたら以下のように画面が出るのでトークンキーなど確認しましょう
トークンキーはあとで使うのでメモしときましょう。saveしたらhubotの構築です。
■hubotのインストール
1. まさかの二行でインストール
1 2 | #sudo yum install nodejs redis npm --enablerepo=epel #sudo npm install -g coffee-script hubot yo generator-hubot |
結局何をインストールしているのか
・hubotの本体
・命令を書くためのcoffee-script
・bot作成の作業を簡略化してくれるyeoman
・yeomanが利用するbot作成ジェネレータ generator-hubot
2. yoコマンドでbot作成だyo
1 2 3 4 5 6 7 | #mkdir adabot #cd adabot #yo hubot #Owner: adachin@adachin.com #Bot name:adabot #Description:エンター #Bot adapter:slack |
ちゃんと適宜変更してくださいね。今回はadapterはslackです。
3. 起動スクリプトの作成
1 2 3 4 5 | # vim slack.sh #!/bin/sh export HUBOT_SLACK_TOKEN=トークンキー ./bin/hubot --adapter slack # chmod 755 slack.sh |
4. hubotの起動
1 | ./slack.sh |
5. slackチャンネルにhubotを追加する
好きなチャンネルにhubotユーザを追加して上げてください!
テストとしてpingと打ってみてください。
できたら雑談対話apiを導入しましょう!!
■docomo雑談対話APIの登録~設定まで
1.API取得
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario
登録は無料なので、適当に新規でAPIを発行しましょう。
ポチポチとな。
2. APIをslack.shに追加する
1 2 | # vim slack.sh export DOCOMO_API_KEY=キー |
どこでもいいので追加します
3. hubot-docomo-dialogue
1 2 3 | $ npm install https://github.com/bouzuya/hubot-docomo-dialogue/archive/master.tar.gz $ cat external-scripts.json |grep hubot-docomo-dialogue "hubot-docomo-dialogue", →なかったら追加してください |
4.scriptsディレクトリにてcoffeeスクリプトを設置
1 2 | # cd ~/adabot/scripts # vim docomoapi.coffee |
# Description: | |
# DOCOMOの雑談APIを利用した雑談 | |
# | |
# Author: | |
# FromAtom | |
getTimeDiffAsMinutes = (old_msec) -> | |
now = new Date() | |
old = new Date(old_msec) | |
diff_msec = now.getTime() – old.getTime() | |
diff_minutes = parseInt( diff_msec / (60*1000), 10 ) | |
return diff_minutes | |
module.exports = (robot) -> | |
robot.respond /(\S+)/i, (msg) -> | |
DOCOMO_API_KEY = process.env.DOCOMO_API_KEY | |
message = msg.match[1] | |
return unless DOCOMO_API_KEY && message | |
## ContextIDを読み込む | |
KEY_DOCOMO_CONTEXT = 'docomo-talk-context' | |
context = robot.brain.get KEY_DOCOMO_CONTEXT || '' | |
## 前回会話してからの経過時間調べる | |
KEY_DOCOMO_CONTEXT_TTL = 'docomo-talk-context-ttl' | |
TTL_MINUTES = 20 | |
old_msec = robot.brain.get KEY_DOCOMO_CONTEXT_TTL | |
diff_minutes = getTimeDiffAsMinutes old_msec | |
## 前回会話してから一定時間経っていたらコンテキストを破棄 | |
if diff_minutes > TTL_MINUTES | |
context = '' | |
url = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=' + DOCOMO_API_KEY | |
user_name = msg.message.user.name | |
request = require('request'); | |
request.post | |
url: url | |
json: | |
utt: message | |
nickname: user_name if user_name | |
context: context if context | |
, (err, response, body) -> | |
## ContextIDの保存 | |
robot.brain.set KEY_DOCOMO_CONTEXT, body.context | |
## 会話発生時間の保存 | |
now_msec = new Date().getTime() | |
robot.brain.set KEY_DOCOMO_CONTEXT_TTL, now_msec | |
msg.send body.utt |
5.hubotの再起動
1 2 | ctl + c # ./slack.sh |
6.コミュニケーションを取ってみる
チャンネルの場合はちゃんと@付けてお話してくださいね。
■まとめ
これはワロス。
他にもデプロイあと何分で終わるよーとか
ランチ勝手に決めてもらったりなどなど。
なんか作ったらブログします−3−
0件のコメント