Tech Waves

produced by Hakuhodo DY ONE

AMPscriptを使って動的なメールを作成

こんにちは。まのです。

Salesforce Marketing Cloud EngagementのAMPscriptを使って動的なメールコンテンツを作成する方法を紹介します。

 

そもそもAMPscriptとは?

AMPscriptは、Marketing Cloud Engagementの専有スクリプト言語です。

AMPscriptを使用することで、データを使ってメールの内容をパーソナライズしたり、動的な内容を入れ込んだり等、複雑なメールを作成することが可能になります。

 

1.AMPscriptの記述の仕方

AMPscriptの記述方法は、大きく3つあります。

内容の複雑さや活用ケースに応じて使い分けますが、個人的にはブロックで記述するパターンが多いので、まずは「②ブロックのパターン」を覚えるのがおすすめです。

 

①インライン:%%= =%%で区切って記述

シンプルな内容のときに使用します。

例)%%=Concat(@lastname,@firstname)=%%

 

②ブロック:%%[ ]%%で区切って記述

複数の変数・関数を含むことができます。複数の変数・関数を含む、複雑な内容のときに使用します。

例)%%[Concat(@lastname,@firstname)]%%

 

③タグ:サーバーサイドJavaScript(SSJS)の構文で記述

JavaScriptを使い慣れている場合、こちらの方法での記述も可能です。

例)

<script runat=server language=ampscript>
	Concat(@lastname,@firstname)
</script>


2.変数と関数

AMPscript内では「変数」や「関数」を使用することができ、これを使いこなせるとかなり便利です!

 

①変数

Varで変数を宣言し、Setで変数に値を代入します。

変数を使用すると、データの参照がしやすくなります。

%%[
	Var @City
	Set @City = "Tokyo"
]%%

 

②関数

さまざまな関数を使用することができます。以下に一例を示します。

GetSendTime():送信開始または終了時刻を返す

Lookup():データエクステンションからデータを返す

Concat():文字列を連結する

DateAdd():指定された時刻値(年、月、日、時間、分)を日付に追加する

他にもたくさんの関数がありますので、もっと詳しく知りたい方はDevelopersドキュメントを見るのがおすすめです!

SQLや他の言語でよく使うメジャーな関数はAMPscriptにも用意されているものが多いです。

その他、if文やforループなどを使うこともできるので、使いこなせると、できることの幅が広がります!

ここからはSalesforce Marketing Cloud EngagementでAMPscriptを使うユースケースを紹介します。

 

ユースケース

ケース1:送信に使用するデータエクステンションの値を表示する

AMPscriptを使用して、ユーザーの誕生月をメールに表示させます。

以下のようなデータエクステンションを送信に使用します。



誕生日の情報はデータエクステンションに含まれているので、関数を使用して誕生日を月に変換して表示させるようにAMPscriptを記述します。


誕生月の関数部分は以下のようになっています。
件名にも同じように誕生月を含めています。

%%=FormatNumber(DatePart(AttributeValue('Birthday'), 'm'), "0")=%%
  • AttributeValue():メール購読者プロファイル、データエクステンションのフィールドなどの属性値を返します。今回は送信に使用するデータエクステンションの「Birthday」列の値を取得しています。
  • DatePart():日付から日付部分(年/月/日など)を抽出します。今回は月部分を抽出しています。
  • FormatNumber():数値を小数点、日付、通貨値などの数値型として書式設定します。今回は「03」のような形式の月の値のゼロ埋めをなくし、「3」のような形式に変換しています。

 

ユーザーがメールを受信すると、以下のように自分の誕生月が入った状態で表示されます。

複数パターンのメールを作成しなくても、受信者の情報に合わせてコンテンツを出しわけができるので便利ですね!



ケース2:他のデータエクステンションの値を参照する

ケース1では送信に使用するデータエクステンションの中に、メールに表示させたいデータが含まれていました。ケース2では、送信に使用するのとは別のデータエクステンションの値を参照して動的な内容を表示するパターンを紹介します。

ユーザーの直近の購買商品に合わせて、同じ商品カテゴリの人気商品を表示します。

ケース1でも使用したユーザーデータ(送信に使用するデータ)のほかに、以下2つのデータを使用します。

 

①購買データ

どのユーザーが、いつ、どんな商品を購入したかのデータ

 

②商品カテゴリ別ランキング

商品カテゴリ別の人気ランキング(TOP3)データ→今回はこれをメールに表示させます。

 

以下のように、AMPscriptを記述します。

今回は「顧客の最新購入商品と同じ商品カテゴリのTOP3を表示する」AMPscriptです。

 

