見出し画像

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

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

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

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

Salesforce Marketing Cloud を運用している人であれば、超過した連絡先を手動で削除する方法は知っていると思います。送信可能データエクステンションに削除したい連絡先を格納して、Contact Builder でそのデータエクステンションを選択して削除のボタンを押すだけですね。以前にも連絡先の削除に関しては記事にしました。

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

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

私の過去の記事「Salesforce Marketing Cloud で REST API を叩いてみよう」の Part.1 で紹介した、以下の 3 つが必要になりますので、事前に用意して下さい。

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

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

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


それでは手順です。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 = '***' // クライアントベース

「***」の部分に必要な情報をそれぞれ代入しましたら、このスクリプトアクティビティを Automation Studio のスケジュールで定期実行してください。下の図の通り、削除用 DE の外部キーはプロパティー内にあります。

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

一点、注意点があります。手動の削除と異なり、事前に削除される連絡先数を確認することができなくなるため、使用する場合は、削除対象をデータエクステンションに格納する条件について最大限の注意して下さい

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

今回は以上です。


次の記事はこちら

前回の記事はこちら

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

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