SalesforceフローでSlackへメンションしてメッセージを送る
Slack のフローコアアクション「Slack メッセージを送信」を使ったフローの設定方法のご紹介です。
chirosuke
2023/02/03 11:39:26
前回は「SalesforceからSlackへメッセージを送信するフロー」を検証するために行った、SalesforceとSlackの接続設定についてご紹介いたしましたが、今回は初期設定完了後のフローの設定についてご紹介いたします。
ご相談があったフローについては、「Slack宛てにメッセージを送信するレコードトリガフローを設定したが、トリガしたユーザ宛てのメンションだと自分宛のメンションでSlackの通知がならない」というものでしたので、今回のサンプルフローはご相談者の要件に寄せて
「ToDoのアラーム設定した日時にSlackで割り当て者へメンションで通知する」で設定してみます。
この要件は以前の記事でもご紹介した「ToDoのアラーム通知をモバイルアプリでも通知させたい」のSlack通知バージョンです。
個人設定の「Slack ユーザの対応付け」に接続したワークスペースのIDとSlackユーザのIDが表示されているので、こちらの情報を使用できないかと取得方法を探してみたのですが、見つからなかったため、ユーザにカスタム項目を作成して、そちらにSlackのメンバーIDを格納する方法でご紹介いたします。
取得方法などご存じの方がいらっしゃいましたら、コメントなどで教えていただけると嬉しいです。

1.ユーザオブジェクトへSlackIDを格納するカスタム項目を作成します。

2.SlackからメンバーIDの一覧を取得します。
①Slackの左上のワークスペース名をクリックし、[設定と管理] → [メンバーを管理する]の順で開きます。

②[メンバーリストをエクスポートする]をクリックします。

③Slackbotからメッセージが届きCSVファイルが添付されていますので、こちらをダウンロードします。

CSVファイルにはemail、user id等があります。

④レポートやデータローダ等でエクスポートしたSalesforceのユーザ情報と、③でダウンロードしたCSVファイルを使用して、インポートファイルを作成し、データローダ等でユーザ情報を一括更新します。
サンプルのワークスペースのように人数が少ない場合は、1件ずつ手入力してもOKです。
ご参考:カスタム表示ラベルでテンプレートのURLを管理する
1.[設定] から、[クイック検索] で「カスタム表示ラベル」を検索し、[カスタム表示ラベル]をクリックします。
2.[新規カスタム表示ラベル]をクリックし値に組織のURLを入力します。

Slackが構築したアプリしかインストールしていない場合はこちらの「フローコアアクション: [通知の送信] アクション」しか使えないと思います。こちらのアクションではアプリの実行者を設定できませんでした。
設定画面はこんな感じです。

Salesforce for Slackのインストール手順については、前回の記事「Salesforce for Slackの接続設定をしてみる」等をご確認ください。
それでは、フローの設定を紹介いたします。
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリック、または、設定ホームの[作成▼]の「フロー」をクリックします。

2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・オブジェクト:ToDo
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
・更新されたレコードでフローを実行するタイミング:条件の要件に一致するようにレコードを更新したときのみ
・フローを最適化:アクションと関連レコード

3.[開始]の「+スケジュール済みパスを追加(省略可能)」をクリックし、以下のように設定します。
・時間取得元:Task: アラーム日付/時間
・オフセット数:0
・オフセットオプション:オフセット数0の場合はどれでもOK

ちなみに今回のサンプルの要件では「スケジュール済みパス」となっていますが、「即時実行」でSlackのアクションを使用すると保存時に「この要素をフローから削除するか、スケジュール済みパスに移動してください。レコードトリガフローは、即時実行されるパスで外部コールアウトを行うアクションを実行できません。」とエラーメッセージが表示されます。
検証のため、スケジュール済みパスで即時実行と同じ状態(時間取得元を「○○が作成または更新されたとき」を使用)になるようにパスを設定した際は、エラーなく保存でき、フローも実行されました。
4.左側のツールボックスを表示して、マネージャの[新規リソース]をクリックし、以下のように設定します。
【割り当て先のSlackメンバーIDを格納するテキスト変数】
・リソース種別:変数
・データ型:テキスト

