# TD JavaScript SDKクイックスタート

Treasure Data JavaScript SDK(TD JS SDK)を使用すると、Treasure AIはお客様のドメインのウェブサイトにfirst-party cookieを保存し、ウェブサイトのユーザーを他のプラットフォーム全体で追跡して情報を収集できます。TD JS SDKを使用すれば、ウェブサイトのアクティビティを追跡するためにサーバー側に何もインストールする必要はありません。

# TD JS SDKのバージョン

TD JS SDKの現在のバージョンは次のとおりです。

- 4.4: `https://cdn.treasuredata.com/sdk/4.4/td.min.js` でホストされています
- 3.1: `https://cdn.treasuredata.com/sdk/3.1/td.min.js` でホストされています


TD JS SDKの以前のバージョン
Treasure AIは、以前のバージョンのTD JS SDKを使用しているコードを、バージョン4.xまたは3.xにアップグレードすることを推奨します。

# 前提条件

- JavaScriptとHTMLの基本的な知識
- Treasure AIの基本的な知識
- Treasure AIのWrite-Only APIキー
- Treasure AIアカウントに作成済みのデータベースとテーブル
- [お使いのリージョンに固有のサイトとエンドポイント](/apis/endpoints/endpoints)


## 制限事項

JavaScript SDKからのインポートには、IP Allowlistは適用されません。

ウェブブラウザは、無効なタイムスタンプ(1970/01/01など)を指定することがよくあります。そのため、タイムスタンプが7日より古いログ、または現在の日付より3日以上先のログは無視されます。

# セットアップ

カスタムビルドしたJavaScript SDKを、お客様のウェブサイトまたは任意のCDNでホストできます。このクイックスタートでは、事前にビルドされ一般公開されているバージョンを使用します。

## スクリプトスニペットによるTD JS SDKのインストール

以下から適切なJavaScriptスニペットをコピーし、ページの`<head>`タグに貼り付けて、td-js-sdkをページにインストールします。

```html version 4.4
<script type="text/javascript">
!function(t,e){if(void 0===e[t]){e[t]=function(){e[t].clients.push(this),this._init=[Array.prototype.slice.call(arguments)]},e[t].clients=[];for(var r=["addRecord","blockEvents","fetchServerCookie","fetchGlobalID","fetchUserSegments","resetUUID","ready","setSignedMode","setAnonymousMode","set","trackEvent","trackPageview","trackClicks","unblockEvents"],s=0;s<r.length;s++){var c=r[s];e[t].prototype[c]=function(t){return function(){return this["_"+t]=this["_"+t]||[],this["_"+t].push(Array.prototype.slice.call(arguments)),this}}(c)}var n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src=("https:"===document.location.protocol?"https:":"http:")+"//cdn.treasuredata.com/sdk/4.4/td.min.js";var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(n,o)}}("Treasure",this);
</script>
```

```html version 3.1
<script type="text/javascript">
!function(t,e){if(void 0===e[t]){e[t]=function(){e[t].clients.push(this),this._init=[Array.prototype.slice.call(arguments)]},e[t].clients=[];for(var r=["addRecord","blockEvents","fetchServerCookie","fetchGlobalID","fetchUserSegments","resetUUID","ready","setSignedMode","setAnonymousMode","set","trackEvent","trackPageview","trackClicks","unblockEvents"],s=0;s<r.length;s++){var c=r[s];e[t].prototype[c]=function(t){return function(){return this["_"+t]=this["_"+t]||[],this["_"+t].push(Array.prototype.slice.call(arguments)),this}}(c)}var n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src=("https:"===document.location.protocol?"https:":"http:")+"//cdn.treasuredata.com/sdk/3.1/td.min.js";var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(n,o)}}("Treasure",this);
</script>
```

## npmによるTD JS SDKのインストール

CommonJSを使用して`Treasure`クラスをエクスポートします。

```bash
npm install --save td-js-sdk
```

エントリポイントは`lib/treasure.js`です。このエントリポイントは、BrowserifyやWebpackなどのビルドツールで使用できます。

```javascript
var Treasure = require('td-js-sdk')
```

これはNodeJSでは動作しません。ブラウザ専用のソリューションです。

## APIキーの取得

