実験!フローで頑張ってみた:メールtoケースでメールの内容を取り出して項目に挿入する

実験!フローで頑張ってみた:メールtoケースでメールの内容を取り出して項目に挿入する

フローを究めていくと裏で暗躍していくオブジェクトを知ることになる……
実験!フローで頑張ってみた:メールtoケースでメールの内容を取り出して項目に挿入する
51
実験!フローで頑張ってみた:メールtoケースでメールの内容を取り出して項目に挿入する
Admin
2024/08/08 18:03:09
かなり前に同様の要望について相談があり、チームメンバーに助けてもらいつつ検証してみたのですが、自分自身も学ぶことが多かったため、いつか記事にしようと思っていたナレッジ、やっと記事にします。

タイトルで「実験」と付けているとおり、実際に活用するには分岐を作成し、さらなる検証が必要な内容ですが、メール-to-ケースでフローを起動する際のオブジェクトや開始条件の指定について理解するための例としてお読みいただければと思います。

なお、メール-to-ケースをトリガーとするフローの設定については、Salesforceさんのヘルプページにナレッジ記事が用意されています。こちらで紹介されているような、メール本文ではなく、関連ケース有無やステータスなどを確認してケースを更新するような使い方が、現時点では安全なのだと思います。

◇ SALESFORCE >ヘルプ >ケースのメールメッセージに基づいてケースの状況を更新する方法

ただし、ナレッジ記事にも注意書きがあるように、ユーザーの方から共有された方法であり、Salesforce さんが必ずしも推奨しサポートしているわけではないので、実装の際は十分なテストを重ね、検討されることをおすすめします。


前提

・メール-to-ケースで問い合わせを受け付ける際、ユーザーには次のようなテンプレートを使用してメールを送信してもらうように設定している。
------------------------------------------------------------
件名:
説明:
エラーメッセージ:

------------------------------------------------------------


やりたいこと

メール-to-ケースで受信したメール本文の「エラーメッセージ:」以降に入力されたエラーメッセージを抜き出し、ケースに用意した「エラーメッセージ」というカスタムのテキスト項目に転記したい。


ポイント

・メール-to-ケースをトリガーとしてフローを起動したい場合、ケースではなくメールメッセージを開始時のオブジェクトとして指定する。
・メールメッセージオブジェクトにはメールの状態を表す項目が用意されている。
・メールメッセージと関連するケースの有無は「ParentId」で確認でき、関連するケースがある場合はケースの情報を参照できる。


フローの設定内容

シンプルに前述のやりたいことを実現するためのフローです。実際はパターンを想定して分岐(決定要素)などの追加が必要になりますので、ご注意ください。

フローの種別はレコードトリガーフローです。

全体像



①開始


オブジェクトを選択 >オブジェクト
メールメッセージ

メール-to-ケースでは、オブジェクト「メールメッセージ」にメール情報が保存されます。
「メールメッセージ」詳細については↓をご参照ください。
◇SALESFORCE >developers >Salesforce プラットフォームのオブジェクトリファレンス >Salesforceオブジェクトおよび項目の概要 >リファレンス >標準オブジェクト >EmailMessage

トリガーを設定 >フローをトリガーする条件
レコードが作成された

エントリ条件を設定 >すべての条件に一致 (AND)
・Incoming(受信)|次の文字列と一致する|True
・ParentId(ケースID)|null|False
・Status(状況)|次の文字列と一致する|0(新規)

この内容で「メールを受信してメール-to-ケースでケースが新規作成されたとき」を指定しています。

フローを最適化
アクションと関連レコード

関連ケースを更新するので、「アクションと関連レコード」を選択します。


②レコードを更新

ケースレコードを更新します。

更新するレコードを検索してその値を設定する方法
フローをトリガーした メールメッセージ レコードに関連するレコードを更新


関連レコードを選択 >メールメッセージ に関連するレコード

グローバル変数から、レコードをトリガーしたメールメッセージ(EmailMessage)をたどり、ケースIDを選択します。


検索条件を設定 >レコードを更新する条件の要件
なし ー すべての関連レコードを更新


ケースの項目値をレコードに設定
ケースに用意されたカスタムテキスト項目に、メール本文の「エラーメッセージ:」以降に書かれたテキストを転記します。更新する値を数式で定義します。

値の設定欄、ツールボックスのどちらでも構いませんので、【+新規リソース】をクリックして数式を作成します。


数式の内容です。

重要なところだけ説明します。

データ型
テキスト


数式
LEFT(MID({!$Record.HtmlBody}, FIND("エラーメッセージ:" ,{!$Record.HtmlBody})+9, 32000),
FIND("</div>", MID({!$Record.HtmlBody}, FIND("エラーメッセージ:" ,{!$Record.HtmlBody})+9, 32000))
-1)


・メール本文から「エラーメッセージ:」に続く文字列を探し、文字列の末尾の“</div>”タグより前までを抜き出します。
・メールメッセージではメール本文は「HtmlBody」に格納されます。
・32000は、メールメッセージの文字数の上限です。

!注意!
今回の場合、</div>を考慮したこちらの数式で「エラーメッセージ:」以降の文字列を取り出すことができましたが、メーラーやテンプレートの体裁にあわせて、調整が必要となります。

なお、画像の例では「件名」も同様の数式を作成しております。ほぼ同じ内容なので割愛します。


テストします


メールを送信します。


ちなみに手っ取り早くメール-to-ケースを試したいときは、こちらをあて先にしてメールを送信します。肝心なところ隠しててごめんなさいですが、「メールサービスアドレス」あてに送信する、であってます。


Salesforceを確認すると、無事にケースが作成されており、


ケースレコードの詳細を確認すると、エラーメッセージをメール本文から持ってきて「エラーメッセージ」項目に転記できていました。



あくまでも実験です

色々なパターンで試してみたのですが、メーラー、本文の書き方などでhtmlのタグが出てしまうなど、挙動が安定しませんでした。決まったメールフォームでそのあたりをきっちり制御できるのであれば流用できるかもしれません。


ひとこと

質問されるまでメール-to-ケースでフローを動かすにはメールメッセージオブジェクトを開始オブジェクトにするということも知りませんでしたし、メールとケースの関連の有無やケースの状態を確認して更新する方法も知ることがなかったので、かなり時間がかかった検証ですが、いい機会をもらいました。


追記

記事を探していたら、以前同じような要件について怪談新木耳袋さんが書いてくださっていました。
【フロー】テキスト内の改行を判断して、文字を抽出する方法
こちらはフローの開始オブジェクトが異なっており、スケジュール済パスを使用することでケースの「説明」に保存されるメール本文を参照しているようです。


関連記事

【フローで】営業時間でのケース対応時間を算出する【土日・祝日を除く】
あらためて、キープレフィックスとは。活動の関連先を可視化してみた



公開:2024年8月1日
更新①:2024年8月8日
gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
51
コメント