コンテキスト変数
コンテキスト変数は、特定のキャンバスにおけるユーザーのジャーニー内で作成・使用できる一時的なデータです。コンテキスト変数を使用すると、ユーザーのプロファイル情報を恒久的に変更することなく、遅延のパーソナライズ、ユーザーのダイナミックなセグメント化、メッセージングの充実化が可能になります。コンテキスト変数はキャンバスセッション内にのみ存在し、異なるキャンバス間やセッション外では保持されません。
コンテキスト変数の仕組み
コンテキスト変数は、次の2つの方法で設定できます。
- キャンバスへのエントリ時: ユーザーがキャンバスにエントリすると、イベントまたは API トリガーのデータによってコンテキスト変数が自動的に入力されます。
- コンテキストステップ内: コンテキストステップを追加すると、キャンバス内でコンテキスト変数を手動で定義または更新できます。
各コンテキスト変数には、次のものが含まれます。
- 名前 (
flight_timeやsubscription_renewal_dateなど) - データ型 (数値、文字列、時刻、配列など)
- Liquid または パーソナライゼーションを追加ツールを使用して割り当てる値
定義したコンテキスト変数は、{{context.${example_variable_name}}} の形式で参照することで、キャンバス全体で使用できます。
たとえば、{{context.${flight_time}}} はユーザーの予定フライト時刻を返します。
ユーザーがキャンバスにエントリするたびに (以前にエントリしたことがある場合でも)、コンテキスト変数は最新のエントリデータとキャンバスの設定に基づいて再定義されます。このステートフルなアプローチにより、キャンバスへの各エントリが独自の独立したコンテキストを保持できます。そのため、ユーザーは同じジャーニー内で複数のアクティブな状態を持ちながら、状態ごとに固有のコンテキストを維持できます。
たとえば、顧客に今後のフライトが2便ある場合、2つの別々のジャーニー状態が同時に進行し、それぞれが出発時刻や目的地などのフライト固有のコンテキスト変数を持ちます。これにより、午後2時発のニューヨーク行きのフライトに関するパーソナライズされたリマインダーを送信しながら、明日の午前8時発のロサンゼルス行きのフライトについては別の最新情報を送信できるため、各メッセージを特定の予約に関連した内容に保てます。
考慮事項
コンテキストステップごとに、最大10個のコンテキスト変数を定義できます。各変数名は最大100文字までで、使用できるのは英字、数字、アンダースコアのみです。
コンテキスト変数の定義は最大10,240文字までです。API トリガーのキャンバスにコンテキスト変数を渡す場合、それらはコンテキストステップで作成された変数と同じ名前空間を共有します。たとえば、/canvas/trigger/send エンドポイントのコンテキストオブジェクトで変数 purchased_item を送信した場合、{{context.${purchased_item}}} として参照できます。コンテキストステップでその変数を再定義すると、そのユーザーのジャーニーでは新しい値が API の値を上書きします。
コンテキストステップごとに最大50 KBを保存でき、最大10個の変数に分散できます。ステップ内のすべての変数の合計サイズが50 KBを超えると、上限を超えた変数は評価も保存もされません。たとえば、コンテキストステップに次の3つの変数がある場合を考えてみましょう。
- 変数1:30 KB
- 変数2:19 KB
- 変数3:2 KB
それまでの変数の合計が50 KBを超えるため、変数3は評価も保存もされません。
データ型
ステップで作成または更新されたコンテキスト変数には、以下のデータ型を割り当てることができます。

