1ヶ月ごとにメールに記載するコードを変更する(メールスクリプト活用)
とあるキャンペーンからメールを送る際に、キャンペーンの開始月に応じて埋め込むコードを変更する方法を共有します。
メールスクリプト型のマイトークンを活用しています。
※もっといい方法や、問題点あったら教えてくださ~い。
■やりたいこと詳細
- Leadがキャンペーンに追加された年月に応じて、メール中に記載されるクーポンコードとクーポン期限の記述を変えたい。
- キャンペーンでは1ヶ月おきに3回メールする。すべてのメールで同じコード・期限を記載したい。
- クーポン期限は追加年月の3ヶ月後の月末日
- 毎月の手運用はしたくない。自動化したい。
■実現方法のポイント
- キャンペーン追加日時をカスタムフィールドに保持
- キャンペーン追加日時を元にクーポンコード・期限を返すメールスクリプト型のマイトークンを使う
■実現手順詳細
- キャンペーン追加日時を保持するために、日時型のLeadのカスタムフィールドを作成。ここでは「ECリピータ促進PGクーポン発行日(API名:ecRepeatPgCouponIssueDate)」としました(長!)。
- プログラムのマイトークン2つ作成(参考:マイトークンを管理する)。いずれもメールスクリプト型とする。長いので詳細は文末参照。
- クーポンコード:{{my.coupon_code}}
- クーポン期限:{{my.coupon_expiration}}
- キャンペーンのフローの最初で上記フィールドに「{{system.dateTime}} 」トークンをセットします。これは現在日時を表すシステムトークンです。(こちら参照。)
- メール中に上記のマイトークンを埋め込む
■余談・補足
- メールスクリプト型のマイトークンはメールアセットでの使用のみが想定されており、フローステップやランディングページでは利用できません(サポートの方に確認済み。)。#最初この方法やろうとしてハマりました。
- メールスクリプトの構文についてはこちらを参照。Velocityというテンプレート言語で記載されます。
■メールスクリプト1.クーポンコード:{{my.coupon_code}}
★ポイント:各月のクーポンコードをスクリプト中にあらかじめ埋め込んでおきます。
##上の方は日時操作のおまじない
#set( $inTimeZone = $date.getTimeZone() )
#set( $outTimeZone = $date.getTimeZone().getTimeZone('Asia/Tokyo'))
#set( $defaultLocale = $date.getLocale() )
#set( $calNow = $date.getCalendar() )
#set( $date_format="yyyy-MM-dd H:m:s" )
##
##こっから本体
##発行日取得
#set( $cpIssueDate = $convert.toDate(
$convert.parseDate(
$lead.ecRepeatPgCouponIssueDate,
$date_format,
$defaultLocale,
$inTimeZone
)
) )
##カレンダーのTimeZoneをTokyoにする。
## ※MarketoがデフォルトでCDTというサマータイムがあるTimeZoneのため、先にこれやっとかないでX日間足しちゃうとサマータイムのときにずれる!
$cpIssueDate .setTimeZone($outTimeZone)
##年と月を取得
#set($yearMonth=$date.format('yyyyMM', $cpIssueDate, $defaultLocale, $outTimeZone) )
##発行日年月に対応したコードを取得
#set($codeMap = {
'201805':'XXXXXX5',
'201806':'XXXXXX6',
'201807':'XXXXXX7',
'201808':'XXXXXX8',
'201809':'XXXXXX9',
'201810':'XXXXXX10',
'201811':'XXXXXX12'
})
#set( $code = $codeMap[$yearMonth] )
${code}
■メールスクリプト2.クーポン期限:{{my.coupon_expiration}}
★ポイント:Calendarの関数で「3ヶ月後の月末」を取得しています。
##上の方は日時操作のおまじない
#set( $inTimeZone = $date.getTimeZone() )
#set( $outTimeZone = $date.getTimeZone().getTimeZone('Asia/Tokyo'))
#set( $defaultLocale = $date.getLocale() )
#set( $calNow = $date.getCalendar() )
#set( $date_format="yyyy-MM-dd H:m:s" )
##
##こっから本体
##発行日取得
#set( $calCpIssueDate = $convert.toCalendar(
$convert.parseDate(
$lead.ecRepeatPgCouponIssueDate,
$date_format,
$defaultLocale,
$inTimeZone
)
) )
##カレンダーのTimeZoneをTokyoにする。
## ※MarketoがデフォルトでCDTというサマータイムがあるTimeZoneのため、先にこれやっとかないでX日間足しちゃうとサマータイムのときにずれる!
$calCpIssueDate.setTimeZone($outTimeZone)
##3ヶ月後の月末を取得する
$calCpIssueDate.set(5, 1) ##日にちをツイタチにセット(5は日にちを表す。 ref: https://goo.gl/QwXKZW)
$calCpIssueDate.add(2, 4) ##4ヶ月進める(2は月を表す)
$calCpIssueDate.add(5, -1) ##1日戻す(5はry)
##表示
#set($expiration=$date.format('yyyy年M月d日', $calCpIssueDate.time, $defaultLocale, $outTimeZone) )
${expiration}

