見出し画像

【第80回】 Marketing Cloud の連絡先の削除を自動化する方法

Salesforce Marketing Cloud では 従量課金となるものがいくつかあり、代表的なものは ①送信するメッセージごとのスーパーメッセージ数と、②アカウント内で管理する連絡先数があります。つまり、メールなどを送れば送るだけコストがかかりますし、管理する連絡先数が多くなれば多くなるほどコストがかかります。

上記リストは従量課金となるものの各デフォルト値です。

例えば、運用開始当初は 100 万人分の連絡先数になると想定していましたが実際に運用を開始してみたら連絡先が 120 万人になってしまった場合は、購入済み連絡先数をオーバーしてしまったことで、新たに 20 万人分の連絡先を購入するか、すでにオーバーしている 20 万人分の連絡先を削除しなければなりません。

Salesforce Marketing Cloud をある程度、運用している方であれば、超過した連絡先を手動で削除する方法は知っていると思います。

送信可能データエクステンションに削除したい連絡先を格納して、Contact Builder の削除環境で、送信可能データエクステンションを選択して「削除」のボタンをクリックするだけですね

以前に、手動による連絡先の削除に関しては記事にしました。

削除の方針として「連絡先を慎重に削除したい」または「削除するのが頻繁でない」ということであれば、手動による削除でまったく問題ないと思います。ただし、明らかに不要なレコードが頻繁に発生する場合は自動化も試してみてはいかがでしょうか。

本日は、この自動化の方法を記事にしてみたいと思います。

今回の記事では REST API を使用します。

過去の記事「Marketing Cloud REST API 超入門」の Part.1 の記事で取得できる以下の 3 つが必要となりますので、事前に用意してください。

① クライアント ID
② クライアントシークレット
③ クライアントベース

※クライアントベースとは、下の図の箇所に表示されている「https://」と「.auth」の間のコードになります。

以下のスコープが API セットアップで選択されている必要があります。
■ CONTACTS - List and Subscribers - Write


連絡先の削除を自動化する方法

1. それでは Automation Studio のスクリプトアクティビティで、以下のスクリプトを構成してください。

<script runat="server">
  Platform.Load('core', '1')
  var payload, endpoint, response;

  var contactDeletionDEKey = '******************'; // コンタクト削除DEの外部キー
  var clientID = '******************'; // クライアントID
  var clientSecret = '******************'; // クライアントシークレット
  var clientBase = '******************'; // クライアントベース

  var contentType = 'application/json';
  var debugging = false;
  function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
  };
  endpoint = 'https://' + clientBase + '.auth.marketingcloudapis.com/v2/token';
  payload = {
    client_id: clientID,
    client_secret: clientSecret,
    grant_type: 'client_credentials'
  };
  if (debugging) debugValue('Payload', payload);
  try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload));
  }
  catch (error) {
    handleError(error);
  }
  var accessToken = Platform.Function.ParseJSON(response['Response'][0]).access_token;
  if (debugging) debugValue('AccessToken', accessToken);
  endpoint = 'https://' + clientBase + '.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference';
  payload = {
    deleteOperationType: 'ContactAndAttributes',
    targetList: {
      listType: {
        listTypeID: 3 }
      ,
      listKey: contactDeletionDEKey
    }
    ,
    deleteListWhenCompleted: false,
    deleteListContentsWhenCompleted: true
  };
  var headerNames = ['Authorization'];
  var headerValues = ['Bearer ' + accessToken];
  try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload), headerNames, headerValues);
    if (debugging) debugValue('Response', response);
  }
  catch (error) {
    handleError(error);
  }
</script>

■ このコードの中で修正が必要なものは、以下の 4 つです。

var contactDeletionDEKey = '*****';  // コンタクト削除用 DE の外部キー
var clientID = '*****';  // クライアント ID
var clientSecret = '*****';  // クライアントシークレット
var clientBase = '*****'  // クライアントベース

2. 「*****」の部分に必要な情報をそれぞれ挿入しましたら、このスクリプトアクティビティを Automation Studio で定期的に実行してください。

削除用 DE の外部キーは、下記の通り、プロパティーにあります。

以上です。


いかがでしたでしょうか。

この連絡先の削除については、Trailhead にもコードの提供などがあり、意外と充実していますので、そちらも確認してみて下さい。

また一点、注意点があります。

手動の削除と異なり、事前に削除される連絡先数を確認することができなくなるため、使用する際は、削除対象を取得する条件について最大限の確認をして下さい。

すでに Marketing Cloud を運用されている皆さんは分かっていると思いますが、一度連絡先情報を削除してしまった場合、いかなる手段を以っても、その削除された連絡先情報を元に戻すことはできません。入念なテストを行い、自己責任で使用の判断をお願いします

今回は以上です。


次の記事はこちら

前回の記事はこちら

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

この記事が気に入ったらサポートをしてみませんか?