【第218回】 REST API を使ってすべてのエントリー情報を一括で取得する方法
現在アクティブ化されているジャーニーにおいて、どのデータエクステンションがエントリーソースとして使用されているのか、またそのジャーニーのスケジュール設定がどうなっているのか、気になったことはありませんか?
Salesforce Marketing Cloud において、それらを一括で閲覧できる便利な画面があればいいのに、と思ったことがある方もいらっしゃるかもしれません。
今回は、私の過去の記事「REST API を使ってすべての SQL クエリを一括で取得する方法」で紹介した技術を活用し、Journey Builder のエントリーソースにアクセスして、データエクステンション名やスケジュール設定を一括で取得する方法をご紹介します。
最終的には、すべてのエントリーソースの情報を、以下のようなエクセルで閲覧できるようにします。
■ 事前準備
■ 使用する API の紹介 - GET: イベント定義
さて、今回取得するエントリーソースの設定情報は、「イベント定義」と呼ばれるものに含まれます。この「イベント定義」とは、今回の目的であるエントリーソースに限らず、例えば Wait Until Event のようなイベントトリガーによって待機解除される待機アクティビティなどでも利用される設定情報を指します。そのため、これらのイベント定義も今回の取得対象に含まれることを少し意識しておくと良いでしょう。
今回使用する API は、以下のヘルプドキュメントで紹介されています。しかし、提供されている情報がやや不足しているため、実際の利用時に役立つポイントや補足情報を加えながら解説していきます。
イベント定義が作成・更新さしてタイミングとは
エントリーソースのイベント定義は、「新規作成」または「更新」のいずれの場合でも、ジャーニーを「保存」したタイミングとなります。つまり、ジャーニーのドラフトで単にエントリーソースを配置し、設定しただけでは、イベント定義としては、まだ完成していません。
また、1 つのジャーニーに対して、必ずしも 1 つのイベント定義というわけではありません。例えば、同じジャーニー上でエントリーソースを作成して保存し、その後、削除して再作成するといったサイクルを繰り返すたびに、新しいイベント定義が作成されます。この時、削除されたイベント定義は画面上からは見えなくなりますが、バックエンドで履歴として残り続けます。そして、この履歴に保存期限は設定されていませんので、永久に取得対象になります。たとえジャーニーを削除したとしても消えません。
▶ REST API を使用して取得する主要なフィールドを補足しておきます。
1. id、eventDefinitionKey
これらは、イベント定義が作成される際に自動的に生成される、イベント定義固有の id と Key です。
2. dataExtensionId
これは、データエクステンションの外部キーとは異なります。イベントに関連付けられたデータエクステンションに固有のデータエクステンション ID であり、MC 画面からは取得できない ID となっています。
3. type
type とは、イベント定義の「種別」を指します。前述の通り、イベント定義はエントリーソースのものに限られません。この type を使用して、API にパラメーターを付与することでフィルタリングが可能です。
以下は主要な type の例です:
4. sourceApplicationExtensionId
これは上のイベント定義のタイプ(type)に対して固有の ID を指します。ただし、特に使用する機会はほとんどありません。
5. category
Audience カテゴリーと Event カテゴリーの 2 種類があります。
Audience:EmailAudience と AutomationAudience のタイプが含まれます
Event:Audience カテゴリー以外のイベント定義はこの Event になります
データを取得する際の目的に合わせて、この category をパラメーターに追加して、まずは大きく二分することをオススメします。
今回の記事では「どのデータエクステンションがエントリーソースとして使用されているのか」という目的になりますので、category=Audience のパラメーターを使用したいと思います。
6. iconUrl
従来と使い方が異なると思いますが、"API Event" type において、iconURL に "/images/icon_journeyBuilder-event-api-blue.svg" が入っている場合は、エントリーソースの API Event を指します。一方、例えば、イベントトリガーによって待機解除される待機アクティビティである Wait Until Event アクティビティの場合には "/images/xxx.svg" と入力されています。
7. name
エントリーソースのイベント定義の場合には、name はジャーニー名を指します。ただし、この名前は、エントリーソースが維持されている時点で最後に命名されていたジャーニー名が履歴として保存されます。
このように、同じドラフト上で作業していても、name が異なるケースが発生することがありますので注意して下さい。また、この name を使用して、API にパラメーターを付与することでフィルタリングが可能です。
8. dataExtensionName
エントリーソースで選択されているデータエクステンションの名前が表示されます。ただし、残念ながら、この dataExtensionName を使用して API にパラメーターを付与することでフィルタリングを行うことはできません。
9. interactionCount
これは、イベント定義がバージョンを超えて何回アクティブ化されたかをカウントしています。ただし、この情報を特に使用する機会はほとんどありません。
10. publishedInteractionCount
この publishedInteractionCount は重要なフィールドで、現在アクティブ化されているジャーニーかどうかを示しています。
1(True):現在アクティブ化されているジャーニー
0(False):現在アクティブ化されていないジャーニー
ただし、残念ながら、この publishedInteractionCount を使用して API にパラメーターを付与してフィルタリングすることはできません。後にエクセルで開いた時に、エクセル上でフィルタリングしてください。
11. metaData.scheduleFlowMode
このフィールドには、スケジュールの実行モードが含まれます。
一回実行(run once)
定期実行(recurring)
Automation Studio トリガー(automation)
※まだ、スケジュールが設定されていない場合は NULL になります。
12. metaData.runOnceScheduleMode
scheduleFlowMode が「一回実行」の場合のスケジュールモードが含まれます。
特定の日時(onSchedule)
アクティベーション時(onPublish)
※ scheduleFlowMode が「定期的」「オートメーション」 の場合は NULL になります。
13. metaData.criteriaDescription
エントリーソース設定時に、フィルター設定した場合にこちらにその条件がテキスト表示されます。エントリーソースにフィルター条件がかかっているジャーニーを探す際に重宝します。
■ REST API の設定方法
それでは、まず Talend API Tester で以下の設定を行ってください。
--- メソッド
GET
--- エンドポイント
https://[REST ベース URL].rest.marketingcloudapis.com/interaction/v1/eventDefinitions?$page=1&$pagesize=10000&category=Audience
--- ヘッダー
Content-Type:application/json
Authorization:Bearer [アクセストークン]
注意点
GET メソッドであるため、ボディの入力は不要です。
$page=1&$pagesize=1000 のようなページサイズのパラメーターを入力しない場合は、デフォルトで最大 50 個のイベント定義が取得されます。
category=Audience パラメーターを入力すると、エントリーソースがデータエクステンションのものに限定して取得されます。
■ JSON ファイルの取得と処理
これを Talend API Tester で実行すると、イベント定義が JSON 形式で取得できます。私のデモ環境では、349 件のイベント定義が取得できました。
次に、この JSON をダウンロードしてください。
「eventDefinitions.json」という名前の JSON ファイルがダウンロードできたと思います。
この JSON ファイルが取得できたら、エクセルを「新規」で開き「データ」タブをクリックします。
続いて、「データの取得」から「ファイルから」→「JSON から」を選択すると、参照が開きますので、先ほどダウンロードした JSON ファイルを選択してください。
すると、Power Query エディターが自動的に立ち上がるので、List の部分をクリックしてください。
下記画面になったら、「テーブルへの変換」をクリックします。
以下のポップアップが表示されますが、デフォルトのまま OK をクリックして先に進んでください。
続いて、下記の赤枠のアイコンをクリックしてください。
ここで、列の選択画面が出ますので、今回は以下の 5 つを選択して OK をクリックしてください。
続いて、metadata の右側にある下記の赤枠のアイコンをクリックします。
ここでは、以下の 3 つを選択して OK をクリックしてください。
最後に、schedule の右側にある下記の赤枠のアイコンをクリックします。
ここでは、以下の 6 つを選択して OK をクリックしてください。
以上です。現在、最終的に展開されるプレビューが表示されていると思いますので、「閉じて読み込む」ボタンから「閉じて読み込む」をクリックしてください。
これで、349 個の イベント定義がエクセルで 1 行ごと展開されました。
完成です。このエクセルの表示順は、古いジャーニーから並んでいます。
■ 追加 Tips
もし、現在アクティブ化しているジャーニーだけに絞りたい場合は、エクセルのフィルター機能を使って、publishedInteractionCount を 1 でフィルタリングしてみて下さい。
さらに、schedule.endDateTime を昇順に並び替えて、本日以降のスケジュールを探してください。それらが、ジャーニーがアクティブ化されており、本日以降に実行が予定されているジャーニーの一覧になります。👈😄
いかがでしたでしょうか。
今回紹介した方法で、REST API を使って Salesforce Marketing Cloud の Journey Builder のエントリーソースにアクセスして、データエクステンション名やスケジュール設定を一括で取得し、効率的に管理できるようになりましたね。ぜひ、この方法を積極的に活用してみてください。
今回は以上です。