よくある質問
このページでは、Liquidに関するよくある質問への回答を紹介します。

Brazeは現在、ShopifyのLiquidを100%サポートしているわけではなく、ドキュメントで概要を説明している特定の部分のみをサポートしています。エラーやサポートされていないLiquidの使用リスクを軽減するために、送信前にLiquidを使用したすべてのメッセージをテストしてください。
BrazeにおけるLiquidについて
BrazeでLiquidスニペットを使用するにはどうすればよいですか?
多くの場合、キャンペーンやキャンバスに移動し、メール本文やセグメントなどの領域でパーソナライゼーションモーダルにLiquidを挿入することで、Liquidスニペットを組み込むことができます。
詳しくはどこで学べますか?
Liquidの詳細については、Braze Learningのガイド付きパスLiquidによるダイナミックパーソナライゼーションをご覧ください。また、Liquidユースケースライブラリを参照して、Liquidを使用したさまざまなパーソナライゼーション例からインスピレーションを得ることもできます。
パーソナライゼーションにおけるLiquidとConnected Contentの違いは何ですか?
Braze Connected Contentは、Liquidタグの一例です。パーソナライゼーションにも使用されますが、このデータはBraze内に保存されたデータではなく、外部エンドポイントから取得されます。メッセージのパーソナライズ方法を拡張する方法について詳しくは、専用のConnected Contentセクションをご覧ください。
Liquidテンプレートとは何ですか?
これは、BrazeでLiquidを使用する最も一般的な方法です。Liquidテンプレートでは、ユーザープロファイルからメッセージにデータを取り込みます。このデータは、ユーザーの名からトリガーメッセージのカスタムイベントまで多岐にわたります。
サポートされているLiquidタグの完全なリストについては、サポートされているパーソナライゼーションタグを参照してください。
Liquidを使用するとデータポイントが記録されますか?
いいえ。
パーソナライゼーションタグとデータソース
Liquidを使用してパーソナライズされた挨拶を送信するにはどうすればよいですか?
ユーザーの名を使用したパーソナライズされた挨拶には、{{${first_name}}}や{{${last_name}}}などの標準ユーザープロファイル属性を使用します。
また、Liquidの{% if X %}ステートメントを使用して、曜日やカスタム属性など、あらゆる条件に基づいた条件付きレンダリングを行うこともできます。条件文で使用できるサポートされているLiquid演算子の詳細については、演算子を参照してください。
ユーザーの位置情報に基づいてメッセージをパーソナライズするにはどうすればよいですか?
ユーザーの位置情報にはデフォルト属性があります:{{${most_recent_location}}}。
{{campaign.${name}}}と{{campaign.${message_name}}}の違いは何ですか?
{{campaign.${name}}}と{{campaign.${message_name}}}はどちらもサポートされているLiquidパーソナライゼーションタグです。どちらのタグもキャンペーン属性を参照します。{{campaign.${name}}}はキャンペーンの名前を示し、{{campaign.${message_name}}}はメッセージバリアントの名前です。
URLやクエリ文字列での使用(例えば、名前に%やスペースが含まれる場合)については、URL内のキャンペーン名を参照してください。
ネストされたオブジェクトでLiquidを使用するにはどうすればよいですか?
Brazeには、メッセージで使用できるセグメント用のLiquidコードを生成する組み込み機能があります。具体的には、オブジェクト内の複数の条件に一致するセグメントを作成できます。
詳細については、複数条件セグメンテーションを参照してください。
イベントがトリガーしているメッセージをパーソナライズするために、イベント属性を使用するにはどうすればよいですか?
APIトリガーイベントのプロパティには、api_triggered_propertyタグを使用してアクセスできます:{{api_trigger_properties.${attribute_key}}}。
BrazeはLiquidで配列の配列をサポートしていますか?
Liquidは配列の配列をネイティブにサポートしていません。値をカンマ区切りの文字列の配列として保存し、必要に応じてsplitフィルターを使用して解析してください。
変数と構文
Liquidで変数を割り当てるにはどうすればよいですか?
assignタグを使用して変数を作成し、割り当てることができます。これにより、メッセージ作成画面で変数が作成され、メッセージ全体で参照することもできます。
assignとcaptureはどのように使い分ければよいですか?
assignとcaptureはどちらもLiquid変数を作成しますが、目的が異なります。
assignは、ブール値、数値、単純な文字列など、単一の値を格納するシンプルな変数に使用します。同じ行で単一のフィルターを適用することもできます。captureは、複数の変数、文字列、または複雑な式を含む可能性のあるテキストブロックを格納するために使用します。
単一のassignステートメントでは複雑すぎる値(他のLiquid変数やカスタム属性をパラメーターとして使用するURLなど)にはcaptureを使用してください。captureは、Connected Content呼び出しの本文にLiquid変数を実装する場合にも推奨されます。
例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{% comment %}Use assign for custom attributes{% endcomment %}
{% assign name = {{custom_attribute.${first_name}}} %}
{% assign price = {{custom_attribute.${price}}} | plus: 0 %}
{% comment %}Use assign for a simple variable{% endcomment %}
{% assign discount_label = "20% off" %}
Hello {{ customer.first_name | default: "there" }}, enjoy {{ discount_label }} on your next order!
{% comment %}Use capture for complex strings{% endcomment %}
{% capture greeting %}Hello, {{custom_attribute.${first_name}}}! Your order #{{custom_attribute.${order_id}}} is ready.{% endcapture %}
{{ greeting }}
{% comment %}Use capture to create conditional content{% endcomment %}
{% capture promo_block %}
{% if customer.vip == true %}
As a VIP member, you get free shipping.
{% else %}
Join our VIP program to unlock free shipping.
{% endif %}
{% endcapture %}
Liquid変数は件名と本文の間で引き継がれますか?
いいえ。Brazeは各メッセージコンポーネント(件名、HTML本文、プリヘッダー、プッシュタイトルなど)を個別にレンダリングします。あるフィールドで行った割り当てやキャプチャは、別のフィールドでは使用できません。値が必要な各フィールドでLiquidまたはConnected Content呼び出しを繰り返してください。
forループロジックとは何ですか?どのように使用できますか?
forループは反復タグとも呼ばれます。Liquidスニペットでforループロジックを使用すると、条件が満たされるまでLiquidブロックを繰り返し処理できます。
Brazeでは、配列カスタム属性の項目や、カタログ、セレクション、またはConnected Content呼び出しのレスポンスから返される値やオブジェクトのリストを確認するために使用できます。具体的には、forループロジックをメッセージングの一部として使用して、商品が在庫にあるかどうか、または商品が最低評価を満たしているかどうかを確認できます。
例えば、「Games」というカタログに「cheap_games」というセレクションがあるとします。「cheap_games」のゲームタイトルを取得するには、次のLiquidスニペットを使用できます。
1
2
3
4
{% catalog_selection_items Games cheap_games %}
{% for item in items %}
Get this game: {{ item.title }}
{% endfor %}
設定した条件が満たされると、メッセージの処理が続行されます。このロジックを使用すると、異なる条件に対してLiquidブロックを繰り返す代わりに時間を節約できます。
中止ロジックとは何ですか?どのように使用できますか?
中止ロジックを使用すると、条件が満たされた場合にメッセージの送信を停止できます。これは、不完全なメッセージがユーザーに送信されるのを防ぐのに特に役立ちます。マーケティングキャンペーンでの中止ロジックの例については、メッセージの中止を参照してください。
abort_messageタグ内でLiquidを使用できますか?
いいえ。{% abort_message %}タグは引用符で囲まれた静的な文字列を受け付けますが、Liquidパーソナライゼーションは受け付けません。条件付きの中止動作が必要な場合は、タグの前に他のLiquidロジックを使用してください。
Liquidで電話番号をマスクするにはどうすればよいですか?
sliceフィルターを使用して特定の桁を抽出し、appendフィルターを使用してマスク文字と組み合わせることで、電話番号をマスクできます。
下4桁以外をすべてマスクする
10桁の電話番号を******7890と表示するには:
1
2
3
4
5
6
7
8
9
{% assign phone = {{${phone_number}}} | split: '' %}
{% assign masked_phone = '' %}
{% for i in (0..5) %}
{% assign masked_phone = masked_phone | append: '*' %}
{% endfor %}
{% for i in (6..9) %}
{% assign masked_phone = masked_phone | append: phone[i] %}
{% endfor %}
{{ masked_phone }}
最初の3桁と最後の4桁を表示する
10桁の電話番号を123***7890と表示するには:
1
2
3
4
{% assign first_part = {{${phone_number}}} | slice: 0, 3 %}
{% assign last_part = {{${phone_number}}} | slice: -4, 4 %}
{% assign masked_phone_number = first_part | append: "***" | append: last_part %}
{{ masked_phone_number }}
キャンバス、カタログ、トリガープロパティ
APIトリガーのLiquidがBrazeで失敗するのはなぜですか?
余分な波括弧のペアが一般的な原因です。例えば、{{{api_trigger_properties.${attribute_key}}}} は有効なBrazeパーソナライゼーション構文ではありません。開き波括弧2つと閉じ波括弧2つを正確に使用してください:{{api_trigger_properties.${attribute_key}}}。
キャンバスコンテキストプロパティにサイズ制限はありますか?
Brazeはキャンバスコンテキストプロパティにハードリミットを設けていませんが、ペイロードは約1 KB(約1,000文字)以下に抑えてください。オブジェクトが大きくなると、メモリ使用量が増加し、大量送信時にメッセージのレンダリングが遅延する可能性があります。
ダッシュボードで特定のデータ型をプレビューするとLiquidエラーが発生するのはなぜですか?
一部のキャンバスコンテキストプロパティの型は、比較や計算で使用する前にLiquidでの型変換が必要です。例えば、数値としての動作が必要な場合は以下のようにします:
1
{{context.${property_name} | plus: 0}}
カタログのLiquidスニペットが中止メッセージを返すのはなぜですか?
カタログのLiquidスニペットが送信中に中止される場合は、一括選択や完全にダイナミックな選択を使用する代わりに、パーソナライゼーションメニューから個々のカタログアイテムを選択してスニペットを再作成してください。詳細については、カタログとセレクションを参照してください。
Content Blocksとメッセージ作成画面
Content Blocksを使用するメッセージに余分なスペースが入るのはなぜですか?
Liquidを使用したContent Blocksで送信されたメッセージに余分なスペースが入る場合、条件文の中に不要な段落や改行が含まれている可能性があります。条件文は複数行にまたがらず、1行で記述してください。
例
1
{% if {{custom_attribute.${has_discount}}} == true %}Discounted Item{% elsif {{custom_attribute.${is_new_arrival}}} == true %}New Arrival{% else %}Regular Item{% endif %}
複数行のLiquidがドラッグ&ドロップエディターで予期しない空白を生成するのはなぜですか?
アプリ内メッセージのドラッグ&ドロップエディターやメールのドラッグ&ドロップエディターでLiquidコードが複数行にまたがっている場合、各{% %}ブロックは非表示テキストとしてレンダリングされます。改行は表示される出力の前に空行として保持されるため、予期しない空白が発生します。
解決策1:空白制御タグを使用する(推奨)
タグの区切り文字の内側にハイフンを追加して、コードの可読性を保ちながら周囲の空白を除去します。
1
2
3
4
5
{%- assign event_date = {{custom_attribute.${PreferredPickupDate}}} | date: "%s" -%}
{%- assign today = 'now' | date: "%s" -%}
{%- assign difference = event_date | minus: today -%}
{%- assign difference_days = difference | divided_by: 86400 -%}
Only {{ difference_days }} days until your move!
解決策2:Liquidを1行にまとめる
すべての改行を削除して、Liquidを1つの連続した行にします。
1
{% assign event_date = {{custom_attribute.${PreferredPickupDate}}} | date: "%s" %}{% assign today = 'now' | date: "%s" %}{% assign difference = event_date | minus: today %}{% assign difference_days = difference | divided_by: 86400 %}Only {{ difference_days }} days until your move!
どちらの方法でも、レンダリングされたメッセージ内の不要な空行を防ぐことができます。これはアプリ内メッセージのドラッグ&ドロップエディター、メールのドラッグ&ドロップエディター、およびLiquidを使用したContent Blocksに適用されます。詳細については、Whitespace controlを参照してください。
ドラッグ&ドロップの検索ツールでRowにContent Blockが表示されないのはなぜですか?
一部のContent Blocksは、ドラッグ&ドロップエディターの検索でRowの下に表示されません。Contentタブ(Advanced)からHTMLブロックを追加し、そのHTMLブロック内にContent BlockのLiquidタグを挿入して、ブロックのコンテンツをレンダリングしてください。
ドラッグ&ドロップのContent Blockプレビューが作成ビューと異なるのはなぜですか?
Content BlockをLiquidでテンプレート化する場合、ブロック内のモバイルメディアクエリは、ブロックを直接メッセージにドラッグした場合と同じようにプレビューに適用されないことがあります。ブロックをドラッグするとレイアウトは保持されますが、ソースブロックから切り離されるため、今後のブロック編集がメッセージに自動的に反映されなくなります。
メッセージ作成画面でイベントプロパティの値をプレビューするにはどうすればよいですか?
カスタムユーザーとしてプレビューを使用し、プレビューするユーザーのサンプルカスタムイベントプロパティ値を入力してください。これは、中止ロジックを含むメッセージで、中止をトリガーしないプレビュー値が必要な場合にも便利です。
メールメッセージでのLiquid
「Invalid from email address for recipient:」でメッセージが中止されるのはなぜですか?
この中止は、差出人アドレス内のLiquidが無効な構文を生成した場合に発生します。例えば、変数の欠落、余分なスペース、許可されていない文字などが原因です。テストユーザーでプレビューし、レンダリングされた差出人アドレスが設定済みの送信ドメインと一致していることを確認してください。
ダイナミックな返信先アドレスを作成するにはどうすればよいですか?
ワークスペースがダイナミックな返信先設定をサポートしている場合、返信先フィールドでLiquidを使用します。必要に応じて、差出人の表示名設定と組み合わせてください。ワークスペース固有のオプションについては、メール設定を参照してください。
Liquidエラーのトラブルシューティング
Liquidコードが正しく見えるのに動作しないのはなぜですか?
Liquidコードの構文が正しいように見えるのに動作しない場合は、ストレート引用符(' 'や" ")やハイフン(-)の代わりに、スマート引用符(' 'や" "のような丸い引用符)やスマートダッシュ(—のようなemダッシュ)が使われていないか確認してください。LiquidはストレートASCII文字のみを認識するため、スマート引用符やダッシュはパースエラーの原因になります。
これは、macOSのキーボード設定でスマート引用符とダッシュを使用が有効になっている場合によく発生します。この設定により、Brazeダッシュボードで入力する際に文字が自動的に変換されます。
macOSでこの設定を無効にするには:
- システム設定 > キーボード > テキスト入力 > 編集に移動します。
- スマート引用符とダッシュを使用のチェックを外します。
| 例 | 丸い引用符(動作しない) | ストレート引用符(動作する) |
|---|---|---|
| デフォルト値 | {{${first_name} | default: 'Torchie'}} |
{{${first_name} | default: 'Torchie'}} |
| 条件分岐 | {% if ${country} contains 'US' %} |
{% if ${country} contains 'US' %} |
これはデフォルト値、条件分岐、および引用符を使用するその他すべてのLiquidに適用されます。丸い引用符とストレート引用符は画面上では同じように見えることがあるため、コードを注意深く比較するか、プレーンテキストエディタに貼り付けて確認してください。
Liquidでの引用符の使用方法の詳細については、Liquid構文を参照してください。
「Unexpected end token」というLiquidエラーが表示されるのはなぜですか?
このエラーは通常、波括弧が余分にあるか不足していることを示しています。{{ }}を別のLiquidタグ式の中にネストしないでください。例えば、属性参照を追加の波括弧で囲むのではなく、{{custom_attribute.${date_of_birth} | date: '%s'}}を使用してください。
アプリ内メッセージでConnected Contentのリトライが利用できないのはなぜですか?
リトライ付きの{% connected_content %}タグは、一部のアプリ内メッセージ形式を含むすべてのメッセージタイプでサポートされているわけではありません。リトライパラメータを削除するか、リトライ付きConnected Content呼び出しに対応しているチャネルを使用してください。