SalesforceとSlackとの連携を感覚だけで作ってみた

### Slack連携は簡単という噂は本当か
Salesforce社がSlackと一緒になってから月日が流れて、最近のメジャーバージョンアップではSlack連携に関連した新機能が増えてきた印象があります。
そして、色々なところからSlack連携が簡単になったという話を耳にすることが増えてきました。

### 果たして本当に簡単なのか試してみた
私の「簡単」というのはマニュアルを読まずに感覚で実現できることとしています。
そこで事前にマニュアルを確認しないでどこまでできるか検証してみました。
備忘録を兼ねた体験記として投稿いたします。
そのため設定方法については正しくない可能性もございますので
ご参考レベルにご覧になってくださると幸いです。


### 前提条件として

 - Slackは構築済みでチャンネルも用意
 -  Salesforceもslack連携以外は終わっている（dev環境 Ver.spring’23）

というところから始めてみました。

### どこまでやるか
とりあえず、つながることができるのかという点のみフォーカスしてみました。
私はServiceCloudを活用しているので、
 - Slackにケースレコードが作成されたら特定のチャンネルに通知される
 - Slackにケースレコードが作成されたら特定のチャンネルに通知される通知からリンクで該当ケースに飛べる
ということまでを実施してました。

画面キャプチャは実際に構築した後に別途dev環境で再取得しています。

### どこから始めていいのか

まずはSlackのAPP画面でSalesforceというキーワードでさがしてみると　Salesforce for Slackというのがありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/18a2000b-2c24-dab0-32b4-b32cc5c9a464.png)
追加してみるとSalesforceのページに飛んでしまい、想定したのと違う動きでしたので、いったんSlack経由は諦めてSalesforce側から確認してみました。

### 専用の設定画面みつけた
Salesforceの設定画面でとりあえずSlackをキーワードでひっかけてみたらそれらしきものがありました。
全部で8ステップありそれを設定すれば使えるようになるのかなという感じに見えます。
最初のステップでりヘルプ見てねから始まっているのですね。
誘導されてますが、今回は変な縛り(マニュアルを読まない)を設けていますので、とりあえずそのまま進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/6f7fe8ae-5683-37bf-6011-2621d2962058.png)
次に契約条件に同意でした。これを有効にすると環境で使える準備がはじまるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/c5b3e4af-0209-459e-d14e-0bdb8a55c864.png)

### 始まった感が出てきました
Salesforce用Slackアプリケーションを有効化
SalesCloud for Slack はボタンで、Service Cloud for Slack アプリケーションを有効化はリンクになっていました。
リンクをクリックするとServiceCloudの設定画面にリダイレクトされる様子です。
(この後このリンクが厄介なことになることを気づかない）
とりあえず。感覚でSalesCloud for Slackはオンにしておきました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/d594f651-f0f8-b980-8337-a1560c3d8d0c.png)
「サービスチームが Service Cloud と Slack を接続して、スウォーミングのコラボレーションツールとして Slack を使用できるようにします。」
とあるのでスウォーミング機能を利用するために必要な設定の様子です。今回はSlackに通知するだけですが今後のためにとりあえずオン。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/12012ec3-ac7f-1f25-50b6-18f75f6dd7ee.png)
Slack の初期設定にもどりました。
権限セットでユーザに割当てするようですね。
(この後このリンクが厄介なことになることを気づかない 其の2）
今回はとりあえず私のアカウントだけ以下の権限セットを割り当てました。

 - Sales Cloud for Slack
 - Slack Service ユーザ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/a63e362b-fb32-e623-7ee3-e1eb6ca37544.png)

ユーザのオブジェクトの権限を確認
Slackの通知で表示の仕方のようです。最初に設定されているままで進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/e87d8dff-abee-2eff-0a92-caa732cae57f.png)

#### ようやくSlackと会えた
Salesforce Slack アプリケーションを Slack ワークスペースにインストールしてリリースします。

ここでSlackにAPPを入れるようです。
1. Salesforce for Slack をインストール
2. Sales Cloud for Slack をインストール
3. Service Cloud for Slack をインストール
4. CRM Analytics for Slack をインストール

それぞれ機能が違うのでしょうか？「1.」は相変わらずリンクがおかしいのか別途手続きが必要なのかわかりません。
とりあえず「2.」と「3.」をSlackに追加してみました。
Slack側で許可するとSalesforceにリダイレクトするのでsandboxの場合はつなぎ先を確認するといいです。
ちなみに、権限セットを与えていないユーザの場合はインストールエラーになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/6549a51d-14f1-3595-b7c9-d614bd1cdfb4.png)


無事Slackに組み込まれたような気がします！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/de72bc05-eecb-c928-469e-14d4952ea74e.png)


Salesforce側に戻って初期設定の続き確認してみます。
 - Sales Cloud for Slack アプリケーションの機能の設定を実行
 - Service Cloud for Slack アプリケーションの機能の設定を実行

