このページ:では、Adobe Journey Optimizer コンテンツに直接コピーできる日付、配列、文字列、条件付きロジック、およびPQL エッジ ケースの、すぐに使用できるパーソナライズのレシピを見つけることができます。
このページでは、Adobe Journey Optimizerの最も一般的なユースケース向けに、すぐに使用できるパーソナライゼーションパターンを提供します。 あらゆる例でパーソナライゼーションエディターの構文を使用しており、電子メール、SMS、プッシュコンテンツに直接コピーできます。
使用可能な関数の完全な参照については、 ヘルパー関数、日付/時刻関数、文字列関数、および配列関数を参照してください。
日付と時刻のレシピ date-time-recipes
レシピ 1 – 現在の日付を読みやすい形式で表示する recipe-current-date
formatDateとgetCurrentZonedDateTime()を使用して、任意の形式で今日の日付をレンダリングします。
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
出力(例): April 11, 2026
一般的な形式パターン:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11レシピ 2 – 有効期限またはイベント日までのカウントダウン recipe-countdown
dateDiffを使用して、プロファイル日付属性までの残り日数を計算し、動的にレンダリングします。
出力(例): Your reward points expire in 7 days. Use them before they're gone!
レシピ 3 – 動的な終了日のX日前 recipe-days-before
プロファイル属性のX日前の日付を計算するには(例:コンテンツや件名で参照)、負のオフセットでaddDaysを使用します。
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
出力(例): April 04, 2026 (4月11日の7日前)
特定の時刻(例:午前9時)も設定するには、setHoursと組み合わせます。
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
レシピ 4 – 現在の時間をHH:MMとしてのみ表示 recipe-time-only
extractHoursとextractMinutesを使用して、時間の部分のみを表示し、先頭にゼロのガードを数分だけ表示します。
出力(例): Your appointment is at 14:05.
レシピ 5 – 週末と平日の区別 recipe-weekend
dayOfWeekを使用して、日に基づいてコンテンツを適応させます。 関数は、1 (月曜日)から7 (日曜日)を返します。 1つの=演算子を使用します(==ではなくPQL構文)。
dayOfWeek()は、日に基づいて コンテンツ を適応させます。 曜日に基づいてジャーニー内でプロファイルを異なる方法でルーティングする場合は、ジャーニーの条件アクティビティで組み込みの時間条件→曜日 オプションを使用します。 詳細情報配列とループのレシピ array-recipes
レシピ 6 — プロファイル配列からのすべての項目をリストする recipe-list-items
{{#each}}を使用してプロファイル配列を繰り返し処理し、各項目をレンダリングします。 これは、パーソナライゼーションエディター(電子メール、SMS、プッシュ通知)でのみ使用できます。
出力(例):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}}はサポートされていません。 条件の配列フィルタリングには、 コレクション管理関数を使用します。レシピ 7 – 価格で配列から上位N個の項目を表示します recipe-first-n
topNを使用して、上位N個の項目を数値フィールドで並べ替えて取得します。 topNはPQL関数であるため、最初に{% let %}を使用して変数に割り当て、次に{{#each}}を使用してループします。
topN(profile.orders, price, 3)は順序をpriceで降順に並べ替え、上位3つを返します。元の配列順序の最初の3つの項目を単に返すわけではありません。または、headを使用して、1つの最上位アイテムのみを取得します。
{%= head(profile.purchases.recentItems).name %}
レシピ 8 – 配列項目ごとにコンテンツを条件付きでレンダリングする recipe-conditional-loop
{{#each}}内の{%#if%}を使用して、一致する項目に対してのみ出力をレンダリングします。 PQL エバリュエーターが条件で属性参照を解決できるように、as |order|を使用してループエイリアスを定義します。
this.statusはHandlebars エクスプレッションで機能しますが、{%#if%}内のPQL エバリュエーターによって解決されません。 名前付きループエイリアス(例:order)を使用すると、ハンドルバーとPQLの両方のコンテキストで属性を使用できるようになります。文字列と書式設定のレシピ string-recipes
レシピ 9 - replaceAllを使用して文字列をクリーニングし、再利用する recipe-replaceall-reuse
replaceAllは新しい値を返します。元の値は変更されません。 {% let %}を使用して結果を保存し、関数呼び出しを繰り返さずに複数回参照します。
出力(例):
Hi John,
Your exclusive code is: WELCOME-JOHN
レシピ 10 — JSON出力で値を二重引用符で囲む recipe-json-quotes
文字列内にリテラル二重引用符を含めるには(例:カスタムペイロード用のJSONの生成)、バックスラッシュ(\")でエスケープします。
出力:{ "greeting": "Hello \"John\"" }
レシピ 11 – 日付コンポーネントを大文字で書式設定する recipe-uppercase-date
formatDateをupperCaseと組み合わせて、月または日の名前を大文字でレンダリングします。
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
出力(例): APRIL
大文字の日付文字列の場合:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
出力(例): WEDNESDAY JANUARY 01 2020
条件付きロジックのレシピ conditional-recipes
レシピ 12 — パーソナライズされたコンテンツのIF/ELSEIF/ELSE recipe-if-elseif
マルチブランチの条件付きロジックには、{%#if%}、{%else if%}および{%else%}を使用します。 このパターンは、メールコンテンツとフラグメントで機能します。
レシピ 13 — ヌルセーフ属性表示 recipe-null-safe
プロファイル属性がnullまたは欠落している可能性がある場合に、空の値のレンダリングを避けるために、条件付きフォールバックを使用します。
または、isEmptyを使用して三項スタイルのパターンを持つインライン:
PQL edgeのケースレシピ pql-edge-cases
レシピ 14 — ハイフン付きの属性キーを参照する recipe-hyphenated-key
XDM スキーマフィールド名にハイフン(order-total、event-typeなど)が含まれる場合は、PQL式の内部でハイフンをバックティックにラップして、ハイフンが減算演算子として解釈されないようにします。
{%= profile.events.`order-total` > 100 %}
{%= ... %})内でのみサポートされています。 プレーンハンドルバーの補間({{...}})では受け付けられません。 ハイフネーション付きのフィールド値を直接レンダリングする必要がある場合は、PQL式を使用して検証するか、最初に{% let %}を使用して変数に格納します。レシピ 15 — コンテキスト属性で数値イベント IDを参照する recipe-numeric-event-id
IDが数値文字列(例:1697323153)であるジャーニーコンテキストイベントを使用する場合、IDをバックティックでラップし、{% let %}をtoDateTime()とformatDate()で使用します。
出力(例): Your appointment: 18/03/2026 14:30
レシピ 16 – 型強制:文字列フィールドと数値を比較する recipe-type-coercion
PQLは強く型付けされています。 プロファイルフィールドが文字列として保存されていて、数値で比較する必要がある場合は、最初にstringToNumber()で変換します。
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
文字列として保存されたブール型フィールドの場合:
{%= toBool(profile.consents.email.val) = true %}