AlteryxからSalesforce PardotへのAPIアクセス
こんにちは。DI部の兼本です。
本エントリもよくお客様からお問い合わせをいただくご質問のひとつです。
前回は「Salesforce Input」ツールを使用してSalesforce.comにアクセスをしましたが、専用のツールが提供されていない場合はどうすればよいでしょうか。
そのような時のためにAlteryxには「ダウンロード」ツールが用意されています。
「ダウンロード」ツールの基本的な使い方については別エントリをご覧いただくとして、今回はPardotへのアクセスにフォーカスします。
やってみた
API仕様は以下のサイトで確認できますが、Pardot APIでは最初にログインしてAPI Keyを取得した後、クエリを実行する必要があるようです。
(外部リンク):Official Pardot API Documentation
API Keyは1時間有効ということなので、ワークフロー実行時に毎回API Keyを取得するのが良さそうです。
今回は例としてPardot API Version4を使用して、Prospect(見込み客)の一覧を取得するクエリを実行してみます。
API Keyの取得
最初にPardotのAPI Keyを取得します。API Keyは以下のURLにemail, password, user_keyの3つのパラメータを渡すことで取得できます。
POST: https://pi.pardot.com/api/login/version/3
これをAlteryxのワークフローで表現すると以下のようになります。
最初の「テキスト入力」ツールには上記に記載した認証用のURL、ログインするPardotユーザのメールアドレス、パスワード、user_keyをそれぞれフィールドとして用意します。
次の「ダウンロード」ツールでは用意したlogin_urlに対して、email、password、user_keyの3つのパラメータをPOSTしています。
これを実行するとXML形式でapi_keyを含むデータが返されるので、これを「XMLパース」ツールで取り出します。
最後の「選択」ツールでは、取り出したapi_key以外の不要なデータを削除しています。
これでクエリの実行に必要なapi_keyを取得することができました。
クエリの実行
さて、それでは続いてprospectを取得するクエリを実行してみます。今回の例では先月作成されたprospectをid順にソートして取得します。
実際には以下のURLを使ってクエリを実行します。このURLに先ほど作成したapi_keyとuser_keyをつけてPOSTすることで、結果を得ることができます。
https://pi.pardot.com/api/prospect/version/4/do/query?created_after=last_month&sort_by=id
ワークフローはこんな感じになります。
ワークフロー左に配置した「フィールド付与」ツールのターゲット(T)の入力には、先程作成したapi_keyを受け渡すようにしています。
また、左下に配置した「テキスト入力」ツールにはクエリ用のURLをquery_urlフィールドとして登録しており、「フィールド付加」ツールのソース(S)として接続しています。
次の「ダウンロード」ツールではquery_urlにapi_keyとuser_keyを付与した上でPOSTします。結果は先程と同様にXML形式で返されるので、「XMLパース」ツールで取り出すようにします。
このワークフローを実行したところ、無事に期待するデータを受け取ることができました。
が、実際にはもっとデータがあるはずなのに200件しかありません。どうやらPardot APIの仕様で1回のクエリで200件までしかデータを返してくれないようです。
全件数の取得
Pardot APIの仕様を確認したところ、クエリ実行時にoffsetパラメータにオフセット値を付与することで、特定の位置からデータを取得できることが確認できました。全件を取得するにはすべてのデータを取得できるまでオフセット値を移動しながらクエリを繰り返し実行すればよさそうです。
幸い、Pardot APIはクエリ実行時に以下の形式でtotal_resultとして全データ数を返してくれるので、今回はこれを使って全件取得する仕組みを考えます。
<br /><br />... ... ...
total_resultは先程実行したクエリに含まれているので、ここからデータを取り出します。「XMLパース」ツールでターゲットとなる要素を指定することで、欲しい要素のデータを狙い撃ちで取り出すことができます。
ワークフローを再実行して「XMLパース」ツールの出力を確認すると「total_results」というフィールドが追加されていることが確認できました。今回のクエリは現時点で1425件のデータを含んでいます。
次のフェーズでは、このデータを使ってオフセット値を含むURLを作成します。
オフセット値を含むURLの作成
オフセット値を含むクエリを実行するため、最初に作成したquery_urlを以下のように変更します。
https://pi.pardot.com/api/prospect/version/4/do/query?created_after=last_month&sort_by=id&offset=0
Alteryxでの繰り返し処理といえば、Iterativeマクロが有名ですが、今回はマクロを使わずに「行生成」ツールで対応します。
Iterativeマクロ使わなくてもこんな感じでできるZE☆って感じです。
一番左の「行生成」ツールでは入力としてtotal_resultsを受け取り、その結果をもとに200ずつインクリメントするようにしています。こうすることでtotal_resultsに到達するまでオフセット値を作成することができます。(このあたりの処理は要件に合わせて実装していただけると幸いです。)
続いてオフセット値を含むクエリURLの作成をします。これも色々なやり方があると思いますが、今回は「フォーミュラ」ツールを使いました。
query_urlのオフセット値を「行生成」ツールで生成した値に置換するためにReplase()関数を使用し、結果をoffset_query_urlという新しい列に格納します。
Replace([query_url], "offset=0", "offset="+ToString([offset]))
作成したoffset_query_urlを「ダウンロード」ツールに渡して実行し、その結果を「XMLパース」ツールに渡すことで、オフセット値が201以降のデータを取得することができます。
最後に、最初に取得したoffset=0-200までのデータとoffset=201以降のデータを「ユニオン」ツールで結合して、無事にPardotからすべてのデータを取得することができました。
以下は今回作成したワークフローの全体図です。
APIの実行プロセスを紐解いてワークフローにしているため、一見すると複雑な処理に見えますが、実際には比較的単純な処理の繰り返しになっています。
この方法はPardotに限らず、様々なWebサービスとの連携で使えるので、ぜひともマスターしていただければと思います。
まとめ
いかがでしたか。今回はPardotへの接続方法についてご紹介いたしました。
なお、弊社はSalesforce.com社の正式なパートナーではないため、Salesforce.comもしくはPardotに関するご質問はお答えできない場合がございますので、ご了承ください。
また、短時間に高頻度でデータを取得すると取得先のサーバに高い負荷をかけてしまう可能性があるので、必要に応じて「Throttle」ツールなどを使用するようにしてください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。