> For the complete documentation index, see [llms.txt](https://manual.dxable.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.dxable.com/optimizely/platform/optimizely-data-platform/personalize-content/advanced-liquid-capabilities-in-odp.md).

# ODPの高度なLiquid機能

[パーソナライゼーション タグ](https://support.optimizely.com/hc/en-us/articles/4407268754957)を通じて電子メールに動的コンテンツを追加し、[顧客が実行しているアクションに基づいて](https://support.optimizely.com/hc/en-us/articles/4407268754957)コンテンツを通知する動的グリッドを構成できます。 提供された構成以外のオプションが必要な場合は、追加の複雑さを動的コンテンツにスクリプト化することもできます。

ODP テンプレートおよびパーソナライゼーション言語は、 [Shopify Liquid テンプレート言語に基づいています](https://shopify.github.io/liquid/)。

### 行動 <a href="#gjdgxs" id="gjdgxs"></a>

動的グリッドは、必要なコンテンツを取得するために必要な Liquid を自動的に構成します。 簡単な例を確認するには、動的グリッドを電子メールにドラッグし、任意の動作を選択して、「 **Liquid に変換」をクリックします**。

![convert-to-Liquid.png](/files/GEMu0hE5qhT2p42qB7Cv)

![Liquid-conversion.png](/files/ImB3lfIUlZdXSndwkdgw)

* behavior – これは、メッセージが動作をクエリしていることを ODP に伝えます。
* cart\_abandonment – 動作の識別子。 これを手動で見つけるには、 **\[動作]に移動し、 \[コンテンツ テンプレートで使用できるようにする**] チェックボックスがオンになっているかどうかを確認します。 **Content Reference Key**と呼ばれる識別子が表示されます。
* range\_start – 顧客が動作の最初のステップを実行した可能性がある最も早いタイムスタンプとして使用する動的タイムスタンプ。 autoを使用すると、ODP がキャンペーン構成に基づいてこれを自動的に決定します。 それ以外の場合は、*現在*からのオフセットを秒単位で指定します。 たとえば、now(-604800)は顧客にメッセージが表示されるまでの 604800 秒 (1 週間) になります。
* range\_end – 顧客が動作の最初のステップを実行する必要がある最新のタイムスタンプとして使用する動的タイムスタンプ。now(0)の使用は、キャンペーンが送信される前にユーザーが動作の最初のステップを実行している必要があることを示すため、最も一般的です。 それ以外の場合は、*現在*からのオフセットを秒単位で指定します。
* required – キャンペーンの参加資格を得るには、顧客が少なくとも 1 回はその行動を完了している必要があることを要求することで、対象ユーザーをさらにフィルタリングします。 動作がコンテンツにとって重要な場合 (カート放棄キャンペーンでカート放棄製品を表示する場合など)、 trueを使用します。 顧客が動作を完了する必要がない場合は、 falseを使用します。
* filters: array('z\_content\_shield\_filter') – 追加のフィルターに一致する製品の動作に一致するユーザーのみにユーザーをさらに絞り込む、カンマ区切りのリスト。 デフォルトでは、これにはz\_content\_shield\_filterが含まれており、[コンテンツ シールド フィルターが適用されていることを示します](https://support.optimizely.com/hc/en-us/articles/4407774988173)。 [他の製品のフィルター](https://support.optimizely.com/hc/en-us/articles/4407775026957)も使用できます。 **注:**&#x66;iltersは製品ベースの動的グリッドでのみ使用できます。
* step1 – [動作](https://support.optimizely.com/hc/en-us/articles/4407268765581)の特定のステップからコンテンツを取得します。 *PDP ビュー (ステップ 1) を行った後、その製品を注文しない (ステップ 2) というユーザー*によってブラウズ放棄動作が定義されている場合、step1を指定すると、ODP に PDP ビュー イベントからデータをプルするように指示されます。 常に、正の一致を持つステップを使用してください。 ODP には、ステップが一致しない場合にデータを取得するイベントがありません。
* list.product(image\_url, name, price) – 一致するすべての動作とプルするフィールドのリスト。 通常、このデータは製品ディメンションから取得されます。 イベント レベルでデータが必要な場合は、listの直後にフィールドを配置します(例: list(event\_type, action))。
* top – 返されるデータの並べ替え順序を指定します。 一致の*頻度*で並べ替えるには、top を使用します(たとえば、最も閲覧された製品を表示する場合)。 一致の新しさによって並べ替えるには、newestを使用します(たとえば、最後にカートから放棄された製品を最初に表示する場合)。
* limit(4) – これは、返される結果の最大数を提供します。 指定できる最大値は20です。

注記

イベントトリガーの動作やトランザクションキャンペーンの最初のタッチポイントでは動作を使用できません。 最初のタッチポイントはトリガーされると*すぐに顧客に送信されるため*、データベースから追​​加の複雑なデータセットを取得する時間はありません。

### Lookup <a href="#id-30j0zll" id="id-30j0zll"></a>

Lookupを使用して、Optimizely データベース内のオブジェクト (テーブル) からデータを直接取得できます。

たとえば、最も高価な製品をプルすることができます。

![Liquid-conversion-ex2.png](/files/BvPncQMpNCoTx0cigt0R)

* lookup: これは、メッセージが検索をクエリしていることを ODP に伝えます。
* products(name, price): これは、データの取得元のオブジェクトと、要求されているフィールドを指定します。
* where(name =\~ "\*shirt\*" and price < 300): これにより、指定されたとおりに一致するものが絞り込まれます。 この例では、名前に「シャツ」が含まれ、価格が 300 ドル未満の製品のみがルックアップに一致します。 タイムスタンプ フィールドでフィルタリングする場合、一致はnowに基づいて行うことができます(例: ts > now(-3600)は過去 1 時間のタイムスタンプと一致します)、UNIX タイムスタンプ (例: ts > 1234567890は2009-02-13 以降のタイムスタンプと一致します) at 11:31pm UTC)、またはユーザーフレンドリーな日付 (例: ts > '2016-09-01T00:00:00'は2016-09-01 の深夜 UTC 以降のタイムスタンプと一致します)。
* top(price): 返されるデータの並べ替え順序を指定します。 特定のフィールドの最高値または最低値で並べ替えるには、上または下を使用します。 注: クエリ対象のオブジェクトがイベントの場合は、newest(最新のイベントが最初に返される) またはoldest(最も古いイベントが最初に一致する) を使用することで、追加の並べ替えオプションを使用できます。
* limit(3): これは、返される結果の最大数を提供します。 指定できる最大値は20です。

注記

イベントトリガーの動作やトランザクションキャンペーンの最初のタッチポイントではLookupを使用できません。 最初のタッチポイントはトリガーされるとすぐに顧客に送信されるため、データベースから追​​加の複雑なデータセットを取得する時間はありません。

### cURL <a href="#id-1fob9te" id="id-1fob9te"></a>

cURL 呼び出しを使用すると、メッセージのコンテンツ内で API 呼び出しを行うことができます。 これは、Google スプレッドシートからデータを呼び出したり、顧客の更新をサードパーティ システムに送信したりするのに役立ちます。 Optimizely は、API 呼び出しをさらに簡単にする API および Optimizely チャネルを提供します (たとえば、[顧客が特定の SMS メッセージを送信するときに Optimizely チャネルを使用して顧客の同意を更新する方法について説明する「顧客の SMS 同意ステータスを更新する」を参照してください](https://support.optimizely.com/hc/en-us/articles/4407767196429))。 API をコンテンツ自体内で使用する必要がある場合は、cURL を使用する必要があります。

次の例を見てください。

![Liquid-conversion-ex3.png](/files/u86mqwnsdHoYoTZDnH6j)

目標は、電子メールに表示された動的コンテンツに基づいて顧客属性を更新することです。

* curl('<https://api.zaius.com/v3/profiles>'): これは、指定されたエンドポイントに向けられた API 呼び出しを準備していることを ODP に伝えます。
* post: これは API リクエストのタイプです。通常はpostまたはgetします。
* body('{"attributes": {"email":"{$ customer.email $}","last\_shown\_product\_id": "{$ product.product\_id $}"}}'):これはリクエストの本文です。 この場合、更新される顧客フィールド。 この例では、 last\_shown\_product\_idを顧客オブジェクトのカスタム フィールドとして追加する必要があることに注意してください (カスタム フィールドの作成については、[このドキュメントを参照してください](https://support.optimizely.com/hc/en-us/articles/4407269395341))。また、そのproductは、Liquid で割り当てられた変数であり、別途product\_idが提供されます(例: 、動作またはルックアップ呼び出し経由）。
* headers(content-type: 'application/json',x-api-key: 'my\_api\_key'): これは、Optimizely 呼び出しで使用するヘッダーを ODP に指示します。 特に、content-typeと必要な API キーを必ず指定してください。
* cache(0): これは、返されたデータをキャッシュする時間です。 常に完全に新しいデータを受信する必要がある場合は、0 を使用します。

### その他の Optimizely 固有のデータ <a href="#id-3znysh7" id="id-3znysh7"></a>

Optimizely は、いくつかの追加フィールドを使用できるようにします。 たとえば、\[管理] 領域で指定した値に基づいて、電子メール フッターで会社の住所のフィールドを使用できます。 これにより、管理領域で情報が変更された場合に、すべてのフッターが自動的に更新されます。

メッセージ関連情報:

* {{campaign.id}}
* {{campaign.name}}
* {{content.id}}
* {{content.name}}

アカウントレベル (これらは、「管理者 > 会社情報」ページで指定されたアカウント値です):

* {{zaius.account.site\_url}}
* {{zaius.account.company\_address}}
* {{zaius.account.company\_name}}
