見出し画像

【第249回】 REST API を使ってメッセージ内の文字列からメールを探す方法

これまで、Salesforce Marketing Cloud の REST API を活用して、以下のようなデータの取得方法を紹介してきました。

  • Automation Studio の SQL クエリアクティビティの クエリテキスト を一括取得する方法

  • Journey Builder のエントリーソースで使用されている データエクステンションの名前 や スケジュール開始時間 を一括で取得する方法

今回は、Content Builder 内のメッセージに含まれる特定の文字列から、該当するメールを検索する方法を説明したいと思います。


検索の対象範囲

この方法では、AMPscript の文字列も検索対象になりますが、HTML タグは含まれません。つまり、Content Builder の「デフォルト」ビューに表示される文字列 が検索対象となります。

Content Builder の「デフォルト」ビューとは、以下のことを指します。

たとえば、メール本文に以下の AMPscript が含まれている場合を考えます。

%%=ContentBlockById("30810786")=%%

上の図にも、それが同様に含まれていることが分かります。

この場合、「30810786」という文字列を検索すると、この ContentBlockById を使用しているメールを特定できるわけです。また、AND 条件を使用して複数の文字列を組み合わせることで、より詳細に絞り込むことも可能です。

それでは、以下で具体的な REST API の使用方法について解説します。


事前準備

今回の記事では、REST API を使用します。過去の連載「Marketing Cloud REST API 超入門」の Part.1Part.2 で紹介した以下の 2 つが必要です。

■ Part.1 の REST ベース URL
■ Part.2 の アクセストークン

今回、以下のスコープがセットアップで選択されている必要があります。
■ ASSETS - Documents and Images - Read


実装方法

1. シンプルな文字列検索

特定の文字列を検索する場合の方法です。例として、「30810786」を検索するケースを考えます。以下の設定を Talend API Tester または Postman に構成してください。

--- メソッド 
POST

--- エンドポイント
https://[REST ベース URL].rest.marketingcloudapis.com/asset/v1/content/assets/query

--- ヘッダー
Content-Type:application/json 
Authorization:Bearer [アクセストークン] 

--- ボディサンプル
{
  "page": {
    "page": 1,
    "pageSize": 500
  },
  "query": {    
      "property": "content",
      "simpleOperator": "mustcontain",
      "value": "30810786"
  },
  "fields": [
    "id",
    "name"
  ]
}

コード内にある「mustcontain」は複数条件にも対応していますが、単一条件での利用も可能です。

このリクエストを実行すると、以下のような結果が返されます。例として「Sample Email」というテンプレートベースのメールが特定される場合を示します。

実際に「Sample Email」を確認すると、以下の通り「30810786」が含まれていることが確認できます。


2. 複数の文字列検索

続いて、例えば「Unmissable Opportunity」(見逃せないチャンス)というフレーズを使用したメールを特定したい場合、以下の設定を使用します。

--- メソッド 
POST

--- エンドポイント
https://[REST ベース URL].rest.marketingcloudapis.com/asset/v1/content/assets/query

--- ヘッダー
Content-Type:application/json 
Authorization:Bearer [アクセストークン] 

--- ボディサンプル
{
  "page": {
    "page": 1,
    "pageSize": 500
  },
  "query": {    
      "property": "content",
      "simpleOperator": "mustcontain",
      "value": "Unmissable Opportunity"
  },
  "fields": [
    "id",
    "name"
  ]
}

先ほども述べた通り、コード内にある「mustcontain」は複数条件にも対応していますので、このフレーズをそのまま入力します。

このリクエストを実行すると、「Sample Email 2」というテンプレートベースのメールが特定される結果が返されます。

実際に「Sample Email 2」を確認すると、「Unmissable Opportunity」が含まれていることが分かります。


3. コンテンツタイプを条件に加えた複合検索

次に、特定のコンテンツタイプ(例: htmlblock)を条件に加えた検索を行います。最後は、結果を例示しませんが、以下のように記述してください。

--- メソッド 
POST

--- エンドポイント
https://[REST ベース URL].rest.marketingcloudapis.com/asset/v1/content/assets/query

--- ヘッダー
Content-Type:application/json 
Authorization:Bearer [アクセストークン] 

--- ボディサンプル
{
  "page": {
    "page": 1,
    "pageSize": 500
  },
  "query": {
    "leftOperand": {
      "property": "content",
      "simpleOperator": "mustcontain",
      "value": "Spring Sale 2025"
    },
    "logicalOperator": "AND",
    "rightOperand": {
      "property": "assetType.name",
      "simpleOperator": "equal",
      "value": "htmlblock"
    }
  },
  "fields": [
    "id",
    "name"
  ]
}

使用可能な assetType.name の例
- templatebasedemail
- htmlemail
- textonlyemail
- freeformblock
- textblock
- htmlblock
- imageblock
- buttonblock
- layoutblock

すべての assetType.name の詳細については、以下を参照してください。

補足

  • 複数条件の検索ワードは、順不同でも問題ありません
    例:Spring Sale でも Sale Spring でも、結果は同じです。

  • 大文字・小文字の区別はありません
    例:Spring Sale でも spring sale でも、結果は同じです。


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

これにより、あるメールの中で使用されていたフレーズなどを基にメール子コンテンツを探しやすくなりました。トラブルシューティングや、古い本文の内容を変更したい場合に活用できると思います。ぜひお試しください。

今回は以上です。


次の記事はこちら

前回の記事はこちら

私の自己紹介はこちら