# Salesforce Pardot Export Integration

Treasure Dataから直接Salesforce [Pardot](https://www.pardot.com/)にジョブ結果（見込み客またはリストメンバーシップの形式）を送信して、CRMデータを同期することができます。

Pardotは、マーケティングチームと営業チームがリードを見つけて育成し、より多くの取引を成約し、ROIを最大化するためのマーケティングオートメーションを提供します。

## 前提条件

- Treasure Dataの基本知識
- Salesforce Pardotモデルの基本知識
- 稼働しているSalesforce Pardotアカウント
- ビジネスユニットID


## サポート内容

Salesforce Pardotの見込み客またはリストメンバーシップへのデータ送信をサポートしています。

並列見込み客アップサートをサポートしています。並列タスクの数を増やしてジョブの実行を高速化したい場合は、この機能を使用してください。ただし、アカウントの同時呼び出し制限にご注意ください。

## 要件と制限事項

コネクタを使用するには、適切なSalesforce Pardotプラン（ProまたはUltimate）が必要です。

**見込み客**については、APIの仕様上、Treasure DataはURIの長さを一定の長さまでしかサポートしていないため、**7500文字**を超えるデータを含む行（JSONとしてシリアライズ後）は無効なレコードと見なされます。

**リストメンバーシップ**については、見込み客のオプトアウトはサポートされていません。これは一方向のアクションであり、元に戻すことができないためです。

コネクタは、以下のすべてのPardot APIの制限に準拠しています。

- 日次Pardot API呼び出し制限と同時Pardot API呼び出し制限は、他のPardot API呼び出しと同様にImport API呼び出しにも適用されます。


エクスポート結果の列名は小文字である必要があり、各データオブジェクトのPardotフィールド名に厳密に従う必要があります（大文字と小文字を区別）。

## PardotビジネスユニットIDの取得

PardotビジネスユニットIDを見つけるには、SalesforceのSetupを使用します。PardotビジネスユニットIDは「0Uv」で始まる18文字です。

Pardot Account Setupの情報にアクセスできない場合は、Salesforce管理者にPardotビジネスユニットIDの提供を依頼してください。[https://developer.pardot.com/kb/authentication/](https://developer.pardot.com/kb/authentication/)

Pardotでの認証には、ビジネスユニットIDの入力が必要です。

1. Pardotへのログインに使用するのと同じアカウントを使用してSalesforceにログインします。
2. **Setup** > **Pardot** > **Pardot Account Setup**に移動します。または、Setupから「Quick Find」ボックスに「Pardot Account Setup」と入力します。
![](/assets/image2021-3-31_13-33-35.6bd30abc12c713edb55401b576b622d0d37aff22a9e687ea168e0c7f416f3691.da0a80a2.png)
3. 複数のPardotビジネスユニットがある場合があります。PardotビジネスユニットIDは「0Uv」で始まる18文字です。


## カスタム接続アプリの定義

Treasure Data内でPardot認証を定義するには、カスタム接続アプリ、適切な認可、およびリフレッシュトークンがすべて必要です。

このHTMLページの末尾にある[カスタム接続アプリの使用](/ja/int/salesforce-pardot-export-integration#h2__1765871400)の手順を参照してください。

## 新しい接続の作成

Treasure コンソールでクエリを実行する前に、データ接続を作成して設定する必要があります。データ接続の一部として、以下の手順に従って統合にアクセスするための認証を提供します。

![](/assets/salesforce-pardot-export-integration-2024-10-07-1.460b0e91901872734c88cfd8a06d5e0b7ec3b579cccfe826ff627b9b3e07a2b7.da0a80a2.png)

1. **Treasure コンソール**を開きます。
2. **Integrations Hub > Catalog**に移動します。
3. **Salesforce Pardot**を検索して選択します。
4. **Create Authentication**を選択し、以下で説明する統合の認証情報を入力します。
5. **Continue**を選択し、認証の名前を入力して**Done**を選択します。


### 認証フィールド

| フィールド  | 説明 |
|  --- | --- |
| Pardot Host | Productionアカウントを使用している場合は[https://pi.pardot.com](https://pi.pardot.com)です。Pardot Developer OrgまたはSandboxアカウントの場合は[https://pi.demo.pardot.com](https://pi.demo.pardot.com)です |
| Pardot Business ID | PardotビジネスユニットID |
| Connected App | - （デフォルト）Treasure Data Connected App：`OAuth connection`フィールドでOAuthを提供することで、TDアプリにデータのアップロードを認可します
- Custom Connected App：`Client ID`、`Client Secret`、`Login URL`、`Refresh Token`を提供することで、独自の接続アプリを使用します

 |
| OAuth connection | **Treasure Data Connected App**の場合、**Click here**を選択し、認可フローに従ってOAuthを提供します。続行するには、Integrations Hub Catalogに移動してSalesforce Pardotを検索する必要がある場合があります。 |
| Client ID | **Custom Connected App**の場合、[こちら](/ja/int/salesforce-pardot-export-integration#h2__1765871400)を参照して接続アプリを作成し、対応するフィールドに`Client ID`、`Client Secret`、`Login URL`、`Refresh Token`を入力します |
| Client Secret | 接続アプリのクライアントシークレット |
| Login URL | SalesforceインスタンスのログインURL |
| Refresh token | カスタムアプリの認可後に取得するリフレッシュトークン |


### エクスポート用のクエリ結果の設定

Treasure コンソールは、データをエクスポートする複数の方法をサポートしています。Data Workbenchからデータをエクスポートするには、以下の手順に従ってください。

1. **Data Workbench > Queries**に移動します
2. **New Query**を選択し、クエリを定義します
3. **Export Results**を選択してデータエクスポートを設定します
4. 既存のPardot認証を選択するか、上記のセクションに従って新しい認証を作成します
5. 以下で説明するエクスポートパラメータを設定し、**Done**を選択します


![](/assets/salesforce-pardot-export-integration-2024-10-07-3.a40359868c9799a3b7f1920a5557af09cb115db2d1d1bbdf5f45e4ea7f0d1714.da0a80a2.png)

### 設定パラメータ

| **フィールド** | **説明** |
|  --- | --- |
| Data Objects | `Prospects`（デフォルト）と`List Memberships`の間でターゲットデータオブジェクトを選択します |
| Data Objects = **Prospects** |  |
| Prospect List Operation | デフォルトのアップロードモードは`Batch Upsert`です |
| List ID | 見込み客が追加（または削除）されるリストID。単一のリストIDまたはカンマ区切りのリストID文字列を指定できます |
| Prospect List Operation | 指定されたリストIDに見込み客を追加（または削除）するには、**Add**または**Remove**を選択します |
| Data Objects = **List Memberships** |  |
| List Memberships Operation | **Upsert**または**Delete**を選択します。選択した操作が使用されます |


### 見込み客データオブジェクトの列メタデータ

| 列名 | データ型 | 必須？ | 説明 | 備考 |
|  --- | --- | --- | --- | --- |
| id | Integer | ✅ | この見込み客のPardot ID | 新しい見込み客を挿入する場合はnullのままにする必要があります |
| fid | String | ✅ | Salesforce Leadsと同期する場合のCRM FID | 新しい見込み客を挿入する場合はnullのままにする必要があります |
| email | String | ✅ | 見込み客のメールアドレス | 新しい見込み客を挿入する場合は常に必須です |
| campaign_id | Integer |  | この見込み客に関連付けられたキャンペーンのPardot ID |  |
| salutation | String |  | 見込み客の敬称 |  |
| first_name | String |  | 見込み客の名 |  |
| last_name | String |  | 見込み客の姓 |  |
| password | String |  | 見込み客のパスワード |  |
| company | String |  | 見込み客の会社名 |  |
| prospect_account_id | Integer |  | 見込み客のアカウントID |  |
| website | String |  | 見込み客のウェブサイトURL |  |
| job_title | String |  | 見込み客の役職 |  |
| department | String |  | 見込み客の部署 |  |
| country | String |  | 見込み客の国 |  |
| address_one | String |  | 見込み客の住所（1行目） |  |
| address_two | String |  | 見込み客の住所（2行目） |  |
| city | String |  | 見込み客の市区町村 |  |
| state | String |  | 見込み客の米国州 |  |
| territory | String |  | 見込み客の地域 |  |
| zip | String |  | 見込み客の郵便番号 |  |
| phone | String |  | 見込み客の電話番号 |  |
| fax | String |  | 見込み客のFAX番号 |  |
| source | String |  | 見込み客のソース |  |
| annual_revenue | String |  | 見込み客の年間収益 |  |
| employees | String |  | 見込み客の従業員数 |  |
| industry | String |  | 見込み客の業種 |  |
| years_in_business | String |  | 見込み客の創業年数 |  |
| comments | String |  | この見込み客に関するコメント |  |
| notes | String |  | この見込み客に関するメモ |  |
| score | Integer |  | 見込み客のスコア |  |
| is_do_not_email | Boolean |  | 値が1の場合、見込み客はメール送信を希望しません |  |
| is_do_not_call | Boolean |  | 値が1の場合、見込み客は電話連絡を希望しません |  |
| is_reviewed | Boolean |  | 値が1の場合、見込み客はレビュー済みです |  |
| is_starred | Boolean |  | 値が1の場合、見込み客にスターが付いています |  |
| is_archived | Boolean |  | 値が1の場合、見込み客はアーカイブされています |  |


サンプルクエリ

- list_xxxに見込み客をアップサート



```sql
SELECT
  'xxx' as id
FROM
  prospect_table
-- Or
SELECT
  email
FROM
  prospect_table
```

### リストメンバーシップデータオブジェクトの列メタデータ

| 列名 | データ型 | 説明 | 必須？ |
|  --- | --- | --- | --- |
| prospect_id | Integer | 見込み客のID | ✅ |
| list_id | Integer | リストのID | ✅ |


サンプルクエリ


```sql
SELECT
  list_id,
  prospect_id
FROM (VALUES (xxx, yyyy)) AS table1(list_id, prospect_id);
```

### Salesforce Pardotの統合パラメータ

| Parameter  | Values  | Description  |
|  --- | --- | --- |
| client_id | xxxx | 接続アプリのコンシューマーキー |
| client_secret | xxxx | 接続アプリのシークレットキー |
| refresh_token | xxxx | 接続アプリを承認後に取得したリフレッシュトークン |
| login_url | https://login.salesforce.com/ | SalesforceのログインURL |
| pardot_domain | https://pi.pardot.com | Pardotのドメイン |
| business_unit | 0Uv4xxxxx | ビジネスユニットID |
| data_object | prospects | ターゲットデータオブジェクト。prospectsまたはlist_membershipsのいずれかでなければなりません |
| skip_invalid_records | true | 失敗したレコードをスキップする場合は、この値をtrueに設定します |
| prospect_operation | sync | Pardotにprospectデータを送信する操作。**sync**がサポートされています |
| prospect_lists | xxxx | `data_object = prospects`の場合のprospectリストIDのカンマ区切り（文字列） |
| prospect_list_operation | add | `prospect_lists`が設定されている場合にprospectを追加/削除する操作。`data_object = prospects`の場合に適用されます（enum(`add`, `remove`)、デフォルト: `add`） |
| upsert_by_email | false | メールアドレスをキーとしてprospectをアップサートします |
| parallel_tasks | 1 | Pardotにprospectデータを送信する際に並列実行するタスク数 |
| max_payload | 5000 | Pardotにprospectデータを送信する際のペイロードサイズ。これは各Pardotインスタンスごとに異なる最大URI設定を持つため、微調整するためのパラメータです。prospectを送信する際に**414 Request-URI Too Long**エラーが発生した場合は、この値を下げてください。それ以外の場合は、デフォルト値で十分です。 |
| list_membership_operation | upsert | Pardotにリストメンバーシップデータを送信する操作。**upsert**または**delete**でなければなりません |
| maximum_retries | 5 | リクエストが失敗した場合の最大リトライ回数 |
| initial_retry_wait | 1 | 最初のリトライ前の初期待機時間（秒） |
| maximum_retry_wait | 120 | リトライの最大待機時間（秒） |
| maximum_connection_timeout | 300 | Pardotへのリクエストの最大接続時間 |


### (オプション) Query Export ジョブをスケジュールする

Scheduled Jobs と Result Export を使用して、指定したターゲット宛先に出力結果を定期的に書き込むことができます。

Treasure Data のスケジューラー機能は、高可用性を実現するために定期的なクエリ実行をサポートしています。

2 つの仕様が競合するスケジュール仕様を提供する場合、より頻繁に実行するよう要求する仕様が優先され、もう一方のスケジュール仕様は無視されます。

例えば、cron スケジュールが `'0 0 1 * 1'` の場合、「月の日」の仕様と「週の曜日」が矛盾します。前者の仕様は毎月 1 日の午前 0 時 (00:00) に実行することを要求し、後者の仕様は毎週月曜日の午前 0 時 (00:00) に実行することを要求するためです。後者の仕様が優先されます。

#### Treasure コンソール を使用してジョブをスケジュールする

1. **Data Workbench > Queries** に移動します
2. 新しいクエリを作成するか、既存のクエリを選択します。
3. **Schedule** の横にある None を選択します。
![](/assets/image2021-1-15_17-28-51.f1b242f6ecc7666a0097fdf37edd1682786ec11ef80eff68c66f091bc405c371.0f87d8d4.png)
4. ドロップダウンで、次のスケジュールオプションのいずれかを選択します:
![](/assets/image2021-1-15_17-29-47.45289a1c99256f125f4d887e501e204ed61f02223fde0927af5f425a89ace0c0.0f87d8d4.png)
| ドロップダウン値 | 説明 |
|  --- | --- |
| Custom cron... | [Custom cron... の詳細](#custom-cron-details)を参照してください。 |
| @daily (midnight) | 指定されたタイムゾーンで 1 日 1 回午前 0 時 (00:00 am) に実行します。 |
| @hourly (:00) | 毎時 00 分に実行します。 |
| None | スケジュールなし。 |


#### Custom cron... の詳細

![](/assets/image2021-1-15_17-30-23.0f94a8aa5f75ea03e3fec0c25b0640cd59ee48d1804a83701e5f2372deae466c.0f87d8d4.png)

| **Cron 値** | **説明** |
|  --- | --- |
| `0 * * * *` | 1 時間に 1 回実行します。 |
| `0 0 * * *` | 1 日 1 回午前 0 時に実行します。 |
| `0 0 1 * *` | 毎月 1 日の午前 0 時に 1 回実行します。 |
| "" | スケジュールされた実行時刻のないジョブを作成します。 |



```
 *    *    *    *    *
 -    -    -    -    -
 |    |    |    |    |
 |    |    |    |    +----- day of week (0 - 6) (Sunday=0)
 |    |    |    +---------- month (1 - 12)
 |    |    +--------------- day of month (1 - 31)
 |    +-------------------- hour (0 - 23)
 +------------------------- min (0 - 59)
```

次の名前付きエントリを使用できます:

- Day of Week: sun, mon, tue, wed, thu, fri, sat.
- Month: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.


各フィールド間には単一のスペースが必要です。各フィールドの値は、次のもので構成できます:

div
| フィールド値  | 例  | 例の説明  |
|  --- | --- | --- |
| 各フィールドに対して上記で表示された制限内の単一の値。 |  |  |
| フィールドに基づく制限がないことを示すワイルドカード
`'*'`。 | `'0 0 1 * *'` | 毎月 1 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。 |
| 範囲 `'2-5'`
フィールドの許可される値の範囲を示します。 | `'0 0 1-10 * *'` | 毎月 1 日から 10 日までの午前 0 時 (00:00) に実行するようにスケジュールを設定します。 |
| カンマ区切りの値のリスト `'2,3,4,5'`
フィールドの許可される値のリストを示します。 | `0 0 1,11,21 * *'` | 毎月 1 日、11 日、21 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。 |
| 周期性インジケータ `'*/5'`
フィールドの有効な値の範囲に基づいて、
スケジュールが実行を許可される頻度を表現します。 | `'30 */2 1 * *'` | 毎月 1 日、00:30 から 2 時間ごとに実行するようにスケジュールを設定します。
`'0 0 */5 * *'` は、毎月 5 日から 5 日ごとに午前 0 時 (00:00) に実行するようにスケジュールを設定します。 |
| `'*'`
ワイルドカードを除く上記の
いずれかのカンマ区切りリストもサポートされています
`'2,*/5,8-10'` | `'0 0 5,*/10,25 * *'` | 毎月 5 日、10 日、20 日、25 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。 |


1. (オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。


### クエリを実行する

クエリに名前を付けて保存して実行するか、単にクエリを実行します。クエリが正常に完了すると、クエリ結果は指定された宛先に自動的にエクスポートされます。

設定エラーにより継続的に失敗するスケジュールジョブは、複数回通知された後、システム側で無効化される場合があります。

(オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。

## Audience Studio で Segment をアクティベートする

Audience Studio で activation を作成することで、segment データをターゲットプラットフォームに送信することもできます。

1. **Audience Studio** に移動します。
2. parent segment を選択します。
3. ターゲット segment を開き、右クリックして、**Create Activation** を選択します。
4. **Details** パネルで、Activation 名を入力し、前述の Configuration Parameters のセクションに従って activation を設定します。
5. **Output Mapping** パネルで activation 出力をカスタマイズします。


![](/assets/ouput.b2c7f1d909c4f98ed10f5300df858a4b19f71a3b0834df952f5fb24018a5ea78.8ebdf569.png)

- Attribute Columns
  - **Export All Columns** を選択すると、変更を加えずにすべての列をエクスポートできます。
  - **+ Add Columns** を選択して、エクスポート用の特定の列を追加します。Output Column Name には、Source 列名と同じ名前があらかじめ入力されます。Output Column Name を更新できます。**+ Add Columns** を選択し続けて、activation 出力用の新しい列を追加します。
- String Builder
  - **+ Add string** を選択して、エクスポート用の文字列を作成します。次の値から選択します:
    - String: 任意の値を選択します。テキストを使用してカスタム値を作成します。
    - Timestamp: エクスポートの日時。
    - Segment Id: segment ID 番号。
    - Segment Name: segment 名。
    - Audience Id: parent segment 番号。


1. **Schedule** を設定します。


![](/assets/snippet-output-connector-on-audience-studio-2024-08-28.a99525173709da1eb537f839019fa7876ffae95045154c8f2941b030022f792c.8ebdf569.png)

- スケジュールを定義する値を選択し、オプションでメール通知を含めます。


1. **Create** を選択します。


batch journey の activation を作成する必要がある場合は、[Creating a Batch Journey Activation](/products/customer-data-platform/journey-orchestration/batch/creating-a-batch-journey-activation) を参照してください。

## その他

- [スケジュールジョブ](/products/customer-data-platform/job-management/scheduling-jobs-using-td-console)と結果エクスポートを使用して、定期的にターゲット宛先にデータをアップロードできます
- より高度なデータパイプラインの一部として、この統合を[Treasure ワークフロー](/int/using-td-workflow-with-td-integrations)に組み込むことができます


## カスタム接続アプリの使用

Pardotアカウントに統合するには、[接続アプリ](https://help.salesforce.com/articleView?id=sf.connected_app_overview.htm&type=5)が必要です。TDは便利な接続アプリを用意していますが、独自に作成することもできます。Salesforceインスタンスにカスタムドメイン名を使用している場合、またはログインURLが`https://login.salesforce.com`でない場合は、カスタム接続アプリが必要です。

### 接続アプリの定義

1. Salesforce Lightning Experienceにログインします。
2. `歯車`アイコンを選択します。
3. **設定**を選択します。


![](/assets/screen-shot-2021-03-25-at-15.11.20.cf821f43f5944f9c884aba9e5d0a2c029b70481c03777d1ee0869a566a68a18a.da0a80a2.png)

1. **プラットフォームツール** > **アプリケーション**に移動します。
2. **アプリケーションマネージャー**を選択します。


![](/assets/screen-shot-2021-03-25-at-15.15.38.c724dba603815a0c8d9b856aca5eed484ec417f56209d53fd03297326cc7b11e.da0a80a2.png)

1. **新規接続アプリケーション**を選択します。


![](/assets/screen-shot-2021-03-25-at-15.16.28.82a23e565c1ac3a037c1a6048d3adac0badd24509b4af8c69f5c46b4463fa67a.da0a80a2.png)

1. **基本情報**に必要な情報を入力します


![](/assets/screen-shot-2021-03-25-at-15.18.00.3838a21b710346b674a14af89ea01916eba2360396404e689f9e001aec9a6b4c.da0a80a2.png)

1. **OAuth設定の有効化**を選択します。


![](/assets/screen-shot-2021-03-25-at-15.20.51.3a0f1c97a434439970623e8bc16487dcd1db70cc6b7eccd8b3487cfe085ce056.da0a80a2.png)

- **コールバックURL**に移動し、http://localhost:8080と入力します
- **選択したOAuthスコープ**に移動し、`Access Pardot services (pardot_api)`と`Perform requests on your behalf at any time (refresh_token, offline_access)`を選択します
- 最後までスクロールし、**保存**を選択してから**続行**を選択します


1. **コピー**を選択して、`コンシューマーキー`と`コンシューマーシークレット`をコピーします。これらはそれぞれ`クライアントID`と`クライアントシークレット`に使用されます。


### Salesforce Pardotアカウントにアクセスするためのアプリの承認

1. Webブラウザを開き、以下を入力します：


`https://{YOUR_SALESFORCE_LOGIN_URL}/services/oauth2/authorize?client_id={YOUR_CONSUMER_KEY}&redirect_uri=http://localhost:8080&response_type=code`

- YOUR_SALESFORCE_LOGIN_URL: {SalesforceログインURL - 例：https://login.salesforce.com}
- YOUR_CONSUMER_KEY: {接続アプリ作成手順で取得したコンシューマーキー}


完全なURLの例：https://login.salesforce.com/services/oauth2/authorize?client_id=xxxxxx&redirect_uri=http://localhost:8080&response_type=code

1. アカウントにログインし、**許可**を選択します


![](/assets/screen-shot-2021-03-25-at-15.40.47.973cc4413bf2b0db897430160dde9eaa29fc521084fccb22b08a2421c9acd87c.da0a80a2.png)

1. 存在しないページにリダイレクトされます。URLを選択し、**code=**の後のテキストをコピーし、**%3D**を**=**に置き換えます


例えば、URL `http://localhost:8080/?code=xxxx%3D%3D`の場合、`**xxxx==`**が次のステップでリフレッシュトークンを取得するためのコードです。

### リフレッシュトークンの取得

上記のステップで取得した**code**を使用して、ターミナルでCURLを使用してリフレッシュトークンをリクエストします


```bash
curl --request POST \
  'https://{your_salesforce_login_url}/services/oauth2/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=authorization_code' \
  --data-urlencode 'code=your_code' \
  --data-urlencode 'client_id=client_id' \
  --data-urlencode 'client_secret=client_secret' \
  --data-urlencode 'redirect_uri=http://localhost:8080'
```

リクエストを送信すると、以下のようなレスポンスが返されます


```json
{
  "access_token": "xxxxx",
  "refresh_token": "xxxx",
  "signature": "xxxx",
  "scope": "refresh_token pardot_api",
  "instance_url": "xxxx",
  "id": "xxx",
  "token_type": "Bearer",
  "issued_at": "1616662486135"
}
```

**refresh_token**の値が、**認証**画面で使用する**リフレッシュトークン**です。