# Salesforce Commerce Cloud エクスポート連携

Salesforce Commerce Cloud（SFCC）は、B2C（企業対消費者）およびB2B（企業間）顧客向けのeコマースソリューションです。このコネクタは以下の機能を提供します。

- Treasure コンソール上の顧客プロファイルをSFCCプラットフォーム上のCustomer Listsに同期する
- SFCCプラットフォーム上の静的Customer Groupsに顧客を割り当てる、または削除する


## 前提条件

- Treasure Dataの基本知識
- Salesforce Commerce Cloudの基本知識
- Open Commerce Cloud APIの基本知識
- Commerce Cloud Account Manager SystemでAPIクライアントが作成されていること。詳細については[こちら](/ja/int/salesforce-commerce-cloud-export-integration#h2_1482152047)を参照してください


## 制限事項

- アプリケーションシークレットには`%`文字を含めることはできません。SFCC認証サーバーの内部的な問題により、`%`文字を含むシークレットは認証できません。
- このコネクタは顧客属性を検証せずにそのまま送信します。データ検証はSFCC側で行われます。
- 顧客プロファイルをSFCC Customer Listに同期するには、ジョブ実行前にそのリストがSFCC上に存在している必要があります。
- 大量のデータはパフォーマンスの低下を引き起こす可能性があります。


## Treasure コンソールの使用

### 新しい接続の作成

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

![](/assets/salesforce-commerce-cloud-export-integration-2024-06-20.63ef2448dd32726a66ef34f3d776726b55e61dfeb03b58fe1653badfceb9f382.fe495661.png)

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


### 認証フィールド

| **フィールド** | **説明** |
|  --- | --- |
| **API Client ID** | [APIクライアントの作成と設定](/ja/int/salesforce-commerce-cloud-export-integration#h2_1482152047)の手順に従って生成されるAPI Client ID |
| **API Client Password** | APIクライアントのパスワード |
| **Base URI** | Business ManagerアプリケーションにアクセスするためのURL。例：https://xxxx.commercecloud.salesforce.com/ |


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

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

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


- 設定パラメータ


| フィールド  | 説明 |
|  --- | --- |
| Data target | - **Customer List**を選択すると、ターゲットプラットフォーム上の顧客プロファイルを操作できます。これには、新しい顧客プロファイルの作成、プロファイルの更新、プロファイルの削除が含まれます。 - **Customer Group**を選択すると、特定の静的Customer Groupsに顧客を割り当てる、または削除できます。

 |
| Operation mode | **Customer List**データターゲットの場合、以下のサポートされている操作モードのいずれかを選択します：- **Create**：新しい顧客プロファイルを作成します。 - **Update**：*customer_no*カラムで指定された顧客プロファイル属性を更新します。
- **Upsert**：*customer_no*カラムで指定された顧客プロファイルを上書きします。存在しない場合は、新しいプロファイルが作成されます。 - **Delete**：*customer_no*カラムで指定された顧客プロファイルを削除します。   **Customer Group**データターゲットの場合、以下のサポートされている操作モードのいずれかを選択します：
- **Add**：*customer_no*カラムで指定された顧客を特定のCustomer Groupに割り当てます。
- **Remove**：*customer_no*カラムで指定された顧客を特定のCustomer Groupから解除します。 - **Replace**：指定されたCustomer Groupは削除され、同じIDで新しいものが作成され、顧客プロファイルが追加されます。

 |
| Customer list ID | *Customer List*データターゲットの場合に必須です。事前定義されたCustomer ListのIDを指定する必要があります。それ以外の場合、クエリ結果には*customer_list_id*という名前のカラムが含まれている必要があります。 |
| Skip empty/null fields | （*Customer List*データターゲットにのみ適用）  チェックを外すと、空またはnullの属性（カラム）がSFCCに送信されます。その結果、SFCC上のこれらの属性はクリア（空の値で上書き）されます。デフォルトではチェックされており、空またはnullの属性はSFCCに送信されません。 |
| Site ID | *Customer Group*データターゲットの場合に必須です。ターゲットCustomer Groupが属する*サイト*のID。 |
| Customer group ID | *Customer Group*データターゲットの場合に必須です。静的Customer GroupのID。存在しない場合は、新しいものが作成されます。 |
| Customer group name | （オプション。*Customer Group*データターゲットにのみ適用）  指定されたCustomer Groupが存在しない場合に使用されるグループ名。 |
| Thread count | 同時アップロードジョブの数。2から40の範囲。 |


Customer Listデータターゲットの顧客属性の上書き

- **Update**モードを使用して、既存の顧客プロファイルの選択された属性を更新します。`Skip empty/null fields`がチェックされている場合、空またはnullの属性はエクスポートされず、SFCC上の既存の値は変更されません。
- **Upsert**モードは、すべての属性を上書きする場合に使用します。これは、既存の顧客プロファイルがクエリ結果に含まれるもので置き換えられ、含まれていない属性は空になることを意味します。存在しないプロファイルは新規作成されます。 |


### **Customer Lists**に顧客プロファイルを同期するクエリの定義

- クエリには、同期する顧客プロファイルを示す**customer_no**カラムを含める必要があります。
- 複数のCustomer Listsを更新する場合、ターゲットリストを示すために**customer_list_id**という名前のカラムを含めることができます。
- その他の顧客属性については、SFCCのドキュメントを参照してください。すべての属性は検証なしでそのまま送信されます。


| **カラム** | **説明** | **必須** |
|  --- | --- | --- |
| customer_list_id | 空白またはnullでない場合、行の顧客属性が更新されるCustomer ListのIDを定義します。それ以外の場合は、設定画面で入力されたCustomer Listが考慮されます。 | オプション |
| customer_no | SFCCの顧客番号。Createモードでは不要です。 | **必須** |
| Credentials | Createモードでは認証情報が必要です。詳細については[こちら](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html?meta=type%3Acredentials)を参照してください。 | オプション |
| Customer attributes | サポートされている属性のリストについては[こちら](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html?meta=type%3Acustomer)を参照してください。 | オプション |
| Customer address | サポートされている属性のリストについては[こちら](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html?meta=type%3Acustomer_address)を参照してください。 | オプション |


### **Customer Groups**への顧客の割り当て/削除のクエリを定義する

顧客をCustomer Groupに割り当てる（またはCustomer Groupから削除する）には、クエリに**customer_no**カラムのみが必要です。

### (オプション) 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) を参照してください。

## (オプション) CLIを使用したエクスポート連携

[TD Toolbelt](https://toolbelt.treasuredata.com/)を使用すると、CLIからクエリ結果のエクスポートをトリガーできます。`td query`コマンドの`--result`オプションとして、エクスポートジョブのパラメータを指定する必要があります。詳細については、[この記事](/tools/cli-and-sdks/querying-and-importing-data-to-treasure-data-from-the-command-line)を参照してください。

オプションの形式はJSONで、一般的な構造は以下の通りです。

- ケース: data_targetがcustomer_listの場合



```json
{"type": "salesforce_commerce_cloud",    "client_id": "client_id",    "client_secret": "client_secret",    "base_url": "https://your link.commercecloud.salesforce.com",    "data_target": "customer_list",    "operation_mode": "create,update,delete,upsert",    "customer_list_id": "customer_list_id",    "skip_empty_fields": true,    "thread_count": 2}Case: data_target is customer_group{    "type": "salesforce_commerce_cloud",    "client_id": "client_id",    "client_secret": "client_secret",    "base_url": "https://your link.commercecloud.salesforce.com",    "data_target": "customer_list",    "customer_group_operation_mode": "add,remove,replace",    "site_id": "your site id",    "customer_group_id": "your customer group id",    "customer_group_name": "your customer group name",    "thread_count": 2}
```

### CLIパラメータ

| 名前  | 説明  | 値  | デフォルト値  | 必須  |
|  --- | --- | --- | --- | --- |
| data_target | 設定パラメータセクションの*data_target*を参照 | オプションのリスト:1. customer_list
2. customer_group

 | customer_group | YES |
| td_authentication_id | これはTreasure コンソール上の既存のSFCC認証のIDです。  注: td_authentication_idを使用する場合、client_idとclient_secretを宣言する必要はありません。TDシステムがtd_authentication_idによってそれらの情報を取得するためです | Number | null | NO |
| client_id | SFCCから取得したclient_id。  注: TDシステムは、td_authentication_idがnullの場合、この値を無視します。 | String | null | YES  (td_authentication_idがnullの場合) |
| client_secret | SFCCから取得したclient_secret。注: TDシステムは、td_authentication_idがnullの場合、この値を無視します。 | String | null | YES  (td_authentication_idがnullの場合) |
| base_url | 設定パラメータセクションの*base_url*を参照 | String | null | YES |
| operation_mode | *設定パラメータセクション*の*operation_mode*を参照。operation_modeは**data_target**が**customer_list**の場合にのみ使用されます。 | オプション:1. customer_list
2. customer_group

 | customer_list | YES  (*data_target*が***customer_list***の場合) |
| customer_list_id | *設定パラメータセクション*の*customer_list_id*を参照。operation_modeは**data_target**が**customer_list**の場合にのみ使用されます。 | String | null | YES  (*data_target*が***customer_list***の場合) |
| skip_empty_fields | コネクタが空またはnullの値を持つフィールドを無視するかどうかを決定するインジケータフラグ。 | Boolean | true | NO |
| customer_group_operation_mode | operation_modeは**data_target**が**customer_group**の場合にのみ使用されます。customer_groupに適用されるアクション。 | オプション:1. add: customer_noを特定の***customer_group_id***に割り当てます。
2. remove: customer_noを特定の***customer_group_id***から削除します。
3. replace: 特定のグループのすべてのメンバーを削除し、customer_noをそのリストに割り当てます。

 | Add | NO | YES  (*data_target* が ***customer_group*** の場合) |
| site_id | *設定パラメータセクション*の ***site_id*** を参照してください。 | String | null | YES  (*data_target* が ***customer_group*** の場合) |
| customer_group_id | *設定パラメータセクション*の ***customer_group_id*** を参照してください。 | String | null | YES  (*data_target* が ***customer_group*** の場合) |
| customer_group_name | *設定パラメータセクション*の ***customer_group_name*** を参照してください。 | String | empty | NO |


### 使用例

- 新しい顧客を作成



```bash
td --database luan_db --wait "SELECT customer_list_id,first_name,last_name,birthday,company_name,email,fax,gender,job_title,phone_business,phone_home,phone_mobile,second_name,credentials FROM (VALUES ('site_1','fname_201','lname_1','1990-05-12','Test Company','test201@test.com','84111111201',1,'Sr Software','84111111201','84111111201','84111111201','Ryan','{\"enabled\":true,\"locked\":false,\"login\":\"login_url_1_100001.csv\"}')) tbl(customer_list_id,first_name,last_name,birthday,company_name,email,fax,gender,job_title,phone_business,phone_home,phone_mobile,second_name,credentials)" \--type presto \--result '{"type":"salesforce_commerce_cloud","td_authentication_id": 2837,"base_url":"https://zzvt-003.dx.commercecloud.salesforce.com","operation_mode":"create","customer_list_id":"static_g_1","skip_invalid_record":true,"thread_count":2}'
```

- 既存の顧客を更新



```bash
td --database luan_db --wait "SELECT customer_list_id,customer_no,first_name,last_name,credentials FROM (VALUES ('site_1','00000001','fname_1_updated','','{\"enabled\":true,\"locked\":false,\"login\":\"login_url_1_100001.csv\"}')) tbl(customer_list_id,customer_no,first_name,last_name,credentials)" \--type presto \--result '{"type":"salesforce_commerce_cloud","data_target": "customer_list","td_authentication_id": 2837,"base_url":"https://zzvt-003.dx.commercecloud.salesforce.com","operation_mode":"update","customer_list_id":"static_g_1","skip_invalid_record":true,"thread_count":2}'
```

- 顧客を特定の顧客グループに割り当て



```bash
td --database luan_db --wait "SELECT customer_no FROM (VALUES ('00000001')) tbl(customer_no)" \--type presto \--result '{"type":"salesforce_commerce_cloud","data_target": "customer_group","td_authentication_id": 2837,"base_url":"https://zzvt-003.dx.commercecloud.salesforce.com","customer_group_operation_mode":"add","site_id":"site_1", "customer_group_id": "static_customer_group_1","thread_count":2}'
```

## (参考) API Clientの作成と設定

このセクションでは、SFCC APIを使用するために必要な認証情報の取得と権限の設定方法について、概要レベルで説明します。詳細な手順は、Salesforceによって事前の通知なしに変更される可能性があります。

### SFCC Account Manager SystemでAPI Clientを作成

1. [SFCC Account Manager](https://account.demandware.com/dw/account/Home#/)にアクセスしてログイン
2. **API Client**を選択


![](/assets/2.be4fec22b1256686095d473c7740365177027c0ed2e9ffb8b6c407a080314b68.fe495661.png)

1. **Add API Client**を選択


![](/assets/3.8889c5457f7f0dc1e4bafc2ad44bac3bbe46fdd7e7fd1d12800d528888272d6e.fe495661.png)

1. Display Name、Password、Confirm Passwordに値を入力し、**Access Control**を選択して有効化
2. **Organizations**エリアで、組織を選択
3. Rolesエリアで、**Add**を選択
4. 適切なロールを選択し、**Add**を選択
5. **Token Endpoint Auth Method**セクションまでスクロール
6. 以下のようにAuth methodとtoken formatを選択し、**Save**を選択


![](/assets/6.caff70407f1f595dd5532a653e7edfde4981c4ce8eead310e35bc53cd184cd1e.fe495661.png)

1. **API Client ID**と**Password**を記録し、Treasure コンソールでSFCC統合用の新しいAuthenticationを作成する際に使用します


### SFCCインスタンスにアクセスするためのAPI Clientを設定

これらの手順により、作成したAPI ClientがOpen Commerce API機能を使用してSFCCインスタンスのデータを変更できるようになります

1. Business Managerを開く (https://{YOUR_INSTANCE_URL}.commercecloud.salesforce.com/on/demandware.store/Sites-Site/default/ViewApplication-DisplayWelcomePage)
2. **Administration** >> **Open Commerce API Settings**を選択


![](/assets/8.22f4966f9acc62700502855a8614f8279229742bef4096f8e623c4ee65c4de85.fe495661.png)

1. **Select Type**ドロップダウンリストでDataを選択


![](/assets/9.c1b302b94a60b61d7fcf3e0bd611ed1efbbab4856fb53942f53957ac5716e6f3.fe495661.png)

1. Data APIの設定文字列で、WRITE権限が設定されていることを確認: **"write_attributes": "(**)"**
2. **Select Context**ドロップダウンリストでGlobal (organization-wide)を選択
3. **Save**を選択すると、数分でAPI Clientの権限が適用されます


これでAPI ClientをSalesforce Commerce Cloud統合で使用する準備が整いました

## 関連記事

- Result Exportは、ターゲットの送信先にデータを定期的にアップロードするために[スケジュール](/products/customer-data-platform/job-management/scheduling-jobs-using-td-console)を設定できます
- すべてのインポートおよびエクスポート統合は、[Treasure ワークフロー](/products/customer-data-platform/data-workbench/workflows)に追加できます。**td**データオペレータを使用して、クエリ結果を指定されたコネクタにエクスポートできます。詳細については、[Reference for Treasure Data Operators](/products/customer-data-platform/data-workbench/workflows/operators)を参照してください
- [Open Commerce Cloud API](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html)