一番シンプルにSlackでbotを作る

# はじめに
・チャットボット作りたい。
・Watson Conversationでの会話フローは作った。
・Slackをインターフェースにしたい。
上記の人におすすめの方法

# 前提条件
・Slackを普段使ってる。
・NodeRED on IBM Cloudを触ったことがある。
・Watson Conversationを触ったことがある。

# 手順
### **Slackの準備**
**ボットのアプリをインストールする**
Slackのワークスペースにボットのアプリ(中身のない箱のようなもの)をインストールする。

ここをクリック。
![スクリーンショット 2018-01-29 13.25.35.png](https://qiita-image-store.s3.amazonaws.com/0/143517/0022686c-3347-86b1-6f75-16249303ca83.png)

"hubot"と検索し、インストールをクリック。
![Slack_-_テスト用.png](https://qiita-image-store.s3.amazonaws.com/0/143517/a1417dd9-935f-604c-e50c-ab013ed03fc9.png)

インストールをクリック。
![Hubot___Slack_App_ディレクトリ.png](https://qiita-image-store.s3.amazonaws.com/0/143517/349960d2-1aa9-1206-1661-a9f6990c66e5.png)

botのユーザー名を入力してHubotインテグレーションの追加をクリック。
![Hubot___テスト用_Slack.png](https://qiita-image-store.s3.amazonaws.com/0/143517/6c48c3ad-1870-e55b-c1f6-c81345cf5e33.png)

APIトークンなるものが発行されるのでメモしておく。
![Hubot___Slack_App_ディレクトリ 2.png](https://qiita-image-store.s3.amazonaws.com/0/143517/b7db07bd-463f-d3f3-88b6-c26e93796162.png)

Slackに戻ってみると、中身のない箱のようなボットが作成されていることが確認できますね。
![Slack_-_テスト用 2.png](https://qiita-image-store.s3.amazonaws.com/0/143517/ed3fe194-b2f3-7460-0ad1-094084eb9ae2.png)

### **NodeREDの準備**
**アプリの準備**
カタログから"NodeRED Starter"を選択してNodeRED環境を作成する。
![カタログ_-_IBM_Cloud.png](https://qiita-image-store.s3.amazonaws.com/0/143517/71cfb9fc-23e0-9fbb-4efc-36ce581ccfd6.png)

**Slackノードの追加**
デフォルトではSlackを簡単に扱うノードがないので、追加する。
右上ハンバーガーメニュー > パレットの管理
![Node-RED___uchino-nodered_mybluemix_net.png](https://qiita-image-store.s3.amazonaws.com/0/143517/f247dbb9-9dd6-69e9-48ce-4b0fe7739203.png)

ノードを追加タブで"slack"を検索し"node-red-contrib-slack"で「ノードを追加」をクリック。
![Node-RED___uchino-nodered_mybluemix_net 2.png](https://qiita-image-store.s3.amazonaws.com/0/143517/11820814-323d-fd34-2c2d-d311927fb8c5.png)

ソーシャルカテゴリにノードが追加される。
![Node-RED___uchino-nodered_mybluemix_net 3.png](https://qiita-image-store.s3.amazonaws.com/0/143517/c8037188-1161-958d-9e56-8851e44f41fd.png)

**フローの作成**
下図のように各フローの値を設定してデプロイすれば動きます。
![Node-RED___uchino-nodered_mybluemix_net 4.png](https://qiita-image-store.s3.amazonaws.com/0/143517/5c741626-1ee3-7ba9-262f-516202dd2e97.png)

functionノードの中身では以下のように、Conversationのレスポンスの使う部分だけを抽出してSlackに返してます。

```js
msg.payload = msg.payload.output.text[0];
return msg;
```

以下のJSONをNodeREDにインポートすれば簡単です。(Slackのノードは別途追加してね)

```json
[{"id":"b085637d.e2e038","type":"Slack Bot In","z":"f6c02f85.17f2f","name":"Slack Bot In","apiToken":"","channel":"","x":150,"y":220,"wires":[["8493dde5.a18d18"]]},{"id":"270a3414.70d5fc","type":"Slack Bot Out","z":"f6c02f85.17f2f","name":"Slack Bot Out","apiToken":"","channel":"","x":621.5,"y":279,"wires":[]},{"id":"8493dde5.a18d18","type":"watson-conversation-v1","z":"f6c02f85.17f2f","name":"","workspaceid":"","multiuser":false,"context":true,"empty-payload":false,"default-endpoint":true,"service-endpoint":"https://gateway.watsonplatform.net/conversation/api","x":311.5,"y":279,"wires":[["a75f6786.dbaf78"]]},{"id":"a75f6786.dbaf78","type":"function","z":"f6c02f85.17f2f","name":"","func":"msg.payload = msg.payload.output.text[0];\nreturn msg;","outputs":1,"noerr":0,"x":471.5,"y":219,"wires":[["270a3414.70d5fc"]]}]
```

# 終わりに
すこし面倒くさそうに見えますが、慣れると３分程でチャットボットの稼働を始められます。
とはいっても、チャットボットの"キモ"はWatson Conversationの作り込みです。
頑張ってみてくださいね。