カスタム実装用のイベントの設定

この設定の一部はカスタム開発であり、以下が必要です。

  • Adobe Campaign での JSON、XML および JavaScript の解析に関する実務知識
  • QueryDef API および Writer API の実務知識
  • 秘密鍵を使用した暗号化と認証に関する実務概念

Javascript コードの編集には技術スキルが必要なので、きちんと理解していない限り編集しないでください。

JavaScript でのイベント処理

JavaScript ファイル

パイプラインでは JavaScript 関数を使用して各メッセージを処理します。この関数はユーザー定義関数です。

これは、「JSConnector」属性の下の NmsPipeline_Config オプションで設定します。この JavaScript は、イベントを受信するたびに呼び出されます。pipelined プロセスで実行されます。

サンプルの JavaScript ファイルは、cus:triggers.js です。

JavaScript 関数

pipelined JavaScript は、特定の関数で起動する必要があります。

この関数は、イベントごとに 1 回呼び出されます。

function processPipelineMessage(xmlTrigger) {}

次のように返されます。

<undefined/>

JavaScript を編集した後、pipelined を再起動する必要があります。

トリガーデータフォーマット

trigger データは、XML フォーマットで JS 関数に渡されます。

  • @triggerId 属性には trigger の名前が含まれています。
  • JSON 形式の enrichments 要素は、Adobe Analytics で生成されたデータを含んでおり、トリガーに添付されます。
  • @offset は、メッセージへの「ポインター」です。キュー内のメッセージの順序を示します。
  • @partition は、キュー内のメッセージのコンテナです。オフセットは、パーティションを基準とした相対値です。
    キューには約 15 のパーティションがあります。

例:

<trigger offset="1500435" partition="4" triggerId="LogoUpload_1_Visits_from_specific_Channel_or_ppp">
 <enrichments>{"analyticsHitSummary":{"dimensions":{" eVar01":{"type":"string","data":["PI4INE1ETDF6UK35GO13X7HO2ITLJHVH"],"name":" eVar01","source":"session summary"}, "timeGMT":{"type":"int","data":[1469164186,1469164195],"name":"timeGMT","source":"session summary"}},"products":{}}}</enrichments>
 <aliases/>
 </trigger>

データフォーマットエンリッチメント

メモ

これは、考えられる様々な実装から得られる具体的な例です。

コンテンツは、各トリガーに対して Adobe Analytics で JSON 形式で定義されます。
例えば、LogoUpload_uploading_Visits トリガーの場合:

  • eVar01 には、Adobe Campaign 受信者との紐付けに使用される買い物客 ID を文字列形式で含めることができます。
    プライマリキーである買い物客 ID を見つけるために紐付ける必要があります。

  • timeGMT には、Adobe Analytics 側のトリガーの時刻を UTC エポック形式(01/01/1970 UTC からの秒数)で含めることができます。

例:

{
 "analyticsHitSummary": {
 "dimensions": {
 "eVar01": {
 "type": "string",
 "data": ["PI4INE1ETDF6UK35GO13X7HO2ITLJHVH"],
 "name": " eVar01",
 "source": "session summary"
 },
 "timeGMT": {
 "type": "int",
 "data": [1469164186, 1469164195],
 "name": "timeGMT",
 "source": "session summary"
 }
 },
 "products": {}
 }
 }

イベントの処理順序

イベントは、オフセット順に 1 つずつ処理されます。pipelined の各スレッドは異なるパーティションを処理します。

最後に取得したイベントの「オフセット」がデータベースに格納されます。したがって、プロセスが停止すると、最後のメッセージから再開されます。このデータは組み込みスキーマ xtk:pipelineOffset に格納されます。

このポインターは、各インスタンスと各コンシューマーに固有です。したがって、多くのインスタンスが異なるコンシューマーを使用して同じパイプラインにアクセスする場合、すべてのメッセージが同じ順序で取得されます。

パイプラインオプションの consumer パラメーターは、呼び出し元のインスタンスを識別します。

現在、「staging」や「dev」などの環境ごとに異なるキューを使用する方法はありません。

ログとエラー処理

logInfo() などのログは pipelined ログに送られます。logError() などのエラーは pipelined ログに書き込まれ、エラーの結果、イベントが再試行キューに入れられます。この場合、pipelined.log を確認する必要があります。
エラーのメッセージは、pipelined オプションで設定された時間内に複数回再試行されます。

デバッグおよび監視の目的で、完全なトリガーデータが、XML フォーマットで「data」フィールドのトリガーテーブルに書き込まれます。または、トリガーデータを含んだ logInfo() も同じ目的を果たします。

データの解析

このサンプル JavaScript コードは、エンリッチメント内の eVar01 を解析します。

function processPipelineMessage(xmlTrigger)
 {
 (…)
 var shopper_id = ""
 if (xmlTrigger.enrichments.length() > 0)
 {
 if (xmlTrigger.enrichments.toString().match(/eVar01/?lang=ja) != undefined)
 {
 var enrichments = JSON.parse(xmlTrigger.enrichments.toString())
 shopper_id = enrichments.analyticsHitSummary.dimensions. eVar01.data[0]
 }
 }
 (…)
 }

