IBM CloudとSlackbotを連携し、Slackチャンネルに匿名投稿できるようにしてみた

# 1．はじめに
IBM Cloud上のNode-REDとslackbotを連携し、Slackチャンネルに匿名投稿できるbotを作成しましたので、その流れをまとめます。IBM Cloudは無料枠内で利用できます。

####使用イメージ
botにダイレクトメッセージを送信することで、botが指定したチャンネルに書き込みを行ってくれます。
複数Botを用意することで、より会話の感じが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/5886c683-d679-e97b-351d-f9ce9efdde71.png)

# 2．作業概要
　①　IBM Cloudアカウント作成
　②　Node-RED実行環境準備
　③　Slackbot作成とAPIキー準備
　④　Node-REDとSlackbot連携
　⑤　投稿テスト
# 3．作業詳細
## ①IBM Cloudアカウント作成
以下URLへアクセスし、IBM Cloudのアカウントを作成します。
　https://cloud.ibm.com/registration

Eメール、パスワードを入力し、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/9a635bf9-fa72-39b4-cc69-c1b2573cad04.png)

登録したEメールに検証コードを届くので、検証コードを入力し、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/fbac3bd0-4e5b-3150-66c2-caefc453a4c3.png)


個人情報（名前、姓）を入力し、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/4461ef09-79bf-2809-7332-f1842a89a128.png)

「アカウントの作成」をクリックし、アカウント作成完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/6be88321-b881-27e3-5b8c-0943d2d54f61.png)

## ②Node-RED実行環境準備
IBM Cloud上にNode-REDの実行環境を準備します。

「カタログ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/735e8e37-3115-f419-c10b-cfee62b1ec31.png)


検索キーワードに「Node」を入力し、「Node-RED App」を検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/eb05d83d-a01f-2e18-37cb-158a4dd8b9c0.png)

「始めに」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/ba8bf69d-ea21-30a8-1660-c5d970d8d533.png)

アプリ名は任意（変更することも可能）、その他はデフォルトのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/538d5798-203f-2261-f85a-af93957fdb19.png)

Liteプランが選択されていることを確認し、「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/20ffe270-34f6-3801-e66a-a42f39621f2e.png)

「アプリのデプロイ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/eb010802-40b5-2327-857c-37769f28b435.png)

デプロイメント・ターゲットで「Cloud Foundry」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/f9d2d2ca-e235-ba34-bcdf-60d40b695120.png)

IBM Cloud API鍵を新規生成するため、「新規」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/abb8f6ba-3200-8111-a4fb-a8b7fe208c13.png)

「OK」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/08375801-8dab-515c-184c-cde307dcc670.png)

キー生成を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/74cbb72c-014f-98f0-e5b1-cd1b37c11da1.png)

その他デフォルトのまま、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/a7ce5179-84fd-6cab-9ac5-108c6d6fe974.png)

「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/e46705a3-b7bd-d0a7-a523-24c456367584.png)

デプロイが進行中（赤枠部分）のため、しばらく待ちます（10分程度）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/66f95de3-2822-b199-9eef-255e95db9d66.png)


リロードし直し、アプリURLにアクセスできることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/5ad55365-0a78-3cb3-3ca5-f5c0ce21d247.png)

Node-REDの画面が開くので、初回登録を進める
「Next」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/87874695-22a4-062d-f762-1928926bbe2d.png)

Node-REDエディタ用のユーザとパスワード情報を入力（IBM Cloudのアカウントとは異なります）し、「Next」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/fe57b121-af23-18a4-6c80-31471b9251c8.png)

「Next」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/7bf4a17c-e997-1cc8-2393-f9d0aea13619.png)

「Finish」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/d2ddfd1c-a765-2089-ed8e-cd6c9610b566.png)

「Go to your Node RED flow editor」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/0df104fb-b3c2-5449-3dad-6b5cb0c7e7f8.png)

ユーザ、パスワード情報を入力し、「ログイン」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/dc3b3b72-f8c7-97c3-bc40-5bbf75ed1306.png)