コンテキスト変数のデータ型で想定される形式は、イベントプロパティと同じです。
配列型を使用する場合、Braze は値を JSON として解析しようとするため、オブジェクトの配列を正しく作成できます。配列内のオブジェクトが有効な JSON でない場合、結果は文字列の単純な配列になります。
階層化オブジェクトやオブジェクトの配列には、as_json_string Liquid フィルターを使用してください。コンテキストステップで同じオブジェクトを作成する場合は、{{context.${object_array} | as_json_string }} のように、as_json_string を使用してオブジェクトをレンダリングする必要があります。
| データ型 | 変数名の例 | 値の例 |
|---|---|---|
| ブール値 | loyalty_program | true |
| 数値 | credit_score | 740 |
| 文字列 | product_name | green_tea |
| 配列 | favorite_products | ["wireless_headphones", "smart_homehub", "fitness_tracker_swatch"] |
| 配列(オブジェクト) | pet_details | [ |
| 時間(UTC) | last_purchase_date | 2025-12-25T08:15:30:250-0800 |
| オブジェクト(フラット化) | user_profile | { |
デフォルトでは、時間データ型は UTC です。文字列データ型を使用して時間の値を保存する場合は、PST など別のタイムゾーンで時間を定義できます。
たとえば、ユーザーの誕生日の前日にメッセージを送信する場合、前日に送信するための Liquid ロジックが関係するため、コンテキスト変数は時間データ型として保存します。一方、クリスマス当日(12月25日)にホリデーメッセージを送信する場合は、時間をダイナミックな変数として参照する必要がないため、文字列データ型を使用するほうが適しています。
オブジェクトデータ型では、ドット記法を使用してデータ内のパスを指定できます。たとえば、コンテキストステップで次の構造を持つコンテキスト変数 order_summary を定義するとします。
{
"shipping": {
"carrier": "overnight"
}
}
オーディエンスパスまたは条件分岐のフィルターでは、ドット記法を使用してパスをコンテキスト変数名として入力します(例: order_summary.shipping.carrier)。フィルターが評価されると、Braze はそのパスを値 overnight に解決します。
Liquid(メッセージステップなど)では、代わりに {{context.${order_summary}.shipping.carrier}} を使用してください。
コンテキスト変数の使用
コンテキスト変数は、キャンバス内で Liquid を使用する場所であればどこでも使用できます。たとえば、メッセージステップやユーザー更新ステップで、パーソナライゼーションを追加を選択して使用します。メッセージステップのアプリ内メッセージとバナーでは、コンテキスト変数を選択してメッセージの有効期限を決めることができます。
たとえば、次のフライトの前に VIP ラウンジの利用について乗客に通知したいとします。このメッセージは、ファーストクラスのチケットを購入した乗客にのみ送信する必要があります。コンテキスト変数を使えば、この情報を柔軟に追跡できます。
ユーザーは航空券を購入するとキャンバスにエントリします。ラウンジの利用資格を判断するため、コンテキストステップで lounge_access_granted というコンテキスト変数を作成し、ユーザージャーニーの後続のステップでそのコンテキスト変数を参照します。

このコンテキストステップでは、{{custom_attribute.${purchased_flight}}} を使用して、購入したフライトのタイプが first_class かどうかを判断します。
次に、{{context.${lounge_access_granted}}} が true であるユーザーをターゲットにするメッセージステップを作成します。このメッセージは、パーソナライズされたラウンジ情報を含むプッシュ通知です。このコンテキスト変数に基づいて、対象の乗客はフライト前に関連するメッセージを受け取ります。
- ファーストクラスのチケットを購入した乗客が受け取るメッセージ:「VIP ラウンジを特別にご利用いただけます!」
- ビジネスクラスとエコノミークラスのチケットを購入した乗客が受け取るメッセージ:「フライトをアップグレードして、VIP ラウンジを特別にご利用ください。」


アクションパスと終了基準
次のトリガーアクションでは、コンテキスト変数またはカスタム属性とプロパティフィルターを比較できます: カスタムイベントを実行と購入を行う。これらのアクショントリガーは、基本プロパティと階層化プロパティの両方のプロパティフィルターにも対応しています。
- 基本プロパティと比較する場合、使用できる比較は、カスタムイベントで定義されたプロパティのタイプと一致します。たとえば、文字列プロパティでは「完全に等しい」や「正規表現に一致」が使用できます。ブール値プロパティでは true または false になります。
- 階層化プロパティと比較する場合、タイプは事前に定義されていないため、階層化カスタム属性の比較と同様に、ブール値、数値、文字列、時間、年間通算日など、複数のデータタイプにわたる比較を選択できます。比較時に階層化プロパティの実際のデータタイプと一致しないデータタイプを選択すると、ユーザーはアクションパスステップまたは終了基準に一致しません。
アクションパスの例

カスタム属性の比較には、アクションが実行された時点のカスタム属性値を使用します。つまり、比較時にユーザーにこのカスタム属性が設定されていない場合、またはカスタム属性値が定義されたプロパティの比較と一致しない場合、ユーザーはアクショングループに一致しません。これは、ユーザーがアクションパスステップにエントリした時点では一致していた場合でも同様です。
次のアクションパスステップは、基本プロパティ source を持つカスタムイベント Account_Created を実行したユーザーを、コンテキスト変数 app_source_variable に振り分けるように設定されています。

次のアクションパスステップは、特定の製品名 shoes の基本プロパティ brand をコンテキスト変数 promoted_shoe_brand と照合するように設定されています。

終了基準の例
この終了基準では、キャンバス内のユーザージャーニーのどの時点でも、次の条件を満たすとユーザーはキャンバスを終了します。
- カスタムイベント Abandon Cart を実行し、かつ
- 基本プロパティ Item in Cart がコンテキスト変数
cart_item_thresholdの文字列値と一致する。

この終了基準では、キャンバス内のユーザージャーニーのどの時点でも、次の条件を満たすとユーザーはキャンバスを終了します。
- 製品名「book」の特定の購入を行い、かつ
- その購入の階層化プロパティ「loyalty_program」がユーザーのカスタム属性「VIP」と等しい。

有効期限を設定する
キャンバスのメッセージステップ内のバナーとアプリ内メッセージでは、有効期限としてステップが利用可能になった後の期間を選択し、期間をパーソナライズをオンにすると、コンテキスト変数から利用可能期間を設定できます。たとえば、コンテキストステップのプロモーション期間や予約期間に合わせることができます。
期間をパーソナライズは、この期間ベースの有効期限オプションに適用されます。代わりに特定の日時を選択した場合は、日付と時刻のコントロールを使用して有効期限を設定します。
アクションパスの遅延
アクションパスステップの評価期間で遅延をパーソナライズをオンにすると、ユーザーをステップに留める時間をコンテキスト変数から設定できます。ティアや地域などの詳細に基づいて、ユーザーごとに待機期間を変える必要がある場合に使用します。
コンテキスト変数フィルター
オーディエンスパスステップと条件分岐ステップで、コンテキスト変数を使用するフィルターを作成できます。
コンテキスト変数名のリストには、コンテキストステップとエージェントステップの変数が含まれます。キャンバスのエントリプロパティの場合は、その名前を入力して “ENTRY_PROPERTY_NAME” を使用を選択します。ENTRY_PROPERTY_NAME は、入力したエントリプロパティ名に置き換えてください。階層化プロパティの場合は、order.total のようにドット表記を使用します。

コンテキスト変数フィルターは、オーディエンスパスステップと条件分岐ステップでのみ使用できます。
コンテキスト変数はキャンバスのスコープ内で宣言され、そのスコープ内でのみアクセスできます。そのため、セグメントでは参照できません。コンテキスト変数フィルターは、オーディエンスパスステップと条件分岐ステップで同様に機能します。オーディエンスパスステップは複数のグループを表し、条件分岐ステップは二者択一の判断を表します。

キャンバスのコンテキスト変数に事前定義されたタイプがあるのと同様に、コンテキスト変数と静的な値の比較ではデータタイプが一致している必要があります。コンテキスト変数フィルターでは、階層化カスタム属性の比較と同様に、ブール値、数値、文字列、時間、年間通算日など、複数のデータタイプにわたる比較が可能です。
以下は、コンテキスト変数 product_name を正規表現 /braze/ と比較するコンテキスト変数フィルターの例です。

日付のコンテキスト変数に対する年間通算日フィルターと時間フィルター
コンテキスト変数で年間通算日または時間の比較フィルターを使用するには、次の手順に従います。
- コンテキスト変数をカレンダーの日付 (たとえば 2025 年 10 月 23 日) に設定するコンテキストステップを追加します。
- コンテキストステップの後にオーディエンスパスステップを追加します。
- オーディエンスパスステップで、そのコンテキスト変数に基づいてユーザーを分割するフィルターを追加します。
- 年間通算日または時間カテゴリーから比較を選択します。
コンテキスト変数に宣言されたタイプがない場合、Braze はドロップダウンに年間通算日と時間の両方を含む、使用可能なすべての比較タイプを表示します。コンテキストステップで変数が時間タイプとして宣言されている場合は、年間通算日と時間の比較のみが表示されます。タイプが判明しているその他のデータタイプ (たとえば、時間タイプの階層化カスタム属性) の場合は、そのタイプに適用される比較のみが表示されます。

コンテキスト変数と比較には同じデータタイプを使用してください。たとえば、コンテキスト変数が時間データタイプの場合は、時間の比較 (「前」や「後」など) を使用します。一致しないデータタイプ (時間のコンテキスト変数に対する文字列の比較など) を使用すると、予期しない動作が発生する可能性があります。

「Day of year」と「Time」のフィルタータイプの選択について:日付を含むコンテキスト変数をフィルタリングする際は、その日付が毎年繰り返されるかどうかに基づいて、適切な比較タイプを選択してください。コンテキスト変数が生成する値に年が含まれていない場合にのみ、「Day of year」を使用してください。
- 毎年繰り返される日付(誕生日、記念日、クリスマスなどの祝日など)には「Day of year」を使用してください。この比較タイプは、年の要素を無視し、その年の日数(1〜365/366)に基づいて計算します。
- 繰り返されない絶対日付(契約終了日、予約日、購読更新日など)には「Time」を使用してください。この比較タイプは、年を含む完全なタイムスタンプに基づいて計算します。
絶対日付に「Day of year」を使用すると、計算が年の要素を無視するため、誤った結果や予期しない結果が生じることがあります。例えば、4月の将来の契約終了日が63日以内かどうかを判断する場合、「Day of year」を使用すると、日付番号(119対359)のみを比較し、実際には4月まで188日あることを考慮しないため、誤った一致が生じる可能性があります。
コンテキスト変数またはカスタム属性との比較
コンテキスト変数またはカスタム属性と比較トグルを選択すると、以前に定義したコンテキスト変数やユーザーのカスタム属性と比較するコンテキスト変数フィルターを作成できます。これは、API トリガーの context のようにユーザーごとにダイナミックな比較を行う場合や、複数のコンテキスト変数にまたがって定義された複雑な比較ロジックをまとめる場合に便利です。
一定期間操作のないユーザーに、パーソナライズされたリマインダーを送信したいとします。この期間はダイナミックで、過去 3 日間にアプリにログインしていないユーザー全員がメッセージを受け取る必要があります。
{{now | minus: 3 | append: ' days'}} として定義されたコンテキスト変数 re_engagement_date があります。なお、3 days はユーザーのカスタム属性として保存された可変の値にすることもできます。そのため、re_engagement_date が last_login_date (ユーザープロファイルのカスタム属性として保存) より後であれば、メッセージが送信されます。

次のフィルターは、コンテキスト変数 reminder_date がコンテキスト変数 appointment_deadline より前であるかを比較します。これにより、オーディエンスパスステップでユーザーをグループ化し、予約期限前に追加のリマインダーを受け取るべきかどうかを判断できます。

タイムゾーンの一貫性の標準化
キャンバスでは、タイムスタンプ型を使用するイベントプロパティのほとんどがすでに UTC になっていますが、一部例外があります。キャンバスコンテキストの追加により、アクションベースのキャンバスにおけるすべてのデフォルトのタイムスタンプイベントプロパティが一貫して UTC になります。この変更は、キャンバスのステップやメッセージを編集する際に、より予測しやすく一貫したエクスペリエンスを提供するための幅広い取り組みの一環です。この変更は、コンテキストステップを使用しているかどうかにかかわらず、すべてのアクションベースのキャンバスに影響することに注意してください。

いずれの場合も、タイムスタンプを目的のタイムゾーンで表示するには、Liquid の time_zone フィルターを使用することを強くお勧めします。例については、コンテキストステップの記事にあるこちらのよくある質問を参照してください。