エラーを避けるために、解析をおこなう場合は注意が必要です。
このコードはすべてのトリガーに使用されるので、ほとんどのデータは不要です。したがって、存在しない場合は空のままにすることができます。

トリガーの保存

メモ

これは、考えられる様々な実装から得られる具体的な例です。

このサンプル JS コードは、トリガーをデータベースに保存します。

function processPipelineMessage(xmlTrigger)
 {
 (…)
 var event = 
 <pipelineEvent
 xtkschema = "cus:pipelineEvent"
 _operation = "insert"
 created = {timeNow}
 lastModified = {timeNow}
 triggerType = {triggerType}
 timeGMT = {timeGMT}
 shopper_id = {shopper_id}
 data = {xmlTrigger.toXMLString()}
 />
 xtk.session.Write(event)
 return <undef/>;
 }

制約

このコードは高頻度で実行され、他のマーケティングアクティビティに悪影響を及ぼす可能性があるので、このコードのパフォーマンスは最適である必要があります。特に、マーケティングサーバーで 1 時間に 100 万を超えるトリガーイベントを処理する場合や、適切に調整されていない場合は、注意してください。

この JavaScript のコンテキストは制限されています。API のすべての機能を使用できるわけではありません。例えば、getOption() や getCurrentdate() は機能しません。

処理を高速化するために、このスクリプトの複数のスレッドが同時に実行されます。コードはスレッドセーフにする必要があります。

イベントの保存

メモ

これは、考えられる様々な実装から得られる具体的な例です。

パイプラインイベントスキーマ

イベントは、データベーステーブルに保存されます。マーケティングキャンペーンで顧客のターゲティング、トリガーを使用した E メールのエンリッチメントに使用されます。
トリガーごとに異なるデータ構造にすることができますが、すべてのトリガーを 1 つのテーブルに保持できます。
triggerType フィールドは、データの発生元となるトリガーを識別します。

このテーブルのサンプルスキーマコードを以下に示します。

属性 タイプ ラベル 説明
pipelineEventId 長いテキスト プライマリキー トリガーの内部プライマリキー。
data メモ トリガーデータ XML 形式で記述したトリガーデータの完全な内容。デバッグおよび監査のために使用します。
triggerType 50 バイト長文字列 TriggerType トリガーの名前。web サイトでの顧客の行動を識別します。
shopper_id 32 バイト長文字列 shopper_id 買い物客の内部識別子。紐付けワークフローで設定されます。0 の場合、Campaign で顧客が不明であることを意味します。
shopper_key 長いテキスト shopper_key Analytics でキャプチャされた、買い物客の外部識別子。
created 日時 作成日時 イベントが Campaign で作成された日時。
lastModified 日時 最終変更日時 イベントがアドビで最後に変更された日時。
timeGMT 日時 タイムスタンプ イベントが Analytics で生成された時刻。

イベントの表示

イベントは、イベントスキーマに基づいてシンプルなフォームで表示できます。

メモ

パイプラインイベントノードは組み込まれておらず、追加する必要があります。また、関連フォームも Campaign で作成する必要があります。これらの操作は、エキスパートユーザーのみに制限されます。詳細については、ナビゲーション階層 および フォームの編集を参照してください。

イベントの処理

紐付けワークフロー

紐付けとは、顧客を Adobe Analytics から Adobe Campaign データベースに照合するプロセスです。例えば、shopper_id を照合の条件にすることができます。

パフォーマンス上の理由から、照合はワークフローでバッチモードでおこなう必要があります。
ワークロードを最適化するには、頻度を 15 分に設定する必要があります。その結果、Adobe Campaign でのイベントの受信とマーケティングワークフローによる処理との間の遅延は、最大 15 分になります。

JavaScript での単位紐付けのオプション

JavaScript でトリガーごとに紐付けクエリを実行できます。パフォーマンスが高くなる効果があり、結果が出るのが速くなります。高い反応度が必要な場合、これが特定のユースケースに必要になることがあります。

shopper_id にインデックスが設定されていない場合は、実装が難しい可能性があります。条件がマーケティングサーバーとは別のデータベースサーバー上にある場合は、データベースリンクが使用されますが、パフォーマンスが低下します。

ワークフローのパージ

トリガーは 1 時間以内に処理されます。トリガーの量は 1 時間あたり約 100 万個になることがあります。だからこそ、パージワークフローを用意する必要があるのです。パージは 1 日あたり 1 回実行され、作成後 3 日を超えるすべてのトリガーが削除されます。

キャンペーンワークフロー

トリガーキャンペーンワークフローは、多くの場合、使用されたことがある他の繰り返しキャンペーンと似ています。
例えば、トリガーに関するクエリで開始し、最終日の特定のイベントを探すことができます。そのターゲットは E メールの送信に使用されます。エンリッチメントやデータはトリガーから得られます。設定が不要なので、マーケティングで安全に使用できます。

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now