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

【第478回】 すべての購読者リストに保留ステータスの購読者を登録する方法

    Nobuyuki Watanabe

    Marketing Cloud Engagement では、保留(Held)ステータスの購読者を通常のインポート機能で作成・更新することはできません。

    ※ 保留とバウンスは Automation Studio でインポートすると、無効なコンテキストステータスとしてエラーになります。

    ただし、以下のスクリプトを利用することで、保留ステータスの購読者を All Subscribers(すべての購読者リスト)へ登録することが可能です。

    <script runat="server">
    Platform.Load("core", "1");
    
    var dataExtensionExternalKey = "CD3226AE-FA46-4278-AF4C-5B3B1D275803";   // DEの外部キー
    var de = DataExtension.Init(dataExtensionExternalKey);
    var rows = de.Rows.Retrieve();
    
    var prox = new Script.Util.WSProxy();
    
    for (var i = 0; i < rows.length; i++) {
        var subscriberKey = rows[i]["SubscriberKey"];   // DEの項目名
        var emailAddress  = rows[i]["EmailAddress"];    // DEの項目名
    
        if (!subscriberKey || !emailAddress) {
            continue;
        }
    
        var subscriberObj = {
            SubscriberKey: subscriberKey,
            EmailAddress: emailAddress,
            Status: "Held"
        };
    
        var options = {
            SaveOptions: [
                {
                    PropertyName: "*",
                    SaveAction: "UpdateAdd"
                }
            ]
        };
    
        try {
            var result = prox.updateItem("Subscriber", subscriberObj, options);
            Write("<br>OK: " + Stringify(result));
        } catch (e) {
            Write("<br>ERROR: " + Stringify(e));
        }
    }
    </script>
    画像

    皆さんが変更する箇所は、以下の 3 点のみです。

    • DE の外部キー

    • DE の項目名:SubscriberKey

    • DE の項目名:EmailAddress

    UpdateAdd は Upsert を意味しており、存在すれば更新、存在しなければ新規追加 という動作になります。

    そのため、処理の流れは以下の通りです。

    処理ロジック

    1. SubscriberKey をキーとして All Subscribers を確認

    2. 対象の購読者が存在する場合
      → Update(更新)

    3. 対象の購読者が存在しない場合
      → Add(新規作成)

    なお、SubscriberKey と EmailAddress は必須項目です。
    以下のような形でデータエクステンションを用意してください。

    画像

    スクリプトを実行すると「保留」ステータスでインポートされます。

    画像

    このスクリプトを利用する際の注意点

    大量件数を処理する場合、このコードはやや注意が必要です。

    まず、Rows.Retrieve() で取得できる件数には上限があり、最大 2,500 件までです。
    また、このスクリプトは 1 件ずつ API を呼び出して処理しているため、件数が増えるほど処理時間が長くなります。

    そのため、件数が多い場合は以下のようなリスクがあります。

    • 処理完了までに時間がかかる

    • Automation Studio の 30 分制限(オートキル) に近づく

    • 途中で停止する可能性がある

    ただし、1 件ずつ順番に処理されるため、途中で停止した場合でも、停止する前までに処理されたレコードは登録済みとなります。

    実際には、2,500 件は 30 分以内に収まるかどうかギリギリのラインです。
    そのため、ランダムデータエクステンションなどを使って 2,000 件程度ずつに分割して実行するなど、件数を小分けにして運用することをおすすめします。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

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

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