Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

ガイドテンプレート言語の概要

学習の目的

この単元を完了すると、次のことができるようになります。

  • ガイドテンプレート言語 (GTL) の基本事項と構文の概要を説明する。
  • データソース、テンプレート、タグを使用して、データに基づくメッセージのテンプレートを作成する。
  • GTL の例やベストプラクティスに従う。

ガイドテンプレート言語は Marketing Cloud Engagement の最新プログラミング言語で、パーソナライズされたコンテンツを表示するためにメッセージ内で機能するようカスタマイズされています。GTL は指定したデータソースからデータを取得して、コンテンツの表示に使用するテンプレート内に適用します。これらのテンプレートには、データを挿入する場所を決定するタグが含まれています。

Mustatche.js や Handlebars.js などのテンプレート作成ライブラリを使用したことがある場合は、GTL を身近に感じることでしょう。実際、GTL はこれらのソースのテンプレートをサポートしていますが、Marketing Cloud Engagement がスクリプトではなく、データを提供します。

GTL 構文

では、いくつかのタグから見ていきましょう。タグの中には極めてシンプルなものがあり、こうしたタグを簡易タグといいます。メールに相手の名を挿入したい場合は、次のタグを使用します。

{{FirstName}}

タグにプレフィックスやサフィックスを追加して、テンプレートにどのような種類のタグを配置しているのかを特定することもできます。

プレフィックスには次の文字があります。

タグ種別
プレフィックスの記号
セクションタグ
#
関数タグ、または区切り記号の設定タグ
=
反転したセクションタグ
^
コメントタグ
!
部分タグ
>
ブロックヘルパー
#=
データ
{

サフィックスには次の文字があります。

タグ種別
サフィックスの記号
データの終了タグ
}
区切り記号の設定終了タグ
=

GTL でブロックタグを作成することもできます。次の例は、別のブロックタグ内にネストされたブロックタグと、商品情報を保存するデータエクステンションからデータを取り込むいくつかの簡易タグの例を示しています。

