Skip to content

Braze LearningコースLiquidの使用

この記事では、さまざまなユーザー属性を使用して、メッセージングにパーソナル情報をダイナミックに挿入する方法を説明します。

Liquidは、Shopifyが開発し、Rubyで記述されたオープンソースのテンプレート言語です。Brazeでは、Liquidを使用してユーザープロファイルデータをメッセージに取り込み、そのデータをカスタマイズできます。たとえば、Liquidタグを使用して条件付きメッセージを作成し、ユーザーの購読記念日に基づいて異なるオファーを送信できます。さらに、フィルターを使用してデータを操作できます。たとえば、ユーザーの登録日をタイムスタンプから「2022年1月15日」のようなより読みやすい形式にフォーマットできます。Liquidの構文と機能の詳細については、サポートされているパーソナライゼーションタグを参照してください。

仕組み

Liquidタグはメッセージ内のプレースホルダーとして機能し、ユーザーのアカウントから同意済みの情報を取得して、パーソナライゼーションや適切なメッセージング手法を実現します。

以下のブロックでは、Liquidタグを2つの用途で使用しています。1つはユーザーの名を呼び出すため、もう1つはユーザーの名が登録されていない場合のデフォルトタグです。

1
Hi {{ ${first_name} | default: 'Valued User' }}, thanks for using the App!

Janet Doe というユーザーの場合、メッセージは次のいずれかで表示されます。

1
Hi Janet, thanks for using the App!

または…

1
Hi Valued User, thanks for using the App!

代入可能なサポート対象の値

利用可能な場合、以下の値をメッセージに代入できます。

また、BrazeのConnected Contentを使用して、Webサーバーからコンテンツを直接取得することもできます。

Liquidの使用

Liquidタグを使用すると、パーソナルなタッチでメッセージを充実させ、メッセージの品質を高めることができます。

Liquidの構文

Liquidには特定の構造、つまり構文があり、ダイナミックなパーソナライゼーションを作成する際に留意する必要があります。以下にいくつかの基本的なルールを示します。

  • Brazeではストレートクォートを使用してください: カーリークォート(’ ‘)とストレートクォート(' ')には違いがあります。BrazeのLiquidではストレートクォート(' ')を使用してください。特定のテキストエディターからコピー&ペーストすると、カーリークォートが表示される場合があり、Liquidで問題が発生する可能性があります。Brazeダッシュボードに直接クォートを入力する場合は問題ありません。
  • ブラケットはペアで使用します: すべてのブラケットは開きと閉じの両方が必要です { }。必ず波括弧を使用してください。
  • if文はペアで使用します: すべてのifに対して、if文が終了したことを示すendifが必要です。
  • case文はペアで使用します: すべてのcaseに対して、ブロックを閉じるendcaseが必要です。
  • 変数名にはASCII文字を使用してください: Liquid変数名(assignまたはcaptureで作成)は、ASCII文字、数字、アンダースコアのみをサポートしています。Brazeパーソナライゼーション属性名(custom_attribute.${...}event_properties.${...}内)には非ASCII文字を含めることができます。
  • 複数行のassignタグではBraze Liquid変数を囲んでください: assignが複数行にまたがる場合は、Braze Liquid変数を二重波括弧({{ }})で囲んでください。

複数行のassignタグ

assignを複数行に分割できます(たとえば、閉じタグの前に|でフィルターを続ける場合)。ただし、すべてのBraze Liquid変数を二重波括弧({{ }})で囲む必要があります。これらの波括弧がないと、複数行のassign文で予期しないレンダリングが発生する可能性があり、カスタム属性のテンプレート化に失敗することがあります。以下は、動作する複数行assignの例です。

1
2
3
4
{%- assign color = {{custom_attribute.${favorite_color}}}
| default: {{custom_attribute.${fav_color}}}
| default: 'blue'
%}

assign全体を1行で記述することもできます。

1
{%- assign color = custom_attribute.${favorite_color} | default: custom_attribute.${fav_color} | default: 'blue' %}

演算子とフィルターの使用場所

演算子(==!=>andorなど)とフィルター(| size| plusなど)は、それぞれ特定のLiquidコンテキストでのみ使用できます。

