Bluemixで爆速Hubot&API連携

  • 14
    いいね
  • 0
    コメント

この記事はteratailのBluemixアドベントカレンダー4日目の記事です!

今時Bot動かすならBluemixだと風の噂で聞いたので、いっちょやってみます(`・ω・´)キリッ

目標

  1. HubotをBluemix上で動かす
  2. WatsonAPIをBluemix上でバインドする
  3. Hubotを通してAPIで遊ぶ

1. HubotをBluemix上で動かす

ローカルで作成

Bluemixにpushするために、まずはローカルでHubotを作っていきます!
以下はnode.jsとnpmを利用した手順です。

// インストール
npm install -g yo generator-hubot
npm install -g coffee-script

// 任意のプロジェクトディレクトリを作成する
mkdir mybot
cd mybot/

// hubotの作成
yo hubot

よしなにファイルが作成されるので、Procfileの中身をslack向けに書き換えれば完成です。

web: bin/hubot --adapter slack

/bin/hubot でとりあえずローカルで実行できます。
デフォルトでBotにpingと話しかけるとPONGと返してくれます。

スクリーンショット 2016-12-04 14.25.30.png

(caloryはBot名です、つっこまないでください。)

Hubotにmanifest.ymlというファイルを追加しておきます。

manifest.yml
applications:
- buildpack: https://github.com/jthomas/nodejs-v4-buildpack.git
  command: ./bin/hubot --adapter slack
  path: .
  instances: 1
  memory: 256M

Bluemixにデプロイする

Bluemix上にアプリの箱だけ先に作っておきます。
SDK for Node.jsを選んで作成を押すと、デプロイ手順が1つずつ説明されているのでこれに沿ってやっていきます!

まずコマンドラインから操作できるcf-cliをインストールします。
Macの人はbrew install cf-cliでOK。

コマンドラインからbluemixに接続していきます。

cf api https://api.***.bluemix.net

ここのURLはBluemixでスペースを作った地域(「米国南部」「シドニー」など)によって変わるので注意。
デプロイ手順に記載してあります。

cf login

ユーザ名とパスワード、スペース名等が求められるので入力。

cf push アプリケーション名

Bluemixに作っておいたアプリ名でpushします。
これで一応のデプロイは完了。

SlackとBotを連携

スクリーンショット 2016-12-04 14.45.28.png

SlackのCustom IntegrationsからHubotを追加します。
任意の名前、アイコン等を設定したら、API Tokenをコピー。
スクリーンショット 2016-12-04 14.45.52.png

このトークンがSlackとHubotの連携に必要なため、Bluemixの環境変数として登録します。

cf set-env bot名 HUBOT_SLACK_TOKEN トークン

Slack側でチャンネルにBotを招待!
/invite 名前で招待できます。
スクリーンショット 2016-12-03 18.23.25.png

爆速!

機能追加

hubotはscripts/にファイルを追加していくとゴリゴリ動いてくれます。

scripts/hoge.coffee
module.exports = (robot) ->
  robot.respond /hoge$/i, (msg) ->
    msg.send "ホゲー"

スクリーンショット 2016-12-04 15.16.59.png

こんな感じ。

2. WatsonAPIをBluemix上でバインドする

Bluemix上の「接続」からサービスを追加することができます。

スクリーンショット 2016-12-04 14.56.12.png

たくさんのBluemixのサービスが簡単に追加できてよいですね!

3. Hubotを通してAPIで遊ぶ

今回はSlackに画像を投げたらHubotがVisualRecognitionという画像認識のAPIに渡し、戻ってきたデータであそ

・・・びたかったのですが。

スクリーンショット 2016-12-04 15.19.09.png

Hubotにはデフォルトで画像を受け取ってくれる機能はないようです・・。
LINEBotのイメージでmessageとimageを簡単に処理してくれるのではと勝手に思っていました(´;ω;`)うっ

自前で実装するとなんとかやってくれる方法もあるようです。
http://a3no.hatenablog.com/entry/2015/09/13/005334

カレンダーの日にち的にタイムリミットが近いので、続きはどこかの記事で・・・!

ご利用は計画的に!\(^o^)/ぎゃぼん

明日は@n0bisukeさんです!すごいやつよろしくお願いします!(煽り