Blue Prism で、ユーザーのメールアドレスを元にして Slack で DM通知をする

はじめに
================
Slack が導入されている組織では、メール通知よりも Slack 通知の方が何かと便利だと思います。
Blue Prism には DX（Digital Exchange）というマーケットプレイスのようなものがあり、そちらから[AI Skill Collaboration for Skill for Slack Messaging](https://digitalexchange.blueprism.com/dx/entry/3439/solution/slack-messaging)という、（AIとは一切関係のない）Skill（Blue Prismから利用できる部品のようなもの）がダウンロードできますので、そちらを使って Slack　通知を行ってみます。

やりたいこと
================

今回はチャンネルに通知するのではなく、DMで通知をします。組織の中では、メンバーのメールアドレスの一覧までは管理されていたりしますが、SlackのユーザーIDや name などは管理されていないケースが多いと思います。そのためこの記事では、メールアドレスでSlack上のユーザーIDを取得して、DMを送ってみます。

手順
================
Skill のインポート
-----------------------
[AI Skill Collaboration for Skill for Slack Messaging](https://digitalexchange.blueprism.com/dx/entry/3439/solution/slack-messaging)をダウンロードして、 Blue Prism でインポートします。

「Download Asset」 からダウンロードします。

![slack11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/adf94a12-f901-8299-4a17-9b8b0e271a98.jpeg)

「ファイル > インポート > リリース/スキル」からインポートします。
![slack11-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/4293aad8-b4c1-c869-3e72-439b26c5a572.jpeg)

Slack での アプリケーション登録
--------------------------

https://api.slack.com/ を開き、右上の「Your apps」をクリックします。
![slack.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/bb71a651-8fb5-ebd4-a4fe-4292688cef6d.jpeg)

ログインしていない場合は、表示されるリンクからログインします。
![slack01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/58e2aaf7-4530-a7f7-c7a1-b7e2a57c7b20.jpeg)

「Create New App」をクリックします。
![slack02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/e7c5b768-4472-a0aa-ae1c-41a9c321d494.jpeg)

「From scratch」を選択します。
![slack03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/c1342553-eb22-db32-f04d-6181df5e9dea.jpeg)

「App Name」に適当な名前を設定します（ここでは "SampleNotifier" としました）。設定したら、「Create App」をクリックします。
![slack04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/a580c8d6-27ea-988e-a9a0-7197082b331d.jpeg)

左側のメニューから、「OAuth & Permissions」を開きます。
![slack05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/34aae573-7a36-6b56-75a6-452d5a4171d5.jpeg)

下の方にある「Scopes」の、「Bot Token Scopes」にある、「Add an OAuth Scope」をクリックします。
![slack06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/95dde3a9-6e96-bbf8-4dcd-193d84a6f4f8.jpeg)

下図のように Scope を追加します。
![slack07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/c8150bbc-4b86-d414-c0eb-60524df6f8ad.jpeg)

次に、「OAuth tokens for Your Workspace」にある「Install to Workspace」をクリックします。
![slack08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/2b561158-0815-13f8-b48e-23de210fd77f.jpeg)

承認画面が出るので、内容を確認して「許可する」をクリックします。
![slack09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/c726c76e-0ed3-4496-ec10-92ab96f6a3b4.jpeg)

先ほどの「OAuth tokens for Your Workspace」に、 Token が表示されるので、「Copy」をクリックしてコピーしておきます。
![slack10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/56b57efd-9174-c084-511f-a1e14ad462cd.jpeg)


Blue Prism 側で認証情報を設定する
--------------------------------
Blue Prism の「システム」タブにて、認証情報を新規作成します。
![auth.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/0ee4212e-0a37-ea7a-824d-916c03fc8a3c.jpeg)


種類は「ベアラトークン」を選択し、「トークン」のところに先ほどコピーしておいた Token を貼り付けます。
![slack12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/ffcd64e8-537e-a113-9a9a-1d7408c52c9a.jpeg)

Blue Prism でプロセスを作成する
-------------------------------
Skill をインポートすると、右側のドロワーのようなところから、 Skill をドラッグ&ドロップして使えるようになります。

![skills.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/96abb685-b421-9aea-2c68-5bb51ae9ae48.jpeg)


Slack のスキルをドラッグして、下図のようなプロセスを作成します（エラーハンドリングは入れていません、、、）。

* 最初のスキル呼び出しでは、「Look Up User By Email」を指定します。メールアドレスからユーザー情報を取得できます。
* 二つ目のスキル呼び出しでは、「Post Message」を指定します。Slack で指定した宛先にメッセージを送ることができます。
 
![slack14-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/9b15a5e2-27ca-1ddc-ff9e-7795f65c4c95.jpeg)


「Look Up User By Email」の設定内容です。

* 「Slack Bearer Token」には先ほど作成した認証情報の名前を指定します。
* 「Email」には、メッセージを送りたいユーザーのメールアドレスを指定します。指定するユーザーはSlackのワークスペースに存在している必要があります。

![slack15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/a4351f40-62ff-2615-65b4-a90bfa64a6e0.jpeg)

この呼び出しによって取得できるユーザー情報は下記のような（1行だけの）コレクションです。
このコレクションの中身にアクセスするために、1行だけですが、ループを設定しています。
![slack16-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/f6f437c1-fab0-dfb1-9590-225dc2c6f825.jpeg)

戻り値の User については、
[Slack API : users.lookupByEmail](https://api.slack.com/methods/users.lookupByEmail) や、[Slack API : user object](https://api.slack.com/types/user)を見ると、詳しい内容が確認できます。

ループの中で、コレクションの中身を通常のデータアイテムとして取り出す際は下記のように指定します。
![slack17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/566f2592-d8fa-631e-eba4-feaddb9e25c3.jpeg)


「Post Message」の設定内容です。
![slack17-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/aedea0a6-2a53-6dab-7963-74c503cdd911.jpeg)


実行前の確認
----------------------------------
先ほど作成しておいた認証情報のアクセス権も適切に設定しておきます。
![slack13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/2c0bfa86-99a8-bf89-866c-a60a6e2282ee.jpeg)

さいごに
----------------
以上の手順で、Blue Prism から Slack を利用することができます。Slack の Token さえ設定できれば、Blue Prism 側の利用はとても簡単に行えますね。この Skill では他にも 「List User」 「List Conversation」 「Upload File」 などの機能が利用できるようです。