見出し画像

【第144回】 連絡先の更新アクティビティについて

Salesforce Marketing Cloud には Journey Builder で使える「連絡先の更新」というアクティビティがあります。今回、このアクティビティの使い方についてまとめておきたいと思います。

■ 連絡先の更新 - 公式ヘルプドキュメント


この「連絡先の更新」アクティビティを使うと、ジャーニー上で連絡先がこのアクティビティに到達したときに、特定の値(静的な値 or 動的な値)でデータエクステンション内の値を更新することができます

この更新方法については、ターゲットとなるデータエクステンションの中にすでに連絡先がいる場合は、上書き更新されます。もし該当の連絡先がいない場合は、新規でレコードが追加がされる仕組みになっています。

■ 連絡先がすでに存在していた場合 ・・・ 値が更新される
■ 連絡先が存在していなかった場合 ・・・ 新たにレコードが追加される

そして、ターゲットとなるデータエクステンションは「送信可能データエクステンション」であることが重要です。もし「送信可能データエクステンション」でなければ、ターゲットとして選択するときに表示がなされません

この「送信可能データエクステンション」では「送信リレーションシップ」の設定を行う必要があり、その設定で使用される項目が、自動的にこのアクティビティの更新時の連結キーとなりますので、通常は、ジャーニーで送信時に使用している送信リレーションシップのキーと同じ項目を、ターゲットとなるデータエクステンション側でも設定しておいて下さい

また、よくある質問で「ターゲットとなるデータエクステンションを予め Contact Builder のデータデザイナーでリンクさせる必要はありますか?」という質問を頂くのですが、この作業は、関係がないので「不要」です。単純に「送信可能データエクステンション」で作ってあれば OK です。

また「連絡先の更新」アクティビティを使用して連絡先をターゲットとなるデータエクステンションに新規で追加する場合は、すべての必須フィールド値を含めないと連絡先は追加されませんので注意して下さい。

それでは、以上を踏まえて、設定の手順を確認してみましょう。


■「静的な値」で更新する場合

以下のように、エントリーソース用のデータエクステンションを構成しました。

後ほど、以下の「最終購入商品」の項目を使って、ジャーニーに判断分岐を設け、パスの分岐をしたいと思います。

続いて、ターゲットとなるデータエクステンションを作成します。今回、どのパスを通過したのかを識別する「Path」という項目を設けました。また、前述の通り「送信可能」でデータエクステンションを作成し、「送信リレーションシップ」の設定も行います

今回、新規レコードの追加の例だけではなく、更新の例も確認するために、下記のようにダミーのレコード(AOR501)を一つだけ作成しておきます。

データエクステンションの設定が一通り完成したら、ジャーニーにて「最終購入商品」が「Apple PC」の場合は上側のパスを通り、「Windows PC」の場合は下側のパスを通るように「判断分岐」を構成します。

最後に、「連絡先の更新」アクティビティを配置して、格納先として、先ほど作成したターゲットとなるデータエクステンションを選択したら、左の属性の欄に「Path」を選択し、右の値の欄に「1」を入力します。この「1」が「静的な値」となります。

この属性側の設定で「Id」の設定は不要です。この設定をせずとも、送信リレーションシップの項目を元にして、自動的に紐づけがされます。「Id」に対して、不要な「静的な値」を設定してしまうと、正しい値が取れなくなりますので注意して下さい。

同様に、下側の「連絡先の更新」アクティビティには「2」を入力します。

以上、「連絡先の更新」アクティビティの設定が完了したら、ジャーニーをアクテイブ化して、連絡先を流します。

連絡先が流れた後、ターゲットとなるデータエクステンションを確認しに行くと、下記のように「Path」に「1」か「2」の値が入っていました。

ダミーのレコードとして作成していた AOR501 には「Path」に「XXX」が入っていましたが、そちらは上書き更新されて「1」となっており、連絡先レコードが存在しなかった AOR502 と AOR503 は、新規でレコードが追加されて、それぞれのパスが記載されていることが確認できます。

ちなみに、この「連絡先の更新」アクティビティの属性の設定は「テキスト型」の処理の他、「日付型」の処理もできます

下記の通り、カレンダーから「静的な日付」(Date 型)を入力するか、「連絡先がこのアクティビティを通過した日時」(Datetime 型)のどちらかを返します。後者の場合は、CST のタイムゾーン(15時間前)の日時で返されるので注意して下さい。

以上が「静的な値」で更新する場合の説明になります。


続いて、エントリーソースとなるデータエクステンションのエントリー時の値(「ジャーニーデータ」と呼ばれるもの)を動的に入力したり、「連絡先データ」と呼ばれるリアルタイムデータを動的に入力することも可能ですので、そちらの説明をしたいと思います。

■「ジャーニーデータ」で更新する場合

この入力方法は、標準の「パーソナライズ文字列」が使用できませんので、下記のような入力を行います。こちらは、エントリーソースが「データエクステンション」の場合の例であり、「API」などの場合は異なります。

{{Event.DEAudience-イベント定義キー."項目名"}}

<注意>
・この方式では、大文字・小文字が区別されるため正確に記載して下さい。
・項目名などに、半角スペースが入る場合は「""」で囲んで下さい。

この「イベント定義キー」は探し出すのが少しだけ面倒です。以下のような方法で探し出して下さい。

