メインコンテンツへスキップ
見出し画像
Photo byakisuke0925

【第228回】 AMPscript によるエラーハンドリング:RaiseError 関数

    Nobuyuki Watanabe

    今回の記事では、配信時のエラーハンドリングにおいて重要な役割を果たす RaiseError 関数について解説します。この関数を使用することで、空のパーソナライゼーション変数や無効なデータ、不足しているデータが含まれている場合に、メールの送信をスキップすることが可能です。

    理想的には、RaiseError 関数を使わずに済むような設計をするのが望ましいですが、より安全なメール送信を実現したい場合は、この関数の活用を検討してみてください。


    ■ RaiseError 関数の構文

    RaiseError ('エラー時に表示されるテキスト') <--- 現在、正しく使用できません
    RaiseError ('エラー時に表示されるテキスト', False) <--- 現在、正しく使用できません 
    RaiseError ('エラー時に表示されるテキスト', True)

    ■ RaiseError 関数の使用例

    データが見つかった場合は、Event_Data データエクステンションから「イベント名」を取得して表示し、データが見つからなかった場合は、その購読者への送信をスキップします。

    %%[
    SET @event = Lookup('Event_Data', 'Event', 'Id', _SubscriberKey)
    
    IF EMPTY(@event) THEN
        RaiseError(CONCAT("Event not found for the given SubscriberKey: ", _SubscriberKey), true)
    ELSE
        /* データが存在する場合は値を出力する */
        SET @message = CONCAT("イベント名: ", @event)
    ENDIF
    ]%%
    
    <!-- データが見つかった場合、@message を表示 -->
    %%=v(@message)=%%

    ■ False で設定した場合

    第 2 引数で False を指定した場合、ジョブ全体がエラーで停止します。引数を何も記載しない場合も False 扱いになります。

    この設定では、エラーが発生した時点で送信が中止され、それ以降の購読者にはメールが送信されません。ただし、エラーが発生するまでは正常に送信される点に注意してください。

    ⚠️ 2022 年 ~ 現在まで、第二引数で False を指定しても、送信エラーとならず、再試行(次の購読者へ送信が継続)される不具合が発生しています。つまり、True と同じ挙動になりますので注意して下さい。

    以下の「既知の問題」が解決されることで解消される予定だそうです。

    ~~~~~
    ヘルプドキュメントには RaiseError の第二引数を False にした場合にはエラーが発生した購読者以降のジョブと停止すると記載がございますが、内部的にリトライ処理が行われ直ちにジョブが中断することなく後続の処理が継続する状況でございました。

    ヘルプドキュメントとの動作の差異があることについては弊社内でも認識しており見直しが検討されております。下記の Known Issue にても共有をしており、本内容を継続的にフォローアップされたい場合につきましては下記のフォローをいただけますと幸いです。
    ~~~~~

    ◆ 既知の問題:RaiseError AMPScript function unexpected behavior with email send error threshold
    https://issues.salesforce.com/issue/a028c00000j5kCwAAI/

    • Email Studio 送信では、トラッキングのジョブのステータスは「イン・プログレス」と表示された後、ジョブが停止され次第「キャンセル」となります。

    • ジョブが停止して送信されなかった購読者は、何も試行されていないため「Not Sent Extract」には記録されません。

    • AMPscript 内で設定している「エラー時に表示されるテキスト」の部分は、プレビューとテストの「プレビュー時に」表示されます。

    画像
    • アラートマネージャー を設定しておくことで、エラー発生時に送信されてくる "Email Send Job Canceled" というメールの「Additional Error details」欄に表示されます。

    画像

    ▶ 他のアラートマネージャーによるエラーの一覧はこちら


    ■ True で設定した場合

    第 2 引数で True を指定すると、エラーが発生した購読者のみが除外され、ジョブ自体は停止せずに後続の購読者へメールが送信され続けます。

    • Email Studio 送信では、トラッキングのジョブのステータスは「イン・プログレス」と表示された後、「完了」と表示されます。

    • Email Studio 送信の場合は、エラーが発生して送信されなかった購読者の数は画面では確認ができませんが、Jounrey Builder 送信の場合は、トラッキングの画面にその総数が表示されます。

    画像
    • 送信されなかった購読者は、Automation Studio の「Not Sent Extract」に記録され、送信失敗の理由は「Send Failure」となります。ただし、この「Not Sent Extract」のレポートに AMPscript 内で設定している「エラー時に表示されるテキスト」は表示されません。

    • AMPscript 内で設定している「エラー時に表示されるテキスト」の部分は、プレビューとテストのプレビュー時に表示されます。

    画像
    • True の場合は、False の場合と異なり、アラートマネージャーを設定していても、"Email Send Job Canceled" というメールは送信されません。


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

    RaiseError 関数を使うことで、安全性の高い運用が可能となりますが、最適な運用方法は、あらかじめデータの検証や整備を行い、可能な限りエラーを発生させないように設計することになりますので、この AMPscript に頼らないようにしましょう。

    また、現在の仕様において False の挙動に不具合がある点も重要な注意事項です。False の設定で想定外の動作が起きないように注意してください。

    今回は以上です。


    Click here for English version

    次の記事はこちら

    前回の記事はこちら

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

     
     
     
    Salesforce Marketing Cloud、Agentforce、Data Cloud、Salesforce 認定資格に関する実践的な情報を発信しています。これらの記事が、皆さまの学習や日々の業務に少しでもお役に立てば幸いです。