それぞれ専用の設定のようです。ServiceCloudはヘルプへのリンクでした。
今回はとりあえずケースレコード作成時にSlackに通知だけしたいので無視します。
最後も必須項目ではないようなので割愛しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/a97ca5d1-8c2b-303a-f37f-26fb8108f2fc.png)

#### やっぱりフローですね
あれ。。。どのSlackチャンネルとつなげるとか、何もしてないぞ。
どこで設定するのでしょうか。。。。
連携といったらプロセスビルダーとかワークフローか、統合するフローになるんだっけ。。。と脳内でクルクルしながらおもむろにフローを起動してみました。

「Send Slack Notifications for New High-Priority Case」
とかSlackに関連したフローがありました。Slack機能を有効化した時に追加されたのでしょうか。 
重要度が高の場合にSlackに連携するといったフローのようです。
これを参考にしてみれば使えそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/4c048539-b7ce-d692-f5e6-ae7cb4044461.png)

先ほどの「Send Slack Notifications for New High-Priority Case」をチラ見しながらつくってみました。（マニュアルでは無いのでOKとしてます(笑)）

今回は「レコードトリガーフロー」で作成してみます。
ゴールは「ケースレコードが作成されたらSlackに連携」としているのでオブジェクトはケースにしました。
そして一番最後の
「トリガレコードの元のトランザクションが正常にコミットされた後に外部システムにアクセスするには、非同期に実行パスを含めます。」
のチェックを入れておく必要があるようです。
Slack連携の場合は非同期実行でないとフロー自体保存できませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/408b3bec-42da-b6b2-cfca-6f7f4679114a.png)


開始条件を作ったので次に実行ですがアクション設定にSlackがありました。
わかりやすい。
「Slack メッセージを送信」を選択しするとSlackの接続値を設定に必要な項目が出てきました。

<dl>
	<dt>・Slack アプリケーション</dt>
	<dd>先ほど追加したアプリがでてきましたので選択</dd>
	<dt>・Slack ワークスペース</dt>
	<dd>これもAPP追加したワークスペースがでてきました。</dd>
	<dt>・Slack の会話 ID</dt>
	<dd>投稿したい先を指定できるようです。チャンネルは事前に作っておいたものを設定<dd>
	<dt>・Slack メッセージ</dt>
	<dd>ここで通知する内容を設定できるようです。テキスト直打ちでもいけるようですが、リンク等も投稿したいですので、リソースを別に作ってテンプレート的なものを登録します。<dd>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/7ebcef2b-defe-c4dc-8a5b-149640999caf.png)


#### Slack メッセージを入れるものを作ってみる
新規リソースから探して「テキストメッセージ」を選びました
割き込む内容は適当にケース番号と件名あとはケースへのリンクを作っています。
そしてリッチテキストではなくプレーンテキストで表示させるようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/b7568af6-0018-c151-7cb7-c8ee840e7837.png)


ものすごくシンプルですがフローが出来上がりましたので有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/e6c0ddd8-ac18-71f3-b58e-869031b0241f.png)

#### ケースが作れない・・・
あとはうまくSlackに通知されるかです。
ケース起票して試そうとしたときにここで問題発生しました。。。

ServiceCloudコンソールをデフォルトに設定しているのですが
コンソール画面が開かないのです。
実際には開くのですが、リダイレクトされて設定画面に戻ってしまうのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/4300cd6d-8835-953b-1a8d-5ea86358cb51.png)

これはSlack設定で行っていた「権限セット」や「ServiceCloudの設定」のリンクを踏んだときに一瞬コンソール画面に遷移していたようでしたがその遷移したページが残っているようで、強制的に設定画面に戻ってしまう状況でした。
ここまで来て諦められないので力業で一瞬のスキをついてリダイレクトされてしまうページ（外部リダイレクト）のタブを閉じることに成功しました。
（10回くらいチャレンジしました）

#### つながるかやってみた
コンソールから手動でテストケースを作成し保存してみると
無事登録されました。
また、Slackに登録されたリンクからも対象のケースに飛ぶことができましたので成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/f5eedc70-9a98-53ac-c24a-9a7385e9933f.png)


### 結論
簡単だったかというとマニュアルを見ずに感覚でここまでできましたので本当だと思います。
ただ、フローにたどり着いたのは日頃設定を見ていれば気づくかもというレベルかもしれませんのでマニュアルはあらかじめ読んでおいた方が良いですね。
（初期設定画面にフローのことに触れてあればもっと簡単かもしれません）
アプリは今回SalesCloudとServiceCloudの2種をいれましたが通知レベルであれば1つで十分かもしれません。
あと、ServiceCloudコンソールをデフォルトで利用している場合のトラップには気を付ける必要があります。

### 今後は
Slack通知と別のところにも連携を同時にしてみるとか
ServiceCloudの目玉であるスウォーミングにもチャレンジしてみたいと思います。
機会があればまた投稿します。
最後までお付き合いいただきありがとうございました。