Node-REDのフロー画面開いたら、続いてSlack連携のためのモジュールを追加
Node-REDのフロー画面右側の「パレットの管理」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/9e7a8630-d4f1-cb21-1b60-3899bee39f16.png)

「ノードを追加」タブを選択し、検索キーワードに「slack」を入力
「node-red-contrib-slack」を見つけたら、「ノードを追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/2d0499ea-5a65-1775-dbfc-4ed5102f0d26.png)

「追加」をクリック
追加するモジュールの詳細情報は以下参照
　https://flows.nodered.org/node/node-red-contrib-slack
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/30b36c5c-c398-6f3c-2a96-5b41e5e3e39f.png)

正常にモジュールが追加されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/35f20310-2abd-e9fc-9b17-f2b8c74195eb.png)

フロー画面においても、モジュール追加されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/25098c26-6cc2-32fe-3058-303040f1e6ce.png)

##③Slackbot作成とAPIキー準備
参加しているSlackのワークスペースにbotを追加します。
「App」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/782fb488-be4e-1294-e305-cb1e2b98fe74.png)

「Appディレクトリを参照する」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/987b03e0-160c-bb4e-022f-0fa27bcb0f70.png)

検索キーワードに「bot」を入力し、Botsをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/92fa3d9e-00bf-32aa-c940-18caf12ced68.png)

Botsの登録のリクエストをワークスペース管理者へ送信します。
「設定をリクエストする」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/cc09e930-f27a-32b9-46a1-061ce92b0260.png)

メッセージを入力し、「リクエストを送信」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/71919b8c-e755-f829-6fc8-d58ce0c054a6.png)

「リクエストが送信されました」というステータスに変わるので、ワークスペース管理者が承認するのを待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/0493ed05-bfb1-8e03-feaa-2d9f9bebebe0.png)

承認後、「Slackに追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/49640174-1369-9364-161e-354756731a7b.png)

ユーザ名（任意）を入力し、「ポットインテグレーションを追加する」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/194bc287-3441-4d09-4fc5-22b274798103.png)

デフォルトのまま、「インテグレーションの保存」をクリック
APIトークンは後で使用するため、メモしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/31596cd4-2220-9d53-42e5-44c8c65e38e0.png)
略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/e0aa5e5c-df17-d601-2c04-75cf51e023c8.png)

匿名投稿先のチャンネルへBotを追加（今回はbot_testchannelに追加）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/be1d3fa7-18a9-17ca-e89e-3e1b98aeb6e1.png)

チャンネル詳細の「その他」から、「アプリを追加する」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/7dcf9017-9877-f425-d468-16384d428e8d.png)

検索キーワードにbot名を入力し、該当するBot名に対して「追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/e26c48f6-f3f6-8edf-27c2-58292d557b76.png)

Botの追加を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/48c01dd9-ae41-f059-2b2a-ac4d24a7ce6c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/9bc23979-4393-5910-7c6a-dde230986acc.png)

チャンネル名を右クリックし、「リンクをコピー」をクリック
投稿先のチャンネルの識別番号を確認。後ほど使用するのでこの番号もメモしておく
　https://xxxx.slack.com/archives/<チャンネルの識別番号>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/540bf28a-b66f-5987-515c-97afba869815.png)

##④Node-REDとslackbot連携
Slackbotと連携するフローを実装します。
Node-REDを開き、「読み込み」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/a2ff3d25-5da3-4791-6bba-e4a06bf03cfd.png)

以下コマンドをコピペし、「読み込み」をクリック