【通知文のテキストテンプレート】
レコードの情報を使用しない一律のメッセージで良い場合は、こちらのリソース作成は不要です。
・リソース種別:テキストテンプレート
・種別:プレーンテキストとして表示
・本文:※こちらは自由にご入力ください。また、先に「プレーンテキストとして表示」にしておかないとタグが挿入されてしまうのでご注意ください。

サンプルのメッセージで使用したマークアップも含めて使いそうな書式を紹介いたします。
Slackメッセージの書式を適用するには、赤字の箇所をテキストに追加してください。
ご参考:Slack ヘルプセンター>Slack の使い方>メッセージの書式とスタイル
・ユーザへメンションする
・@here(チャンネル内のアクティブなユーザ)
・@channel(チャンネルのメンバー全員)
・@everyone(#general チャンネルでのみ使用)
・テキストを太字にする
・テキストを斜体にする
・テキストに取り消し線を引く
・引用にする
・コードにする
・コードブロックにする
↑上記の書式を全部設定して、Slackに送信したものがこちらの画像です。

・絵文字を追加する
上記の本文のサンプルのように絵文字の名前「:alarm_clock:」を入力するだけですが、こちらの画像のように「:目覚まし時計:」で入力すると絵文字として表示されません。

コードブロックにするアイコンをクリックすると、絵文字の名前が確認できます。
他に方法があるかもしれませんが、Slackに詳しくないのでこちらの方法でのご紹介ですみません。

5.[アラーム日時](3.で設定したパスの表示ラベル)の下の⊕から[割り当て]を追加し、以下のように設定します。
・変数値を設定

6. [割り当て]要素の下の⊕から[アクション]を追加し、以下のように設定します。
・アクション:Slack メッセージを送信
Slack の接続値を設定
・Slack アプリケーション:Salesforce for Slack(接続しているアプリ)
・Slack ワークスペース:上記アプリケーションと接続しているSlackワークスペースを選択
・アクションの実行者:Slack アプリケーション
Slack メッセージの詳細を設定
・Slack の会話 ID:
[個人へダイレクトメッセージの場合] → {!var_SlackID}(4.で作成した変数)
[チャンネルの場合] → チャンネルIDを入力(確認の仕方はアクション入力画面の後にあります)
・Slack メッセージ:{!text_message}(4.で作成したテキストテンプレートまたはテキストを直接入力してください)

チャンネルIDの調べ方
【URLから】
チャンネルを選択して、アドレスバーの右側のID(図の赤枠)がチャンネルIDです。

【チャンネル情報から】
①チャンネルでマウスの右クリック → 「チャンネル詳細を表示する」をクリックします。
②開いたチャンネル情報の一番したでIDを確認することができ、アイコンをクリックでIDをコピーできます。

7.フローを[保存]、 デバッグで確認します。

スケジュール済みパスでデバッグを行う場合は[デバッグ実行のパス]を設定したパスに変更します。※実際にSlackへ通知がいきますので、トリガレコードの選択にはご注意ください。
8.最後にフローを [有効化]にします。

ちなみに、[設定]の「時間ベースのワークフロー」からキューに入っているか確認することができます。
「予定日」列の日時がアラーム設定日時の「2023/2/2 14:00 」になっていることも確認できます。

ToDoの状況を「完了」にすると、アラーム設定が解除されるため、「時間ベースのワークフロー」で確認できたキューも削除されます。

Slack通知確認のため、再度、「2023/2/2 14:00 」でアラームを設定します。

Salesforce for Slackからのメッセージでちゃんと通知が来ました。

また、フロー設定の6.の「Slack の会話 ID」をチャンネルIDにした場合は、このような感じになります。

ご相談があったフローについては、「Slack宛てにメッセージを送信するレコードトリガフローを設定したが、トリガしたユーザ宛てのメンションだと自分宛のメンションでSlackの通知がならない」というものでしたので、今回のサンプルフローはご相談者の要件に寄せて
「ToDoのアラーム設定した日時にSlackで割り当て者へメンションで通知する」で設定してみます。
この要件は以前の記事でもご紹介した「ToDoのアラーム通知をモバイルアプリでも通知させたい」のSlack通知バージョンです。
ユーザ情報にSlackメンバーID情報を追加
Slackへ通知する際にダイレクトメッセージにしたり、メンションするのにSlackのメンバーIDが必要になります。個人設定の「Slack ユーザの対応付け」に接続したワークスペースのIDとSlackユーザのIDが表示されているので、こちらの情報を使用できないかと取得方法を探してみたのですが、見つからなかったため、ユーザにカスタム項目を作成して、そちらにSlackのメンバーIDを格納する方法でご紹介いたします。
取得方法などご存じの方がいらっしゃいましたら、コメントなどで教えていただけると嬉しいです。
1.ユーザオブジェクトへSlackIDを格納するカスタム項目を作成します。
2.SlackからメンバーIDの一覧を取得します。
①Slackの左上のワークスペース名をクリックし、[設定と管理] → [メンバーを管理する]の順で開きます。
②[メンバーリストをエクスポートする]をクリックします。
③Slackbotからメッセージが届きCSVファイルが添付されていますので、こちらをダウンロードします。
CSVファイルにはemail、user id等があります。
④レポートやデータローダ等でエクスポートしたSalesforceのユーザ情報と、③でダウンロードしたCSVファイルを使用して、インポートファイルを作成し、データローダ等でユーザ情報を一括更新します。
サンプルのワークスペースのように人数が少ない場合は、1件ずつ手入力してもOKです。
カスタム表示ラベルの作成
こちらはSlackのメッセージにToDoレコードのURLを挿入するために、組織のURLを登録する設定です。メッセージにレコードのURLを挿入されない場合や、すでに作成済みの場合はこの作業はスキップしてください。ご参考:カスタム表示ラベルでテンプレートのURLを管理する
1.[設定] から、[クイック検索] で「カスタム表示ラベル」を検索し、[カスタム表示ラベル]をクリックします。
2.[新規カスタム表示ラベル]をクリックし値に組織のURLを入力します。
フローの設定
※こちらのフローの設定方法は、SlackへSalesforceが構築したアプリをインストール済みが前提となります。Slackが構築したアプリしかインストールしていない場合はこちらの「フローコアアクション: [通知の送信] アクション」しか使えないと思います。こちらのアクションではアプリの実行者を設定できませんでした。
設定画面はこんな感じです。
Salesforce for Slackのインストール手順については、前回の記事「Salesforce for Slackの接続設定をしてみる」等をご確認ください。
それでは、フローの設定を紹介いたします。
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリック、または、設定ホームの[作成▼]の「フロー」をクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・オブジェクト:ToDo
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
IsReminderSet(アラーム設定) | 次の文字列と一致する | True |
・フローを最適化:アクションと関連レコード
3.[開始]の「+スケジュール済みパスを追加(省略可能)」をクリックし、以下のように設定します。
・時間取得元:Task: アラーム日付/時間
・オフセット数:0
・オフセットオプション:オフセット数0の場合はどれでもOK
ちなみに今回のサンプルの要件では「スケジュール済みパス」となっていますが、「即時実行」でSlackのアクションを使用すると保存時に「この要素をフローから削除するか、スケジュール済みパスに移動してください。レコードトリガフローは、即時実行されるパスで外部コールアウトを行うアクションを実行できません。」とエラーメッセージが表示されます。
検証のため、スケジュール済みパスで即時実行と同じ状態(時間取得元を「○○が作成または更新されたとき」を使用)になるようにパスを設定した際は、エラーなく保存でき、フローも実行されました。
4.左側のツールボックスを表示して、マネージャの[新規リソース]をクリックし、以下のように設定します。
【割り当て先のSlackメンバーIDを格納するテキスト変数】
・リソース種別:変数
・データ型:テキスト
【通知文のテキストテンプレート】
レコードの情報を使用しない一律のメッセージで良い場合は、こちらのリソース作成は不要です。
・リソース種別:テキストテンプレート
・種別:プレーンテキストとして表示
・本文:※こちらは自由にご入力ください。また、先に「プレーンテキストとして表示」にしておかないとタグが挿入されてしまうのでご注意ください。
<@{!var_SlackID}>さん! :alarm_clock:*ToDoアラーム* >件名:{!$Record.Subject} >期日:{!$Record.ActivityDate} >レコードリンク:{!$Label.OrgURL}{!$Record.Id} |
サンプルのメッセージで使用したマークアップも含めて使いそうな書式を紹介いたします。
Slackメッセージの書式を適用するには、赤字の箇所をテキストに追加してください。
ご参考:Slack ヘルプセンター>Slack の使い方>メッセージの書式とスタイル
・ユーザへメンションする
<@SlackユーザID> |
・@here(チャンネル内のアクティブなユーザ)
<!here> |
・@channel(チャンネルのメンバー全員)
<!channel> |
・@everyone(#general チャンネルでのみ使用)
<!everyone> |
・テキストを太字にする
*太字にしたいテキスト* |
・テキストを斜体にする
_斜体にしたいテキスト_ |
・テキストに取り消し線を引く
~取り消し線を引きたいテキスト~ |
・引用にする
>引用文 |
・コードにする
`コード` |
・コードブロックにする
``` 1行目 2行目 3行目 ``` |
↑上記の書式を全部設定して、Slackに送信したものがこちらの画像です。
・絵文字を追加する
上記の本文のサンプルのように絵文字の名前「:alarm_clock:」を入力するだけですが、こちらの画像のように「:目覚まし時計:」で入力すると絵文字として表示されません。
コードブロックにするアイコンをクリックすると、絵文字の名前が確認できます。
他に方法があるかもしれませんが、Slackに詳しくないのでこちらの方法でのご紹介ですみません。
5.[アラーム日時](3.で設定したパスの表示ラベル)の下の⊕から[割り当て]を追加し、以下のように設定します。
・変数値を設定
変数 | 演算子 | 値 |
var_SlackID (4.で作成した変数を選択) | 次の文字列と一致する | $Record > 割り当て先 ID (User) > Slack ID |
6. [割り当て]要素の下の⊕から[アクション]を追加し、以下のように設定します。
・アクション:Slack メッセージを送信
Slack の接続値を設定
・Slack アプリケーション:Salesforce for Slack(接続しているアプリ)
・Slack ワークスペース:上記アプリケーションと接続しているSlackワークスペースを選択
・アクションの実行者:Slack アプリケーション
Slack メッセージの詳細を設定
・Slack の会話 ID:
[個人へダイレクトメッセージの場合] → {!var_SlackID}(4.で作成した変数)
[チャンネルの場合] → チャンネルIDを入力(確認の仕方はアクション入力画面の後にあります)
・Slack メッセージ:{!text_message}(4.で作成したテキストテンプレートまたはテキストを直接入力してください)
チャンネルIDの調べ方
【URLから】
チャンネルを選択して、アドレスバーの右側のID(図の赤枠)がチャンネルIDです。
【チャンネル情報から】
①チャンネルでマウスの右クリック → 「チャンネル詳細を表示する」をクリックします。
②開いたチャンネル情報の一番したでIDを確認することができ、アイコンをクリックでIDをコピーできます。
7.フローを[保存]、 デバッグで確認します。
スケジュール済みパスでデバッグを行う場合は[デバッグ実行のパス]を設定したパスに変更します。※実際にSlackへ通知がいきますので、トリガレコードの選択にはご注意ください。
8.最後にフローを [有効化]にします。
【結果確認】
アラーム設定付きのToDoを登録してみます。アラーム設定日時は「2023/2/2 14:00」です。ちなみに、[設定]の「時間ベースのワークフロー」からキューに入っているか確認することができます。
「予定日」列の日時がアラーム設定日時の「2023/2/2 14:00 」になっていることも確認できます。
ToDoの状況を「完了」にすると、アラーム設定が解除されるため、「時間ベースのワークフロー」で確認できたキューも削除されます。
Slack通知確認のため、再度、「2023/2/2 14:00 」でアラームを設定します。
Salesforce for Slackからのメッセージでちゃんと通知が来ました。
また、フロー設定の6.の「Slack の会話 ID」をチャンネルIDにした場合は、このような感じになります。
おわり
コメント