Slackでチャットボットを作ろう

Posted on 08月 09, 2017

こんにちは。キャスレーコンサルティングCSVクリエーション部の秦です。

今回は、コミュニケーションツールのひとつであるSlackを使って
チャットボットを作る手順をご紹介します。

Slack用のチャットボットを作るにあたり、本稿ではHubotを使います。

https://hubot.github.com/

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を指定します。

hubot001

動作確認をしてみましょう。
Hubotを起動し、「bot名 PING」と打ってみてください。

./bin/hubot

hubot002

Hubotが「PONG」と返してくれました!

SlackにHubotを追加

SlackにHubotを追加します。
追加するためにはSlackの権限が必要になりますので、
権限を持っていない場合は、管理者に追加してもらってください。

App DirectoryからHubotを検索し、install、Hubot名を入力します。

hubot003

hubot004

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と言われると敷居が高いかもしれません。
気軽に始められるところを目指して書いてみました。
チャットボット開発のファーストステップとして、ご参考になりましたら幸いです。

最後までご覧頂き、ありがとうございました。


採用情報

  • Profile
    キャスレーコンサルティングの技術ブログです。
    当社エンジニアが技術面でのTips、技術系イベント等についてご紹介いたします。
  • CSV社長ブログ
  • チーム・キャスレーブログ