Skip to main content
Level 2
May 17, 2018

1ヶ月ごとにメールに記載するコードを変更する(メールスクリプト活用)

  • May 17, 2018
  • 0 replies
  • 218 views

とあるキャンペーンからメールを送る際に、キャンペーンの開始月に応じて埋め込むコードを変更する方法を共有します。

メールスクリプト型のマイトークンを活用しています。

※もっといい方法や、問題点あったら教えてくださ~い。

■やりたいこと詳細

  • Leadがキャンペーンに追加された年月に応じて、メール中に記載されるクーポンコードとクーポン期限の記述を変えたい。
  • キャンペーンでは1ヶ月おきに3回メールする。すべてのメールで同じコード・期限を記載したい。
  • クーポン期限は追加年月の3ヶ月後の月末日
  • 毎月の手運用はしたくない。自動化したい。

■実現方法のポイント

  • キャンペーン追加日時をカスタムフィールドに保持
  • キャンペーン追加日時を元にクーポンコード・期限を返すメールスクリプト型のマイトークンを使う

■実現手順詳細

  1. キャンペーン追加日時を保持するために、日時型のLeadのカスタムフィールドを作成。ここでは「ECリピータ促進PGクーポン発行日(API名:ecRepeatPgCouponIssueDate)」としました(長!)。
  2. プログラムのマイトークン2つ作成(参考:マイトークンを管理する)。いずれもメールスクリプト型とする。長いので詳細は文末参照。
    1. クーポンコード:{{my.coupon_code}}
    2. クーポン期限:{{my.coupon_expiration}}
  3. キャンペーンのフローの最初で上記フィールドに「{{system.dateTime}} 」トークンをセットします。これは現在日時を表すシステムトークンです。(こちら参照。)
  4. メール中に上記のマイトークンを埋め込む

■余談・補足

  • メールスクリプト型のマイトークンはメールアセットでの使用のみが想定されており、フローステップやランディングページでは利用できません(サポートの方に確認済み。)。#最初この方法やろうとしてハマりました。
  • メールスクリプトの構文についてはこちらを参照。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}

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.