コンテキスト 演算子 フィルター
assign サポートされていません サポートされています
ifelsifunless サポートされています サポートされていません
casewhen 等価一致のみ1 サポートされていません
for サポートされていません サポートされていません
配列アクセス([ ] サポートされていません サポートされていません

フィルターをサポートしていないコンテキストでフィルター処理された値が必要な場合は、まず結果を変数に代入してください。

条件文でフィルター結果を使用する

条件文でフィルターを直接使用することはできません。以下は正しくありません。

1
2
3
{% if my_array | size > 3 %}
You have more than 3 items!
{% endif %}

代わりに、フィルター結果を変数に代入してください。

1
2
3
4
{% assign array_size = my_array | size %}
{% if array_size > 3 %}
You have more than 3 items!
{% endif %}
forループでフィルター結果を使用する

forループのイテラブルにフィルターを適用することはできません。以下は正しくありません。

1
2
3
{% for item in my_array | reverse %}
{{ item }}
{% endfor %}

代わりに、フィルター処理された値を変数に代入してください。

1
2
3
4
{% assign reversed = my_array | reverse %}
{% for item in reversed %}
{{ item }}
{% endfor %}
配列アクセスでフィルター結果を使用する

角括弧内でフィルターを使用することはできません。以下は正しくありません。

1
{{ my_array[my_var | minus: 1] }}

代わりに、まずフィルター処理された値を代入してください。

1
2
{% assign adjusted_index = my_var | minus: 1 %}
{{ my_array[adjusted_index] }}
比較結果を変数に格納する

assign文で演算子を使用することはできません。以下は正しくありません。

1
2
3
4
{% assign is_vip = total_spend > 100 %}
{% if is_vip %}
Welcome to the VIP lounge!
{% endif %}

代わりに、条件文を使用して変数を設定してください。

1
2
3
4
5
6
7
8
{% assign is_vip = false %}
{% if total_spend > 100 %}
{% assign is_vip = true %}
{% endif %}

{% if is_vip %}
Welcome to the VIP lounge!
{% endif %}

デフォルト属性とカスタム属性

メッセージに{{${first_name}}}というテキストを含めると、メッセージ送信時にユーザーの名(ユーザープロファイルから取得)が置換されます。他のデフォルトユーザー属性にも同じ形式を使用できます。

カスタム属性の値を使用する場合は、変数に「custom_attribute」という名前空間を追加する必要があります。たとえば、「zip code」というカスタム属性を使用するには、メッセージに{{custom_attribute.${zip code}}}を含めます。

タグの挿入

任意のメッセージで2つの開き波括弧{{を入力すると、タグを挿入できます。これにより、入力に応じて更新され続けるオートコンプリート機能がトリガーされます。入力中に表示されるオプションから変数を選択することもできます。

カスタムタグを使用している場合は、タグをコピーして任意のメッセージに貼り付けることができます。

二重括弧の例外

{% assign %}{% if %}などの別のLiquidタグ内でタグを使用する場合、二重括弧を使用するか、括弧なしで使用できます。タグが単独で使用される場合のみ、二重括弧で囲む必要があります。簡単にするために、常に二重括弧を使用できます。

以下のタグはすべて正しいです。

1
2
3
4
5
{% if custom_attribute.${Number_Game_Attended} == 1 %}
{% if {{custom_attribute.${Number_Game_Attended}}} == 1 %}

{% assign value_one = {{custom_attribute.${one}}} %}
{% assign value_one = custom_attribute.${one} %}

HTMLエディターとクラシックエディターの切り替え

HTMLエディターとクラシックエディターを切り替えると、LiquidスニペットやContent Blocksがメッセージ内で位置がずれる場合があります。エディターを切り替えた後にテンプレートを確認してください。より予測可能なレイアウト制御が必要な場合は、ドラッグ&ドロップエディターを使用してください。

事前フォーマットされた変数の挿入

テンプレート化されたテキストフィールドの近くにあるパーソナライゼーションを追加モーダルから、デフォルト値付きの事前フォーマットされた変数を挿入できます。

パーソナライゼーションの挿入を選択した後に表示される「パーソナライゼーションを追加」モーダル。モーダルには、パーソナライゼーションタイプ、属性、オプションのデフォルト値のフィールドがあり、Liquid構文のプレビューが表示されます。

モーダルは、カーソルがあった位置に指定したデフォルト値を含むLiquidを挿入します。挿入位置はプレビューボックスでも指定され、前後のテキストが表示されます。テキストブロックがハイライトされている場合、ハイライトされたテキストが置換されます。

「パーソナライゼーションを追加」モーダルのGIF。ユーザーがデフォルト値として「fellow traveler」を挿入し、モーダルがコンポーザー内のハイライトされたテキスト「name」をLiquidスニペットに置換する様子を示しています。

  1. caseタグとwhenタグでは、Liquidはcase式を各when値と等価比較します(ifelsif==で連鎖させるのと同様です)。ifelsifのように、when句内で任意の比較演算子や論理演算子を使用することはできません。例については、条件付きメッセージングロジックを参照してください。 

New Stuff!