こんにちは、技術研究所のウエサマです。

 

この記事は、質問すると答えを教えてくれるボットをIBM Watsonで実装し、Slack、Twitterに組み込んで使ってみたという記事(チュートリアル)の後編となります。
今回のポイントはメッセージを受信しWatsonへの問合せを行うスクリプト部分への変更を行うことなく、ボットを稼働させるプラットホームをSlackからTwitterに変更するという点になります。
このようにHubotはプラットホームの違いをAdapterにて吸収してくれるため、開発資産を有効に活用する事ができます。
前編はこちら⇒Slack、TwitterにWatson質問応答botを作ってみた(前編)

Twitterで動かす準備

手順はSlackにボットを追加したときと同じ流れになります。
違いは次の3点となります。

・Twitterへのアプリ追加(Twitter上で作業します)
・HubotのAdapterとしてTwitterを指定
・Twitterへのアクセス情報(トークンなど)をherokuに設定

では、Twitter側の準備からはじめます。

①Twitterへのアプリ追加
Twitter上で動作させるボットアプリの追加を下記サイトにて行います。
http://apps.twitter.com/

ログイン後に”Create New App”をクリックします。
Nameなどの必要事項を入力し、Developer Agreementにチェックを入れ”Create your Twitter application”をクリックします。
 

追加が完了すると、アプリに関する詳細情報が表示されます。
表示を”Keys and Access Tokens”タブに変え、4つのアクセス情報を控えておきます。

まず2つ。
・Consumer Key (API Key)
・Consumer Secret (API Secret)

残り2つは、画面下にある”Create my access token”をクリックし取得します。
・Access Token
・Access Token Secret

取得したトークンは、Hubotに与える環境変数としてHerokuに設定します。(手順は後述)

取得したトークンと環境変数の対応

# 各種トークン(Twitterから取得) 環境変数(Herokuに設定)
1 Consumer Key(API Key) HUBOT_TWITTER_KEY
2 Consumer Secret(API Secret) HUBOT_TWITTER_SECRET
3 Access Token HUBOT_TWITTER_TOKEN
4 Access Token Secret HUBOT_TWITTER_TOKEN_SECRET

Hubotの準備

①ターミナル(コマンドプロンプト)にて構築
前編と同様にherokuへログインし、ボット名でフォルダを作りカレントディレクトリを変え、yoコマンドにてボットのHubotの雛形を作ります。
尚、今回ボットの名前はgarbageqatweetとしています。

$ heloku login
$ mkdir ボットの名前(garbageqatweet)
$ cd ボットの名(garbageqatweet)
$ yo hubot

yoコマンド実行後に次の4点について入力を求められます。
最後のAdapter指定はtwitterとします。(前編ではslackとしました)

# 入力項目
1 Owner herokuのアカウント
2 Bot name ボット名を指定
3 Description 説明
4 Bot adapter twitter

②スクリプトの記述
スクリプトは前編と同じく、メッセージを受け取るとWatsonに問合せ、その応答を返すという動作を記述します。
ですが、新しく記述する必要はなく前編のSlackボットの時に作成したスクリプトを、そのまま使い回します。
この点がHubotの良い点で、動作するのがSlackなのかTwitterなのかの違いをadapterが吸収してくれます。
このためbotの振る舞いとなるScriptの記述はプラットホームを気にせず処理を書く事ができます。
下記のように前編で作成したcoffeeスクリプトを、今回のbotにコピーし使えるようにします。

$ cp ~/garbageqabot/scripts/garbageqabot.coffee ./scripts

Hubotの動作確認

①ローカルで動かす

試しにローカル環境で動作させてみましょう。

$ bin/hubot

②アダプター(Twitter)を指定しローカルで動かす

次にアダプタを指定し、ローカル起動を行い実際にTwitterからのメッセージを処理できるか確認します。
尚、起動前にTwitterから取得した4つのトークンんを環境変数に設定してから起動します。

$ export HUBOT_TWITTER_KEY=Consumer Key(API Key)
$ export HUBOT_TWITTER_SECRET=Consumer Secret(API Secret)
$ export HUBOT_TWITTER_TOKEN=Access Token
$ export HUBOT_TWITTER_TOKEN_SECRET=Access Token Secret
$ bin/hubot -a twitter

上記の通り-aオプションにtwitterを指定し起動。
その後、Twitterから@garbageqatweet宛につぶやいてみます。

起動したローカル側でもメッセージを返している様子が表示されます。

③Herokuで動かす

Gitへの追加、アクセス情報の環境変数へのセットを行いデプロイします。

$ cd ~/garbageqatweet

$ git init
$ git add -A
$ git commit -am “make it better”
$ heroku create garbageqatweet
$ heroku config:set HUBOT_TWITTER_KEY=”Consumer Key(API Key)”
$ heroku config:set HUBOT_TWITTER_SECRET=”Consumer Secret(API Secret)”
$ heroku config:set HUBOT_TWITTER_TOKEN=”Access Token”
$ heroku config:set HUBOT_TWITTER_TOKEN_SECRET=”Access Token Secret”
$ git push heroku master

以上が手順となります。

補足:Herokuで今回のアプリ(garbageqatweet)を再起動すると環境変数が未設定となり正しく動作させる事ができません。
対処としてgarbageqatweetの直下に下記ファイル(garbageqatweet.sh)を作成しデプロイし対応しましたが、起動時に何か読み込ませて処理をさせる方法はいくつかあると思いますので、そのあたりはheroku関連の記事を検索すると良いかと思います。

!/bin/sh

export HUBOT_TWITTER_KEY=”Consumer Key(API Key)”
export HUBOT_TWITTER_SECRET=”Consumer Secret(API Secret)”
export HUBOT_TWITTER_TOKEN=”Access Token”
export HUBOT_TWITTER_TOKEN_SECRET=”Access Token Secret”
bin/hubot

さいごに

今回、Twitter上での確認を私自身の個人アカウントを使い、ひたすらゴミの廃棄に関する事をつぶやいていたら、友達がこれに反応し親切にも回答をしてくれました。実は、いちばん欲しい役立つ回答はこっちですね(笑)

人工知能ボットもこのレベルに達したらいいな・・・
注:お友達の返信にある木材の取扱いは、私の住む自治体では正しい扱いとなります。
実際に廃棄されるときは自治体のガイドに沿ってくださいね。