見出し画像

【第220回】 Marketing Cloud Connect における失敗のポイント

Salesforce CRM と Salesforce Marketing Cloud を連携するためのコネクタである Marketing Cloud Connect に関する「失敗のポイント」をまとめました。連携設定やトラブルシューティングの際に役立ててください。


① 課金対象の連絡先となるオブジェクトは 3 つ

Marketing Cloud では、以下の 3 つのオブジェクトが課金対象の連絡先として扱われます:

  1. Contact(取引先責任者)

  2. Lead(リード)

  3. User(ユーザー)

これらのオブジェクトが Marketing Cloud に同期された場合、課金対象の連絡先として自動的にカウントされます。


🔶 Contact Builder における注意点

Contact Builder でさまざまなオブジェクトを連携する際、ContactLeadUser のオブジェクトが「前提条件」として扱われ、事前の連携が必要になる場合があります。

データデザイナーでデータモデルを確認してみても、これらのオブジェクトが MCC データモデルの起点的な存在となっていることが分かります。

・この MCC データモデルは Marketing Cloud Connect を構成すると自動的に生成されます。この MCC データモデルを使うことで、同期済みデータエクステンションを「判断分岐」や「終了条件」で、即座に利用できるようになります。

ContactLeadUser のオブジェクトの他にも、MCC データモデルにおいて「中間テーブル」となるオブジェクトは、他のオブジェクトの連携時に「前提条件」として扱われる場合があります。どのオブジェクトを連携する際に、どのオブジェクトが前提条件になるかは、システムにより自動で判断されるため、連携を完了するには、システムの指示に従ってください。

さて、これら ContactLeadUser オブジェクトが「前提条件」だからと言って、何も考えずに連携を開始してしまうと、連携を開始した時点で「課金対象の連絡先」としてカウントされてしまいます。

よって、事前に「同期の構成」のフィルター構成で CRM 側のチェックボックス(Boolean)の項目 を使用して、Marketing Cloud へ同期するレコードを制御することをオススメします。

例えば、「MC_connect__c」のようなチェックボックス(Boolean)の項目を新設して、連携を制御します

ここで使用するチェックボックスの項目は、Marketing Cloud への連携対象の項目として選択してないと「同期の構成」で使用できません。

MCC データモデルを使用しない場合は、「前提条件」となっていても、オブジェクトさえ連携できていれば、そのオブジェクトの中身が「0」レコードでも問題ありません。但し、「判断分岐」や「終了条件」では活用できなくなりますので注意して下さい。前提のレコードが欠損しているためです。


② 同期フィルターで数式項目は使えない

同期の構成 のフィルター設定では、数式で作成されたチェックボックス(ブール型)は使用できません。これらの項目は同期構成のフィルターのプルダウンリストに表示されないためです。そのため、フィルター条件には通常のチェックボックス項目を使用してください。

この仕様は、Spring '23 リリースで変更されました。

なお、数式チェックボックス項目はフィルターでは使用できないものの、同期済みデータエクステンションには正しくデータが連携されます。そのため、データ自体の活用には問題ありません。


③ 一度オブジェクトを連携してしまうと取り消せない

一度、特定のオブジェクトを Marketing Cloud と連携すると、その連携をキャンセルして削除することはできません。

もし、どうしても削除が必要な場合は、Marketing Cloud Connect を一度切断する必要があります。これにより、すべてのオブジェクトの連携が初期化されます。以下の注意点があります:

  • 再接続時の手動設定
    再接続後、各オブジェクトの連携フィールドを手動で再設定する必要があります。

  • オートメーションのエラーリスク
    再連携後、SQL クエリアクティビティで使用されていたフィールドを連携し忘れると、オートメーションエラーの原因になります。

解決策として、再連携後はオートメーションを一度「一回実行」して、動作確認を行うことをおすすめします。

この削除できない件は、以下のヘルプにも記載があります。

現時点では、1 つの同期済みオブジェクトを削除することはできません。 UI からエンティティを削除する唯一の方法は、インテグレーションを切断することです。 切断すると、同期していたデータエクステンションと関連する属性グループがすべて削除されます。


④ 常に全レコードが同期の対象になるわけではない

まず、同期のタイミングは 15 分、30 分、1 時間 から選択できます。

上記のタイミングで、Salesforce CRM から Marketing Cloud へ同期がされるのは、「新規のレコード」と「Last Modified Date が変更されたレコード」に限られます。

ここでのポイントは、「更新分」に関しては「Last Modified Dateが動いた分だけを見て、その分だけが同期される点です

「Last Modified Date」とはどの項目のことか?という質問を頂くことがありますが、以下のシステム監査項目の最終更新日時を指します。

