# Intercom Import Integration

IntercomからTreasure Dataへ直接データをインポートできます。

# 前提条件

- [TD Toolbelt](https://toolbelt.treasuredata.com/)を含むTreasure Dataの基礎知識
- Intercomの基礎知識


# Treasure コンソールを使用してConnectionを作成する

## 新しいConnectionを作成する

Integrations Hub > Catalogに移動し、Intercomを検索して選択します。

![](/assets/image-20191021-163206.227de535ba11d859b5f72ca39993368b027215d1731b56966a1f61fae0195574.5ce474d2.png)

**Create**を選択します。認証済みConnectionを作成します。

次のダイアログが開きます。

![](/assets/image-20191021-163213.a3fc44d8e4fdc2cec029167063f6d4fe801e2201ca2ddb84b327389428ee322e.5ce474d2.png)

Intercomへのアクセスには、OAuth2認証が必要です。

**Click here**を選択して、Intercomアカウントに接続します。

認証情報を入力してIntercomにサインインします。

![](/assets/image-20191021-163226.7bf8e404820f7180f50906343f51d0975c1cdab2ac3c1ac293ace4808e89c6be.5ce474d2.png)

Treasure Dataへのアクセスを許可すると、Treasure コンソールにリダイレクトされます。再度Intercom connectorを選択し、OAuth Authenticateメソッドを選択します。ドロップダウンリストにアカウント名を持つOAuth接続が表示されます。使用するアカウントを選択し、接続の作成に進みます。

![](/assets/image-20191021-163235.7be7aea3c68d676a1522ba30ec3a9044437329da72b90211304534929a4c4ebb.5ce474d2.png)

![](/assets/image-20191021-163244.5d4e9fb45ea3b663b3d1aa82393219c3e8b58ad988d22c150ea86bd560dcb556.5ce474d2.png)

新しいGoogle Drive Connectionに名前を付けます。**Done**を選択します。

以前、このdata connectorでは認証に`App id`と`API Key`が使用されていました。しかし、[IntercomはOAuthフローを開始](https://developers.intercom.com/docs/build-an-integration/learn-more/authentication/setting-up-oauth)し、[Intercom APIキーは非推奨](https://developers.intercom.com/blog/announcement-upcoming-deprecation-of-api-keys)になりました。

Google Sign-Inを使用してIntercomにログインしている場合は、OAuthフローを開始する前に、すでにIntercomにログインしていることを確認してください。IntercomはOAuthフロー経由でGoogle Sign-Inではなく、パスワードログインを要求します。

#### 既存のAPIキーベースのConnectionをOAuthに更新する

APIキーを使用している場合でも、以前と同じようにOAuthフローを開始してください。両方が指定されている場合、OAuthがAPIキーよりも優先されます。

## Treasure Dataへデータを転送する

認証済みConnectionを作成すると、自動的にAuthenticationsタブに移動します。作成したConnectionを探して、**New Source**を選択します。

### UsersとConversationsからインポート:

Sourceからusersまたはconversationsを選択します。

![](/assets/image-20191021-163319.73d1548449516a00ddb5fe3c93b2ec55e5d5387ad117d63f61e25d017dcf58cc.5ce474d2.png)

![](/assets/image-20191021-163327.738525ff2b84c207d192141fbb7774a6f23ab67899feb9cbba612d9c4e490d6b.5ce474d2.png)

パラメータ:

- **Incremental**: スケジュールに基づいてデータをインポートする場合に使用します。前回の実行以降に作成された最新のuserまたはconversationのみをインポートするために使用します。


### TagsとSegmentsからインポート:

Sourceからtagsまたはsegmentsを選択します

![](/assets/image-20191021-163335.e3abc2f92bae7da6366e17d05abdd8ec36628fd85e2cfabd83dc65eb7aea1002.5ce474d2.png)

![](/assets/image-20191021-163342.ba298752c9b7ab290168b0d743fb9931301c223806f3c4d527b2a81ff24444eb.5ce474d2.png)

### Data Preview

インポートを実行する前に、Generate Preview を選択してデータの[プレビュー](/products/customer-data-platform/integration-hub/batch/import/previewing-your-source-data)を表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。

1. **Next** を選択します。Data Preview ページが開きます。
2. データをプレビューする場合は、**Generate Preview** を選択します。
3. データを確認します。


### Data Placement

データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。

1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。
2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。
3. オプションで、database 名を入力します。
4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。
5. オプションで、table 名を入力します。
6. データをインポートする方法を選択します。
  - **Append** (デフォルト) - データインポートの結果は table に追加されます。
table が存在しない場合は作成されます。
  - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。
  - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。
7. **Timestamp-based Partition Key** 列を選択します。
デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。
8. データストレージの **Timezone** を選択します。
9. **Schedule** の下で、このクエリを実行するタイミングと頻度を選択できます。


#### 一度だけ実行

1. **Off** を選択します。
2. **Scheduling Timezone** を選択します。
3. **Create & Run Now** を選択します。


#### 定期的に繰り返す

1. **On** を選択します。
2. **Schedule** を選択します。UI では、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の 4 つのオプションが提供されます。
3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。
4. **Scheduling Timezone** を選択します。
5. **Create & Run Now** を選択します。


転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。

## Details

Transferに名前を付けて、**Done**を選択して開始します。

![](/assets/image-20191021-163431.eb0a775efe14f22aa08cc9d933172ac06f1c5bfc04d45f03b66a17a1054affcb.5ce474d2.png)

# コマンドラインの使用

### 'td' コマンド v0.11.9 以降をインストール

最新の [TD Toolbelt](https://toolbelt.treasuredata.com/) をインストールできます。


```
$ td --version
0.15.0
```

## 設定ファイルの作成

以下の例のように、Intercom アカウントのアクセス情報を含む設定ファイル(例: `load.yml`)を準備します:

Users をインポートする場合


```
in:
  type: intercom
  access_token: xxxxxxx
  target: users
  incremental: false
out:
 mode: append
```

Conversations をインポートする場合


```
in:
  type: intercom
  access_token: xxxxxxx
  target: conversations
  incremental: false
out:
 mode: append
```

Segments をインポートする場合


```
in:
  type: intercom
  access_token: xxxxxxx
  target: segments
out:
 mode: append
```

Tags をインポートする場合


```
in:
  type: intercom
  access_token: xxxxxxx
  target: tags
out:
 mode: append
```

#### Access Token

上記の例では、Intercom の `users` オブジェクトをダンプします。ここで `access_token` は、Intercom から取得した有効なアクセストークンです。Treasure コンソール を通じた OAuth フローの使用が推奨されます。OAuth フローの代わりに、[Personal Access Token](https://developers.intercom.com/docs/build-an-integration/learn-more/authentication) を `access_token` として使用することもできます。

#### Target

`target` オプションで、ストアから取得するデータを選択できます。

## データのプレビュー(オプション)

`td connector:preview` コマンドを使用して、インポート予定のデータをプレビューできます。


```
$ td connector:preview load.yml
```

+-----------+--------------+----------------------------+----
| id:string | user_id:string | email:string             | ...
+-----------+----------------+-------------------------------
| "1"       | "33"           | "xxxx@xxx.com"           |
| "2"       | "34"           | "yyyy@yyy.com"           |
| "3"       | "35"           | "zzzz@zzz.com"           |
| "4"       | "36"           | "aaaa@aaa.com"           |
| "6"       | "37"           | "bbbb@bbb.com"           |
+-----------+----------------+--------------------------+----


```

## Load Jobの実行

Load Jobを送信します。データサイズによっては数時間かかる場合があります。ユーザーはデータが保存されているデータベースとテーブルを指定する必要があります。

Treasure Dataのストレージは時間でパーティション化されているため、`--time-column`オプションを指定することをお勧めします。オプションが指定されていない場合、Data Connectorは最初の`long`または`timestamp`カラムをパーティショニング時間として選択します。`--time-column`で指定されるカラムのタイプは、`long`または`timestamp`タイプのいずれかである必要があります。

データに時間カラムがない場合は、`add_time`フィルターオプションを使用して追加できます。詳細は[add\_time filter plugin](https://docs.treasuredata.com/smart/project-product-documentation/add_time-filter-function)を参照してください。
```

$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at


```

上記のコマンドは、すでに*database(td\_sample\_db)*と*table(td\_sample\_table)*を作成していることを前提としています。データベースまたはテーブルがTDに存在しない場合、このコマンドは成功しないため、データベースとテーブルを[手動で](https://docs.treasuredata.com/smart/project-product-documentation/data-management)作成するか、`td connector:issue`コマンドで`--auto-create-table`オプションを使用してデータベースとテーブルを自動作成してください。
```

$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table


```
Time Format カラムを「Partitioning Key」に割り当てるには、「--time-column」オプションを使用します。

# スケジュール実行

定期的なIntercomインポートのために、定期的なData Connector実行をスケジュールできます。当社は高可用性を確保するためにスケジューラーを慎重に構成しています。この機能を使用することで、ローカルデータセンターで`cron`デーモンを実行する必要がなくなります。

## スケジュールの作成

新しいスケジュールは`td connector:create`コマンドを使用して作成できます。スケジュールの名前、cronスタイルのスケジュール、データが保存されるデータベースとテーブル、およびData Connector設定ファイルが必要です。
```

$ td connector:create 
daily_intercom_import 
"10 0 * * *" 
td_sample_db 
td_sample_table 
load.yml


```

`cron`パラメータは、次の3つのオプションも受け入れます：`@hourly`、`@daily`、`@monthly`。| デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。`-t`または`--timezone`オプションを使用して、タイムゾーンでスケジュールを設定できます。`--timezone`オプションは、「Asia/Tokyo」、「America/Los\_Angeles」などの拡張タイムゾーン形式のみをサポートします。PST、CSTなどのタイムゾーンの略語は\*サポートされておらず\*、予期しないスケジュールにつながる可能性があります。

## スケジュールのリスト表示

`td connector:list`でスケジュールされたエントリのリストを確認できます。
```

$ td connector:list


```

## スケジュールの設定と履歴の表示

`td connector:show`は、スケジュールエントリの実行設定を表示します。
```

td connector:show daily_intercom_import


```

`td connector:history`は、スケジュールエントリの実行履歴を表示します。個々の実行の結果を調査するには、`td job jobid`を使用します。
```

td connector:history daily_intercom_import


```

## スケジュールの削除

`td connector:delete`はスケジュールを削除します。
```

td connector:delete daily_intercom_import


```

```