Slack-Salesforce連携入門②(初期セットアップ編)

## はじめに
この記事は、Slack社が提供しているSlack-Salesforceの連携機能（Salesforce for Slack）の基本的な使い方解説の２回目です。

[前回の記事はこちら](https://qiita.com/vxc-slack/items/db5864ffbf786f3e2efe "Slack-Salesforce連携入門①(概要編)")

今回は、環境設定の手順を確認しながら、以下のことを確認していきます。

* システム構成
* パッケージのインストール方法
* Salesforceの権限設定
* Slack Setup アプリケーションの機能概要

特にSlack Setupアプリケーションは、システムの仕様に合わせて設定画面が分かれているため、使いたい通知に必要な設定がどれなのか、直感的には分かりにくくなっています。

この記事を通して、設定機能の全体像が見えるようになります。

## システム構成

システム構成は、大まかに以下のようになっています。
機能の中心は、Salesforce側にインストールするSalesforce for Slackのパッケージになります。
一部、Slack側からSalesforceへの通信が存在することから、Slack側にもアプリケーションの追加が必要になります。
（今回は、Slack側のアプリケーションは扱いません）

![システム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/514b22c8-1d6b-5b8d-e4bb-ced9ac96792b.png)
|:--|

Salesforce側のアラート機能は、ApexトリガとApexクラスで実装されています。
フローなどを使って自動化処理の中からSlackに通知を送る場合も、これらのApexクラスを使うことになります。

図で「通知の設定」は双方向矢印になっています。
アラート通知のOn/Offなど一部の設定は、Salesforce／Slackのどちらからでも可能な項目が存在します。

SalesforceからSlackへ通知を送る際のアカウントは、Salesforce側で管理しており、SlackからSalesforceへ通信する際のアカウントはSlackで管理しているため、それぞれで認証が必要になります。


## パッケージのインストール

Salesforceに「Salesforce for Slack」のパッケージをインストールしていきましょう。
パッケージは、App Storeからインストールすることが出来ます。

ただし、パッケージを探す際にユーザーの言語を「English」にしておく必要があります。

英語で検索した場合は、こちら
![AppStore（英語）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/b97420e6-2db6-7451-6ee4-04d185f72387.png)

日本語で検索した場合、検索結果にほとんど何も出てきません。
![AppStore（日本語）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/118456b6-5f0f-0fdf-b5ae-a4f86e86879e.png)


英語の検索結果から「Salesforce for Slack」パッケージを選択し、「Get it Now」ボタンを押すと、インストールが始まります。

![パッケージのインストール画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c4e75e79-8e10-b3dc-2c5d-e089e79e8485.png)
|:--|

※Trailhead の Playground 環境を使う場合は、Playground Starter アプリケーションから、パッケージIDを直接指定してインストールします。

![PlaygroundStarter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/0c39fd76-eb17-9591-4800-047912d521b9.png)
|:--|

インストール対象は「管理者のみのインストール」を選択します。

![インストールSlack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/4c1947b7-37a6-ff4c-3146-66825123b719.png)
|:--|

「サードパーティアクセスの承認」は、全てにチェックを付けて「次へ」を選択します。

![サードパーティアクセスの承認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/5bcfcd14-3fc3-bc5c-950d-5c9bb16ad3ec.png)
|:--|

「完了」ボタンを押して、暫く待つとインストールが完了します。
パッケージのインストールが終わると、メールでも通知が届きます。

![完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/cb781f6a-d16a-5087-d149-16d9048d1bfd.png)
|:--|

インストール済みパッケージに「Slack」があれば、インストールは完了です。
（なぜか、「Salesforce for Slack」という表記ではありません）

![インストール済み.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/49cc8512-f32b-62ac-2d8a-08efccc78776.png)
|:--|


## Salesforceの権限割当

Slackの通知機能を使うユーザーには、「Slack Standard User」権限セットに割り当てておく必要があります。

Slackとの通信はApexクラスによって行うため、これらの実行権限が必要になります。
権限の対象者ですが、通知機能は対象データを更新すると自動的に動作するため、データを更新する可能性のあるユーザー全員を割り当てておくことをオススメします。

![権限セット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/6398ba9a-37a7-a938-c52c-3056f0c46572.png)
|:--|

## Slack Setupアプリケーションの役割

Slack Setup アプリケーションは、以下の５つのパートで設定を行います。

![SlackSetup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c6863371-7f7d-0c01-6d45-12d88554656f.png)
|:--|

各パートの設定内容について、前回の概要図を使いながら、どの部分の設定をしているのか解説します。
※図中の吹き出しの数字と、Slack Setupのパート番号が対応しています。

今回の記事では概要のみを解説し、具体的な設定方法は今後の回で扱います。

![設定との対応.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/f0884957-349e-211c-5679-1b365659ffd4.png)
|:--|

Slack Setupで行う設定がアラート通知のシナリオの一部であるため、どこで使われる設定なのか全体を理解しておかないと、混乱してしまいます。


### ①System Connections

SlackからSalesforceのAPI等の呼び出しを許可するAouth接続を行います。
システム全体で使う接続設定のように見えますが、現在ログインしているSalesforceユーザーに対する接続設定になります。

一度接続すると、この設定画面から切断することは出来ず、現在のSalesforceユーザーの設定から「接続」メニューにある「OAuth 接続アプリケーション」で接続設定を削除する必要があります。

### ②Enable Custom Objects

この画面は、指定したカスタムオブジェクトで通知に使う項目の管理と、対応するApexトリガの有効・無効を管理する画面になります。

カスタムオブジェクトで通知を有効にするには、Apexトリガが必要になります。
この画面には、Apexトリガクラスを自動生成する機能も付いています。
ただし残念ながら、カスタムオブジェクトの表示ラベルを日本語で記載していると自動作成に失敗します。
（そして大抵の場合、カスタムオブジェクトの表示ラベルは日本語で登録されていると思います。）

失敗する原因は、Apexのコードを自動作成する際にクラス名に表示ラベルを含めてしまうためだと思われます。
対応方法としては「手動作成」の手順中に表示される「自動作成されたApexクラスの雛形コード」を手直しして、Apexトリガを作成して対応することが出来ます。

※標準オブジェクト用のApexトリガは、パッケージインストール時に自動でインストールされます。

### ③Custom Alerts

アラートの通知条件を事前に作っておく機能です。
オブジェクト単位とレコード単位の選択があり、前者が全レコードを対象にした通知で使う条件、後者が特定のレコードを対象にした通知で使う条件になります。
それぞれに設定を作成して保存することが可能です。

この画面では条件の作成のみを行い、この条件に合致した時のアラートOn/Offは別の画面で行います。

条件の登録と、アラートのOn/Offは、次回で解説致します。

### ④Org Configuration

Salesforceの画面レイアウトに、Slack連携に関連するボタン（Slackアクション）やSlackコメントを表示するコンポーネントの自動配置を行います。

ただし配置場所の変更や削除は、この画面では出来ないため、画面レイアウトの編集機能で行う必要があります。
UI部品の初期配置を簡単に出来るようにした便利機能のようです。

実行すると、画面上に以下のようなボタンを配置出来ます。

![Slackアクション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/571b0382-8d19-7a7b-c335-dc8cf901afce.png)
|:--|

ちなみに、グローバルアクションにSlackアクションを追加するには、パブリッシャーレイアウトを変更する必要があります。
（Slack Setup画面からは操作出来ません）

![グローバルアクション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/032a2e6c-6011-9787-2678-ecfac4087e8e.png)
|:--|


### ⑤Automation Configuration

プロセスビルダーやフローから、Slackに通知を行う場合に使用する通知先の情報を登録します。
具体的には、「Slackのどのアカウントで、どのワークスペースの、どのチャンネルにメッセージに送信するか」の組み合わせにIDを付けて管理します。（メッセージ宛先ID）

プロセスビルダーやフローでは、Slack連携用のApexクラスに対して、このIDを指定することで、適切な宛先にメッセージを送信することが出来ます。

設定画面のタイトルを見ると、ここで自動化に関わる詳細な制御が出来そうに感じますが、実際に出来ることは、メッセージの宛先情報を登録してIDを発番することのみです。


以上が、Slack Setup画面の概要になります。

## まとめ

今回は、SalesforceとSlackを連携するための「Salesforce for Slack」パッケージのインストール方法と、Slack Setupアプリケーションの設定内容について確認しました。

次回から、実際にアラートの設定方法を見ていきます。