つまり、同期のタイミングの「15 分、30 分、1 時間」とは、この「Last Modified Date」から、15分 以内、30分 以内、1 時間以内と読み替えることができるわけですね。

上の最終更新日時に対して、同期のタイミングが「15 分」と設定してあれば、『2024/11/20 15:48 までには同期される』という目安になります。

そして、稀に Salesforce CRM と Marketing Cloud でデータのズレが生じる場合があります。そのほとんどの原因が、この「Last Modified Date」が動く形で更新されていないことが原因となっています

データにズレが生じている場合、まずは、Salesforce CRM の環境で「Last Modified Date」が変更されているかを確認してみてください。

Last Modified Date」が動かない原因としては、少し古いヘルプドキュメントですが、以下が参考になります。

私は Salesforce CRM にはそこまで詳しくありませんが、主に「関連オブジェクトの項目更新により、レコードの数式項目が更新される」というケースで更新されていないことが多いのではないでしょうか。

例えば、商談(Opportunity)と取引先(Account)の関係 において、

  1. 商談オブジェクトに数式項目 Account_Industry__c を作成し、関連する取引先の「業種」フィールドを参照します。数式:TEXT(Account.Industry)

  2. 取引先(Account)の「業種」フィールドを変更すると、商談(Opportunity)の数式項目の値が変わります。

  3. この時、商談の「最終更新日」は変更されません。

つまり、この場合、変更後の Account_Industry__c は連携されませんので、Salesforce CRM と Marketing Cloud でズレが生じる結果となります。


⑤ オブジェクトや項目が同期項目の選択画面に表示されない

Markeitng Cloud 側における「オブジェクト」や「項目」へのアクセス(表示)権限は、CRM 側の API ユーザー(連携で使用した CRM 側のユーザー)のアクセス権限に依存します。

よって、「オブジェクト」や「項目」が同期項目の選択画面に表示されていない場合は、CRM 側の API ユーザーに対して、表示させたい「オブジェクト」や「項目」のアクセス権を付与して下さい。これで解決するはずです。

逆を言いますと、例えば、何かのはずみで CRM 側の API ユーザーの「項目レベルセキュリティ」のチェックを外して「保存」をしてしまうと、MC 側の連携は外れてしまいますので注意して下さい。


⑥ CRM で変えたデータの長さは MC では変更されない

この事例を分かりやすく伝えると、例えば、商談オブジェクトのカスタム項目 URL__c のデータの長さが 100 だとします。

これを MC 側へ連携すると、当然 100 のデータの長さで連携されます。

ここで、URL の値にパラメーターを付与したいと思い、文字数を 255 に変更しました。これで保存します。

再度 MC 連携を確認しますと、MC 側のデータの長さは 100 のまま変更されません。当然、100 文字を超えた分のテキストは同期されませんので注意が必要です。

このデータの長さを 100 から 255 に変更するには、一度、MC 側の項目の連携を解除して下さい。以下の通り、チェックを外して保存するだけです。これで項目の連携がすぐに解除されます。

その後、Contact Builder のページをリロードして、再度アクセスすると、下記の通りデータの長さが 255 となっていました。この状態で再連携して下さい。これで、100 文字以上のテキストが入るようになったと思います。


⑦ CRM 側で項目の API 名を変更すると連携が解除される

以下のように、URL__c という項目が連携されていたとします。

CRM 側でこの項目名を、URL ⇒ URL2 に変更してみます。

以下の通りアラートも出ますが、これも無視して続けます。

すると以下の通り、Salesforce CRM 側で API 参照名が変更されました。

ここで、先ほどの MC 側の連携を確認してみます。すると以下の通り、表示されていないことが分かりますね。

その後、しっかりと再連携すれば問題ありませんが、このまま放置しますと、オートメーションエラーになるリスクがあります。

Salesforce CRM 側で項目名を変更した項目が、同期済みデータエクステンションを開くと、以下のように項目が削除されていないように見える場合がありますが、バックエンドでは削除されており、将来的に何らか 1 レコードでも値が動いた時点で、その項目自体が同期済みデータエクステンションから表示されなくなります


⑧ Date 型 と Datetime 型の違い

Salesforce CRM と Marketing Cloud では、Date 型Datetime 型の取り扱いに違いがあります。この違いを正しく理解しないと、データの連携や利用時に予期せぬ結果を招くことがあります。結論は以下の通りです。

◆ Date 型 の場合
CRM:12 月 1 日 AM 0:00 ⇒ Marketing Cloud:12 月 1 日 AM 0:00

◆ Datetime 型の場合
CRM:12 月 1 日 AM 0:00 ⇒ Marketing Cloud:11 月 30 日 AM 9:00

つまり Datetime 型の場合は、15 時間マイナスされて連携されてくるということになります。これは、JST タイムゾーンの場合です。