ジャーニーキャンバス上で少なくとも、エントリーソースとなるデータエクステンションだけは設定して下さい。次に、そのジャーニーキャンバス上で右クリックをして、ブラウザの「検証」の機能を呼び出し「開発者コンソール」を開きます。この画面が開いたら「Ctrl + F」を押して「Search」を呼び出し「Event.DEAudience」と入力して検索を実行します。すると、下記のように検索された箇所にマークがされるので、その上にカーソルを持ってきて、右クリックをして、要素をコピーしてください。

このコピーしたものをメモ帳などに貼り付けると、以下のようなコードが貼り付けされます。そこに「イベント定義キー」の記載がありますので、その値を使用します。

<li data-value="{{Event.DEAudience-9b897ef4-f37a-ce4d-9468-ac8e01c5a1ee."Email"}}" data-selected="true"><a href="#">Email</a></li>

基本的には、ジャーニーのバージョンが異なっても、同じ「イベント定義キー」が返されますが、エントリーソースを削除して再設定した場合など、再設定する度に「イベント定義キー」は変更されますので注意して下さい

「イベント定義キー」取得後は、「静的な値」の時と同様に「連絡先の更新」アクティビティを構成します。今回は、取得される値がパーソナライズされる前提となるので、判断分岐は設けていません。

ここで「連絡先の更新」アクティビティの属性の欄に、以下の値を入力し、エントリーソースに格納されている各連絡先の「Last_Purchase_Product」の値をターゲットとなるデータエクステンション側に返してみます。

{{Event.DEAudience-9b897ef4-f37a-ce4d-9468-ac8e01c5a1ee."Last_Purchase_Product"}}

設定が完了したら、ジャーニーをアクテイブ化して連絡先を流します。

すると、以下のように、エントリーソース内で各連絡先が持っていた「Last_Purchase_Product」の値が入力されたことが分かります。

格納される値は、リアルタイム値ではなく、エントリーしたタイミングのスナップショット値(ジャーニーデータ)が返されます

また、この方法において「日付型」の項目に「日付型」の値を動的に入力させることはできません。この場合は「テキスト型」の項目を作成し、日付をテキストで格納するように設定して下さい。後ほど、SQL を使用して、そのテキストの日付を通常の「日付型」の値に変更するなど工夫して下さい。


■「連絡先データ」で更新する場合

最後に、リアルタイムデータとなる「連絡先データ」を使用する場合は、以下のような形になります。

{{Contact.Attribute."データエクステンション名"."項目名"}}

<注意>
・この方式では、大文字・小文字が区別されるため正確に記載して下さい。
・項目名などに、半角スペースが入る場合は「""」で囲んで下さい。

これを行うには、事前に Contact Builder のデータデザイナーでリンクを作成する必要がありますので、まずはデータデザイナーでデータエクステンションのリンクの処理を行って下さい。このリンクの処理を忘れますと、すべて空の値が返されてしまいます。

ここで注意をすべきは(ジャーニーデータであれば、エントリーソースとなっているデータエクステンションの項目から「Id」を探しに行くため、当然にすべての連絡先キーをマッチングさせることができるわけですが・・・)連絡先データの場合は、同じ連絡先キーを持つレコードが必ずしも存在するとは限りません。さらには「1 : N」のデータであれば、複数のレコードがマッチングする可能性もあります

故に、レコードが存在しない場合は、空の値が入力されます。そして、複数のレコードがマッチングするような場合は、最初にマッチングしたレコードの値が入力されます。このルールに注意して下さい。

■ レコードが存在しない場合 ・・・ 空の値が入力される
■ 複数のレコードとマッチングする場合 ・・・ 最初にマッチングした値

ここで、以下のように処理を行い、検証したいと思います。

・AOR501:通常 ⇒ 通常通りデータ取得(予定)
・AOR502:データなし ⇒ 空の値を取得(予定)
・AOR503:レコードが複数ある ⇒ 最初にマッチした値を取得(予定)

連絡先データを取得するためのデータエクステンションとして、以下のようなデータエクステンションを作成します。

そして、先ほども述べた通り、データデザイナーでデータエクステンションをリンクします

ここまで完了しましたら、先ほどと同様に「連絡先の更新」アクティビティを構成します。今回も値自体がパーソナライズされる前提となるため、判断分岐は設けません。

こちらは「イベント定義キー」を使う必要はありませんので、以下の値を入力し、連絡先データとして格納されている各連絡先の「Purchase_Product」の値をターゲットとなるデータエクステンション側に返します。

{{Contact.Attribute."PurchaseData"."Purchase_Product"}}

設定が完了したら、ジャーニーをアクテイブ化して連絡先を流します。

すると以下のように、連絡先データとして、各連絡先が持っていた「Purchase_Product」の値が入力されたことが確認できます。

先ほどの検証の内容も、想定どおりになっているかと思います。

・AOR501:通常 ⇒ 通常通りデータが取得された
・AOR502:データなし ⇒ 空の値が取得された
・AOR503:レコードが複数ある ⇒ 最初にマッチした値が取得された


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

「連絡先の更新」アクティビティを使用するほとんどのケースでは、前半で説明した「静的な値」の方を用いるとは思うのですが、各連絡先ごとに「動的な値」を入力したいというアイデアが思い浮かんだ方は、後半で説明した「動的な値」の方についても試してみて下さい。

今回の記事が、少し内容が多くて読むのが大変だった・・・・という方は、Mai Yamashita さんの記事の方が簡潔に書かれていますので、そちらも参考にして下さい。

今回は以上です。


Click here for English version

次の記事はこちら

前回の記事はこちら

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

この記事が気に入ったらサポートをしてみませんか?