# Salesforce Marketing Cloud V2 Export Integration

Treasure Dataは、ユーザーセグメントを[Salesforce Marketing Cloud](https://www.salesforce.com/products/marketing-cloud/overview/) (ExactTarget)に公開し、顧客にパーソナライズされたメールを送信できるようにします。Web、モバイル、CRM、およびその他のデータソースからのファーストパーティデータを使用して、データ駆動型のメールキャンペーンを実行できます。

サンプルワークフローについては、[Treasure Boxes](https://github.com/treasure-data/treasure-boxes/tree/master/td/salesforce_marketing_cloud_exacttarget)をご覧ください。

Treasure Dataは、ジョブ結果をSalesforce Marketing Cloud（SFMC）に書き込むための2つの方法、SFTPとSFMCプラグインを提供しています。

このSFMCプラグインは、小規模および中規模のデータセットに使用できます。大規模なデータセットの場合は、SFTPの使用をお勧めします。

## 同期または非同期API

この統合は、SFMCにレコードを配置するための2種類のAPIをサポートしています: 同期APIと非同期API。

ベストプラクティスとして、100,000レコード未満の結果セットをSFMCに配置しようとしている場合、同期APIが最適です。ただし、100万以上のデータセットを送信する予定がある場合は、同期APIと比較してより高い可用性と信頼性を提供する非同期APIの使用を検討してください。

非同期APIを使用するには、SFMCアカウントがSalesforce Marketing CloudからData Extensions Async REST APIとして有効になっていることを確認してください。また、[Salesforce Marketing Cloudでサポートケースを作成](https://help.salesforce.com/articleView?id=workcom_contact_support.htm&type=5)して、有効にしてもらうこともできます。

## Data Extension内の既存のオーディエンスデータを置換またはアップサート

この統合は、UpsertとReplaceもサポートしています。

### オーディエンスデータのアップサート

**Upsert**は、既存のデータを更新し、data extensionに新しい追加データを挿入します。更新と挿入の両方の操作は、data extension主キーを使用して、レコードが存在したかどうかを判断し、更新または挿入を実行します。ターゲットdata extension内のすべての既存データは保持されます。

### オーディエンスデータの置換

**Replace**は、データを更新する前に、ターゲットdata extension内のすべての既存データをクリアします。このモードは、毎回ターゲット顧客にメールを送信するために、data extension内の最新のデータのみが必要な場合に便利です。

この統合でreplaceが選択されている場合:

- エクスポート結果にデータエラー（NULL値、誤ったデータ型、無効な主キー）がある場合、Data Extension内のすべてのレコードがクリアされ、回復できませんが、無効なデータはエクスポートされません。
- エクスポート結果にスキーマエラー（primary_keyの欠落）がある場合、data extension内の既存のレコードはクリアされません。


replaceを使用すると、削除されたデータは回復できません。コネクタは新しいデータをプッシュする前にすべてのデータをクリアします。したがって、ジョブが成功するか失敗するかに関係なく、データはクリアされます。ベストプラクティスとして、一時的なデータやデータ履歴が重要でない場合にreplaceを使用してください。

replaceを使用するには、アカウントがEnterprise 2.0アカウントであり、インストールされたパッケージに管理者権限が必要です。詳細については、カスタマーサクセス担当者にお問い合わせください。

## 前提条件

- Treasure Dataの基本知識
- Salesforce Marketing Cloudの基本知識
- Treasure アカウント


このコネクタでは、Data Extensionに各レコードを一意に識別する主キーが必要です。さらに、同期APIを使用する場合、Data Extensionには2つ以上のフィールドが必要です。新しいData Extensionを作成するために'Create Data Extension'を指定する場合、主キーとして1列のみがサポートされます。複数の列を指定するとエラーが発生します。

## Salesforce Marketing Cloudでインストール済みアプリを作成

Treasure Dataは、Salesforce Marketing Cloudで**Legacy**と**Enhanced Package**の両方をサポートしています。

Enhanced Packageの作成を強くお勧めします。

### Enhanced Functionality Packageの作成

1. Salesforce Marketing Cloudアカウントにログオンします。
2. Welcome Pageで、右上隅の名前を選択します。**Setup**を選択します。


![](/assets/image-20191203-230537.e0bcdfcb7e2561762c7696348017cbdacc5ba65f7f802d2418ee8b77d769242c.3816ae6c.png)
3. 新しい画面の左側メニューで、**App** > **Installed Packages**に移動します。

![](/assets/image-20191203-230529.3bd5b94dddc4591cf914ae0be5d747aebc089a800d9012bc4f065f79b0894c19.3816ae6c.png)
4. Installed Packages画面で、**New**を選択します。

![](/assets/image-20191203-230520.b3ce22d3ac6c14b71d3179db2c83b6ad2bc76ea6cde6cc92354f9319c93303bf.3816ae6c.png)
5. **Name**と**Description**を入力します。
6. **Save**を選択します。

![](/assets/image-20191203-230511.fddfd1f6154dbd1b6c8f68a9931c82a18b1f6fe4ef53361e70cea3047d394444.3816ae6c.png)
7. Add Componentを選択します。
![](/assets/screen-shot-2022-05-27-16.27.17.5a0de3a6391853630496b0d42cec3bf348a24ea62175a17c782c91fbf2ca92de.3816ae6c.png)
8. **API Integration**を選択します。
9. **Next**を選択します。

![](/assets/image-20191203-230502.05e97edb5fa71052662c94ce53a805e48bd67c8fba685461aceaf8391d51cb1a.3816ae6c.png)
10. **Server-to-Server**を選択します。
11. **Next**を選択します。

![](/assets/image-20191203-230452.0549f71d5447c3b0504df60cb7a574569956b725c55e2721b191571026934996.3816ae6c.png)

1. Contacts > AudiencesとContacts > List and Subscribersを見つけます。
2. Replace Audience機能を使用するには、両方の下で**Read**と**Write**を選択します。
3. Data > Data Extensionsを見つけます。
4. **Read**と**Write**を選択します。
Salesforce Marketing Cloudにデータを書き込むには、これらの権限が必要です。
5. **Save**を選択します。


![](/assets/screen-shot-2020-10-12-at-2.14.38-pm.ad0de0f5fc63fb8be9fe49f09040292c266999232b96ec7178da216cba3d6e53.3816ae6c.png)

1. Componentsパネルを見つけます。
2. **Client Id**、**Client Secret**、および**Authentication Base URI**をメモします。
Treasure DataからSalesforce Marketing Cloudにデータを書き込むために、この情報を使用します。


![](/assets/image-20191203-230426.f3112d86f090248d0a16b48d4348f0b17af66704232fb6144437b0d50b20fdb5.3816ae6c.png)

## Treasure コンソールの使用

TDクエリ結果をSalesforce Marketing Cloud Data Extensionにエクスポートするには、次の手順を実行します:

### 新しいデータ接続を作成

データ接続を設定する際、統合にアクセスするための認証を提供します。Treasure Dataでは、認証を設定してから、ソース情報を指定します。

1. Treasure コンソールを開きます。
2. **Integrations Hub** > **Catalog**に移動します。
3. **Salesforce Marketing Cloud Version 2**を検索して選択します。


![](/assets/screen-shot-2022-05-27-16.37.54.e0fe3afa61c9868ee653ee5f3d1eec68d1d5a070f65e969290ace5795a33d42a.3816ae6c.png)
4. Enhanced Package Integrationを選択します。

![](/assets/image-20201106-212315.3d4c4002e0f5b268fde845df49e0e80b070a572437ab589713bf7de1efd42e36.3816ae6c.png)

1. **Enhanced Functionality Package**を選択し、**Client Id**、**Client Secret**、および**Authentication Base URI**（SFMCでenhanced packageを作成した際に取得したもの）を入力します。オプションで、以下を指定できます:


- 複数のBUにアクセスするための**Account identifier or MID**
- トークンのスコープを制限するための**Scope**（詳細は[API scopes](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/rest-permissions-and-scopes.htm)を参照）


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


![](/assets/image-20191203-230335.b828546b61ec5347e9550a24f61988f734754170ed0a8c717dffdac7cb10ad08.3816ae6c.png)

### 接続に名前を付ける

1. 接続の名前を入力します。
2. **Done**を選択します。


### Export Resultsの設定

この手順では、クエリを作成または再利用します。クエリで、データ接続を設定します。

場合によっては、クエリで列マッピングを定義する必要があります。

1. Treasure コンソールを開きます。
2. **Data Workbench** > **Queries** > **New Query**に移動します。


![](/assets/image-20191203-230303.3c9be3f4b5261f47f8b8c475e4dee14e88168a433534524a562b9844ffd74f5c.3816ae6c.png)

1. クエリエディタでクエリを入力します。例えば:



```sql
SELECT
 name as customer_name,
 email as primary_key
FROM
 data_extension
limit 10
```

主キーはテキストフィールドにすることができます。

1. クエリエディタの上部にある**Export Results**を選択します。


![](/assets/image-20191203-230256.b3ecea9c19a2d4da4820f97082e0948c1c029522059012a707eb669f9d61f338.3816ae6c.png)

1. 既存の接続を選択します。
2. **Data Extension Name**を指定します。オプションで、Data Extensionが存在しない場合は、Create Data Extensionを選択して、まったく新しいdata extensionを作成します。


![](/assets/image-20251205-183442.9a2e2a9b42b58d80c353e1c9c446942172bc55a0ff9525c479bcc915e309ba5f.3816ae6c.png)

1. **Folder Path**を指定します。オプションで、**Folder Path**内のいずれかのフォルダが存在しない場合は、**Create New Folder if not Exists**を選択してフォルダを作成します。


![](/assets/image-20251205-183634.aab337f5464f677d3921e59667bf16a09d6358e2bbb9f3df627bf026b99f9f31.3816ae6c.png)

1. 既存のData Extension Nameを使用していて、非同期APIを使用する場合は、**Using Async API**を選択します。同期APIを使用する場合は、ボックスをオフのままにします。
2. 新しいdata extensionを作成する場合は、**Create Data Extension**を選択します。新しく作成されたdata extensionで、Data Extension Nameを入力し、新しいdata extensionのPrimary Columnに名前を付けます。


![](/assets/image-20251205-183912.f42632c5cff1b64526cfcc9557d448b83135b3909fee3cf2ac7eeb00efbf1e92.3816ae6c.png)

1. **Long**と**Text**は、**Primary Column**でサポートされている2つのデータ型です。**Text**が**Primary Column**の場合、**Text length for Primary Key**を指定して、未使用のスペースを不必要に割り当てないことで、data extensionのパフォーマンスを最適化できます。
2. 新しいData Extensionを作成する際に各列のデータ型を定義するには、**Data Type Mapping**を使用します。
3. data extensionが送信可能な場合は、**Is Sendable**オプションを選択します。
4. **Subscriber Key**または**Email Address**で**Sendable Rule**を設定します。
5. data extensionの送信可能なプロパティとして**Sendable Column**を選択します。


![](/assets/image-20251205-184013.35ca57a62c11b7ce9cdde4616f4e5238677175cc0c47862d5463a06942c1e3c8.3816ae6c.png)

1. オプションで、新しいdata extensionを作成する場合は、行ベースのデータリテンションを設定します:
  - **Enable Row-Based Retention** を選択すると、各行が独自の保持期間を個別に追跡します。選択すると **Retention Period (Days)** フィールドが表示されます。
  - **Retention Period (Days)** に各行を保持する日数を設定します（例: `30`）。


- **Enable Row-Based Retention** を選択すると、各行が独自の保持期間を個別に追跡します。選択すると **Retention Period (Days)** フィールドが表示されます。
- **Retention Period (Days)** に各行を保持する日数を設定します（例: `30`）。


![](/assets/image-20260424-163306.8015873afa03e2eb812f2a4ef3c1471f0289421d9fc7bd3d54fc9016e22443ca.3816ae6c.png)

1. data extensionの**Data Operation**を選択します


- 新しいレコードがある場合は追加し、レコードが重複している場合は更新するには**Upsert**
- 各新しいエクスポートでレコードを削除して完全に置き換えるには**Replace**
置き換えられたデータは**回復できません**。


![](/assets/image-20201020-225208.d972f688937823fbf90b1820df508fa72706de321f6ecec604383779d48513ed.3816ae6c.png)
17. **Done**を選択します。

### クエリの実行

1. **Run**を選択してクエリを実行します。
2. クエリ結果が設定されたdata extensionに書き込まれていることを確認します。


![](/assets/image-20191203-230222.284b5bd59b85b34532412c3aee9c28c9e81788d270d8c33c4132e0a9227bd79f.3816ae6c.png)

Salesforce Marketing Cloud V2 Export統合にはタイムゾーン設定がないため、統合はSFMCアカウントのタイムゾーン設定を使用します。

## Activate a Segment in Audience Studio

You can also send segment data to the target platform by creating an activation in the Audience Studio.

1. Navigate to **Audience Studio**.
2. Select a parent segment.
3. Open the target segment, right-mouse click, and then select **Create Activation.**
4. In the **Details** panel, enter an Activation name and configure the activation according to the previous section on Configuration Parameters.
5. Customize the activation output in the **Output Mapping** panel.


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

- Attribute Columns
  - Select **Export All Columns** to export all columns without making any changes.
  - Select **+ Add Columns** to add specific columns for the export. The Output Column Name pre-populates with the same Source column name. You can update the Output Column Name. Continue to select **+ Add Columns**to add new columns for your activation output.
- String Builder
  - **+ Add string** to create strings for export. Select from the following values:
    - String: Choose any value; use text to create a custom value.
    - Timestamp: The date and time of the export.
    - Segment Id: The segment ID number.
    - Segment Name: The segment name.
    - Audience Id: The parent segment number.


1. Set a **Schedule**.


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

- Select the values to define your schedule and optionally include email notifications.


1. Select **Create**.


If you need to create an activation for a batch journey, review [Creating a Batch Journey Activation](/products/customer-data-platform/journey-orchestration/batch/creating-a-batch-journey-activation).

## プラグインの設定とオプション

### 利用可能な設定

Salesforce Marketing Cloud V2エクスポート統合で使用可能な設定オプションを以下の表に示します。

| Configuration name | Description  | Type | Sample value |
|  --- | --- | --- | --- |
| `client_id` | インストール済みパッケージのクライアントキー | string | `Th1s1s4n3x4mpl3Cl13nt1ds` |
| `client_secret` | インストール済みパッケージのクライアントシークレット | string | `Th1s1s4F4k3dCl13ntS3cr3t` |
| `auth_type` | 認証タイプ | string | `v1` (legacy packageの場合)
`v2` (enhanced packageの場合) |
| `auth_uri` | 認証URI (`auth_type=v2`の場合は必須) | string | `https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/` |
| `folder_path` | Data Extensionをエクスポートするフォルダパス
フォルダパスは以下の要件を満たす必要があります:- スラッシュで始まる
- 最大8レベルのフォルダを持つ
- 複数の連続したスラッシュがない
- フォルダパス内のフォルダ名は128文字を超えることはできません

 | string | 
```
/Data Extensions/FolderPath2/FolderPath3/FolderPath3
```
 |
| `create_folder_if_not_exists` | `folder_path`に新しいフォルダを作成するかどうかを示すフラグ
`folder_path`が提供されている（かつ空でない）場合にのみ有効 | boolean
デフォルトはfalse | `true` (パスで指定されたすべてのディレクトリが作成されます。既に存在する場合、またはパスの一部が無効な場合を除く)
`false` (存在しない場合、新しいフォルダを作成しない) |
| `de_name` | Data Extension名 | string | `data_extension_name` |
| `create_new_de` | data extensionが存在しない場合に新しいdata extensionを作成するかどうかを示すフラグ | boolean
デフォルトはfalse | `true` (DEが存在しない場合は新しいDEを作成)
`false` (DEが存在しない場合は新しいDEを作成しない) |
| `primary_column` | 主列の名前 (`create_new_de=true`の場合は必須)
1列のみ指定できます。 | string |  |
| `primary_text_length` | 主列として選択された場合のテキストフィールドの長さ | integer | max: 4000, min: 10 (デフォルト: 4000) |
| `column_options` | `create_new_de=true`の場合にのみ適用されます。
新しいData Extensionの各列のデータ型を指定します。
サポートされているデータ型: TEXT, NUMBER, DATE, BOOLEAN, EMAILADDRESS, PHONE, DECIMAL, LOCALE, BASE16ENCRYPTED, BASE16ENCRYPTEDEMAIL | string | `col1:TEXT(100);col2:NUMBER;col3:DECIMAL(18,2);col4:DATE` |
| `is_sendable` | 作成されたDEが送信可能かどうかを示すフラグ | boolean
デフォルトはfalse | `true`
`false` |
| `sendable_rule` | アカウントで設定された送信可能なビジネスルール (`is_sendable=true`の場合は必須) | string | `Subscriber Key` (ビジネスルールがSubscriber Keyの場合)
`Email Address` (ビジネスルールがEmail Addressの場合) |
| `sendable_column` | 送信可能なプロパティとして使用する列名 (`is_sendable=true`の場合は必須) | string | `my_sendable_column` |
| `enable_row_based_retention` | 新しいData Extensionの各行が独自の保持期間を個別に追跡するかどうか。`retention_period_days`も設定する必要があります。`create_new_de=true`の場合にのみ有効です。 | boolean
デフォルトはfalse | `true`
`false` |
| `retention_period_days` | 新しいData Extension内の行を保持する日数。`create_new_de=true`の場合にのみ有効です。`enable_row_based_retention=true`の場合は必須。それ以外の場合は任意（設定しない場合、保持ポリシーは適用されません）。 | integer
デフォルトはnull | `30` |
| `data_operation` | 挿入前にDE内のデータをクリアするかどうかを決定 | string
デフォルトはupsert | `upsert`, `replace` |
| `async` | SFMCから非同期または同期APIを使用するかを示すフラグ | boolean
デフォルトはfalse | `true` (非同期APIを使用)
`false` (同期APIを使用) |
| `continue_on_failure`
 | 挿入エラーがある場合に実行を続けるかどうかを示すフラグ (同期APIにのみ適用) (ジョブはSFMCサーバー側エラーが発生した場合にのみ続行されます。Treasure Data側でエラーが発生した場合（誤った認証情報、レコードの無効な形式など）、ジョブはエラーで失敗します)
falseに設定されている場合、Salesforce Marketing Cloud側のAPI動作により、エクスポートは部分的にレコードを正常に送信できる可能性があります。
コネクタが101レコードをエクスポートすると仮定すると => これは3つのバッチ(50, 50, 1)に分割されます:
- 最初のバッチが失敗した場合 => 101レコードすべてが更新されません
- 2番目のバッチが失敗した場合 => 50レコードが更新され、51レコードが更新されません
- 3番目のバッチが失敗した場合 => 100レコードが更新され、1レコードが更新されません

 | boolean
デフォルトはtrue
 | `true`
`false`
 |
| `records_per_batch` | 1回のAPI呼び出しで送信されるレコード数。 (このオプションは非同期APIにのみ適用されます。) | integer | max: 32000 (デフォルト), min: 100 |


### 設定例

**Enhanced package**を使用してdata extensionをupsertするために**同期API**を使用する設定例。


```yaml
out:
 type: salesforce_marketing_cloud_v2
 client_id: Th1s1s4n3x4mpl3Cl13nt1ds
 client_secret: Th1s1s4F4k3dCl13ntS3cr3t
 auth_type: v2
 auth_uri: https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/
 de_name: data_extension_name
 continue_on_failure: false
```

**Enhanced package**を使用してdata extensionをupsertするために**非同期API**を使用する設定例。


```yaml
out:
 type: salesforce_marketing_cloud_v2
 client_id: Th1s1s4n3x4mpl3Cl13nt1ds
 client_secret: Th1s1s4F4k3dCl13ntS3cr3t
 auth_type: v2
 auth_uri: https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/
 de_name: data_extension_name
 async: true
```

**Enhanced package**を使用してdata extensionをupsertし、存在しない場合は新しい**Sendable data Extension**を作成するために**非同期API**を使用する設定例。


```yaml
out:
 type: salesforce_marketing_cloud_v2
 client_id: Th1s1s4n3x4mpl3Cl13nt1ds
 client_secret: Th1s1s4F4k3dCl13ntS3cr3t
 auth_type: v2
 auth_uri: https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/
 de_name: data_extension_name
 create_new_de: true
 primary_column: primary_key
 primary_text_length: 32
 column_options: col1:TEXT(100);col2:NUMBER;col3:DECIMAL(18,2);col4:DATE
 is_sendable: true
 sendable_column: mytext
 sendable_rule: Subscriber Key
 async: true
 records_per_batch: 32000
```

**行ベースのリテンション**を設定して新しいData Extensionを作成する設定例。


```yaml
out:
 type: salesforce_marketing_cloud_v2
 client_id: Th1s1s4n3x4mpl3Cl13nt1ds
 client_secret: Th1s1s4F4k3dCl13ntS3cr3t
 auth_type: v2
 auth_uri: https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/
 de_name: data_extension_name
 create_new_de: true
 primary_column: primary_key
 retention_period_days: 30
 enable_row_based_retention: true
```

**特定のフォルダにdata extensionをエクスポート**するための設定例


```yml
out:
 type: salesforce_marketing_cloud_v2
 client_id: xxxxxxxxxxxxxxxxxxxxxxxxx
 client_secret: xxxxxxxxxxxxxxxxxxxxxxxxx
 auth_type: v2
 auth_uri: https://th1s1sf4k3d1nst4nc3h0st.auth.marketingcloudapis.com/
 folder_path: /Data Extensions/FolderPath2/FolderPath3/FolderPath3
 create_folder_if_not_exists: true
 de_name: data_extension_name
 create_new_de: true
 primary_column: primary_key
 primary_text_length: 32
 column_options: col1:TEXT(100);col2:NUMBER;col3:DECIMAL(18,2);col4:DATE
 is_sendable: true
 sendable_column: mytext
 sendable_rule: Subscriber Key
 async: true
 records_per_batch: 32000
```

## 付録

- コネクタはHTTPS経由でSFMC v2サーバー/インスタンスエンドポイントと通信します。
- HTTPSおよびSSL/TLS暗号化はSFMC v2サーバーによって強制され、処理前にコネクタによってチェックされます。