以下の項目で検証してみましょう。

Salesforce CRM 側では以下のように入力しました。上が Date 型で、下が Datetime 型です。

その後、各値を Marketing Cloud 側に連携して見てみますと、以下の通り、異なった値で連携されたことが確認できます。

この件は、以下のヘルプにも示されています。よく読んでおいてください。


⑨ Salesforce Data を使った場合の Datatime 型の注意点

Salesforce Data を使った場合、Datetime 型の項目は、MC 側へ 9 時間前の時間で連携されるため、AMPscript を使い、9 時間プラスしてあげる必要があります。これは、JST タイムゾーンの場合です。

%%=Format(Dateadd(CampaignMember:Campaign:Event_Start_Datetime__c, '9', 'h'), 'yyy年MMMM%d日HH時','Date', 'ja-JP')=%%からのイベントにご登録頂きありがとうございます。

このことについては、下の記事でも説明してありますので、そちらをご確認ください。


⑩ Salesforce Data 使用時のパーソナライズ文字列の書き方

⑨ で Salesforce Data を使った場合のコードの例を示しました。

%%=Format(Dateadd(CampaignMember:Campaign:Event_Start_Datetime__c, '9', 'h'), 'yyy年MMMM%d日HH時','Date', 'ja-JP')=%%からのイベントにご登録頂きありがとうございます。

この中に、以下のような文字列があり、これが Salesforce CRM 側のデータを使用したパーソナライズ文字列の例となります。

CampaignMember:Campaign:Event_Start_Datetime__c

これは、以下の エントリデータ の箇所から取得できます。ここに表示されている書き方で書いてください。


⑪ 「連携の保存中に例外が発生しました」の対処方法

これは、Marketing Cloud Connect を利用して、Salesforce CRM へ接続を行おうとした際に発生する有名なエラーです。

詳しくは Salesforce の公式ヘルプを参照してください。


⑫ リードの取引開始(コンバート)には対応していない

Salesforce CRM 側で リードの取引開始が行われた場合、Marketing Cloud 側の「リードの連絡先」が「取引先責任者の連絡先」に変換されることはありません。これらは Marketing Cloud 内では完全に別者として扱われます。            

よくある質問として、リードの時のエンゲージメントデータを、取引先責任者側に引き継げないか?というご質問がありますが、これはできません。

また、リードの連絡先は今後使われなくなったとしても、Marketing Cloud 側では引き続き「課金対象の連絡先」として残り続けますので、もし不要でしたら削除が必要です。但し、削除すると、これまでのリードの連絡先のエンゲージメントデータはすべて削除されますので、注意して下さい。

さらに、リードの同期済みデータエクステンション自体を使用して連絡先の削除を行う際は、特に注意が必要です。取引開始されたレコードが存在すると、取引先責任者の ID を誤って削除してしまうリスクがあります。

これは、ContactAlternateKeyStore(CAKS)という仕組みに起因しています。この仕組みでは、_ContactKey がリードの ID から取引先責任者の ID に置き換えられるため、同期済みデータエクステンションでリードの連絡先を削除すると、SubscriberKey と関連付けられた取引先責任者の ID も削除されてしまう可能性があるのです。

この詳細については、以下のヘルプドキュメントをご参照ください。


⑬ 個別のメールの結果の「メールのサムネイル」が閲覧できない

一部の組織において、個別のメール結果にはアクセスできるものの、「メールのサムネイル」が権限不足により表示されない場合があります。この問題を解決するためには、該当する プロファイル に権限を付与するか、閲覧専用の 権限セット を作成して権限を付与してください。

方法 1: プロファイルで権限を付与する

  1. 設定 から プロファイル に移動します。

  2. 権限を付与したいプロファイルを選択します。

  3. 有効な Visualforce ページアクセス を選択し、編集 をクリックします。

  4. Visualforce ページの et4ae5.ierImage を有効化します。

方法 2: 権限セットで権限を付与する

  1. 設定 から 権限セット に移動します。

  2. 新規 をクリックして新しい権限セットを作成します。

  3. 適切な名前を付けて保存します。

  4. Visualforce ページのアクセス を選択します。

  5. Visualforce ページの et4ae5.ierImage を有効化します。

  6. 権限セットを必要なユーザーに割り当てます。


いかがでしたでしょうか。

あらためて Marketing Cloud Connect における「失敗のポイント」をまとめてみますと、結構なボリュームになりました。今後も、新たなものが見つかれば、追記していきたいと思います。

この記事を見た方で、Marketing Cloud Connect における、別の「失敗のポイント」をお持ちの方は、コメント欄でお知らせください。🙏

今回は以上です。


Click here for English version

次の記事はこちら

前回の記事はこちら

私の note のトップページはこちら