Skip to main content
コンバージョントラッキングのためにセラーアカウントにイベントソースを設定します。アップサートセマンティクス、セラー管理ソース、セットアップ手順をサポートします。 レスポンス時間: 約1秒(同期設定) リクエストスキーマ: /schemas/v3/media-buy/sync-event-sources-request.json レスポンススキーマ: /schemas/v3/media-buy/sync-event-sources-response.json

クイックスタート

購入トラッキング用のイベントソースを設定します:
import { testAgent } from "@adcp/client/testing";
import { SyncEventSourcesResponseSchema } from "@adcp/client";

const result = await testAgent.syncEventSources({
  account: { account_id: "acct_12345" },
  event_sources: [
    {
      event_source_id: "website_pixel",
      name: "Main Website Pixel",
      event_types: ["purchase", "lead", "add_to_cart"],
      allowed_domains: ["www.example.com", "shop.example.com"],
    },
  ],
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

// レスポンスをスキーマに対して検証する
const validated = SyncEventSourcesResponseSchema.parse(result.data);

// まず操作レベルのエラーを確認する(判別共用体)
if ("errors" in validated && validated.errors) {
  throw new Error(`Operation failed: ${JSON.stringify(validated.errors)}`);
}

if ("event_sources" in validated) {
  for (const source of validated.event_sources) {
    console.log(`${source.event_source_id}: ${source.action}`);
    if (source.setup?.snippet) {
      console.log(`  Install: ${source.setup.snippet_type}`);
    }
  }
}

リクエストパラメータ

パラメータ必須説明
accountaccount-refはいアカウント参照。{ "account_id": "..." } を渡すか、セラーが暗黙的な解決をサポートしている場合は { "brand": {...}, "operator": "..." } を渡します。
event_sourcesEventSource[]いいえ同期するイベントソース。省略した場合、呼び出しはディスカバリーのみとなり、変更なしに既存のすべてのイベントソースを返します。
delete_missingbooleanいいえtrue の場合、このリクエストに含まれていないアカウント上のバイヤー管理イベントソースが削除されます(デフォルト: false)。

イベントソースオブジェクト

フィールド必須説明
event_source_idstringはいこのイベントソースの一意の識別子
namestringいいえ人が読める名前
event_typesEventType[]いいえこのソースが処理するイベントタイプ。省略した場合、すべてのイベントタイプを受け入れる。
allowed_domainsstring[]いいえこのソースへのイベント送信が許可されたドメイン

レスポンス

成功レスポンス:
  • event_sources - 同期済みのソースとアカウント上のセラー管理ソースの両方を含む、各イベントソースの結果
エラーレスポンス:
  • errors - 操作レベルのエラーの配列(認証失敗、アカウントが見つからないなど)
注意: レスポンスは判別共用体を使用しており、成功フィールドまたはエラーのいずれかが返され、両方が同時に返されることはない。 成功レスポンス内の各イベントソースには以下が含まれます:
  • すべてのリクエストフィールド
  • seller_id - このイベントソースのセラー割り当て識別子
  • action - 実行された操作: createdupdatedunchangeddeletedfailed
  • action_source - イベントソースの種別(ウェブサイトピクセル、アプリ SDK など)
  • managed_by - このソースの管理者: buyer または seller
  • setup - 実装の詳細(スニペット、手順)
  • errors - ソースごとのエラー(action: "failed" の場合のみ)
完全なフィールド一覧はスキーマを参照: sync-event-sources-response.json

よくある使用例

ディスカバリーのみ

変更を加えずにアカウント上のすべてのイベントソース(セラー管理ソースを含む)を検出します。セラーが常時オンのアトリビューションを提供するプラットフォーム管理のコンバージョントラッキングに便利:
import { testAgent } from "@adcp/client/testing";
import { SyncEventSourcesResponseSchema } from "@adcp/client";

const result = await testAgent.syncEventSources({
  account: { account_id: "acct_12345" },
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = SyncEventSourcesResponseSchema.parse(result.data);

if ("errors" in validated && validated.errors) {
  throw new Error(`Operation failed: ${JSON.stringify(validated.errors)}`);
}

if ("event_sources" in validated) {
  for (const source of validated.event_sources) {
    console.log(`${source.event_source_id} (${source.managed_by}): ${source.name}`);
  }
}

複数のイベントソース

ウェブサイトとアプリ用に個別のソースを設定します:
import { testAgent } from "@adcp/client/testing";
import { SyncEventSourcesResponseSchema } from "@adcp/client";

const result = await testAgent.syncEventSources({
  account: { account_id: "acct_12345" },
  event_sources: [
    {
      event_source_id: "web_pixel",
      name: "Website Pixel",
      event_types: ["purchase", "lead", "add_to_cart", "view_content"],
      allowed_domains: ["www.example.com"],
    },
    {
      event_source_id: "app_sdk",
      name: "Mobile App SDK",
      event_types: ["purchase", "app_install", "app_launch"],
    },
  ],
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = SyncEventSourcesResponseSchema.parse(result.data);

if ("errors" in validated && validated.errors) {
  throw new Error(`Operation failed: ${JSON.stringify(validated.errors)}`);
}

if ("event_sources" in validated) {
  for (const source of validated.event_sources) {
    console.log(`${source.event_source_id} (${source.managed_by}): ${source.action}`);
  }
}

セラー管理ソースの検出

セラーは常時オンのイベントソース(例: Amazon 売上アトリビューション)を提供する場合があります。これらはバイヤー管理ソースと並んで managed_by: "seller" としてレスポンスに表示されます:
test=false
{
  "event_sources": [
    {
      "event_source_id": "web_pixel",
      "name": "Website Pixel",
      "seller_id": "px_abc123",
      "action": "created",
      "managed_by": "buyer",
      "setup": {
        "snippet": "<script src=\"https://seller.example/pixel/px_abc123.js\"></script>",
        "snippet_type": "javascript",
        "instructions": "Place this tag in the <head> of all pages where you want to track events."
      }
    },
    {
      "event_source_id": "seller_sales_attribution",
      "name": "Sales Attribution",
      "seller_id": "internal_attr",
      "action": "unchanged",
      "managed_by": "seller",
      "action_source": "in_store"
    }
  ]
}
conversion_tracking.platform_managed: true を持つプロダクトは、セラーがこれらのソースを提供していることを示しています。

delete_missing によるクリーン同期

アカウント上のすべてのバイヤー管理イベントソースを置き換える:
import { testAgent } from "@adcp/client/testing";
import { SyncEventSourcesResponseSchema } from "@adcp/client";

const result = await testAgent.syncEventSources({
  account: { account_id: "acct_12345" },
  delete_missing: true,
  event_sources: [
    {
      event_source_id: "unified_pixel",
      name: "Unified Tracking Pixel",
    },
  ],
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = SyncEventSourcesResponseSchema.parse(result.data);

if ("errors" in validated && validated.errors) {
  throw new Error(`Operation failed: ${JSON.stringify(validated.errors)}`);
}

if ("event_sources" in validated) {
  for (const source of validated.event_sources) {
    if (source.action === "deleted") {
      console.log(`Removed: ${source.event_source_id}`);
    } else {
      console.log(`Active: ${source.event_source_id} (${source.action})`);
    }
  }
}

セットアップ手順

レスポンスには各イベントソースのセットアップ詳細が含まれます。setup オブジェクトはソースのアクティベート方法を示しています:
snippet_type説明必要なアクション
javascriptウェブサイトページ用の JavaScript タグトラッキング対象ページの <head> 内に配置する
htmlHTML ピクセル / iframe</body> の直前に配置する
pixel_urlイベント発生時に呼び出す URL各イベント時に GET リクエストを送信する
server_onlyクライアントサイドのタグ不要log_event API を直接使用する

エラーハンドリング

エラーコード説明対処方法
ACCOUNT_NOT_FOUNDアカウントが存在しないアカウント設定の account_id を確認する
INVALID_EVENT_TYPE認識できないイベントタイプget_adcp_capabilities でセラーの supported_event_types を確認する
DUPLICATE_EVENT_SOURCE_IDリクエスト内に同じ ID を持つ複数のソースがある一意の event_source_id 値を使用する
RATE_LIMITED同期リクエストが多すぎる指数バックオフで待機してリトライする

ベストプラクティス

  1. ログ送信前に同期するlog_event でイベントを送信する前に、必ずイベントソースを設定しなければなりません。未設定のソースへのイベント送信は拒否されます。
  2. わかりやすい ID を使用する — 不明瞭な識別子ではなく、意味のある event_source_id 値(例: web_pixelapp_sdkcrm_import)を選ぶべきです。
  3. event_types を指定する — より良いバリデーションとデバッグのために、各ソースを関連するイベントタイプに限定すべきです。
  4. セラーの機能を確認する — イベントソースを設定する前に、get_adcp_capabilities を使用してサポートされているイベントタイプ、UID タイプ、アクションソースを確認すべきです。
  5. セットアップスニペットをインストールする — レスポンスに setup 手順が含まれている場合、イベントをログに記録する前に提供されたスニペットをインストールしなければなりません。サーバーオンリーソース(snippet_type: "server_only")はこの手順をスキップしてよいです。
  6. セラー管理ソースを処理する — レスポンスには自分が設定していない managed_by: "seller" のソースが含まれる場合があります。これらは常時オンであり、追加のアトリビューションデータを提供します。

次のステップ

  • コンバージョントラッキング — データモデル、最適化目標、エンドツーエンドのフロー
  • log_event — 設定済みイベントソースにマーケティングイベントを送信します
  • create_media_buy — イベントソースを参照するパッケージに最適化目標を設定します
  • get_media_buy_delivery — デリバリーレポートでコンバージョン指標を監視します