![見出し画像](https://assets.st-note.com/production/uploads/images/135449453/rectangle_large_type_2_5d14ac389f46f8c0e1da84567b6b24e7.png?width=1200)
【第146回】 すべての購読者の「購読者ステータス」を一括置換するスクリプト
Salesforce Marketing Cloud において、すべての購読者の「購読者ステータス」を他のステータスに一括で置換したいという要望はありませんか?
例えば、以前に「保留(Held)」の購読者ステータスに関する記事を書いたのですが、そこで説明した通り、購読者のメールアドレスが変更された際に、該当する購読者の「保留」ステータスを、一括で「アクティブ化」するようなケースがあるかと思います。
■「購読者ステータス」の一括置換
このような場合は、すべての購読者リストにインポートで対応することもできますが、以下のようなスクリプトを Automation Studio のスクリプトアクティビティで構成することで、簡単に一括で置換することができます。
![](https://assets.st-note.com/img/1712296751733-D9slWYOVt2.png)
<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 分)を起こす可能性があります。
・ 上記は、フィルター機能を使わずに、データエクステンション内の「すべての」レコードを取得して一括置換する例になります。フィルターを使う例は、別の記事で作成しました。下記を参照して下さい。
データエクステンションの「外部キー」は以下の箇所から取得できます。
![](https://assets.st-note.com/img/1711676243294-60xYQSGPWi.png?width=1200)
これにより、データを 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 のトップページはこちら
この記事が気に入ったらサポートをしてみませんか?