【第478回】 すべての購読者リストに保留ステータスの購読者を登録する方法
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 を意味しており、存在すれば更新、存在しなければ新規追加 という動作になります。
そのため、処理の流れは以下の通りです。
処理ロジック
SubscriberKey をキーとして All Subscribers を確認
対象の購読者が存在する場合
→ Update(更新)対象の購読者が存在しない場合
→ Add(新規作成)
なお、SubscriberKey と EmailAddress は必須項目です。
以下のような形でデータエクステンションを用意してください。

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

このスクリプトを利用する際の注意点
大量件数を処理する場合、このコードはやや注意が必要です。
まず、Rows.Retrieve() で取得できる件数には上限があり、最大 2,500 件までです。
また、このスクリプトは 1 件ずつ API を呼び出して処理しているため、件数が増えるほど処理時間が長くなります。
そのため、件数が多い場合は以下のようなリスクがあります。
処理完了までに時間がかかる
Automation Studio の 30 分制限(オートキル) に近づく
途中で停止する可能性がある
ただし、1 件ずつ順番に処理されるため、途中で停止した場合でも、停止する前までに処理されたレコードは登録済みとなります。
実際には、2,500 件は 30 分以内に収まるかどうかギリギリのラインです。
そのため、ランダムデータエクステンションなどを使って 2,000 件程度ずつに分割して実行するなど、件数を小分けにして運用することをおすすめします。
今回は以上です。
