Watson + Slack

WatsonとSlackの連携方法について。

# Watson

https://console.bluemix.net/

アカウントを持っていない方は、フリー・アカウントを作成してください。
IBM Cloudライト・アカウントは、無料・期間無制限・クレカ登録不要なので、気軽に作成できると思います。
※制約は[こちら](https://www.ibm.com/cloud-computing/jp/ja/lite-account/)を確認してください。

ユーザの登録または既にアカウントを持っている場合は、早速リソースの作成を行いましょう。
![watson_01.png](https://qiita-image-store.s3.amazonaws.com/0/297616/e614271c-f708-8169-4dc0-9a1534c96080.png)
作成するサービスは 「Watson Assistant」になります。
![watson_02.png](https://qiita-image-store.s3.amazonaws.com/0/297616/6df7fd50-e4e7-c30a-78b7-49eaf833a132.png)
価格プランはライトを選択します。これでリソースの準備されました。
![watson_03.png](https://qiita-image-store.s3.amazonaws.com/0/297616/d70d8812-3c06-b3ce-f1ac-1528bfd2b13e.png)
作成したリソース(Watson Aassistant)を選択し、起動します。
![watson_04.png](https://qiita-image-store.s3.amazonaws.com/0/297616/a7ee9f83-9a51-2785-8a7a-765d1f57fcb6.png)
![watson_05.png](https://qiita-image-store.s3.amazonaws.com/0/297616/808a1516-9e70-9f9e-a75c-ebb3124a2dbe.png)
Watson Assistantを起動し、初めにワークスペースを作成します。
名前は任意ですが、以下では「SampleBot」としています。

![watson_06.png](https://qiita-image-store.s3.amazonaws.com/0/297616/def0d45c-79a2-e704-2f82-ff8a4943bae8.png)

今回の目的は、WatsonとSlackを連携させるため、チャットボットは事前に準備されているサンプルを利用します。
「Content Catalog」タブを選択してください。ここには予め会話の雛型が準備されています。今回は「一般」を選択します。
Add to warkspaceを選択後、Intentsタグを確認し各種会話の雛型が追加されていることが確認できます。
![watson_07.png](https://qiita-image-store.s3.amazonaws.com/0/297616/70c2558d-205b-1fe4-522a-3740f2737430.png)
次に Dialogsタグを選択します。こちらではユーザとチャットボットの会話の流れを制御します。
![watson_08.png](https://qiita-image-store.s3.amazonaws.com/0/297616/6a7ec848-1cfa-ff10-120b-95429b78be89.png)
デフォルトで2つのノードが出来ることが確認できると思います。
こちらの「ようこそ」は、チャットボットが起動したタイミングで表示される内容になり、「その他」は質問の意図が分からなかった場合に返すノードになります。
![watson_09.png](https://qiita-image-store.s3.amazonaws.com/0/297616/93595459-d87e-854e-f27a-e5d0bad76a1c.png)
それでは今回の動作確認のための、ノードを追加します。
ノード名は「あいさつ」
If bot recognizes には「#General_Greetings」
Then respond with には「コンニチハ！？」
と入力しました。
この内容について少し説明します。
「#General_Greetings」ですが、Intentsタグを開いてみてください。「#General_Greetings」が確認できると思いますので、そちらを開くと、いくつかの挨拶（「やぁ」「ちわっ」「ヤッホー」等）が確認できます。
これは、これらの言葉が投げかけられたら、すべて General_Greetings とチャットボット内では置換させます。
つまり、
ユーザーが「やぁ」→Watsonでは「やぁ」を「General_Greetings」に変換（Intents）→「General_Greetings」と言われたので、「コンニチハ！？」と返事（Dialogs）。
という流れを定義しています。
これが「ちわぁ」だと、
ユーザーが「ちわぁ」→Watsonでは「ちわぁ」を「General_Greetings」に変換（Intents）→「General_Greetings」と言われたので、「コンニチハ！？」と返事（Dialogs）。
というふうに会話を制御します。
![watson_10.png](https://qiita-image-store.s3.amazonaws.com/0/297616/639589eb-265a-2ccf-59ad-70eac3997b50.png)
登録したら、チャットボットのテストをしてみましょう。
![watson_11.png](https://qiita-image-store.s3.amazonaws.com/0/297616/5cc7aa05-5784-06f5-c82c-a1ec1550d4fe.png)

# Slack API

ここから作成したチャットボットとSlackとの連携を行います。
![watson_12.png](https://qiita-image-store.s3.amazonaws.com/0/297616/db3fee1b-a558-9dde-5b6a-868059264bcf.png)

STEP 1. Slack Appを作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/f70a1bac-499c-8b84-ed7e-7e665db61ce7.png)

STEP 2. Deploynameを決定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/9b6a8533-ea2d-ef58-3983-3979633eb740.png)

STEP 3. Slack APIで作成したアプリケーションで、Bot Userを作成
ボット名は任意ですが、今回は watsonbot としています
![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/e5acaa2b-a69d-d6c6-c23a-0074e3c19386.png)

STEP 4. Slack APIでアプリケーションを作成したタイミングで生成された、Client ID、Client Secret、Verification Tokeをそれぞれ入力し、Generateをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/a09cfbb2-2ba8-7480-65ea-d3539e3d8562.png)
STEP 5 - 7. Genarateした際に、Your Redirect URL、Your Request URLが自動生成されますので、それぞれをSlack APIのアプリケーション設定画面のOAuth & PermissionsのRedirect URLs、Event SubscriptionsのRequest URLへそれぞれ設定
ここまで設定したら、Authorize Slackをクリック
また、Event SubscriptionsのSubscribe to Eventsでは、message.channelsを指定。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/837ce997-727a-89ff-363f-802a076bf1b3.png)
![watson_14.png](https://qiita-image-store.s3.amazonaws.com/0/297616/51da6889-f5af-22b6-b46a-3923f723813c.png)
![watson_15.png](https://qiita-image-store.s3.amazonaws.com/0/297616/cb2a2d47-4438-0292-a05f-1f5dea22c3f7.png)

# Slack

Slack APIへの設定は以上です。
Slackを起動し、作成したボット宛に会話をしてみてください。
応答してくれれば完了です。
![watson_16.png](https://qiita-image-store.s3.amazonaws.com/0/297616/51347afd-7df4-838f-660e-dd13fc75e268.png)