Slack-Salesforce連携入門③(アラートの通知)

## はじめに

この記事は、Slack社が提供しているSlack-Salesforceの連携機能（Salesforce for Slack）の基本的な使い方解説の３回目です。
今回から、いよいよ通知を設定して実際に動作させて行きます。

全体概要や初期セットアップについては、過去記事を御覧ください。

[①概要編](https://qiita.com/vxc-slack/items/db5864ffbf786f3e2efe)
[②初期セットアップ編](https://qiita.com/vxc-slack/items/c1da49f342147fcc5185)


## アラートの通知とは

アラートの通知とは、オブジェクトの新規作成時や更新時に、Slackにアラートを通知する仕組みのことを言います。
以下の特徴があります。

* アラート対象のレコードを、オブジェクト単位（全レコード）か、レコード単位（特定のレコードのみ）で指定出来ます。
* 通知のタイミングは、新規作成時、更新時（指定した項目の値が変わった場合）等を指定出来ます。
* 通知のOn/Offは、ユーザー単位で行うことが出来ます。
* 通知先のSlackチャンネルも、ユーザー単位で指定することが出来ます。
* Slackに通知される内容を編集することは出来ません。（出力項目は固定です）

通知は、指定したSlackのチャンネルに行われます。
そのため、チャンネルを参照出来るメンバーであれば、Salesforceのアカウントを持っていなくても、通知を受け取ることが出来ます。
※ただし、通知内容の項目は固定のため、データの詳細を確認するためにはSalesforceアカウントが必要になります。


実際に、簡単に通知の設定を行い、動作を確認してみましょう。
この記事の後半で、注意事項や使い方についても解説致します。

## 設定手順

### 概要

作業手順は、大きく分けると以下になります。

9. 管理者は、アラートの通知条件を定義する
9. 管理者は、画面に通知On/Off設定ボタンを配置する
9. ユーザーは、通知On/Offの設定画面から、通知の有効・無効と通知先のチャンネルを指定する

手順が、「通知条件の定義」と「通知のOn/Off」で分かれています。
このおかげで、ユーザーごとに自分の必要な通知だけをOnにすることが可能になっています。

それでは、さっそく「通知条件の定義」の手順から確認していきましょう。

### 通知条件の定義

通知条件の定義は、「Slack Setup」アプリケーションの「Custom Alerts」で行います。
※「Org Configuration」については、後ほど解説します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/fb081b3c-6a5a-9344-763b-dded939c30b4.png)

Custom Alertsの設定画面に入ると、以下のようになっています。
「New Alert」リンクを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/729704d7-5b12-c3bb-034d-64e96559b299.png)

モーダル画面が表示されたら、以下を入力します。
- アラートの名前
- アラート対象のオブジェクト
- 対象のレコード　（Object Level＝全レコード、Record Level＝特定のレコード）

今回は、「Object Level」を指定します。
（※Object Levelの通知は、通知が飛びすぎる可能性もあります。実際の運用では、Record Levelでの対応もご検討ください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/eab4ba7b-5398-a33c-dc40-aa688085ab6c.png)

以下の標準オブジェクトは、AppExchangeのパッケージインストールで選択出来るようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/0f7f3458-40aa-1dea-08bd-15fc8f5e06e4.png)

Nextボタンを押すと、対象のオブジェクトに対して、条件の設定画面に変わります。

- Field: 指定したオブジェクトが持つ項目
- Operator: 「値が変わった時」「特定の値と一致したとき」「一定の値より大きくなった時」などの条件を指定
- Value: Operatorに指定した条件に使う値。（例：売上が500万以上 という条件を作る場合、"500万"という値を指定する）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/5b26f962-30a0-f274-6caf-254e242b2e1f.png)

Operatorの部分は、Fieldで選択した項目の型によって、選択肢が変わります。
商談のフェーズ項目の場合は、「Changed（変わった時）」と「Equals（特定の値になった時）」が選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/aaaf23ba-50c7-5608-a7e2-97551d0e412d.png)

日付項目の場合は、次のような選択肢が選べます。
「Date Overdue」（期日を過ぎた）や「Date Reached」（期日になった）「Changed」（変更された）といった組み込み条件があるため、汎用的な使い方が出来ると思います。

「Greater Than」「Less Than」については、Valueに日付の固定値を入れる必要があるため、こちらは使い方は少し限定的になるかもしれませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/b79616d5-4280-7f83-a907-e345a7ddd8f9.png)

最後にSaveボタンを押すと、条件が保存されます。
通知先のSlackチャンネルや通知に使うSlackアカウントなどの指定は、ここでは行いません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/776f4963-b530-1298-3bc7-810dc9a43f34.png)

### アクションの追加（Global Action）

#### 自動追加

Object Level（全レコードが対象）の通知のOn/Offは、グローバルアクションから行います。
しかし、初期状態ではアクションは追加されていませんので、パブリッシャーレイアウトを編集する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/8dca90b9-efc9-74e1-4069-2ea9424d365c.png)

レイアウトの編集は、Slack Setupの「Org Configuration」からも行うことが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/d8ffdb8a-0926-70f2-621f-efd3d47cd847.png)

設定画面で、Global Layout を選択し、「Add Actions to Layouts」をクリックすると、自動でレイアウトを編集してくれます。

:::note warn
自動で編集してしまうため、元レイアウトが置き換わるなど、予期せぬ結果になる場合もあります。
続けて編集箇所をご説明しますので、手動での編集もご検討ください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/dfae6d8d-3590-cbfc-c016-452f735edc5d.png)

