こんにちは。キャスレーコンサルティングCSVクリエーション部の秦です。
今回は、コミュニケーションツールのひとつであるSlackを使って
チャットボットを作る手順をご紹介します。
Slack用のチャットボットを作るにあたり、本稿ではHubotを使います。
Node.jsとnpmのインストール
Hubotは、Node.jsで開発を行いますので、まずはNode.jsとnpmをインストールします。
https://nodejs.org/ja/
インストール確認として、バージョンを表示してみましょう。
node -v npm -v
Hubotの作成
次にHubotを作成しましょう。
まず、必要なパッケージをインストールします。
npm install -g hubot yo generator-hubot coffee-script
任意の場所にHubot用のディレクトリを用意し、「yo」コマンドでHubotを作成します。
mkdir hubot cd hubot yo hubot
順にオーナー名、bot名、botの説明、botのアダプターを入力します。
アダプターには、Slackを指定します。
動作確認をしてみましょう。
Hubotを起動し、「bot名 PING」と打ってみてください。
./bin/hubot
Hubotが「PONG」と返してくれました!
SlackにHubotを追加
SlackにHubotを追加します。
追加するためにはSlackの権限が必要になりますので、
権限を持っていない場合は、管理者に追加してもらってください。
App DirectoryからHubotを検索し、install、Hubot名を入力します。
API Tokenが発行されます。トークンは以降の手順で使います。
IBM Bluemixにデプロイ
本稿では、HubotのサーバにIBMのBluemixを利用します。
まず、IBM Bluemixのアカウントを作成します。(手順は割愛させて頂きます)
https://console.bluemix.net/
次に、Bluemixにログインして組織とスペースを作成します。
本稿では、スペースはシドニーで作成します。
IBM Bluemixカタログのページから、「SDK for Node.js™」を選択します。
アプリ名とホスト名を入力してください。本稿では、先の手順で付けたHubot名で統一します。
Bluemixを操作するために、Clound Foundry CLIをインストールします。
https://github.com/cloudfoundry/cli
以下のコマンドで、動作確認をしましょう。
cf -v
APIのエンドポイントを、設定します。
cf api https://api.au-syd.bluemix.net
Bluemixにログインします。
以下のコマンドの後に、メールアドレスとパスワードを入力してください。
cf login -a https://api.au-syd.bluemix.net
BluemixにHubotをpushします。
cf push hatabot -m 256m --no-start
先の手順で取得した、API Tokenを設定します。
cf set-env hatabot HUBOT_SLACK_TOKEN APIトークン
Hubotを起動します。
cf start hatabot
動作確認
Slackに、Hubotを招待してください。
以下のコマンドを、Slack上で実行します。
/invite hatabot
招待したbotがオンラインになっていれば、無事に接続できています。
離席状態になっている場合は、Bluemix起動時にエラーが起きている可能性があります。
ログを確認し、エラーを解消したら再起動してみましょう。
cf logs hatabot --recent cf restart hatabot
Hubotに、話しかけてみましょう。
hata> @hatabot PING hatabot> PONG
HubotからPONGが返ってくれば、動作確認完了です!
A3RT Talk APIを導入してみる
トークスクリプトを自作しても良いのですが、折角ですのでAPIを利用してみます。
会話APIには色々なものが公開されていますが、本稿では手頃に導入できるAPIをひとつご紹介します。
株式会社リクルートテクノロジーズ様が無償公開している、「A3RT Talk API」を利用させて頂きます。
まず、API KEYを取得します。
https://a3rt.recruit-tech.co.jp/product/talkAPI/
次に、scripts配下にa3rt.coffeeを作成してください。
# Description: # A3RT API using script. # # Commands: # hubot Sentence request = require('request') API_KEY = '取得したAPIキー' endPoint = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk' module.exports = (robot)-> robot.respond /(.*)/i, (res) -> text = res.match[1] console.log('Input text='+text) request.post(endPoint, { form: { apikey: API_KEY, query: text} }, (error, response, body)-> if (!error && response.statusCode == 200) console.log("Request success.") resObj = JSON.parse(body) console.log(resObj) res.reply resObj.results[0].reply else console.log("Request error.") resObj = JSON.parse(body) console.log(resObj) res.reply 'Request error.' )
デプロイして、サーバを再起動します。
cf push hubotdev -m 256m
Slack上で、動作確認してみましょう。
全ての入力にマッチするようにしてありますので、どんな反応が返って来るか試してみてください。
hata> @hatabot おはよう hatabot> おはようございます
おわりに
最近は、AIを使ったチャットボットの開発が進められていますが、いきなりAIと言われると敷居が高いかもしれません。
気軽に始められるところを目指して書いてみました。
チャットボット開発のファーストステップとして、ご参考になりましたら幸いです。
最後までご覧頂き、ありがとうございました。