見出し画像

【第538回】 Marketing Cloud Next : AMPscript の IF 文による画像出し分け

Marketing Cloud Next Growth & Advanced Editions における Summer ’26 新機能リリース で、ついに AMPscript が登場しました。

現時点では Marketing Cloud Engagement に比べて、いくつかの重要な関数が使えないものの、IF 文(条件分岐)も利用できますので、AMPscript による動的コンテンツ的な表現を行うことも可能です


IF 文

IF 文とは、条件に応じて表示内容を切り替えるための「条件分岐」です。

例えば、以下のサンプルでは変数 @test に固定値として "True" を設定し、その値によって表示内容を切り替えています。

%%[
SET @test = "True" 
IF @test == "True" THEN
]%%

Condition met!

%%[ELSE]%%

Condition not met.

%%[ENDIF]%%

この例では "True" を固定で指定しているため、常に「Condition met!」が表示されます。「" "」で囲うと固定の文字列扱いになります。

重要:AMPscript のブロックは、ビジュアルエディターのパラグラフコンポーネントに配置してしまうと、エラーが発生して送信やプレビューができなくなります。必ず HTML コンポーネントに配置するようにしてください

実際の運用では、固定値の代わりに「データグラフ」や「コンテンツ変数」の値を利用します

例えば、「データグラフ」の場合

SET @test = $dataGraph.Favorite_Genre__c

「コンテンツ変数」の場合

SET @test = $content.Favorite_Genre

のように動的な値を取得することで、顧客ごとに異なるコンテンツを表示できるようになります。


サンプルコード

今回は、データグラフ内の「Favorite Genre」という項目の値に応じて、画像を動的に表示する例です。

対象となる「Favorite Genre」の値は、以下の4つです。

  • Rock

  • Jazz

  • Pop

  • Classical

%%[IF $dataGraph.Favorite_Genre__c == "Rock" THEN]%%

<div>
    <img alt="Rock"
         src="/https://nac-plus.cdn.salesforce-experience.com/cms/delivery/media/MCEHNOMYTGGBDAXCHLSRMCVCGNEY?channelId&#61;0apgC000000BcYE&amp;oid&#61;00DgC0000024nxA"
         style="width:100%;display:block;"
         width="568">
</div>

%%[ELSEIF $dataGraph.Favorite_Genre__c == "Jazz" THEN]%%

<div>
    <img alt="Jazz"
         src="/https://nac-plus.cdn.salesforce-experience.com/cms/delivery/media/MCP4LDVOJKOVFJBIC4QIZC52Z4YY?channelId&#61;0apgC000000BcYE&amp;oid&#61;00DgC0000024nxA"
         style="width:100%;display:block;"
         width="568">
</div>

%%[ELSEIF $dataGraph.Favorite_Genre__c == "Pop" THEN]%%

<div>
    <img alt="Pop"
         src="/https://nac-plus.cdn.salesforce-experience.com/cms/delivery/media/MCBFUZ5WF34FBMVHBHCXPGTCBUG4?channelId&#61;0apgC000000BcYE&amp;oid&#61;00DgC0000024nxA"
         style="width:100%;display:block;"
         width="568">
</div>

%%[ELSEIF $dataGraph.Favorite_Genre__c == "Classical" THEN]%%

<div>
    <img alt="Classical"
         src="/https://nac-plus.cdn.salesforce-experience.com/cms/delivery/media/MCRGSXERQVOBFRHOEZVV5TAD4QQY?channelId&#61;0apgC000000BcYE&amp;oid&#61;00DgC0000024nxA"
         style="width:100%;display:block;"
         width="568">
</div>

%%[ELSE]%%

<div>
    <img alt="Other"
         src="/https://nac-plus.cdn.salesforce-experience.com/cms/delivery/media/MCKI6HMM4EZZC2REX4HAEVJSREMU?channelId&#61;0apgC000000BcYE&amp;oid&#61;00DgC0000024nxA"
         style="width:100%;display:block;"
         width="568">
</div>

%%[ENDIF]%%

注意

  • 各画像のタグを <div> で囲う必要があります。

  • CMS にアップロードした画像の URL を取得する方法は こちら から。

ここで、「参照コンテンツブロックの関数は使えないのか?」と疑問に思う方もいるかもしれません。

公式のリファレンス では、以下の関数が利用できるように見えます。

  • ContentBlockById():コンテンツブロックを ID 指定で取得

  • ContentBlockByKey():コンテンツブロックを Key 指定で取得

  • ContentBlockByName():コンテンツブロックを名前指定で取得

しかし、私の調査では、これらは現時点ではまだ利用できません。

理由として、AMPscript をビジュアルエディターに配置すると、コードビューでは自動的に、以下の Handlebars 形式へ変換されます。

  • ContentBlockById() ⇒ getContentBlockByContentKey

  • ContentBlockByKey() ⇒ getContentBlockByContentKey

  • ContentBlockByName() ⇒ getContentBlockByApiName

ただし、これらの Handlebars 関数は、現時点で存在せず、サポートされていないようです。今後利用できるようになる可能性はありますが、現時点では内部エラーが発生します。

現在、Handlebars で利用できるコンテンツ関数は getContentBlock key のみです。Handlebars は大文字・小文字を区別するので注意が必要です。

そのため、

%%=ContentBlockByKey("MCMQ7DESJCTNCTHGD63VCEILTLQI")=%%

の代わりに、以下のように Handlebars で書けばよいのではないか、と思う方もいるかもしれません。

{{getContentBlock key="MCMQ7DESJCTNCTHGD63VCEILTLQI"}}

これは半分正解です。

この書き方であれば一応動作します。ただし、この関数で呼び出せるのはテキストのみです。画像や HTML タグなどは呼び出されません

そのため、現時点では、画像の動的コンテンツ化という意味では、IF 文の中で参照コンテンツブロックを使うことはできないと考えています。

今回の例で img タグを直接記述しているのは、そのためです。

配信対象を変えることで、画像が変更されることも確認できました。


いかがでしたでしょうか。

個人的に、Summer '26 の新機能により、これまでコードエディターのみだった作業を ビジュアルエディター上でも対応できるようになったことは、想像以上に大きなアップデートであったと思っています。加えて、AMPscript と Handlebars を組み合わせて利用できる点も大きなメリットです。

Marketing Cloud Next では、AMPscript で記述したコードが内部的には Handlebars に変換されて処理されている ことも理解しておきたいポイントですね。

このことにより、AMPscript の構文としてサポートされるとされていても、変換先となる Handlebars 側でサポートされていない機能については、現時点では利用することができない形になります。

今回紹介した参照コンテンツブロック関連の以下の 3 つの関数については、将来的にサポートされる予定であることが明言されています

  • ContentBlockById():コンテンツブロックを ID 指定で取得

  • ContentBlockByKey():コンテンツブロックを Key 指定で取得

  • ContentBlockByName():コンテンツブロックを名前指定で取得

これらが利用可能になれば、より柔軟なコンテンツ管理や条件分岐が実現できるようになるでしょう。併せて、画像をサポートすればですが・・・

利用できるようになった際には、改めて検証結果を共有したいと思います。

今回は以上です。


次の記事はこちら

前回の記事はこちら

私の note のトップページはこちら