「Add Action to Layouts」を使うと、Global Actionが以下のようになります。
「Send to Slack」と「Manage Slack Alerts」アクションのみになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/12b557d4-480f-4f8d-ac6e-c342e3da6af2.png)

#### 手動追加

手動でアクションを追加する場合は、設定の「パブリッシャーレイアウト」から、グローバルパブリッシャーレイアウトを編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/201e5d9d-9587-f8d3-7335-70e2410b39e7.png)

編集画面で「Salesforce モバイルおよび Lightning Experienceのアクション」に、ボタンを追加します。
それぞれのボタンは以下です。

- Send to Slack : 任意のメッセージを手動でSlackに送信するボタン
- Manage Slack Alerts : アラートのOn/Offや、通知先チャンネルなどを管理する画面を開くボタン

今回の記事で使うのは「Manage Slack Alerts」ボタンになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/cfa93565-0ade-e143-b643-46c5636152ea.png)

ここまでが、アラートの通知を利用するために管理者が行う作業になります。


## 通知On/Offの設定

ここからは、実際にSlack通知を利用するユーザーが行う設定作業になります。

:::note info
※通知は、Slackのチャンネルに届くため、チャンネルのメンバーは全員通知を見ることが可能です。
　そのため、チャンネルメンバー全員が同じ設定をOnにする必要はありません。
::: 

今回は、Object Level（全レコードが対象）のOn/Off を行います。

### Slackの認証

初めて「Manage Slack Alerts」ボタンを押すと、最初にSlackの認証画面が開きます。
ログインを行って、SlackとSalesforceの連携設定を行ってください。

:::note info
通知先は、ここで認証したユーザーが参照出来るチャンネルしか選択出来ません。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/328ad07a-e8a9-80da-390c-a294de81d054.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/e6f6350d-27e1-4b54-583a-79191afcae3f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/05064eb1-c016-df55-baba-71a4431b0a12.png)

許可を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/f4e4bc59-6e2a-3b5e-0f15-f9b5cb1047c8.png)

### 通知のOn/Offと、送信先の指定

「Manage Slack Alerts」ボタンで、以下の画面が開きます。
オブジェクトを選択すると、利用可能なアラートが表示されます。

ここでは商談を選択したので、先程作成した「商談のフェーズ変更」のアラートが出てきています。

:::note info
組み込み条件で「Opportunity stage has changed（フェーズの変更）」という同じ内容のアラートが既に存在しています。このように、標準オブジェクトには最初からアラートが用意されています。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/de8dda2a-6385-5844-5ac8-b73ad2852954.png)

「商談のフェーズ変更」をOnにしてSaveし、動作確認してみましょう。


## Slack側で通知の受信と操作

サンプルの商談のフェーズを変更して、実際にアラートの通知を発生させてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/e6bfdc58-ad6e-b439-427f-96665634a738.png)

Slack側には、以下のような通知が届きました。
コレを見ると分かるように、アラートの通知内容は以下しかありません。

- アラートの名前　（今回は「商談のフェーズ変更」）
- 商談名　（通知対象となったレコードのName）
- オブジェクトの種類

チャンネルの参加者は全員見れるため、必要最小限の情報に限定されています。
（出力項目をカスタマイズすることは出来ません）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/6bae1bf2-452c-ffa9-aa58-5beb65f6abe7.png)

### View Recordボタン

「View Record」ボタンは、Slack上でレコードの詳細を確認する場合に使うことが出来ます。
このボタン操作は、Salesforceの認証が求められます。

- ボタンを押すと、Salesforceの認証画面が立ち上がる
- 認証が成功したら、SlackからSalesforceにデータの問い合わせを行う
- 取得したデータは、自分だけが参照出来る状態でチャンネルに表示される

:::note info
認証したSalesforceユーザーに参照権限が無いレコードの場合はエラーになり、レコードの詳細は表示されません。
:::

以下が、ボタンを押した際の表示画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/2370404d-9de0-96f5-d5f6-6e5e93d25803.png)

### Post to Channelボタン

レコードの詳細な内容をこのチャンネルにポストして、他のメンバーも見れるようにします。
公開される項目は、一部のみです。

公開して良い内容かどうかを判断してから、ボタンを押すようにしてください。
ボタンを押すと、投稿内容が以下のように変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/6dea0caa-2416-9a11-fe47-d3ec47f3f01e.png)

### manage alertsボタン

実は、Slack側からもアラート通知のOn/Offを設定することが可能です。
以下のような設定画面が開きます。（この場合は、Record Levelの設定が表示されています）

※Slack側から行える設定の詳細は、別の記事で改めて解説致します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/235d59b7-dfe6-e680-ace9-bee7d5809b26.png)

### Update next Step ボタン

Slackから、商談の「Next Step」項目を更新することが出来ます。
ボタンを押すと、以下のような画面が開き、SaveするとSalesforce側のデータが更新されます。

※Slack側から行える設定の詳細は、別の記事で改めて解説致します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/a965622c-12e5-130d-d91f-96b75c7905f2.png)

商談のNext Stepが更新されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/0dff8a01-1129-ecad-f48f-3ecea34d923c.png)

## まとめ

以上が、アラートの通知（Object Level）の使い方になります。

標準オブジェクトは最初から使える状態になっており、組み込みで条件が用意されているため、画面の設定だけでも簡単に通知が行えたのではないでしょうか。

また、通知だけではなく、Slack側からのデータ参照や、一部の項目の更新機能も用意されています。
そのため、Slack側からもSalesforceの認証情報が必要になり、データのセキュリティ等が担保されています。

このあたりは、ドキュメントだけではイメージが難しい部分かとも思いますので、ぜひ触って試してみて頂ければと思います。