LoginSignup
19
21

More than 5 years have passed since last update.

Hubot on BluemixでWatsonボット

Last updated at Posted at 2015-05-06

【注意】Watson QAサービスは2015年12月16日をもって提供終了となりました。

Bluemix上に公開されているWatson Question and Answer (Watson QA)サービスのユーザインタフェースとしてHubotによるtwitterボットを実装してみました。

前提

ローカルでのhubot-twitterアプリ作成

ローカルhubot作成
$ sudo npm install -g yo grunt-cli bower
$ sudo npm install -g coffee-script
$ sudo npm install -g generator-hubot
$ mkdir travelqabot
$ cd travelqabot
$ yo hubot:app --owner=travelqabot@gmail.com --name=travelqabot --description=travelqabot --adapter=twitter
  • ローカル起動用スクリプトの作成
./local_run.sh
#!/bin/sh

HUBOT_TWITTER_KEY="[Consumer Key (API Key)]の値" \
HUBOT_TWITTER_SECRET="[Consumer Secret (API Secret)]の値" \
HUBOT_TWITTER_TOKEN="[Access Token]の値" \
HUBOT_TWITTER_TOKEN_SECRET="[Access Token Secret]の値" \
PORT=3000 \
bin/hubot -a twitter -n travelqabot
  • ローカル実行テスト
hubotテスト実行
$ chmod +x local_run.sh 
$ ./local_run.sh 

この状態で、任意のtwitterアカウントから"travelqabot ping"とツイートすると、ボットが"PONG"と返してきます。

Bluemixへのアップロードとテスト

manifest.ymlを準備します。メモリが128MB以下ではメモリ不足になるかもしれません。

manifest.yml
applications:
- name: travelqabot
  path: .
  memory: 256M

Hubot generatorが自動生成したpackage.jsonに実行スクリプトを追加します。

package.json(追加部分)
  "scripts": {
    "start": "bin/hubot -a twitter -n travelqabot"
  }

以上の修正を行ったあと、Bluemixにアプリケーションを作成し、環境変数設定をしたうえでプッシュ起動します。

$ cf app travelqabot
$ cf set-env travelqabot HUBOT_TWITTER_KEY "[Consumer Key (API Key)]の値"
$ cf set-env travelqabot HUBOT_TWITTER_SECRET "[Consumer Secret (API Secret)]の値"
$ cf set-env travelqabot HUBOT_TWITTER_TOKEN "[Access Token]の値"
$ cf set-env travelqabot HUBOT_TWITTER_TOKEN_SECRET "[Access Token Secret]の値"
$ cf env travelqabot # Confirm
$ cf push travelqabot

ここでアプリケーション起動に成功すれば、ローカル実行と同様、"ping"に対して"PONG"が返ってきます。

以上でBlumix上でhubotを動かすことができました。

Watsonクエリ機能の実装

Watsonクエリはいろいろなところで紹介されているとおりですが、今回はcoffeescriptで実装してみました。対象はtravelドメインです。

今回はインタフェースがtwitterであるため、全文を返すことができません。そこで、全文をredisに登録し、別途参照できるようにしています。(メンションしてきたアカウント名が長かったなどのエラー処理は省略)もちろん、redisはBluemixのサービスを使用しています。

今回のサンプルアプリケーションでは、Watso Q&Aとredis以外にサービス状態監視のMonitoringAndAnalyticsサービスも利用しています。したがって、それぞれ、manifest.ymlへの登録、サービスの作成とバインドが必要です。

サービス名 サービス プラン
travelqabot-service question_and_answer question_and_answer_free_plan
travelqabot-redis redis 100
travelqabot-monitor MonitoringAndAnalytics Free

詳細は、ソースのscripts/にある各スクリプトをご覧ください。

最後にサンプルアプリケーションの実行イメージを貼り付けておきます。

  • Twitterボットとの会話例

    travelqabot-conversation.png

  • Watsonへのクエリのログ (/d/short-urlで参照)

    travelqabot-watson-query-log.png

まとめ

  • Bluemixでhubotを動作させることは何の工夫も必要としませんでした。もともとhubotはherokuを考慮してあるため当然かとは思われますが。
  • Watson Q&A(QAAPI)のログは階層が深いため、coffeescriptを使うとjsの場合よりもかなり読みやすくなりました。
  • Bluemix上のredisは非常に簡単に使うことができますが、いくつか難点があります。
    • RedisはBluemixの外から接続することができないため、ローカル環境では別途redisを立てておかなければなりません。
    • 上記ともからみますが、Bluemixの外から接続できないということは、redis-cliでの操作を行うことができないため、データの削除などをする方法がありません。データを削除するためには、自前で実装するか、サービスを削除し再作成することになります。後者ではもちろん全データが削除されます。
  • MonitoringAndAnalyticsサービスは以下の状態の統計をとることができます。起動スクリプトがnode/npmの場合は自動でライブラリを呼び出すとのことですが、hubotの場合は手動で呼び出す必要があるようです。(scripts/monitor_conf.coffee)
    • 可用性: アプリケーションの可用性と応答時間
    • 性能モニタリング: 最低速要求、スループットと応答時間、CPU使用率、メモリー使用量
    • ログ分析: 実行ログ(node_logsなど)の検索
19
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21