IBM CloudのWatson ConversationとSlackでチャットボットを作ってみた

Pocket

IBM Cloudでは、数多くのAPI群が提供されていますが、その中に、Watson Conversationサービスという、“エンド・ユーザーとの会話フローを自動化”するAPIがあります。このWatson Conversationを利用することで、ユーザーからの質問に自動応答するチャットボットを作成できます。
 
私は業務で、このWatson Conversationを使用する機会がとても多いのですが、人気のビジネス向けチャット「Slack」とは連携したことがありません。そこで、この2つを利用してSlackのチャットボット―Slack botを作ってみたらどんなものかと、試してみました。この記事では、その作成手順を紹介します。

Slackの設定

Slackアカウントの作成

まず、Slackのアカウントを作成するところから始めます。以下のリンク先から手順に沿って進めれば、簡単に作成できるはずです。

Slack botの追加

アプリ検索からBotsアプリを追加します。

アプリ検索からBotsアプリを追加
 
「bot」で検索すると、「Bots」が一覧に表示されるので、選択します。
「bot」で検索すると「Bots」が一覧に表示されるのでクリック
 
「設定を追加」をクリックします。
「設定を追加」をクリック
ユーザー名は何でもOKです。今回は「watson-bot」としておきました。
ユーザー名を入力したら、「ボットインテグレーションを追加する」をクリックします。
ユーザー名を設定
 
そうすると、APIトークンが発行されます。後々使用しますので、必ずメモしておいて下さい。(※1)
APIトークンの発行
 
Slackのチーム画面に戻ると、設定したbotが追加されています。
設定したbotが追加
 

IBM CloudでのWatson Conversationの設定

Watson Conversationの作成

ここからはIBM Cloud 上の、Watson Conversationで作業を行います。
ちなみに、2018年1月時点では、Watson Conversationは、IBM Cloudライト・アカウントで無料で利用できます。(詳細はIBM Watsonの情報をご覧ください
 
まずはWatson Conversationサービスを作成しましょう。作成方法は、以下のQiita記事が参考になります。
※「Bluemix」は「IBM Cloud」の旧名称です。 
 
今回は、「slack-bot」という名称のWorkspaceを作成しました。
IBM CloundのWorkspace
 

資格情報の取得

Watson ConversationのWorkspace ID(※2)をメモします。
Workspace IDはWatson Conversationの開発toolから取得します。これはアプリ編集の際に必要になります。
 Watson ConversationのWorkspace ID(1)
Watson ConversationのWorkspace ID(2)
 
次に、IBM CloudのダッシュボードからWatson Conversationサービスを選択し、サービス資格情報のusername(※3)とpassword(※4)をメモします。こちらもアプリ編集の際に必要になります。
Watson Conversationサービス資格情報

インテントの作成

せっかくWatson Conversationと連携させるので、チャットボットと挨拶程度でも会話をできるようにしたいところです。
会話するには、インテント(=会話内容の意図)を作成する必要があります。今回は挨拶全般ではなく、もう少し粒度の細かくし、「おはよう」をインテントにしました。
Watson Conversation インテントの作成
 
「おはよう」の同義の言葉を登録して、インテントのトレーニングを行います。これで、「グッドモーニング」と入力されても、「これは“おはよう”の意図である」とWatson Conversationは認識します。
なお、トレーニングデータは最低でも5つ必要です。
Watson Conversation インテントのトレーニング
 

Dialogの編集

「おはよう」インテントを検知した時のレスポンスを定義します。
Watson Conversationでは、Dialogに会話を定義します。
ここでは、「おはよう」のNodeを作成しています。
Watson Conversation Dialogの編集
 

アプリの作成

最後に、SlackとWatson Conversationの中継役となるアプリを作成します。今回は、Node.jsを使用します。
 
IBM CloudでCloud Foundry アプリのNode.jsを作成します。
IBM CloudでCloud Foundry アプリのnode.jsを作成
 

package.jsonの編集

Slack botとの通信はSlackが公開しているbotkitを使用します。
Watson Conversationとの連携はwatson-developer-cloudを使用します。
 
9行目と12行目を追加しましたが、その他はデフォルトのままでOKです。

app.js編集

今回は「Slack⇔Nodeアプリ⇔Watson Conversation」だけの簡単なやりとりなので、app.jsファイルに処理をまとめました。
実際に編集したロジックは24行目~55行目で、その他はデフォルトのままです。
 ここで、先ほどメモしたIDやパスワードを使用します。
  • 37行目のtokenに、slack bot作成時の(※1)を転記
  • 47行目のworkspace_idに、Workspace ID(※2)を転記
  • 30行目のusernameに資格情報のusername(※3)を転記
  • 31行目のpasswordに資格情報のpassword(※4)を転記

30行程度のプログラムを追加しただけですが、これでやりたいことは実現できそうです。
 IBM Cloudへのデプロイを忘れずに。
 

動作検証

Slack botと朝の挨拶ができ、期待動作となったことが確認できました。
slack botで動作検証
 

まとめ

Node.jsを中継に、slackとWatson Conversationの連携ができました。これをベースに、Watson Conversationでインテントを増やしていけば、会話をどんどん増やすことができます。
Node.jsを利用しているので、Watson Conversationだけでやりたいことが実現できない場合に、他のAPIを利用するなど、カスタマイズも容易です。 
 
IBM CloudにはWeather Company Dataというサービスもあり、気象情報も取得できるようなので天気予報をbotで返すようなものを作るのも楽しそうですね。

執筆者プロフィール

Ikeda Shinichi
Ikeda Shinichitdi AI・コグニティブ推進部
組み込み業界を15年経験した後、2016年からIBM Watsonの業界へ。最近はチャットボット案件を中心に活動中。働き方改革を模索しており、早朝出勤や立ちワークを実践中。
Pocket

関連記事