見出し画像

SlackでSalesforceの画面フローを呼び出してみた(Flow in Slack)

こんにちは、co-meetingにてエンジニアしているハナミズキです。

先日11月9日(水)に開催した「ゆるっとSalesforceトーク #11」ではSalseforceのニュース記事から「Salesforce Introduces New Low-Code Developer Tools to Bring Salesforce Apps and Automations into Slack」について取り上げさせていただきました。

この記事では、イベントで紹介した内容をベースに、SlackでSalesforceの画面フローを呼び出す環境の作り方を紹介したいと思います。

なお、Salesforceのカレンダー | Advent Calendar 2022 - Qiita の季節だったのでカレンダー2第20日目の投稿としました。

はじめに

今回のネタはSalesforceフローとSlackの連携機能の話です。

今年の春にSalesforceとSlackの連携に関する情報がリリースされ、Summer、Winterと機能が拡充されている機能になります。大きく分けて以下の2つの機能を含んでいます。

  • フローからSlackへ通知する

  • Slack上で画面フローを動かす

この記事は「Slack上で画面フローを動かす」仕組みについて、Salesforceで作った画面フローをSlackから呼び出す環境の作り方を紹介しています。

フローからSlackへ通知する」仕組みについては、以下の記事を参考にしてください。

なお、この記事は上記で紹介した記事とセットになっており、事前に「Slackの初期設定」が完了している前提です。これらのセットアップ方法については上記の記事を開き「セットアップ方法」を参考にして初期設定をしてください。

SlackでSalesforceの画面フローを呼び出す環境の作り方

Salesforceで作った画面フローをSlackから呼び出して使うフローを作ってみます。

利用する仕組みとアクション

注意事項

2022年11月時点で、Slackから呼び出されるように登録した画面フロー内で「Slack のフローコアアクション: Slack メッセージを送信」アクションを利用すると、Slackから実行する際に予期せぬエラーになるから利用しないように気を付ける必要がります。

基本の流れ

  1. [画面フロー]を作成する

  2. [画面フローを起動するメッセージをSlackへ投稿するフロー]を作成する

1.[画面フロー]を作成する

今回は以下のような画面フローを作成します。取引先の説明を入力文字列で更新するシンプルな画面フローです。

この画面フローは、取引先の更新と連動して動くよう、レコードIDを指定して呼び出される前提で作成しています。

与えられた取引先Idをもとに取引先のレコードを取得します。

入力画面を作ります。取得した取引先の情報を画面に表示して、説明を変更できるようにします。

入力された情報をもとに取引先の説明を更新します。

完了画面を作ります。

非常にシンプルな画面フローが出来上がりましたね。
それでは、こちらの画面フローをSlackから呼び出せるように保存して設定しましょう。

この画面フローを保存する際、[詳細を表示]リンクをクリックし展開し、チェックボックス「Make available in Slack (Beta)」にチェックを入れて保存してください。

こちらのチェックボックスを有効にして保存する事で、Slackコアアクションに、今回作成した画面フローをSlackから呼び出すアクションとして選択する事ができるようになります。

注意するべき事として、チェックボックス「Make available in Slack (Beta)」を有効にして保存すると、画面の入力項目としてサポートされている項目だけが表示されるように環境が変わります。
具体的には以下の通りです。Slackで画面フローを場合は、以下のSupported in Slack(Bate)に表示された項目のみを利用してしてください。

