Slack-Salesforce連携入門④(カスタムメッセージ通知)

## はじめに

この記事では、SalesforceとSlack連携機能のうち、カスタムメッセージを使った通知機能の設定方法を紹介します。

カスタムメッセージは、フロー等の自動化処理からSlackへ通知する場合に利用するメッセージになります。

改めて、Slackへメッセージを通知するために必要な手順を、整理すると以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c95edc03-ad68-6138-1882-442796738934.png)

1. Slackに認証して、どのワークスペースの、どのユーザーを使って、どのチャンネルに送信するかを決める
（カスタムメッセージ送信先の設定）
1. メッセージの内容を作る
1. 1.で決めた認証と宛先に、2.で作ったメッセージを、SlackのAPIで送信する

最後の「APIを使う」という部分は、普段プログラミングに触れていない場合は、少し難しく感じるかもしれません。
しかしカスタムメッセージ通知では、用意されたAPEXクラスを使うことで、APIを意識せずにフロー等からメッセージの送信が実現出来ます。

## 落とし穴

具体的な設定方法を見て行く前に、上記手順に存在する大きな落とし穴から見ていきます。

上記の1の設定は、「Slack Setup」アプリの「Automation Configuration」を使って「カスタムメッセージ送信先」として定義します。（認証情報・ワークスペース・チャンネルの情報）
これは大抵の場合、**システム管理者が行う操作** になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/68525844-da58-2596-4bba-622a20289fa2.png)

しかし実際にSlackへのメッセージ送信のきっかけは**ユーザー操作**となるため、上記設定を行った方とは別の人物という場合がほとんどでしょう。

この「設定した人」と「操作した人」が異なることで、「操作がどのユーザーであっても、システム管理者のアカウントでSlackに通知が来てしまう」という落とし穴が存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c3cc8e6b-b9ed-0651-b719-c181bfedc5b1.png)



## 落とし穴対策

この落とし穴に対する回避策は、以下の３点になります。

1. Slack通知用のSlackアカウントを用意する。「カスタムメッセージ送信先」を作成する場合は、そのユーザー認証を使う
1. 「カスタムメッセージ送信先」の作成者が、Slackの通知者になる。という点を許容する。
（この場合、「システム管理者」がメッセージ送信者であることを気にしない。）
1. SlackのWeb API呼び出しに方式を変更する。


一見、１で良いように思えますが、ここにも注意点があります。
Salesforceで行ったSlackアカウントの認証情報は、そのSalesforceアカウントと紐づけて管理されています。
そのため、１つのSalesforceアカウントで、「カスタムメッセージ送信先」の作成時は通知用のSlackアカウント
自分が業務で通知を行う場合は、自分のSlackアカウントを使う。といった切り替えが出来ません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/6ce03677-f052-0c99-ffb4-af695617d3ea.png)

※Slack Authというオブジェクトで、認証情報を一元管理しているため、別のSlack ユーザーで認証し直してしまうと他の箇所にも影響が出てしまう。
（宛先情報を作った際に認証したSlackユーザーが差し替わってしまう等）


認証のやり直しを行うと、「カスタムメッセージ送信先」で使っていたSlackアカウントが書き換わったり、通知が動作しなくなったり、予期しない動作が起きる場合があります。

SalesforceアカウントもSlack通知設定用に専用に用意すれば、この問題は回避出来ますが、このためにSalesforceのライセンス費用が発生するため勿体ないです。
システム管理でしか使わないライセンスがあれば１の回避策は有力ですが、そうでない場合は、その他の解決策もご検討下さい。

## 設定方法

前置きが長くなりましたが、設定方法を見ていきましょう。

設定は、以下の流れになります。

1. Slackに認証して、どのワークスペースの、どのユーザーを使って、どのチャンネルに送信するかを決める
（カスタムメッセージ送信先の設定）
1. メッセージの内容を作る
1. 1.で決めた認証と宛先に、2.で作ったメッセージを、SlackのAPIで送信する


### カスタムメッセージ送信先の設定

カスタムメッセージ送信先は、Slack Setupアプリの、「Automation Configuration」から行います。
画面の一番下のメニューになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/7bf03edc-26a8-5e53-ec77-a89c3c78ef38.png)


Automation Configuration 画面は、以下のようになっています。
「New Message Destination」リンクを押すと、新しいメッセージ送信先を追加することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/e9875f8a-f497-d3bd-52c2-9c06dc36bd11.png)


メッセージの送信先（SlackのWorkspaceとChannnel または、特定の個人）を指定して、名前をつけて保存します。
設定項目は、これしかありません。

別のWorkspaceを指定する場合には、Slack Workspace欄で「Add Workspace」を選択してください。
Slackの認証画面が開き、別のWorkspaceへ接続出来るようになります。

（この時に、Salesforceユーザーと、Workspace, SlackユーザーIDの紐づけが保存されます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/2662ee3d-1664-0fb7-29f4-23fe6c37e89e.png)

保存が終わると、MESSAGE DESTINATION ID（メッセージ送信先ID） が振り出されていることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/2dae470a-1533-0118-99f3-d9ef2a2bab51.png)


### メッセージの内容を作る

Slackへカスタムメッセージを送信する方法を、フローを使って説明致します。
レコードトリガーフローを作っていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/b42ad111-a174-a2e4-ab43-b5fcb2b6b6e2.png)


今回は、特に条件は指定せずに、商談が作成／更新された場合にトリガーを指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/64cf4c88-d9d1-5be8-a5d4-e1a542c7e3c0.png)

アクションの追加で、「Slack:Post Message」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c0e34c36-e871-e810-5075-3fee95afd0b8.png)

「Slack:Post Message」アクションには、送信するメッセージと、「メッセージ送信先ID」を指定します。

これにより「Slack Setup」画面で指定したWorkSpaceとChannelに、カスタムメッセージが通知されるようになります。
Messageは、フローで数式を使って文字列を作成することで、任意の情報をSlackに通知出来るようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/c30dc341-4697-6fa7-5aa0-ab8e414f0bc3.png)


フローを保存・有効化し、商談を更新してみましょう。

↓以下のようなメッセージがSlackに通知されます。
任意のMessageが追加出来ていることが分かります。

また、通知者が「Salesforce App」ではなく、「カスタムメッセージ送信先」を設定した人物になっています。
（落とし穴の部分）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2642894/7c411f82-5f15-a9dc-6be6-40431ff7643c.png)



## まとめ

今回は、Slackへカスタムメッセージ通知を行う方法を解説しました。

設定手順はとても簡単で

1.Slack Setupから「カスタムメッセージ送信先」の定義を作成
2.そのIDをフローの中で「Post:Slack Message」アクションに指定するだけ

でした。

しかしながらSlackで見た時に、カスタムメッセージの通知者が「カスタムメッセージ送信先」の作成者になってしまうという落とし穴についても、触れさせて頂きました。

運用時は、メッセージの通知方法なども確認して利用して頂ければと思います。