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

【第146回】 すべての購読者の「購読者ステータス」を一括置換するスクリプト

    Nobuyuki Watanabe

    Salesforce Marketing Cloud において、すべての購読者の「購読者ステータス」を他のステータスに一括で置換したいという要望はありませんか?

    例えば、以前に「保留(Held)」の購読者ステータスに関する記事を書いたのですが、そこで説明した通り、購読者のメールアドレスが変更された際に、該当する購読者の「保留」ステータスを、一括で「アクティブ化」するようなケースがあるかと思います。


    「購読者ステータス」の一括置換

    このような場合は、すべての購読者リストにインポートで対応することもできますが、以下のようなスクリプトを Automation Studio のスクリプトアクティビティで構成することで、簡単に一括で置換することができます。

    画像
    <script runat="server">
    Platform.Load("core", "1");
    
    // データエクステンションの「外部キー」を指定
    var dataExtensionExternalKey = "1C99315A-F4A7-4F48-B06D-EAE9BD0A0FDF";
    
    // データエクステンションを初期化
    var dataExtension = DataExtension.Init(dataExtensionExternalKey);
    
    // データエクステンションからすべてのレコードを取得(※フィルター無し)
    var data = dataExtension.Rows.Retrieve();
    
    // レコードをループして購読者のステータスを変更
    for (var i = 0; i < data.length; i++) {
        var subscriberKey = data[i].Subscriberkey; // 「SubscriberKey」を取得
    
        var subscriber = {
            SubscriberKey: subscriberKey,
            Status: "Active" // ステータスを指定(例: アクティブに置換する場合)
        };
    
        // Subscriber オブジェクトを初期化して購読者のステータスを更新
        var subObj = Subscriber.Init(subscriberKey);
        var updateStatus = subObj.Update(subscriber);
    
    }
    </script>

    このコードの中で皆さんが変更する必要があるのは、以下の 2 つのみです。

    ① データエクステンションの「外部キー」
    ② データエクステンション内の 購読者キーの「項目名」


    ・ 上記は、購読者キーの項目名が「Subscriberkey」だった場合を想定しています。「var subscriberKey = data[i].XXXXX」の「XXXXX」の部分で指定していますので、皆さんのデータエクステンションの項目名に合わせて変更して下さい。この購読者キーの項目名は、大文字・小文字が区別されます。記載ミスが有っても、スクリプトエラーは発生しません。

    ・ 上記は、アクティブのステータスに置換する例ですが、購読取り消し済みのステータスに置換したい場合は、「Active」の部分を「Unsubscribed」に変更して下さい。「Unsubscribe」のように、最後の「d」を忘れて記述するとスクリプトは、エラーとなります。

    ・ 「Bounced」でもスクリプトは成功しますが、ステータスは、バウンスにならず、アクティブ化されてしまいます。一方で、「Held」の場合は、保留(配信停止)に変わります。「Held」にする使用例としては、他の MA ツールから乗り換えを行う場合に、ハードバウンスの購読者がいる場合は、このステータスに置き換えることができます。

    ・ Rows.Retrieve() の上限が 2,500 レコードのため、大量に処理する場合は、ランダムデータエクステンションを使って、2,000 レコード程度に減らした上で分割処理するか、インポートアクティビティを使ってステータスの一括置換を行って下さい。

    ・ スクリプトの処理時間の目安としては、100 レコードで 1 ~ 2 分程度です。インポートに比べて、処理方法は簡易ですが、大量処理をする場合、タイムアウト(30 分)を起こす可能性があります。

    ・ 上記は、フィルター機能を使わずに、データエクステンション内の「すべての」レコードを取得して一括置換する例になります。フィルターを使う例は、別の記事で作成しました。下記を参照して下さい。

    データエクステンションの「外部キー」は以下の箇所から取得できます。

    画像

    これにより、データを FTP などを経由させることなく、すべての購読者のステータスを置換することが可能になりますね。

    このようなスクリプトアクティビティを扱う場合は、最初は少量のテストデータで試験を行い、問題なく稼働することを確認してから、本番データで実行することをオススメします。


    「HTML プリファレンス」の一括置換

    また、あるデータエクステンションに格納されている複数の購読者の「HTML プリファレンス」をデフォルトの「HTML」から「TEXT」に一括で置換したり、「HTML」へ戻したりすることも可能です。

    この場合は「Status」の代わりに「EmailTypePreference」を使用します。

    <script runat="server">
    Platform.Load("core", "1");
    
    // データエクステンションの外部キーを指定
    var dataExtensionExternalKey = "1C99315A-F4A7-4F48-B06D-EAE9BD0A0FDF";
    
    // データエクステンションを初期化
    var dataExtension = DataExtension.Init(dataExtensionExternalKey);
    
    // データエクステンションからすべてのレコードを取得
    var data = dataExtension.Rows.Retrieve();
    
    // レコードをループして購読者のステータスを変更
    for (var i = 0; i < data.length; i++) {
        var subscriberKey = data[i].Subscriberkey; // SubscriberKeyを取得
    
        var subscriber = {
            SubscriberKey: subscriberKey,
            EmailTypePreference: "Text" // HTML プリファレンスを指定(HTML/Text)
        };
    
        // Subscriber オブジェクトを初期化して購読者のステータスを更新
        var subObj = Subscriber.Init(subscriberKey);
        var updateStatus = subObj.Update(subscriber);
    
    }
    </script>

    ちなみに、この「HTML プリファレンス」をテキスト側に切り替えると、以後、その購読者はマルチパート MIME としての送信時に「プレーンテキスト」版のメッセージのみを受信するようになります。

    もし、「Status」と「HTML プリファレンス」を同時に更新したい場合は、以下のように設定します。(「アクティブ」かつ「HTML」にする場合。)

        var subscriber = {
            SubscriberKey: subscriberKey,
            Status: "Active", // 👈️ このカンマをお忘れなく!
            EmailTypePreference: "HTML" 
        };

    全体通して更新がされない場合は、以下の 2 つが正しいか確認して下さい。
    ■ データエクステンションの「外部キー」
    ■ データエクステンション内の 購読者キーの「項目名」

    今回は以上です。


    Click here for English version

    次の記事はこちら

    前回の記事はこちら

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

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