見出し画像

【第229回】 Extract Not Sent を自動化してデータエクステンションに格納する

以前の記事では、Automation Studio の「Extract Not Sent」機能を使用して、Salesforce Marketing Cloud でメール送信ができなかった購読者の情報を取得し、メール送信ができなかった理由を確認する方法を紹介しました。

そこでは、以下のような CSV データを取得し、Reason 列でメール送信ができなかった理由を確認しました。この CSV データを取得する方法は、簡易に直近 90 日以内のデータを調べるのには適しています。

そこで今回はそのプロセスをさらに進めて、日次でデータを自動的にデータエクステンションに格納する方法について説明したいと思います。

事前にデータエクステンションに格納しておくことで、90 日間を超えてメール送信ができなかったデータを扱えたり、SQL を用いて素早くデータにアクセスし、トラブルシューティングすることが可能になります。

一度設定すれば、あとは自動的に蓄積されていきますので、是非取り組んでみて下さい。


格納用データエクステンションの作成

まずは、格納用のデータエクステンションを作成します。以下の項目を用意して下さい。

  • ClientID : Text(50)プライマリーキー

  • SendID : Text(50)プライマリーキー

  • SubscriberKey : Text(255)プライマリーキー

  • EmailAddress : Text(255)プライマリーキー

  • SubscriberID : Text(50)プライマリーキー

  • ListID : Text(50)プライマリーキー

  • EventDate : Date プライマリーキー

  • EventType : Text(50)プライマリーキー

  • BatchID : Text(50)プライマリーキー

  • TriggeredSendExternalKey : Text(50) ※NULL を許可

  • Reason : Text(50)プライマリーキー

EmailAddress はメールアドレス型ではなく、テキスト型にしてください。なぜなら、Invalid Email Address(無効なメールアドレス)や List Detective が理由で送信できなかった場合、その項目にメールアドレスが入力できず、代わりに「購読者キー」が入力されてくるためです。

また、TriggeredSendExternalKey は Email Studio のメール送信の場合、空欄となりますので、NULL を許可してください。

以下のスクリプトを、スクリプトアクティビティで実行しても OK です。データエクステンションのトップフォルダに「NotSent」というデータエクステンションが作成されます。フォルダを移動して使用してください。