%%[
/* 変数を宣言 */
VAR @user_id,@latest_order_rows,@latest_order_row,@latest_product_name,@latest_product_category_id,@latest_product_category,@rank_rows,@rank_1_row,@rank_1_product_name,@rank_1_price,@rank_2_row,@rank_2_product_name,@rank_2_price,@rank_3_row,@rank_3_product_name,@rank_3_price

/* user_idをキーに、顧客の最新の購買レコード1行を取得(同じ日付で2商品以上購入している場合は、product_idが一番小さいものを取得) */
SET @user_id = AttributeValue('user_id')
SET @latest_order_rows = LookupOrderedRows('購買データ', 1, 'order_date DESC,product_id ASC', "user_id", @user_id)

/* 行セットから1行目を取得(顧客の最新の購買レコード1行) */
SET @latest_order_row = Row(@latest_order_rows, 1)

/* 顧客の最新の購買レコードから「product_name」「latest_product_category_id」「latest_product_category」列の値を取得 */
SET @latest_product_name = Field(@latest_order_row, 'product_name')
SET @latest_product_category_id = Field(@latest_order_row, 'product_category_id')
SET @latest_product_category = Field(@latest_order_row, 'product_category')

/* 顧客の最新の購買と同じカテゴリのTOP3の行を取得 */
SET @rank_rows = LookupOrderedRows('商品カテゴリ別ランキング', 3, 'rank ASC', "product_category_id", @latest_product_category_id)

/* Rank=1の行を取得 */
SET @rank_1_row = Row(@rank_rows, 1)

/* Rank=1の行の「product_name」「price」を取得 */
SET @rank_1_product_name = Field(@rank_1_row, 'product_name')
SET @rank_1_price = Field(@rank_1_row, 'price')

/* Rank=2の行を取得 */
SET @rank_2_row = Row(@rank_rows, 2)

/* Rank=2の行の「product_name」「price」を取得 */
SET @rank_2_product_name = Field(@rank_2_row, 'product_name')
SET @rank_2_price = Field(@rank_2_row, 'price')

/* Rank=3の行を取得 */
SET @rank_3_row = Row(@rank_rows, 3)

/* Rank=3の行の「product_name」「price」を取得 */
SET @rank_3_product_name = Field(@rank_3_row, 'product_name')
SET @rank_3_price = Field(@rank_3_row, 'price')

]%%

<p>
%%=v(@latest_product_category)=%%の人気商品
</p>

<p>
1.%%=v(@rank_1_product_name)=%% %%=FormatNumber(@rank_1_price, "N0")=%%円
</p>

<p>
2.%%=v(@rank_2_product_name)=%% %%=FormatNumber(@rank_2_price, "N0")=%%円
</p>

<p>
3.%%=v(@rank_3_product_name)=%% %%=FormatNumber(@rank_3_price, "N0")=%%円
</p>

 

ここでポイントとなるのが、「送信に使用するデータエクステンション(ユーザーデータ)とは別のデータエクステンション(購買データ&商品カテゴリ別ランキング)から情報を抽出して表示している」ということです。LookupOrderedRows関数を使用しています。

LookupOrderedRows(取得するデータが含まれるデータエクステンションの名前,
                  返される行数,
                  並べ替えに使用する列名 ASC or DESC,
                  検索する列の名前1, 検索する値1,
                  [検索する列の名前2, 検索する値2 ...])

この関数を使用すると、指定したデータエクステンションから条件に合う行を検索し、返ってくる値を指定の条件で並び替えて上から○件取得する」ということができます。

 

今回の場合は、以下の部分でこの関数を使用しました。

/* user_idをキーに、顧客の最新の購買レコード1行を取得(同じ日付で2商品以上購入している場合は、product_idが一番小さいものを取得) */
SET @user_id = AttributeValue('user_id')
SET @latest_order_rows = LookupOrderedRows('購買データ', 1, 'order_date DESC,product_id ASC', "user_id", @user_id)

→対象ユーザーの最新の購買商品を取得する

 

/* 顧客の最新の購買と同じカテゴリのTOP3の行を取得 */
SET @rank_rows = LookupOrderedRows('商品カテゴリ別ランキング', 3, 'rank ASC', "product_category_id", @latest_product_category_id)

→最新の購買商品と同じ商品カテゴリのTOP3商品を取得する

 

プレビューで確認すると、送信対象ユーザー(test_ampscript_009)の直近の購入商品(商品A)と同じ商品カテゴリ(category_a)のTOP3商品(商品A、商品D、商品I)が表示されています。



まとめ

AMPscriptを使用すると、ユーザーの属性や行動データに沿った動的なメールコンテンツを作成することができます。

使いこなせるととても便利なので、AMPscriptの関数やユースケースをぜひ調べてみてください!