プロファイルスクリプトの作成
プロファイルスクリプトは、Target インターフェイスの「Audiences」タブで使用できます。
プロファイルスクリプトを追加するには、「Profile Scripts」タブをクリック Create Script、スクリプトを記述します。
または
既存のプロファイルスクリプトをコピーするには、Profile Scripts リストで、目的のスクリプトの省略記号アイコンをクリックし、「Duplicate」をクリックします。
これにより、そのオーディエンスを編集して類似のオーディエンスを作成することができます。
プロファイルスクリプトは、各場所リクエストでプロファイル属性「catchers」を実行します。場所のリクエストを受信した場合、Target は実行するアクティビティを決定し、そのアクティビティおよびエクスペリエンスに適したコンテンツを表示します。また、Target は、アクティビティの成功を追跡し、関連するプロファイルスクリプトを実行します。これによって、訪問者の場所、時間帯、訪問者がサイトを訪問した回数、購入歴があるかなど、訪問に関する情報を追跡できます。この情報は次に、訪問者のプロファイルに追加され、サイトでの訪問者のアクティビティをより詳細に追跡できます。
プロファイルスクリプト属性では、属性名の前に user.
タグが挿入されます。次に例を示します。
if (mbox.name == 'Track_Interest') {
if (profile.get('model') == "A5" &&; profile.get('subcat') == "KS6") {
return (user.get('A5KS6') || 0) + 1;
}
}
次の事項に注意してください。
-
user.get('parameterName')
を含むコード内で、プロファイルスクリプト属性(それ自体を含む)を参照します。 -
user.setLocal('variable_name', 'value')
を使用すると、スクリプトを次回実行するとき(次の mbox リクエストの発生時)にアクセスされる可能性がある変数を保存できます。user.getLocal('variable_name')
の変数を参照します。このプロセスは、最後のリクエストの日時を参照する場合に便利です。これらの値は、プロファイルスクリプトと同様に保持されますが、設定されたスクリプト内でのみアクセスできます。
-
パラメーターと値は、大文字と小文字を区別します。アクティビティやテストの実行中に受け取るパラメーターおよび値の大文字と小文字を一致させてください。
-
その他の JavaScript 構文については、後述の「スクリプトプロファイルパラメーターに関する JavaScript リファレンス」を参照してください。
-
スクリプトを無効にした後も、パラメーターはプロファイルに残ります。ユーザーのプロファイルに、アクティビティのオーディエンスで使用されているパラメーターが含まれている場合、そのユーザーはそのアクティビティに適格となります。
-
アクティビティで使用されている間はプロファイルスクリプトを削除できません。
-
あるプロファイルスクリプトの結果を別のプロファイルスクリプトで使用する、依存プロファイルスクリプトを作成することは推奨しません。プロファイルスクリプトの実行順序は保証されません。
プロファイルスクリプト情報カードの表示
プロファイルスクリプトの情報については、オファー情報カードと同様のポップアップカードを表示できます。これらのプロファイルスクリプト情報カードでは、選択したプロファイルスクリプトを参照しているアクティビティのリストやその他の有用なメタデータが表示されます。
例えば、次のプロファイルスクリプト情報カードは、リスト(Audiences/Profile Scripts)から目的のプロファイルスクリプトの Info アイコンをクリックしてアクセスします。
「Script Info」タブには、名前、説明、およびスクリプトコードの情報が含まれます。
「View full details」をクリックして、選択したプロファイルスクリプトを参照するオーディエンスとアクティビティを確認します。
- アクティビティのステータスが Draft の場合。
- アクティビティで使用されるコンテンツまたはオファーが、スクリプト変数(アクティビティ内のインラインオファーまたはオファーライブラリ内のオファー)を使用する場合。
特定の状況での Target によるプロファイルスクリプトの無効化
Target は、実行に時間がかかりすぎる場合や多くの命令がある場合など、特定の状況で、プロファイルスクリプトを自動的に無効化します。
プロファイルスクリプトが無効化されると、次に示すように、Target UI のプロファイルスクリプトの横に黄色の警告アイコンが表示されます。
マウスポインターを重ねると、次のように、エラーの詳細が表示されます。
システムがプロファイルスクリプトを無効にする一般的な理由は次のとおりです。
- 未定義の変数が参照されている。
- 無効な値が参照されている。このエラーは、多くの場合、URL 値およびその他のユーザー入力データを適切な検証なしに参照することが原因です。
- 使用される JavaScript 命令が多すぎる。Target には、スクリプトあたり 2,000 の JavaScript 命令という制限がありますが、これを手作業で JavaScript を読んで単純に計算することはできません。例えば、Rhino は、すべての関数呼び出しと「新規」呼び出しを 100 個の命令として処理します。任意の関数を呼び出すと、100 個の命令を消費します。また、すべてのエントリデータのサイズ(URL 値など)は、命令数に影響を与える可能性があります。
- 後述のベストプラクティスの節で取り上げられている項目に従っていない。
ベストプラクティス
次のガイドラインは、エラーや失敗をできるだけなくした簡潔なプロファイルスクリプトを記述するためのもので、正常に失敗するコードを記述することで、プロファイルスクリプトの処理時にシステムスクリプトの停止が起こらないようにするものです。これらのガイドラインは、効果的に実行されることが証明されたベストプラクティスによるものです。このガイドラインは、Rhino 開発者コミュニティによる原則および推奨事項に従い適用されるものです。
-
ユーザースクリプトでは現在のスクリプト値をローカル変数に設定し、フェイルオーバーには空白の文字列を設定します。
-
ローカル変数を検証します。ローカル変数値が空白の文字列でないことを確認します。
-
正規表現ではなく、文字列ベースの操作関数を使用します。
-
実行回数を制限しないで for ループや while ループを使用することはせず、有限回数の for ループを使用します。
-
文字列の長さは 1,300 文字、ループ回数は 50 回を超えないようにします。
-
JavaScript 命令は 2,000 個を超えないようにします。Target には、スクリプトあたり 2,000 の JavaScript 命令という制限がありますが、これを手作業で JavaScript を読んで単純に計算することはできません。例えば、Rhino は、すべての関数呼び出しと「新規」呼び出しを 100 個の命令として処理します。また、すべてのエントリデータのサイズ(URL 値など)は、命令数に影響を与える可能性があります。
-
スクリプトのパフォーマンスだけでなく、すべてのスクリプトを組み合わせた総合的なパフォーマンスにも注意してください。ベストプラクティスとして、Adobe では、命令数の合計が 5,000 未満となるようにすることをお勧めします。命令数がカウントされているかどうかは不明ですが、注意すべき重要な点は、手順が 2,000 を超えるスクリプトは自動的に無効になることです。アクティブなプロファイルスクリプトの数は 300 を超えないようにしてください。各スクリプトは、mbox が 1 回呼び出されるたびに実行されます。必要なスクリプトだけを実行します。
-
正規表現では、先頭にドットとアスタリスクを置く(例:
/.*match/
、/a|.*b/
)のはほとんど必要ありません。正規表現検索は、文字列のすべての位置から開始(^
でバインドされている場合を除く)されるので、ドットとアスタリスクは既に想定されています。そうした正規表現が十分な長さ(数百文字以下)の入力データに一致すると、スクリプトの実行は中断されます。 -
すべてを実行してもうまくいかない場合は、スクリプトを try ~ catch 文で囲みます。
-
次のレコメンデーションを参考にして、プロファイルスクリプトの複雑さを制限できます。プロファイルスクリプトで実行できる命令の数は制限されています。
ベストプラクティスは次のとおりです。
- プロファイルスクリプトをできるだけ小さく、簡単にします。
- 正規表現を使用しないか、単純な正規表現のみを使用します。単純な式でも、評価には多くの命令を受けることができます。
- 再帰を避けます。
- プロファイルスクリプトを Target に追加する前に、パフォーマンステストを行う必要があります。すべてのプロファイルスクリプトは、すべての mbox リクエストで実行されます。プロファイルスクリプトが正しく実行されない場合、mbox リクエストの実行に時間がかかり、トラフィックとコンバージョンに影響が及ぶ可能性があります。
- プロファイルスクリプトが複雑になりすぎた場合は、代わりに、レスポンストークンの使用を検討します。
-
詳細は、JS Rhino エンジンのドキュメントを参照してください。
プロファイルスクリプトのデバッグ
プロファイルスクリプトのデバッグには、次のメソッドを使用できます。
-
プロファイルスクリプトをレスポンストークンとして追加し、プロファイルスクリプトをデバッグする
Target で「Administration」、「Response Tokens」の順にクリックし、デバッグするプロファイルスクリプトを有効にします。
次に示すように、Target を使用してページをサイトに読み込むたびに Target からのレスポンスの一部として、指定したプロファイルスクリプトの値が含まれます。
-
mboxTrace デバッグツールを使用して、プロファイルスクリプトをデバッグする
このメソッドでは、「Debugger tools」セクションの Target/Administration/Implementation/Generate Authorization Token をクリックして生成できる認証トークンが必要です。
その後、2 つのパラメーター
mboxTrace=window&authorization=YOURTOKEN
をページ URL の「?」の後に追加します。これらのパラメーターを追加することで、プロファイルの実行前後のスナップショットを取得できるため、レスポンストークンよりもやや詳細な情報を提供します。また、使用可能なすべてのプロファイルも表示されます。
プロファイルスクリプトの FAQ
プロファイルスクリプトを使用してデータレイヤーにあるページから情報を取得できますか?
プロファイルスクリプトはサーバー側で実行されるので、プロファイルスクリプトを使用してページを直接読み取ることはできません。データは、mbox リクエストを通じて、または他の Target にデータを送信する方法を通じて渡す必要があります。データを Target に送信した後は、プロファイルスクリプトを使用して、データを mbox パラメーターまたはプロファイルパラメーターとして読み取ることができます。
スクリプトプロファイルパラメーターに関する JavaScript リファレンス
スクリプトプロファイルパラメーターを効率的に使用するには、JavaScript に関する基本的な知識が必要です。このセクションは、この機能を使用してわずか数分で生産性を高めるためのクイックリファレンスの役割を担います。
スクリプトプロファイルパラメーターは、「mbox/プロファイル」タブに表示されます。JavaScript の種類(文字列、整数、配列など)を返す JavaScript プログラムを記述できます。
スクリプトプロファイルパラメーターの例
**名前:**user.recency
var dayInMillis = 3600 * 24 * 1000;
if (mbox.name == 'orderThankyouPage') {
user.setLocal('lastPurchaseTime', new Date().getTime());
}
var lastPurchaseTime = user.getLocal('lastPurchaseTime');
if (lastPurchaseTime) {
return ((new Date()).getTime() - lastPurchaseTime) / dayInMillis;
}
日の変数をミリ秒単位で作成します。mbox 名が orderThankyouPage
の場合は、現在の日付と時間の値を取得するために、lastPurchaseTime
と名前を付けたローカル(非表示)のユーザープロファイル属性を設定します。前回購入時間の値が読み取られており、その値が定義されている場合、Target は 1 日のミリ秒数で割り算された、前回購入時間以降に経過した時間を返します(前回購入からの日数になります)。
**名前:**user.frequency
var frequency = user.get('frequency') || 0;
if (mbox.name == 'orderThankyouPage') {
return frequency + 1;
}
frequency
と呼ばれる変数を作成し、以前の値、または以前の値がない場合は 0 に初期化します。mbox 名が orderThankyouPage
の場合、増分された値が返されます。
**名前:**user.monetaryValue
var monetaryValue = user.get('monetaryValue') || 0;
if (mbox.name == 'orderThankyouPage') {
return monetaryValue + parseInt(mbox.param('orderTotal'));
}
monetaryValue
と呼ばれる変数を作成し、特定の訪問者の現在の値を検索します(または以前の値がない場合は 0 に設定します)。mbox 名が orderThankyouPage
の場合、以前の値と mbox に渡される orderTotal
パラメーターの値を追加することによって、新しい金額が返されます。
名前: adobeQA
if (page.param("adobeQA"))
return page.param("adobeQA");
else if (page.param("adobeqa"))
return page.param("adobeqa");
else if (mbox.param("adobeQA"))
return mbox.param("adobeQA");
オブジェクトまたはメソッド | 詳細 |
---|---|
page.url | 現在の URL。 |
page.protocol | このページに使用するプロトコル(http または https)。 |
page.domain | 現在の URL ドメイン(最初のスラッシュより前のすべて)。例えば、http://www.acme.com/categories/men_jeans?color=blue&size=small の www.acme.com 。 |
page.query | 現在のページのクエリ文字列。「?」の後のすべて。例えば、http://www.acme.com/categories/mens_jeans?color=blue&size=small の blue&size=small 。 |
page.param('<par_name>') | <par_name> に示すパラメーターの値。現在の URL が Google の検索ページであり、page.param('hl') を入力していた場合、URL http://www.google.com/search?hl=en& q=what+is+asdf&btnG=Google+Search の「en」が取得されます。 |
page.referrer | 上記と同じ一連の処理がリファラーとランディングに適用されます(referrer.url はリファラーの URL アドレスになります)。 |
landing.url 、landing.protocol 、landing.query 、および landing.param |
ページのものと同様ですが、ランディングページ用です。 ランディングページ URL が期待どおりに機能するには、 |
mbox.name | アクティブな mbox の名前。 |
mbox.param('<par_name>') | アクティブな mbox 内で指定した名前の mbox パラメーター。 |
profile.get('<par_name>') | <par_name> の名前のクライアントが作成したユーザープロファイルパラメーター。例えば、ユーザーが「gender」と名前を付けたプロファイルパラメーターを設定した場合、値は「profile. gender」を使用して抽出できます。現在の訪問者に設定された「profile.<par_name> 」の値を返します。値が設定されていない場合は null が返されます。profile.get(<par_name>) は関数呼び出しとして認定されます。 |
user.get('<par_name>') | 現在の訪問者に設定された「user.<par_name> 」の値を返します。値が設定されていない場合は null が返されます。 |
user.categoryAffinity | 最適なカテゴリーの名前が返されます。 |
user.categoryAffinities | 最適なカテゴリーを持つ配列が返されます。 |
user.isFirstSession | 訪問者の最初のセッションの場合は true が返されます。 |
user.browser | HTTP ヘッダーにユーザーエージェントが返されます。例えば、Safari ユーザーのみを対象とするターゲット式を作成できます(if (user.browser != null && user.browser.indexOf('Safari') != -1) { return true; } )。 |