<script runat="server">
    Platform.Load("Core", "1");

    var dataExtensionConfig = {
        "CustomerKey": "",
        "Name": "NotSent",
        "Fields": [

{ "Name" : "ClientID", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "SendID", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "SubscriberKey", "FieldType" : "Text", "MaxLength" : 255, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "EmailAddress", "FieldType" : "Text", "MaxLength" : 255, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "SubscriberID", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "ListID", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "EventDate", "FieldType" : "Date", "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "EventType", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "BatchID", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true }, 
{ "Name" : "TriggeredSendExternalKey", "FieldType" : "Text", "MaxLength" : 50, "IsRequired" : false }, 
{ "Name" : "Reason", "FieldType" : "Text", "MaxLength" : 50, "IsPrimaryKey" : true, "IsRequired" : true } 

        ]
    };

    var createdDataExtension = DataExtension.Add(dataExtensionConfig);
</script>

このデータエクステンションは、以下の技術で作成されます。


Automation Studio の設定

続いて、Automation Studio の Extract Not Sent を実装します。

1. 新規のオートメーションを立ち上げます。

2. オートメーションのステップ 1 に、データ抽出アクティビティをドラッグアンドドロップします。

3. 新規でデータ抽出アクティビティを構成します。

4. ファイルの命名パターンは「*.zip」とする必要があります。* の部分を適当に命名した後、ZIP の拡張子をつけてください。

抽出タイプは「Tracking Extract」を選択してください。もし、この時点で「Tracking Extract」が表示されない方は、テクニカルサポートに依頼してこの機能の有効化をしてください。

この抽出タイプ「Tracking Extract」は、SFTP へ ZIP ファイルで抽出されてきますので、拡張子は「*.zip」とする必要があります

5. 次に条件を設定します。

取得期間は、最大で 直近 90 日間分 のデータが取得できます。タイムゾーンは JST(GMT +09:00)に変更することで EventDate が日本時間で取得されるようになります。タイムゾーンを設定しない場合は、15 時間前の時間で取得されます。最後に「抽出の種別」として、右側のチェックボックスの中から「Extract Not Sent」にチェックを入れます。

ヘルプドキュメントによると「直近 2 ヶ月まで取得できる」となっていますが、実際には 90 日分が取得可能です。

6. 続いて、オートメーションのステップ 2 に、ファイル転送アクティビティをドラッグアンドドロップします。

7. こちらでは「Safehouse からファイルの移動」を選択します。

8. ここでのファイルの命名パターンは、先ほどデータ抽出アクティビティで命名した名前と同じである必要があります。同じ名前を入力してください。また、こちらでも ZIP の拡張子を追加することを忘れずにお願いします。

デスティネーションは ZIP ファイルが格納される FTP のディレクトリを選択してください。後にデータエクステンションにインポートをすることになりますので、インポートディレクトリを選択します。

9. これで FTPのインポートディレクトリに「NotSent.zip」というファイルが格納されるようになりました。次に、この ZIP ファイルを解凍したいと思います。オートメーションのステップ 3 に、ファイル転送アクティビティをドラッグアンドドロップします。

10. ZIP ファイルの解凍の際は、「ファイルの管理」を選択します。

11. 「ファイルの管理」では、以下のように構成します。

12. これで、このファイル転送アクティビティを実行すると、FTP の Import ディレクトリに「NotSent.csv」というファイルが配置されます。

13. 最後に、オートメーションのステップ 4 に、データコピーまたはインポートアクティビティをドラッグアンドドロップして、FTP に配置された「NotSent.csv」を先ほど作成した格納用データエクステンションにインポートしたいと思います。

14. データアクションは「追加と更新」を選択します。マッピングに関しては、格納用データエクステンションの項目とヘッダー行でマッピングをしてください。

「保留」や「購読取り消し済み」により送信ができない場合のレコードも含まれますので、それらも配信対象にしている場合、データ量が多くなることがあります。必要に応じて、データ保持ポリシーを設定して下さい。

15. これで、各アクティビティの設定は完了です。続いて、スケジュールを配置して、日次で自動化する設定を行います。

16. スケジュールを構成し、アクティブ化しますと、すべて完了です。

17. 試しに「一回実行」することで、データエクステンションにデータが格納されたことも確認できましたね。

成功です。


Extract Not Sent リストの注意点

Extract Not Sent リストの注意点をまとめます。参考にしてください。

■ 取得されたリストには Email Studio からのメール送信やトランザクション送信ジャーニーからの送信も含まれます。

■ 最新の未送信レコードの情報がファイルに反映されるまでに、送信から 1 日程度かかる場合があります。

■ SendID は ジョブ ID に該当します。TriggeredSendExternalKey は トリガーによる送信の外部キーに該当します。

■ トランザクション送信ジャーニーの場合、TriggeredSendExternalKey の項目の値には Event Definition Key が記載されます。

■ 1 つの未送信に対して、バッチ ID 違いで購読者のレコードが重複する場合があります。「不達となった購読者の数」を確認しようとしている場合は注意して下さい。


メールを送信できなかった理由

最後に、こちらの「Extract Not Sent」で取得できる「メールが送信できなかった理由」の代表的なものを記載しておきます。参考にしてください。

■ Held
すべての購読者リストで「保留」(配信不能)ステータスになっています。

■ Unsubscribed Master
すべての購読者リストで「購読取り消し済み」ステータスになっています。

■ Account Level Opt Out
購読者がアカウント、エンタープライズ、またはビジネスユニットレベルでグローバルに購読取り消しされています。通常、Unsubscribed Master 行と重複して出現しますので、無視できます。

■ Send Failure
何らかの理由で送信が失敗しました。その原因までは記載されません。

■ Invalid Email Address
メールアドレスに何らかの不正があります。
※例えば、"abc@docomo.ne.j"など 最後の p が欠落している場合など

■ Build Email Error
メールを作成しようとしたときにエラーが発生しました。

■ Excluded by Send Time Filter
除外スクリプトにより、購読者が除外されました。

■ Domain Exclusion
ドメイン除外機能により、除外されているメールアドレスのドメインです。

■ Suppression List Exclusion
連絡禁止リスト・自動連絡禁止リストにより、除外されているメールアドレスです。

■ List Detective Exclusion
List Detective 機能により、除外されているメールアドレスです。

これ以外のメールが送信されない理由が掲載されている場合は、下記ヘルプドキュメントよりご確認ください。

今回は以上です。


Click here for English version

前回の記事はこちら

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

いいなと思ったら応援しよう!