{{#Products}} <strong>Product Name:</strong> {{Product_Name}}<br /> <strong>SKU:</strong>{{sku}}<br /> <img src="{{Thumbnail_URL}}" /><br /> {{#Product_Ratings}} <strong>Most Recent Review: </strong>{{Last_Review_Text}}<br /> <strong># of Ratings: </strong>{{Number_of_Ratings}}<br /> <strong>Ave Rating: </strong>{{Average_Rating}}<br /><br /><br /> {{/Product_Ratings}}
  {{/Products}}

ブロックタグの先頭のハッシュタグがセクションタグになっています。ブロックタグは、データソースの作成や使用、ヘルパー関数へのアクセス、テンプレートロジックの指定などに使用します。

ヘルパー関数と言えば、GTL は Each、If、Switch、Unless、With などの一般的な関数を処理します。たとえば、次の If 関数は、注文の準備ができているかどうかに関するテキストを提示します。

{{#if order=="1234"}}Your order is ready{{.else}}Your order is not ready{{/if}}

ブロックとスロット

GTL テンプレートは、ブロックやスロットを使用してメッセージのデータを整理します。次の例は、HTML メールメッセージの例を示しています。

<html>
   <body>
   <style type="text/css">
      .tftable {font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #ebab3a;border-collapse: collapse;}
      .tftable th {font-size:12px;background-color:#e6983b;border-width: 1px;padding: 8px;border-style: solid;border-color: #ebab3a;text-align:left;}
      .tftable tr {background-color:#ffffff;}
      .tftable td {font-size:12px;border-width: 1px;padding: 8px;border-style: solid;border-color: #ebab3a;}
   </style>
   <table class="tftable" border="1">
      <tr>
         <th colspan="2">TITLE OF MESSAGE</th>
      </tr>
      <tr>
         <td rowspan="3">
            {{.slot slot1}}
               {{.block mytext+imageblock textimage}}Block Goes Here
               <br />
                  {{.default}}I am a Text and Image Block - Hello World!{{/default}}
               {{/block}}
            {{/slot}}
         </td>
         <td>
            {{.slot slot2}}
               {{.default}}This slot is available for anything{{/default}}
            {{/slot}}
         </td>
      </tr>
      <tr>
         <td>
            {{.slot slot3}}
               {{.block mytextblock text}}Block Goes Here
               <br />
                  {{.default}}I am a Text only Block - Hello World!{{/default}}
               {{/block}}
            {{/slot}}
         </td>
      </tr>
      <tr>
         <td>
            {{.slot slot4}}
               {{.block myimageblock image}}Block Goes Here
               <br />
                  {{.default}}I am an Image only Block - Hello World!{{/default}}
               {{/block}}
            {{/slot}}
         </td>
      </tr>
   </table>
</body>
</html>

このテンプレートは、次のように表示されます。

GTL の例を基に表示されたメッセージの画像

ブロックやスロットには、メタ情報、デフォルトのコンテンツ、表示するコンテンツを含めることができます。また、ブロックには表示時にデータを提供するために使用する JSON オブジェクトも含まれます。

データオブジェクトとデータソース

テンプレートに取り込むデータはすべて、どこかにそのソースがありますよね? テンプレート内のタグをパーソナライズされたデータに置き換えるために、GTL はデータオブジェクトとデータソースのいずれかから情報を引き出します。この 2 つのどこが違うのでしょうか?

  • データオブジェクトは、参照する前に宣言する必要がありますが、その情報をテンプレート内のどこにでも使用できます。
  • データソースはテンプレートのタグ内に表示され、その範囲のデータのみを提供します。

データオブジェクト

データオブジェクトには、名前、種別値 (インライン、変数、リスト)、maxRows 整数値を含める必要があります。次の例には、パーソナライズされたテンプレート内に商品情報を配置するデータオブジェクトが含まれています。

{{.dataobject RecProds type=list maxRows = 2}}
  {{.data}} { "target" : "name:Products", "filter" : "Product_Category == Category_Preference" } {{/data}}
  {{/dataobject}}
  {{!if data is found we'll execute the code in the Sections tag}}
  {{#RecProds}}
    {{First_Name}} {{Last_Name}}, based on your preference of {{Category_Preference}}, we suggest the following products… SKU: {{sku}} Product Name: {{Product_Name}} <img src="{{Thumbnail_URL}}" alt="" /> {{/RecProds}}
  {{!if no data is found we'll execute the code in the Inverted Sections tag}}
  {{^RecProds}}
    {{First_Name}} {{Last_Name}}, we do not have any product recommendations for you at this time. {{/RecProds}}
  

データソース

データオブジェクトと同様に、データソースも名前と maxRows 値が必要です。ブロックの処理後に値を親コンテキストに戻す Boolean グローバル値を指定することもできます。また、次の 5 種類のブロックを指定することが可能です。

  • クエリ
  • インライン
  • リスト
  • 変数
  • ネスト済み

データソースでは情報をネストすることができます。次の例は、AMPscript 変数に保存されている情報 (GTL は AMPscript と SSJS から情報を受け入れます!) を表示し、その情報を使用して購読者情報を入力します。 

%%[ var @Json set @Json = ' [{ "emailaddress": "john@example.com", "Region": "West", "State": "California", "City": "San Francisco", "PhoneNumbers": [{ "Type": "Home", "Number": "555-555-1111" }, { "Type": "Cell", "Number": "555-555-2222" }]}, { "emailaddress": "carla@example.com", "Region": "Central", "State": "Indiana", "City": "Indianapolis", "PhoneNumbers": [{ "Type": "Home", "Number": "555-555-4444" }, { "Type": "Cell", "Number": "555-555-5555" }]}]' ]%%
{{.datasource JSONVar type=variable maxRows = 20}}
{{.data}}
   { "target" : "@Json" }
{{/data}}
   Email Address: {{emailaddress}}
   Region: {{region}}
   State: {{STATE}}
   City: {{JSONVar.City}}
   {{.datasource JSONPhone type=nested maxRows = 10}}
   {{.data}}
      { "target" : "JsonVar.PhoneNumbers" }
   {{/data}}
   {{JSONPhone.Type}}: {{JSONPhone.Number}}
   {{/datasource}}
{{/datasource}}
メモ

この例のメールアドレスを実際のアドレスに変更してテストすれば、検証に合格します。

パーシャル

ポートフォリオまたは Content Builder から情報を取り込む必要がある場合は、パーシャルを使用すると便利です。{{>}} タグの内側にキー、ID、名前値を指定するだけで、キーで指定されたコンテンツ領域が取り込まれます。

{{>id:purchased_shoes refresh}}

更新タグ (省略可能) を追加すれば、送信時にコンテンツに更新が適用されます。

次の例は、変数から情報を取り込みます。

{{>var:contentField}}

さらにこの例は、Web サイトからコンテンツをシンジケートします。

{{>get:http://www.example.com}}

Marketing Cloud Engagement のプログラミング言語の詳細がわかったところで、次はその言語を使用する方法と使用する状況について説明します。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む