コンテキスト変数
コンテキスト変数は、特定のキャンバスにおけるユーザーのジャーニー内で作成・使用できる一時的なデータです。コンテキスト変数を使用すると、ユーザーのプロファイル情報を恒久的に変更することなく、遅延のパーソナライズ、ユーザーのダイナミックなセグメント化、メッセージングの充実化が可能になります。コンテキスト変数はキャンバスセッション内にのみ存在し、異なるキャンバス間やセッション外では保持されません。
コンテキスト変数の仕組み
コンテキスト変数は、次の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
変数3は評価も保存もされません。これは、前の変数の合計が50 KBを超えているためです。
データ型
ステップで作成または更新されるコンテキスト変数には、以下のデータ型を割り当てることができます。

コンテキスト変数のデータ型には、イベントプロパティと同じ形式が期待されます。
配列型を使用する場合、Brazeは値をJSONとして解析しようとするため、オブジェクトの配列を正常に作成できます。配列内のオブジェクトが有効なJSONでない場合、結果は単純な文字列の配列になります。
ネストされたオブジェクトやオブジェクトの配列には、as_json_string Liquidフィルターを使用してください。コンテキストステップで同じオブジェクトを作成する場合は、as_json_stringを使用してオブジェクトをレンダリングする必要があります。例: {{context.${object_array} | as_json_string }}
| データ型 | 変数名の例 | 値の例 |
|---|---|---|
| Boolean | loyalty_program | true |
| Number | credit_score | 740 |
| String | product_name | green_tea |
| Array | favorite_products | ["wireless_headphones", "smart_homehub", "fitness_tracker_swatch"] |
| Array (of objects) | pet_details | [ |
| Time (in UTC) | last_purchase_date | 2025-12-25T08:15:30:250-0800 |
| Object (flattened) | user_profile | { |
デフォルトでは、時間データ型はUTCです。文字列データ型を使用して時間値を保存する場合は、PSTなど別のタイムゾーンとして時間を定義できます。
例えば、ユーザーの誕生日の前日にメッセージを送信する場合、前日に送信するためのLiquidロジックが関連付けられているため、コンテキスト変数を時間データ型として保存します。しかし、クリスマス(12月25日)にホリデーメッセージを送信する場合は、時間をダイナミックな変数として参照する必要がないため、文字列データ型を使用する方が適切です。
オブジェクトデータ型の場合、ドット表記を使用してデータ内のパスを指定できます。例えば、コンテキストステップでコンテキスト変数 order_summary を以下の構造で定義した場合:
1
2
3
4
5
{
"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」と等しい場合。

有効期限の設定
キャンバスのメッセージステップ内のバナーおよびアプリ内メッセージでは、有効期限としてステップが利用可能になってからの期間を選択し、期間をパーソナライズをオンにすることで、コンテキスト変数から利用可能期間を制御できます。たとえば、コンテキストステップのプロモーションや予約期間に合わせることができます。
期間をパーソナライズは、その期間ベースの有効期限オプションに適用されます。代わりに特定の日時を選択した場合は、日時コントロールを使用して有効期限を設定します。
アクションパスの遅延
アクションパスステップの評価ウィンドウで、遅延をパーソナライズをオンにすると、コンテキスト変数からユーザーがステップに保持される期間を設定できます。ティアやリージョンなどの詳細に基づいて、ユーザーごとに待機期間を変える必要がある場合に使用します。
コンテキスト変数フィルター
オーディエンスパスおよび条件分岐ステップで、以前に宣言されたコンテキスト変数を使用するフィルターを作成できます。

コンテキスト変数フィルターは、オーディエンスパスと条件分岐ステップでのみ使用できます。
コンテキスト変数はキャンバスのスコープ内でのみ宣言およびアクセスできるため、セグメントでは参照できません。コンテキスト変数フィルターは、オーディエンスパスと条件分岐ステップで同様に機能します。オーディエンスパスステップは複数のグループを表し、条件分岐ステップはバイナリの判定を表します。

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

日付コンテキスト変数の年間日付フィルターと時間フィルター
コンテキスト変数で年間日付または時間の比較フィルターを使用するには:
- コンテキスト変数をカレンダー日付(たとえば、2025年10月23日)に設定するコンテキストステップを追加します。
- コンテキストステップの後にオーディエンスパスステップを追加します。
- オーディエンスパスステップで、そのコンテキスト変数に基づいてユーザーを分割するフィルターを追加します。
- 年間日付または時間カテゴリから比較を選択します。
コンテキスト変数に宣言された型がない場合、Brazeはドロップダウンに年間日付と時間の両方を含むすべての利用可能な比較型を表示します。変数がコンテキストステップで時間型として宣言されている場合、年間日付と時間の比較のみが表示されます。既知の型を持つ他のデータ型(たとえば、時間型の階層化カスタム属性)の場合、その型に適用される比較のみが表示されます。
以下は、コンテキスト変数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日間にアプリにログインしていないユーザーがメッセージを受け取る対象です。
コンテキスト変数 re_engagement_date は {{now | minus: 3 | append: ' days'}} として定義されています。3 days はユーザーのカスタム属性として保存される可変量にすることもできます。したがって、re_engagement_date が last_login_date(ユーザープロファイルにカスタム属性として保存)より後の場合、メッセージが送信されます。

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

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

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