> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# DataFast

> DataFast分析を使用して、収益をマーケティングチャネルに帰属させます。どのトラフィックソースが支払い顧客を引き寄せるかを追跡し、成長を最適化します。

## はじめに

DataFastは、収益を最優先に考えた分析ツールで、どのマーケティングチャネルが支払い顧客を引き寄せるかを発見するのに役立ちます。Dodo PaymentsをDataFastと統合することで、トラフィックソースに収益を帰属させ、高価値の顧客セグメントを特定し、データに基づいた意思決定を行ってビジネスを成長させることができます。

<Info>
  この統合には、[DataFast ダッシュボード](https://datafa.st/) から取得できる DataFast API キーが必要です。
</Info>

## 仕組み

DataFastは、クッキーに保存されたユニークな訪問者IDを通じて訪問者を追跡します。マーケティングチャネルに収益を帰属させるには、次の手順が必要です：

1. **チェックアウト セッションを作成する際に、`datafast_visitor_id` クッキーから DataFast の訪問者 ID を取得する**
2. **支払いのメタデータに訪問者 ID を保存する**
3. **支払いが成功したら DataFast の Payment API に支払いデータを送信する**

これにより、DataFastは成功した支払いを元のトラフィックソースと照合し、完全な収益帰属を提供します。

## 始め方

<Steps>
  <Step title="Install DataFast Script">
    まず、ウェブサイトに DataFast のトラッキングスクリプトをインストールします。これにより、訪問者を追跡する `datafast_visitor_id` クッキーが生成されます。

    プラットフォームごとのインストール手順については、[DataFast ドキュメント](https://datafa.st/docs)をご覧ください。
  </Step>

  <Step title="Get Your API Key">
    [DataFast ダッシュボード](https://datafa.st/) にログインし、ウェブサイト設定に移動して API キーを取得します。

    <Warning>
      API キーは安全に管理し、クライアント側のコードで公開しないでください。
    </Warning>
  </Step>

  <Step title="Capture Visitor ID in Checkout">
    チェックアウト セッションを作成する際に、クッキーから DataFast の訪問者 ID を取得し、支払いメタデータに追加します。
  </Step>

  <Step title="Send Payment Data via Webhook">
    支払いが成功したときに DataFast の Payment API に支払いデータを送信するように、Webhook を構成します。
  </Step>

  <Step title="Done!">
    🎉 これで収益データが DataFast ダッシュボードに表示され、マーケティングチャネルに完全に帰属されます。
  </Step>
</Steps>

## 実装ガイド

### ステップ1: チェックアウトメタデータに訪問者IDを追加

チェックアウトセッションを作成する際に、クッキーからDataFastの訪問者IDを取得し、支払いメタデータに含めます。

<CodeGroup>
  ```typescript Next.js theme={null}
  import { cookies } from 'next/headers';
  import { dodopayments } from '@/lib/dodopayments';

  export async function createCheckout(productId: string) {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = cookies().get('datafast_visitor_id')?.value;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    return payment;
  }
  ```

  ```javascript Express.js theme={null}
  const express = require('express');
  const router = express.Router();

  router.post('/create-checkout', async (req, res) => {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = req.cookies?.datafast_visitor_id;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: req.body.productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    res.json({ payment });
  });
  ```

  ```javascript Other Frameworks theme={null}
  // Capture DataFast visitor ID from cookie
  const datafastVisitorId = getCookie('datafast_visitor_id'); // Use your framework's cookie method

  const payment = await dodopayments.payments.create({
    product_cart: [{ product_id: productId, quantity: 1 }],
    // ... other payment configuration
    metadata: {
      datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
    },
  });
  ```
</CodeGroup>

### ステップ2: DataFastに支払いデータを送信

支払いが成功した際に、DataFastのPayment APIに支払いデータを送信するWebhookエンドポイントを設定します。

<Steps>
  <Step title="Open the Webhook Section">
    Dodo Payments ダッシュボードで、<b>Webhooks → + エンドポイントを追加</b>を選択し、統合のドロップダウンを展開します。

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/add.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=3aec6c9e450d0616573a4a7dfe89f78e" alt="エンドポイントを追加と統合ドロップダウン" style={{ maxHeight: '500px', width: 'auto' }} width="1720" height="1192" data-path="images/integrations/datafast/add.png" />
    </Frame>
  </Step>

  <Step title="Select DataFast">
    <b>DataFast</b> 統合カードを選択します。
  </Step>

  <Step title="Enter API Key">
    設定フィールドに DataFast API キーを提供します。

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/api-key.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=25129c8ca64e38ef44a6960c2f3a2993" alt="API キーを追加" style={{ maxHeight: '500px', width: 'auto' }} width="1740" height="882" data-path="images/integrations/datafast/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    変換コードを編集して、DataFast の Payment API 用に支払いデータを整形します。
  </Step>

  <Step title="Test & Create">
    サンプルペイロードでテストし、<b>作成</b>をクリックして統合を有効にします。
  </Step>
</Steps>

## 変換コードの例

### 基本的な支払い帰属

```javascript basic_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Only send to DataFast if visitor ID exists in metadata
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100, // Convert from cents to dollars
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### ゼロ小数通貨の処理

一部の通貨（JPYなど）は小数点以下を使用しません。金額計算を適切に調整してください：

```javascript zero_decimal.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      // Zero decimal currencies: JPY, KRW, CLP, etc.
      const zeroDecimalCurrencies = ['JPY', 'KRW', 'CLP', 'VND', 'UGX', 'MGA'];
      const isZeroDecimal = zeroDecimalCurrencies.includes(payment.currency);
      
      webhook.payload = {
        amount: isZeroDecimal 
          ? payment.total_amount // Use amount as-is for zero decimal currencies
          : payment.total_amount / 100, // Convert from cents for other currencies
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### サブスクリプション支払い

定期的なサブスクリプション支払いについては、各支払いを追跡できます：

```javascript subscription_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Check if this is a subscription payment
    const isSubscription = payment.subscription_id !== null;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100,
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
        // Optional: Add subscription context
        ...(isSubscription && {
          subscription_id: payment.subscription_id,
        }),
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

## ベストプラクティス

<Tip>
  **訪問者 ID を早めにキャプチャ**: チェックアウト フローのできるだけ早い段階で DataFast の訪問者 ID を保存して、ユーザーが離脱して再訪問した場合でも正確な帰属が行えるようにします。
</Tip>

* **常にメタデータに訪問者IDを含める**: 訪問者IDがないと、DataFastは収益をマーケティングチャネルに帰属させることができません
* **ゼロ小数通貨を処理する**: 一部の通貨（JPY、KRWなど）は小数点以下を使用しません—金額計算を適切に調整してください
* **サンプル支払いでテストする**: 本番環境に移行する前に、統合が正しく機能することを確認してください
* **DataFastダッシュボードを監視する**: 支払いが正しく表示され、適切に帰属されていることを確認してください
* **Webhookの再試行を使用する**: DataFastのPayment APIは冪等性があるため、Webhookが失敗した場合の再試行は安全です

## トラブルシューティング

<AccordionGroup>
  <Accordion title="Payments not appearing in DataFast">
    * DataFast API キーが正しくアクティブであることを確認する
    * `datafast_visitor_id` がキャプチャされ、支払いメタデータに保存されていることを確認する
    * Webhook の変換がペイロードを正しく整形していることを確認する
    * Webhook が `payment.succeeded` イベントでトリガーされていることを確認する
    * DataFast ダッシュボードでエラーメッセージや API ログを確認する
  </Accordion>

  <Accordion title="Revenue attribution not working">
    * DataFast トラッキングスクリプトがウェブサイトにインストールされ、正常に動作していることを確認する
    * `datafast_visitor_id` クッキーが正しく設定されていることを確認する
    * チェックアウトの作成と支払い完了で訪問者 ID が一致していることを確認する
    * チェックアウト セッションを作成する前に訪問者 ID をキャプチャしていることを確認する
    * 追加のガイダンスについては、DataFast の [Payment API ドキュメント](https://datafa.st/docs/payments-api) を確認する
  </Accordion>

  <Accordion title="Transformation errors">
    * JSON 構造が DataFast の Payment API の形式と一致していることを検証する
    * 必要なすべてのフィールド (`amount`、`currency`、`transaction_id`、`datafast_visitor_id`) が含まれていることを確認する
    * 金額が正しく変換されていること (ほとんどの通貨では 100 で除算、ゼロ小数通貨は除く)
    * API エンドポイント URL が正しいことを確認する: `https://datafa.st/api/v1/payments`
    * サンプル Webhook ペイロードで変換をテストする
  </Accordion>

  <Accordion title="Currency conversion issues">
    * ゼロ小数通貨 (JPY、KRW、CLP、VND、UGX、MGA) の場合は、100 で除算せずに金額をそのまま送信する
    * その他すべての通貨では、金額を 100 で除算してセントから基本単位に変換する
    * 通貨コードが ISO 4217 形式 (例: “USD”、“EUR”、“JPY”) と一致していることを再確認する
  </Accordion>
</AccordionGroup>

## 追加リソース

<CardGroup cols={2}>
  <Card title="DataFast Documentation" icon="book" href="https://datafa.st/docs/payments-api">
    DataFast の Payment API および収益帰属機能の詳細をご覧ください。
  </Card>

  <Card title="DataFast Dashboard" icon="chart-bar" href="https://datafa.st/">
    DataFast ダッシュボードにアクセスして、収益分析と帰属データを表示します。
  </Card>
</CardGroup>

<Info>
  お困りですか? 統合に関するサポートは [support@dodopayments.com](mailto:support@dodopayments.com) までご連絡ください。
</Info>