`YOUR_API_KEY` は、実際の apikey 文字列に置き換える必要があります。API キーは、Treasure コンソール のプロファイルから取得できます。[Write-only API key](/products/my-settings/getting-your-api-keys) の使用が推奨されます。

## 初期化

TD JS SDKは、SDKのインスタンスごとにデータベースとテーブルを作成し、それらのテーブルにデータを送信します。TD JS SDKをインストールした後、次のようなコードで初期化します。

```javascript
// データベース用のインスタンスを設定します
var td = new Treasure({
  host: 'YOUR_REGION.records.in.treasuredata.com',
  writeKey: 'YOUR_WRITE_ONLY_APIKEY_IS_HERE',
  database: 'DATABASE_NAME'
});
```

管理者の場合、データベースは自動的に作成されます。管理者でない場合は、管理者にデータベースの作成と、そのデータベースへの`import only`または`full access`の権限付与を依頼する必要があります。これらの権限がないと、イベントを送信できません。

`YOUR_REGION`は、お使いのリージョンのエンドポイント(例: `us01`、`eu01`、`ap01`)に置き換えてください。リージョンのエンドポイントの詳細については、後述の[Streaming Ingestion](#streaming-ingestion)セクションを参照してください。

## 最初のイベントの送信

オブジェクトを初期化した後、Treasure AIにイベントを送信できます。完全にカスタマイズしたイベントレコードには、`addRecord`関数を使用します。たとえば、次のようなコードでイベントを記録できます。

```javascript
// データベース用のインスタンスを設定します
var company = new Treasure({...});

// 送信したいプロパティを持つデータオブジェクトを作成します
var sale = {
  itemId: 101,
  saleId: 10,
  userId: 1
};

// 'sales'テーブルに送信します
company.addRecord('sales', sale);
```

イベントはいくつでも送信できます。各イベントは非同期で送信されます。

# 追跡

TD JS SDKは、ページインプレッションとイベント、およびクライアント情報を追跡する手段を提供します。

## クライアントIDとストレージ

各クライアントにはUUIDが必要です。設定オブジェクトで`clientId`を設定すると、明示的に指定できます。指定しない場合、TD JS SDKは以前に設定されたUUIDをcookieから検索します。見つからない場合は、UUIDが生成されます。

セッションをまたいでクライアントを追跡するために、cookieが設定されます。

## ページインプレッション

ページインプレッションを追跡するには、次のようなコードを使用します。

```javascript
/* JavaScriptスニペットをここに挿入します */
var td = new Treasure({...});

// クロスドメイン追跡を有効化します
td.set('$global', 'td_global_id', 'td_global_id');

// ページビュー情報を'pageviews'テーブルに追跡します
td.trackPageview('pageviews');
```

これにより、追跡したすべての情報が`pageviews`テーブルに送信されます。

### カスタムパラメータの設定

カスタムパラメータを設定するには、`td.set()`関数を使用します。

```javascript
// ページビュー情報を'pageviews'テーブルに追跡します
td.set('pageviews', {foo: 'foo', bar: 'bar'});
td.trackPageview('pageviews');
```

## イベント追跡

ページビューの追跡に加えて、`trackEvent()`関数を使用してカスタムイベントを追跡できます。構文は`addRecord`と似ていますが、`trackEvent`は追跡したすべての情報を取得します。次の例では、`button`がイベントを記録するテーブルの名前です。イベントには、追加の情報とコンテキストを引数として渡せます。

```javascript
var td = new Treasure({});

var buttonEvent1 = function () {
  td.trackEvent('button', {
    number: 1
  });

  // doButtonEvent(1);
};

var buttonEvent2 = function () {
  td.trackEvent('button', {
    number: 2
  });

  // doButtonEvent(2);
};
```

各イベントは非同期で送信されます。

## 個人単位の追跡の有効化(データプライバシー)

さまざまな地域のデータプライバシー規制、特にGDPRに準拠するため、Treasure Data JavaScript SDKはデフォルトで**匿名モード**で動作します。匿名モードでは、個人を特定できる特定のイベントメタデータは収集されません。具体的には、匿名モードではデフォルトで次の情報は収集されません。

* `td_ip` - リクエストのIPアドレス(サーバー側で追加)
* `td_client_id` - クライアントのUUID(first-party cookie。[匿名ID](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/anonymous-visitor-ids-with-javascript-sdk)を参照)
* `td_global_id` - クライアントのUUID(third-party cookie。[匿名ID](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/anonymous-visitor-ids-with-javascript-sdk)を参照)


個々のユーザーを追跡し、ユーザーセッション内およびセッションをまたいでデータを分析したい場合や、追跡した行動を実在の個人に関連付けたい場合などには、`td_client_id`と`td_global_id`が必要です。

個人情報を収集するかどうかは、社内のデータプライバシー責任者および法務顧問とデータ収集ポリシーを確認して判断する必要があります。個人の追跡を有効化する場合は、同意管理システムと連携して、追跡に対する各ユーザーのオプトインを記録することを推奨します。ユーザーの同意を確認できたら、JS SDKの**署名モード**を有効化して、これらの属性をイベントとともに取得できます。

```javascript
td.setSignedMode()
```

## 追跡される情報

追跡関数を呼び出すたびに、次の情報が送信されます。

| イベント名 | 説明 |
|  --- | --- |
| `td_version` | td-js-sdkのバージョン |
| `td_client_id` | ブラウザのcookie ID。JS SDK 4.xでは、この値はクライアントによって作成されます。個人を特定できる情報(PII)とみなされ、`inSignedMode()`がTRUEの場合にのみ追跡されます。 |
| `td_charset` | 文字セット |
| `td_description` | descriptionメタタグ |
| `td_language` | ブラウザの言語 |
| `td_color` | 画面の色深度 |
| `td_screen` | 画面の解像度 |
| `td_viewport` | ビューポートのサイズ |
| `td_title` | ドキュメントのタイトル |
| `td_url` | ドキュメントのURL |
| `td_user_agent` | ブラウザのユーザーエージェント。`navigator.userAgent`関数で取得する`userAgent`変数と、JSSDKのバージョン番号を含む`sdkUserAgent`変数で構成されます。 |
| `td_platform` | ブラウザのプラットフォーム |
| `td_host` | ドキュメントのホスト |
| `td_path` | ドキュメントのパス名 |
| `td_referrer` | ドキュメントのリファラー |
| `td_ip` | リクエストのIPアドレス(サーバー)。この情報は、`td.set('$global', 'td_global_id', 'td_global_id')`で`td_global_id`が有効化され、署名モードである場合にのみ設定されます。個人を特定できる情報(PII)とみなされ、`inSignedMode()`がTRUEの場合にのみ追跡されます。 |
| `td_browser` | クライアントのブラウザ(サーバー)。JS SDK 4.xはこのフィールドを設定しません。この値を取得するには、HiveまたはTrino(Presto)の関数[TD_PARSE_USER_AGENT](/products/customer-data-platform/data-workbench/queries/sql-reference/td_hive_function_reference#td_parse_user_agent)を使用します。 |
| `td_browser_version` | クライアントのブラウザのバージョン(サーバー)。JS SDK 4.xはこのフィールドを設定しません。この値を取得するには、HiveまたはTrino(Presto)の関数[TD_PARSE_USER_AGENT](/products/customer-data-platform/data-workbench/queries/sql-reference/td_hive_function_reference#td_parse_user_agent)を使用します。 |
| `td_os` | クライアントのオペレーティングシステム(サーバー)。JS SDK 4.xはこのフィールドを設定しません。この値を取得するには、HiveまたはTrino(Presto)の関数[TD_PARSE_USER_AGENT](/products/customer-data-platform/data-workbench/queries/sql-reference/td_hive_function_reference#td_parse_user_agent)を使用します。 |
| `td_os_version` | クライアントのオペレーティングシステムのバージョン(サーバー)。JS SDK 4.xはこのフィールドを設定しません。この値を取得するには、HiveまたはTrinoの関数[TD_PARSE_USER_AGENT](/products/customer-data-platform/data-workbench/queries/sql-reference/td_hive_function_reference#td_parse_user_agent)を使用します。 |


`td_ip`を除くすべてのサーバー側の値は、ユーザーエージェント文字列を解析して取得されます。この処理は、常に最新の状態を保てるようにサーバー側で行われます。

# デフォルト値

`Treasure#set`を使用すると、テーブルにデフォルト値を設定できます。テーブル名として`$global`を渡すと、*すべての*テーブルにデフォルト値を設定できます。

`Treasure#get`にテーブル名`$global`を渡すと、すべてのグローバルプロパティを確認できます。

レコードを送信すると、空のレコードオブジェクトが作成され、次の順序でプロパティが適用されます。

1. `$global`のプロパティが`record`オブジェクトに適用されます
2. テーブルのプロパティが`record`オブジェクトに適用され、`$global`のプロパティを上書きします
3. `addRecord`関数に渡したレコードのプロパティが`record`オブジェクトに適用され、テーブルのプロパティを上書きします


# サードパーティのコンバージョンタグの収集

Meta Click IDなどのサードパーティタグは、ユーザーが広告コンテンツ経由でお客様のウェブサイトにアクセスしたときに、cookieまたはリクエストパラメータとしてウェブサイトに埋め込まれる場合があります。JS SDK 4.1以降では、`collectTags`を使用してこれらのタグを収集できます。

```javascript

td.collectTags(
  {
    vendors: ['google_ads', 'google_mp', 'meta', 'x'],
    cookies: ['_cookie_a', '_cookie_b'],
    params: ['param_a', 'param_b']
  },
  {
    gclPrefix: '_gcl2'
  }
)
```

サポートされているベンダー名の一覧は、[JS-SDKによるサードパーティのコンバージョンタグの収集](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/third-party-conversion-tags-collecting-with-js-sdk)を参照してください。

# データプライバシー

Treasure Data JavaScript SDKは、EUのGDPRで求められる多くの一般的な要件への準拠を可能にします。より新しく厳格なデータプライバシーポリシーへの準拠を支援するため、いくつかのメソッドが用意されています。

- `blockEvents` / `unblockEvents` - Treasure AIへのイベント送信をすべて停止、または再開する引数なしのメソッドです。指定すると、メッセージは送信されず、呼び出しもキャッシュされません。デフォルトでは、イベントはブロックされていません。これらのメソッドのドキュメントを参照してください。
  - [blockEvents](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasureblockevents)
  - [unblockEvents](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasureunblockevents)
  - [areEventsBlocked](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasureareeventsblocked)
- `setSignedMode` - 「署名モード」に切り替える引数なしのメソッドです。署名モードでは、SDKが一部のPIIを自動的に収集する場合があります。指定すると、Treasure AIに送信されるデータに`td_ip`、`td_client_id`、`td_global_id`が含まれます。[setSignedMode](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasuresetsignedmode)のドキュメントを参照してください。
- `setAnonymousMode` - 「匿名モード」に切り替える引数なしのメソッドです。匿名モードでは、SDKはPIIを自動的に収集しません。指定すると、送信されるデータから`td_ip`、`td_client_id`、`td_global_id`が明示的に除外されます。これがデフォルトの動作です。[setAnonymousMode](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasuresetanonymousmode)のドキュメントを参照してください。
- `resetUUID` - `td_client_id`の値をリセットするメソッドです。ユーザーのcookieに保存されている元の値が上書きされるため、データ上ではまったく新しいユーザーとして表示される可能性が高くなります。リセット時に適切な値を渡すと、クライアントIDやカスタムの有効期限を指定できます。[resetUUID](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#treasureresetuuid)のドキュメントを参照してください。
- `config.startInSignedMode` - この設定オプションは、ユーザーが署名モードと匿名モードのどちらを希望するかが明示的に決まっていない場合に、署名モードをデフォルトにするようSDKに指示します。デフォルトの動作では、ユーザーは匿名モードになります。


# 例

新しいユーザーがサイトにアクセスし、そのユーザーがマーケティング目的のcookie追跡に同意しているかを確認する必要があるとします。お客様はこの情報を管理するために同意管理ベンダーと契約しており、ユーザーの同意情報がわかった時点で適切な値を設定したいと考えています。

```javascript
var td = new Treasure({
  database: 'foo',
  writeKey: 'your_write_only_key'
});
td.trackClicks()

var successConsentCallback = function (consented) {
  if (consented) {
    td.setSignedMode()
  } else {
    td.setAnonymousMode()
  }
}

var failureConsentCallback = function () {
  // エラーが発生し、同意状況が不明です
  td.setAnonymousMode()
}

ConsentManagementVendor.getConsent(userId, successConsentCallback, failureConsentCallback)
```

このシナリオでは、同意管理ベンダーは、`userId`に関連付けられたユーザーが自分のPIIをマーケティング目的で使用することに同意しているかどうかに基づいて、コールバックでtrueまたはfalseの値を返します。PII以外のデータは引き続き収集される場合があります。

次に、同意管理ベンダーが同意レベルに応じて`MARKETING`、`NON-MARKETING`、`REFUSED`の文字列を返すとします。それぞれ「PIIのマーケティング目的での使用に同意」「マーケティング以外の目的でのデータ収集に同意」「すべてのデータ収集を拒否」を意味します。この場合、`successConsentCallback`をわずかに変更するだけで対応できます。

```js
var successConsentCallback = function (consented) {
  if (consented === 'MARKETING') {
    td.unblockEvents()
    td.setSignedMode()
  } else if (consented === 'NON-MARKETING') {
    td.unblockEvents()
    td.setAnonymousMode()
  } else if (consented === 'REFUSED') {
    td.blockEvents()
  }
}
```

このようにすると、署名モードまたは匿名モードに移行したときに、実際にTreasure AIにデータが収集されていることを確認できます。顧客がすべての追跡を拒否した場合、そのイベントはブロックされ、この状態はページを再読み込みしても保持されます。

# SameSite Cookie

ChromeとFirefoxの最近のリリースでは、新しいsecure-by-defaultのcookie分類システムが適用されるようになり、SameSite値が宣言されていないcookieは`SameSite=Lax`のcookieとして扱われます。サードパーティのコンテキストで使用できるのは、`SameSite=None; Secure`として設定されたcookieのみで、安全な接続からアクセスされる場合に限られます。

JS SDK 2.4.2より前のバージョンでは、`td_client_id`と`td_global_id`のcookieがsecure cookieとして設定されていなかったため、この影響を受けていました。

JS SDK 2.4.2以降では、Treasure Data JS SDKは新しいcookieの適用方式に対応するため、デフォルトで`SameSite=None; Secure`のcookieを使用します。

詳細については、以下を参照してください。

- **Firefox**: [Changes to SameSite Cookie Behavior](https://hacks.mozilla.org/2020/08/changes-to-samesite-cookie-behavior/)
- **Chrome**: [SameSite Cookie Changes in February 2020: What You Need to Know](https://blog.chromium.org/2020/02/samesite-cookie-changes-in-february.html)


# Streaming Ingestion

JS SDKによるデータ取り込みの方法は、使用しているSDKのバージョンによって異なります。

| JS SDKのバージョン | 取り込み方法 |
|  --- | --- |
| 4.1以降 | 新しいMobile/JavaScript REST API(records.in.treasuredata.com)のみ。 |
| 3.1.x | 次のいずれか  従来のMobile/JavaScript SDKエンドポイント(in.treasuredata.com)新しいMobile/JavaScript REST API(records.in.treasuredata.com)どちらを使用するかは、パラメータ`useNewJavaScriptEndpoint`で決まります。 |
| 3.1.0以前(非推奨) | 従来のMobile/JavaScript SDKエンドポイントのみ。 |


## 設定

`useNewJavaScriptEndpoint`には`true`または`false`の値を指定します。このオプションを有効化する場合は、新しいエンドポイントを指すように`host`の設定も変更する必要があります。この新機能は、SDKのサーバー側cookieおよびパーソナライゼーション機能には影響しません。

`records.in`エンドポイントには、次の制限があります。

- 1~500レコード。
- 1イベントあたり最大1000kiB。
- 全イベントの合計で最大5MiB。


`host`の設定には、データを取り込む環境に応じて次の値を指定します。

| リージョン | 取り込みエンドポイント |
|  --- | --- |
| US | us01.records.in.treasuredata.com |
| Tokyo | ap01.records.in.treasuredata.com |
| Europe | eu01.records.in.treasuredata.com |
| Korea | ap02.records.in.treasuredata.com |


**JS SDK 4.4の例**

```js
  var foo = new Treasure({
    database: 'foo',
    writeKey: 'your_write_only_key',
    host: 'us01.records.in.treasuredata.com'
  });
```

`useNewJavaScriptEndpoint`を`false`に設定するか、設定しないことでこの機能をオプトアウトする場合は、hostを従来の設定に更新してください。

**JS SDK 3.1の例**

```js
  var foo = new Treasure({
    database: 'foo',
    writeKey: 'your_write_only_key',
    useNewJavaScriptEndpoint: true,
    host: 'us01.records.in.treasuredata.com'
  });
```

`useNewJavaScriptEndpoint`を`false`に設定するか、設定しないことでこの機能をオプトアウトする場合は、hostを従来の設定に更新してください。

## 制限事項と動作の変更

JS SDK 4.1以降では、次の変更と制限が導入されました。

- リアルタイムセグメンテーションを使用するには、バックエンドでルーティングを有効化する必要があります。ルーティングを有効化するには、テクニカルサポートまたはカスタマーサクセス担当者にお問い合わせください。その際、`account`、`database`、`table`をお知らせください。
- `td_browser`、`td_browser_version`、`td_os`、`td_os_version`は、JS SDK 4.xでは追跡されません。これらの値を取得するには、`td_user_agent`とHiveまたはTrino(Presto)の関数[TD_PARSE_USER_AGENT](/products/customer-data-platform/data-workbench/queries/sql-reference/td_hive_function_reference)を使用します。
- `records.in`エンドポイントには、次の制限があります。
  - 1~500レコード。
  - 1イベントあたり最大1000kiB。
  - 全イベントの合計で最大5MiB。


# Realtime Personalization 2.0

[新しいAPI](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#fetchpersonalizationconfig-data-successcallback-errorcallback)である`fetchPersonalization`を使用すると、パーソナライゼーションデータを取得して、消費者にパーソナライズされたコンテンツを配信できます。

### エンドポイント

- us01.p13n.in.treasuredata.com
- eu01.p13n.in.treasuredata.com
- ap01.p13n.in.treasuredata.com
- ap03.p13n.in.treasuredata.com


# UTMパラメータの追跡

この機能はtd-js-sdk v4.4.0でサポートされています。

マーケターは、メールとランディングページ全体のパフォーマンスを追跡し、エンゲージメント、コンバージョン、収益アトリビューションを効果的に測定できます。

次のUTMパラメータは自動的に追跡されます。

- *utm_id*
- *utm_medium*
- *utm_source_platform*
- *utm_source*
- *utm_campaign*
- *utm_marketing_tactic*


### 仕組み

UTMパラメータ付きでウェブページが読み込まれると、JS SDKはこれらのパラメータを自動的に収集し、$globalテーブルに追加します。その結果、これらのパラメータはページビューやイベント追跡などの追跡リクエストとともに送信されます。

# REST APIの直接利用

JavaScript SDKは、[REST APIエンドポイント](/apis/endpoints/endpoints)を使用してデータをインポートします。サーバー側のバッファリングのため、インポートがデータベースに反映されるまで数分かかる場合があります。

* X-TD-Data-Type: k - イベントコレクターは複数のデータタイプを扱います。'k'はその1つで、複数のレコードを扱えます。


**単一レコード**

```bash
$ curl -X POST -H 'Content-Type: application/json' -H 'X-TD-Write-Key: your_write_apikey' \
--data-binary '{"name":"komamitsu", "num":1234}' \
https://your_region.treasuredata.com/js/v3/event/your_db/your_table
```

**複数レコード**

```bash
$ curl -X POST -H 'Content-Type: application/json' -H 'X-TD-Write-Key: your_write_apikey' \
-H 'X-TD-Data-Type: k' \
--data-binary '{"your_db.your_table":[{"time":1403147720, "name":"komamitsu", "age":41},{"time":1403147721, "name":"kzk", "age":29}]}' \
https://your_region.treasuredata.com/js/v3/event
```

この制限は、https://in.treasuredata.com などのイベントコレクターエンドポイントにデータを送信するJS SDK 3.1.0以前(非推奨)のバージョンに適用されます。

上記の例を試す場合は、time値を現在のUNIX時間の値に変更してください。タイムスタンプが7日より古い場合、または現在の日付より3日以上先の場合は無視されます。

# 関連情報

JS SDKに関するその他のリソースは次のとおりです。

- [GitHubリポジトリのtd-js-sdk README](https://github.com/treasure-data/td-js-sdk#td-js-sdk)
- [TD JavaScript APIリファレンス](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/api#td-js-sdk-apis)