見出し画像

【第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 を意味しており、存在すれば更新、存在しなければ新規追加 という動作になります。

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

処理ロジック

  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 のトップページはこちら