Salesforce x Slack 連携 をHerokuで実現する

こんにちは。
Heroku & Salesforce でプロダクト、サービス開発をする仕事をしております、白石です。

今回はSalesforce Advent Calendar 2021 の 4日目の記事ということで
私が最近取り組んでいるSalesforce x Slackのアプリケーション開発において、デモ開発で試しているHerokuを用いた連携アーキテクチャについてご紹介したいと思います。

## 事前準備
SalesforceとSlackを連携させるために最初に準備すべきは、「Slack App」の作成です。
Slackのアカウントをお持ちであれば、 api.slack.com で作成することができます。

「Slack App」では、ダッシュボード画面から様々な設定を行うことができます。
詳細なセットアップ手順や解説については[こちらのサイト](https://reffect.co.jp/html/slack)がわかりやすかったので参考にしてみてください。

SalesforceにはSlack連携用の接続アプリケーションを準備しておきましょう。
接続アプリケーションの設定については[TRAILHEADのモジュール](https://trailhead.salesforce.com/ja/content/learn/modules/connected-app-basics)で学習ができるので、作成したことがない方は参考にしてみてください。

## Salesforce x Slack 連携アーキテクチャ
SalesforceとSlackの連携はいくつかのパターンが考えられますが、今回はHerokuをブリッジとしてSalesforceとSlackを連携する方法についてご紹介したいと思います。

よりライトに連携させるのであれば「[Slack Workflow Builder](https://slack.com/intl/ja-jp/help/articles/360035692513-%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%83%93%E3%83%AB%E3%83%80%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89)」を使うのがよろしいかと思います。
Slack上で定型的なプロセスを自動化しワークフローとすることができます。
Slackワークフローを作成するとWebhookURLが生成されるので、SalesforceからはそのURLを指定して実行依頼をすればOKです。

今回は連携したうえでいくつかのカスタマイズされた処理ロジックを実行したかったので、その役割をHerokuで行いたいと考えてます。
Heroku上でのアプリ開発は、Slackが提供しているBoltと呼ばれるオープンSDK (Java, JavaScript, Python)を使用します。
SDKによって開発が容易となり、セキュリティ基準にも準拠することができるので、
個人的にはSalesforce上で開発をするよりもHeroku上で開発をしたほうがスピーディーに対応ができるという利点もありました。


## Salesforce → Slack への連携
Salesforceに用意したナレッジオブジェクト(カスタム)のLWCコンポーネントから、Slack上のチャンネルやユーザーを指定、コメント入力して、レコードを情報をシェアするような機能をデモとして作ってみました。
以下のようなイメージです。
#### 1. Salesforce上での操作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/78f42e28-fbf6-ed2d-ac8b-4df2378537d4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/700eaad7-ff26-89ac-2573-a02ae9f7502d.png)
#### 2. Slackチャンネルへの連携結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/ec9cba3d-4394-0cd6-4b42-fd4af96642ff.png)

#### 3. 連携イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/feb8c8bf-af65-1cc6-192d-31a5242ea4a3.png)

#### 4. 連携補足
- Slackからチャンネル、ユーザーを取得するためには「Slack App」上の OAuth & Permissions から適切なScopeを設定し、API実行時に発行したトークンを利用してアクセスする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/ebc9cde6-0475-8d2f-a0ab-9601835cd9f7.png)
- チャンネル内に投稿されるメッセージブロックのフォーマットは「Block Kit」によるJSONデータフォーマット形式で送信します。
    - Webアプリケーションとは異なり、HTMLマークアップやCSSを記述する必要がないのが特徴です。
    - Blocksについては[こちらのスライド](https://www.slideshare.net/NavitimeJapan/slackuxblock-kit)での解説がわかりやすかったです。

## Slack → Salesforceへの連携
先ほどのデモでSlackに連携されたレコード情報に対して、Slackからフィードバックコメントを入力し、Salesforce上のフィードバックオブジェクトにレコード登録するような機能をデモとして作ってみました。

#### 1. Slack上での操作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/ec7e59c6-1366-c2c5-9e12-1b63b028541c.png)

#### 2. Salesforceへの連携結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/471f7e26-2ae9-8bc5-99c2-4a7913829446.png)

#### 3. 連携イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548842/16786c8b-bb25-f78c-0b9d-8f6555650ea6.png)

#### 4. 連携補足
- Salesforceとの認証は準備しておいた接続アプリケーションを使用して行います。



## まとめ
いかがだったでしょうか？

Salesforce x Slackの連携アプリケーションの作成については
私も色々と検証している段階ではありますが、
元々使い慣れていたHerokuをブリッジとして用いることで
スムーズに開発をすることが可能でした。

個人的には「Salesforce Functions」を用いて連携ができないかと模索しており、
こちらについても色々と検証していきたいと考えてます。

また、[株式会社リゾルバ](https://www.re-solver.co.jp/)ではSalesforce x Slack によるサービス開発を進めています。
開発・リリースが完了したら、サービスの告知とともに
コードベースでより具体的な開発内容についてもご紹介できれば思ってます。

それでは、また来年もよろしくお願いします。