Supported in Slack(Bate)ついて気づいた補足
2022年11月時点ではLWCで作成したカスタムコンポーネントもSlackサポート対象外です。Slackでサポートされていない項目を指定すると、画面フローを[有効化]できなかったです。
(試しに以前、開発して公開したカスタムコンポーネント「Flow Component Samples」パッケージをインストールして試しましたが「Make available in Slack (Beta)」を有効にして保存できませんでした。
後々解決することを期待します。

2.[画面フローを起動するメッセージをSlackへ投稿するフロー]を作成する

1で作成した画面フローをSlackに登録する為に必要な作業です。「レコードトリガーフロー」を新規作成して、以下のようなフローを作成します。

今回、レコードトリガーフローの実行条件は「評価(Rating)」の値が変更された時とします。

レコード保存後に非同期でSlackへ画面フローを登録するため、以下のチェックボックスを有効にします。

コアアクション「Slack のフローコアアクション: メッセージを送信してフローを起動 (ベータ)」を選びます。アクション名は前述で述べたように登録した画面フローの名前です。

各項目値の詳細は、以下の公式ヘルプサイト(help.salesforce.com)を参照してください。
 > 
Slack のフローコアアクション: メッセージを送信してフローを起動 (ベータ)

上記フローを保存して有効化したら、早速実行してみましょう。

取引先の評価を変更するとSlackに以下のようにボタン付きのメッセージが書き込まれました。(なお、ここに埋め込んでいるGIF画像は、note記事にアップロードできるよう圧縮しているので、実際は投稿まで十数秒のラグがあります。こんなに瞬時に投稿されませんのでご了承ください。)

こちらの「更新」ボタンを押すと、以下のようにFlow Builderで作成した画面フローが起動してSalesforce組織のオブジェクトの情報が更新ができるようになります。

試しに「テストテスト!!」と入力して「次へ」ボタンをクリックすると、想定通り完了画面が表示されました。

実際に情報が更新されていることを確認できました。

この画面フローは、Slackモバイルアプリからも同様に呼び出せる事も確認できました。なかなか使えるかもしれません。

その他補足

プライベートチャンネルID(会話ID)に対する画面フロー登録

プライベートチャンネルのチャンネルIDを指定すると、デバック実行時に以下のようなエラーが発生する事があります。

エラーが発生しました:

このエラーは、slackSendMessageToLaunchFlow アクションで次の Slack API メソッドが実行されたときに発生しました: chat.postMessage。エラー: channel_not_found。Slack エラーについては、Slack API ドキュメントを参照してください。

こちらのエラーは、Salesforceの設定の問題ではなく、SlackのAPIであるchat.postMessageの仕様が原因です。権限がないためにこのエラーchannel_not_foundが発生します。
(参照: https://api.slack.com/methods/chat.postMessage)

対策はSlackの設定の見直しです。
プライベートチャンネルにメッセージを投稿する場合は、対象のプライベートチャンネルのインテグレーション設定を開き、アプリ「Salesforce for Slack」を追加することで対応できます。

所感

Slackへ画面フローの埋め込み、思っている以上に使えそうです。

しかし、最低でも3つ考慮しなければならないことがあります。

1つ目に考慮しなければならないことは、レイアウトです。
2022年11月時点で利用可能なSlack用コンポーネントは「入力系:チェックボックス、チェックボックスグループ、テキスト、ラジオボタン、ロングテキストエリア、数値、選択リスト、通貨、日時、日付/表示系:表示テキスト」の11種類のみです。

また、実際に触ってみて気づいた事ですが「表示テキスト」のリンク埋め込みは機能しませんでした。

よって、サンプルではURL文字列を直接表示するように作り込み、URL文字列をコピーしてブラウザのアドレスバーに貼り付ければ、レコード詳細ページへジャンプできるように導線を作ってみました。

今は、まだベータ版です。
今後サポートされる項目が増えていくのではないかと期待できるので、それまでは、レイアウトの構築に制限が多いですが、工夫して対応できないかなと思ってます。

2つ目に考慮しなければならないことは、投稿が激しいSlackチャンネルです。
Flow in Slackは「Salesforceの画面フローを起動できるメッセージを、Slackのチャンネルに投稿する」仕組みです。
そのため投稿が激しいチャンネルの場合、流れて行き埋没してしまいます。
これは対策が必要ですよね。

例えば、Slackのチャンネルにピン留めする機能を活用すればうまく対策できるかもしれません。そのためには、Slackのピン留めを活用するという運用・文化を作る必要があります。
なお、それを想定してなのか「Slack のフローコアアクション: Slack メッセージを固定または固定解除」が用意されています。
Slack のフローコアアクション: メッセージを送信してフローを起動 (ベータ)」を実行した際に発行されるSlack Message Timestampを利用して、投稿と同時に自動的に「ピン留め」するように作れるみたいです。
もちろん手動で「ピン留め」してもよいので、どのようにしたいか運用の面で判断する必要があります。

3つ目に考慮しなければならないことは、何度もボタンを押せる問題です。
何度もボタンが押せないようにするには、設計の面で工夫が必要です。例えば画面フロー側で制御できるように、オブジェクトに制御用のフラグ項目を追加し、画面フローの中で処理を進めるか/進めないか分岐させるような仕組みづくりを検討する必要があります。

改めて、思っている以上に使えそう。
だけど、本格的に使うためにも、しっかりと検討してから作り込む必要そうだなと、そんなことを感じました。

以上です。
今回紹介した内容が皆様の助けになれば嬉しいです。

ではでは!


参考文献