```
[{"id":"2b9710cb.988b4","type":"tab","label":"匿名投稿","disabled":false,"info":""},{"id":"3ff3e09a.aafa8","type":"switch","z":"2b9710cb.988b4","name":"DMか区別","property":"payload.channelObject.is_im","propertyType":"msg","rules":[{"t":"false"},{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":290,"y":60,"wires":[[],["280e1a2.20814e6"],[]]},{"id":"ede2e915.132698","type":"function","z":"2b9710cb.988b4","name":"初期値設定","func":"msg.topic = \"message\";\nmsg.payload = {\n    channel: \"チャンネルの識別番号\",\n    text: msg.payload.text\n}\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":60,"wires":[["374a0235.0fdb4e"]]},{"id":"280e1a2.20814e6","type":"switch","z":"2b9710cb.988b4","name":"httpをふくむか","property":"payload.text","propertyType":"msg","rules":[{"t":"cont","v":"http","vt":"str"},{"t":"cont","v":"undefined","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":460,"y":60,"wires":[["ede2e915.132698"],[],["835be295.665fa"]]},{"id":"2fe96781.e64798","type":"slack-rtm-in","z":"2b9710cb.988b4","client":"ea227ef9.7621d","name":"","events":"message","x":110,"y":60,"wires":[["3ff3e09a.aafa8"]]},{"id":"374a0235.0fdb4e","type":"slack-rtm-out","z":"2b9710cb.988b4","client":"e0cc6c56.47bb2","name":"","x":850,"y":60,"wires":[[]]},{"id":"fe6559cd.8dfae8","type":"slack-rtm-out","z":"2b9710cb.988b4","client":"","name":"","x":850,"y":220,"wires":[[]]},{"id":"835be295.665fa","type":"function","z":"2b9710cb.988b4","name":"初期値設定","func":"msg.topic = \"message\"\nmsg.payload.channel =\"チャンネルの識別番号\"\nmsg.payload.text = msg.payload.text + \"～テスト！\"\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":120,"wires":[["fe6559cd.8dfae8"]]},{"id":"ea227ef9.7621d","type":"slack-config","z":"","name":""},{"id":"e0cc6c56.47bb2","type":"slack-config","z":"","name":""}]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/706c099b-9b92-c5d4-5940-06042e44cc30.png)

フロー名「匿名投稿」の追加を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/13d0174b-862c-e395-1ceb-6a1f213fa7c9.png)

slack-rtm-inとslack-rtm-outに先ほど取得したAPIキーとBotの名前を入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/bbc2157d-a5b7-2d29-bb4e-e448902571e1.png)

bot名とAPIキーを入力し、「追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/e54bc9a2-aa4f-9af1-1018-52040d02ffde.png)

「完了」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/74f2b1ae-62e0-4590-b947-2f2990aaf49a.png)

同様にslack-rtm-outにbot名とAPIキーを入力する

「初期値設定」ノードに投稿先のチャンネル識別番号を入力
「"チャンネルの識別番号"」の箇所を先ほど取得したチャンネルの識別番号に変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/987aef66-029d-86e1-b983-4c88c3573f1e.png)

もう片方の「初期値設定」についても同様にチャンネルの識別番号を変更
（こちらは初期値設定は投稿内容の語尾メッセージを追加）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/5149da9d-f514-e421-1086-9d104a33c9cf.png)

編集完了後、「デプロイ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/fab96f75-6097-5392-947d-0a7685b8e939.png)

##⑤投稿テスト
投稿はBotにダイレクトメッセージを送信します。
まず作成したBotを検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/ac441892-d87b-1752-0ebc-3b5139efa0ee.png)

「検索キーワード」にBotの名前を入力。該当するBotを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/387a8f43-dce2-fc89-f3da-4d694cc41f92.png)

Botに対して、ダイレクトメッセージを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/aa615179-2e5c-e647-bbf1-689b75c16c54.png)

任意のメッセージを投稿
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/806df4a2-40f2-e0c2-24a8-3236ca235f79.png)

投稿先のチャンネルに対して、Bot（匿名）が書き込みを行ってくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/31b9a778-1264-af89-cb45-1dfa3f423f72.png)

##補足：Node-RED 各ノードの情報
「DMか区別」：Botがダイレクトメッセージのみ反応するように設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/8123eb32-36f0-cea5-64ea-1cf0e7c04e04.png)

「httpをふくむか」：httpを含むURLの投稿に対して、「undefined」というメッセージが出力されるため、
httpを含む場合は、語尾をつけないように分岐
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913264/967748d6-6c3a-5b12-3a27-2990ae53fbb4.png)