
# WhatsAppの広告クリックアトリビューション

MetaやGoogleの広告を自社サイトのページに誘導し、そのページにWhatsAppボタンを設置している場合、<span data-t="appName">Your AI Connector</span>を使用すると、各WhatsAppの会話がどの広告クリックから発生したものかを把握できます。ウェブサイトに小さなスクリプトを1つ貼り付けるだけで設定は完了です。訪問者がWhatsAppボタンをタップすると、そのクリックが記録され、送信された最初のメッセージと照合されます。その後、連絡先情報にその連絡先がどのキャンペーンから来たものかが表示され、クリックデータはWebhookやAPIを通じて、必要に応じてMetaに送り返すことも可能です。

これは、ランディングページ、予約ページ、価格ページ、あるいは「回答をWhatsAppで送信」で終わるクイズなど、WhatsAppボタンがあるあらゆるページで機能します。

> このページは、まず**あなたのウェブサイト**にユーザーを誘導する広告に関するものです。広告から直接WhatsAppを開く場合（Metaの「Click to WhatsApp」広告）、スクリプトなしで自動的に[Click-to-WhatsApp広告アトリビューション](click-to-whatsapp-attribution.md)でカバーされます。

---

## 設定方法

1. **設定 → 広告クリック追跡**（統合グループ）に移動します。
2. **有効にしてスクリプトを取得**をクリックします。アカウント固有のサイトキーと1行のスクリプトが発行されます。
3. スクリプトをコピーし、WhatsAppボタンがあるすべてのページの終了`</body>`タグの直前に貼り付けます。

{% code overflow="wrap" %}
```html
<script src="https://api.youraiconnector.com/v1/ad-visit/YOUR_SITE_KEY.js" async></script>
```
{% endcode %}

4. オプション：**WhatsApp番号**の下に、ボタンのリンク先となる番号を入力します。入力した場合、その番号へのリンクのみが追跡されます。空欄にすると、サイト上のすべてのWhatsAppリンクが追跡されます。
5. お問い合わせ番号の文言を選択し（下記参照）、**保存**をクリックします。設定を変更した後、ウェブサイト上のスクリプトを修正する必要はありません。
6. テスト：キャンペーンタグが付いたリンク（例：`https://yoursite.com/?utm_source=test&utm_campaign=setup-check`）からページを開き、自分のWhatsAppボタンをタップしてメッセージを送信します。チャットでその連絡先を開くと、連絡先パネルにキャンペーン情報とともに**広告クリックから発生**と表示されます。

サイトキーはスクリプト内に含まれています。これはパスワードではないため、公開ページに配置しても問題ありません。


---

## スクリプトの動作

- **ページ読み込み時**：ページアドレスに含まれる広告クリックIDとキャンペーンタグ（`utm_`パラメータ）をブラウザタブのセッションストレージに保持します。これにより、訪問者が最初に別のページを見た場合でもデータが維持されます。Cookieの設定や他の読み込み、データの送信は行われません。
- **訪問者がWhatsAppリンクをタップした時**（`wa.me`、`api.whatsapp.com/send`、または`whatsapp://send`）、メッセージにお問い合わせ番号を追加し、訪問を記録した上で、通常通りWhatsAppへのタップ処理を続行します。

タップするまで<span data-t="appName">Your AI Connector</span>には何も送信されません。

---

## お問い合わせ番号

店舗やクリニックが発行する参照番号のような短い番号が、訪問者のWhatsAppメッセージに追加されます。これにより、<span data-t="appName">Your AI Connector</span>はどの広告クリックがどの会話に対応しているかを正確に把握します。メッセージは以下のように表示されます：

```
Hi, I would like to know more.
Enquiry no. 4827
```

- **文言：** デフォルトは「Enquiry no.」です。「Booking ref」や「Ref」など、ビジネスに合わせて自然な1行のテキストを使用できます。数字は含められません。
- **位置：** 「独自の最終行」（デフォルト）または「テキストの末尾」から選択できます。設定ページでライブプレビューを確認できます。
- **長さ：** 4桁。サイトのアクセス数が多い場合は5桁になります。
- **AIエージェントには表示されず**、繰り返されることもありません。受信トレイには、番号を含めたメッセージ全体が表示されます。

問い合わせ番号をオフにすることができます。その場合、マッチングはメッセージのテキストのみに基づいて行われるため、まったく同じテキスト（例：同じクイズの回答）を送信した2人の訪問者を区別できなくなり、一部のクリックがマッチングされなくなります。

---

## 独自のクイズまたはボタンコード

ページ上でWhatsAppメッセージ自体を構築する場合（回答をテキストに含めるクイズや、独自のボタンコードなど）、scriptタグに `data-manual` を追加してください：

{% code overflow="wrap" %}
```html
<script src="https://api.youraiconnector.com/v1/ad-visit/YOUR_SITE_KEY.js" data-manual async></script>
```
{% endcode %}

`data-manual` を使用すると、スクリプトはWhatsAppリンクを自動的に変更しなくなります。独自のコードがWhatsAppを開く直前にスクリプトを呼び出すため、各訪問が1回ずつ記録されます：

- `window.ChatAttribution.text(finalText, number)` は、問い合わせ番号を追加したテキストを返し、訪問を記録します。返されたテキストをWhatsAppリンクで使用してください。
- `window.ChatAttribution.link(finalText, number)` も同様の処理を行い、そのテキストを含む準備済みの `wa.me` リンクを返します。番号を省略すると、設定の **WhatsApp番号** にある番号が使用されます。

{% code overflow="wrap" %}
```html
<script>
  function sendAnswers(answers) {
    var text = "Hi, my answers: " + answers.join(", ");
    if (window.ChatAttribution) {
      window.location.href = window.ChatAttribution.link(text, "+15551234567");
    } else {
      window.location.href = "https://wa.me/15551234567?text=" + encodeURIComponent(text);
    }
  }
</script>
```
{% endcode %}

`else` ブランチは、ブラウザの拡張機能によってスクリプトがブロックされた場合など、スクリプトが読み込まれていない状態でもボタンが機能するようにします。スクリプトが発行した番号がすでに含まれているテキストは、二度と変更されることはありません。

---

## 記録される内容

タップ時に、訪問記録には以下が保持されます：

- ページアドレス内の広告クリックID（`fbclid`（Meta）や `gclid`（Google）など）
- 独自のMetaピクセルがサイト上で設定している場合、`_fbc` および `_fbp` クッキー（スクリプトはこれらを読み取るだけで、設定は行いません）
- キャンペーンタグ（`utm_source`、`utm_medium`、`utm_campaign`、`utm_content`、`utm_term`）
- ランニングページ、訪問者の参照元ページ、ブラウザ、およびメッセージテキスト
- 訪問が到着した際に <span data-t="appName">Your AI Connector</span> によって追加されるIPアドレスと時刻

訪問が一致すると、<span data-t="appName">Your AI Connector</span>はそのデータから訪問者の大まかな位置情報（IPアドレスから推定される都市と国）と使用デバイス（電話、タブレット、コンピュータ、およびオペレーティングシステムとブラウザ。例：Instagramアプリ内ブラウザ）も算出します。モバイルネットワークでは一般的ですが、位置情報を特定できない場合は空欄のままとなります。

訪問記録は **90日間** 保持されます。訪問がマッチングされると、そのクリックデータのコピーが連絡先に保存され、削除するまで連絡先に残り続けます。

**プライバシー通知について：** スクリプトはあなたのウェブサイト上で実行されるため、サイトのプライバシー通知にその旨を記載する必要があります。具体的には、何を記録するのか（上記のリスト）、および訪問者がWhatsAppボタンをタップした際に記録が行われることを明記してください。

---

## マッチングの仕組み

連絡先から最初のメッセージが届くと、<span data-t="appName">Your AI Connector</span> はその **15分前** までの訪問記録を探します：

1. **まず問い合わせ番号で検索。** スクリプトが発行した番号が含まれるメッセージは、その訪問とマッチングされます。
2. **次に同一テキストで検索。** 訪問記録とまったく同じテキストを持つメッセージは、その訪問とマッチングされます。同じ時間枠内に2人の異なる訪問者が同じテキストを送信した場合、誤った広告に連絡先が紐付けられることを防ぐため、意図的にどちらもマッチングされません。

問い合わせ番号が含まれる後続のメッセージも、その連絡先にまだマッチングが存在しない限り、マッチングされます。

すでにマッチング済みの連絡先が別の広告を経由して戻り、新しい問い合わせ番号を含むメッセージを送信した場合、そのクリックは連絡先の**最新のクリック**として保持されます。最初の一致はそのまま維持されます。

- **初回クリック（レポート用）:** 連絡先が最初にどこから来たのかを保持し続けます。これは変更されません。
- **最新のクリック（Meta用）:** Metaに送信されるイベントには最新のクリックが使用されます。これは、Metaがその人を呼び戻した広告を、その帰属期間内においてのみ評価するためです。古いクリックをレポートすると、誤った広告、あるいはどの広告も評価されなくなってしまいます。
- 最新のクリックは問い合わせ番号からのみ取得され、一致するテキストのみからは取得されません。また、古い訪問が新しい訪問に置き換わることはありません。

制限事項：

- **最初の一致は上書きされません。** 新しいクリックは最新のクリックに格納されます。
- **WhatsAppのみ:** WhatsApp Business APIおよびWhatsApp Webチャネルが対象です。
- **15分:** ボタンをタップしてからメッセージ送信までに時間が空きすぎた場合（15分以上）、マッチングされません。
- **今後のみ:** スクリプトをインストールする前の連絡先には一致データがありません。

---

## 表示場所

- **連絡先パネル:** **広告クリック経由**には、キャンペーンまたはソース、および最初のクリック日時が表示されます。詳細を確認するにはホバーしてください：キャンペーン、**広告**（`utm_content`）、**広告セット**（`utm_term`）、大まかな**場所**、**デバイス**（それぞれ判明している場合のみ）。また、最新のクリックがある場合は同様の情報が表示されます。入力されなかったキャンペーンタグ（広告プレビューのタップでは名前の代わりにタグテンプレートが送信されます）は除外されます。訪問が広告クリックとしてカウントされるのは、ページが広告リンク（MetaまたはGoogleのクリックID、あるいはキャンペーンタグ）から開かれた場合のみです。Google検索、アドレスの直接入力、サイト内のリンククリックなど、他の方法でページに到達した場合は、**ウェブサイト経由**と表示され、**Google検索**などの参照元が表示されます。ブラウザが参照元を報告しなかった場合は、**ウェブサイト訪問、参照元なし**と表示されます。
- **連絡先ページ:** **連絡先**の氏名の下に同じ行が表示されるため、スマートフォンからでもすぐに確認できます。ホバーまたはタップして詳細を表示してください。
- **アクティビティ:** 連絡先のタイムラインは、最初のメッセージの前に、クリック時の**広告経由でWhatsAppボタンをタップ**（または**ウェブサイト経由**）から始まります。チャットの連絡先パネルの**アクティビティ**の下にも同じ行が表示されます。
- **Webhook:** [エージェントタグWebhook](webhooks.md#contact-tags-updated-webhook)内の`contact.ad_attribution`、および連絡先を含むすべてのWebhookサブスクリプションイベントに含まれます。
- **API:** APIリファレンスの「連絡先」セクションにある、連絡先リストの`ad_attribution`および単一連絡先の`adAttribution`。
- **MCPツール:** 返されるすべての連絡先オブジェクトに含まれます。

連絡先に一致がない場合、値は `null` となります。以下のフィールドは初回クリックについて説明しています。後のクリックがマッチングされた場合、`latest` に同じフィールド構成で保持されます。それまでは存在しません。

| フィールド | 内容 |
|---|---|
| `visit_at` | 訪問者がWhatsAppボタンをタップした日時。 |
| `matched_at` | 訪問が連絡先と一致した日時。 |
| `match_method` | `reference`（問い合わせ番号で一致）または `text`（同一のメッセージテキストで一致）。 |
| `reference` | 問い合わせ番号。オフの場合は `null`。 |
| `fbc` / `fbp` | 存在する場合、独自のMetaピクセルからのMetaクリックおよびブラウザCookie。 |
| `fbclid` | ページアドレスからのMeta広告クリックID。 |
| `gclid` / `gbraid` / `wbraid` | ページアドレスからのGoogle広告クリックID。 |
| `utm_source` / `utm_medium` / `utm_campaign` / `utm_content` / `utm_term` | ページアドレスからのキャンペーンタグ。 |
| `landing_url` | 訪問者が最初に到達したページ。 |
| `referrer` | 訪問者が遷移元としたページ。 |
| `client_ip` | 訪問者のIPアドレス。 |
| `user_agent` | 訪問者のブラウザ。 |
| `geo_country` / `geo_region` / `geo_city` / `geo_timezone` | IPアドレスから推定される大まかな位置情報：2文字の国コード、地域コード、都市、タイムゾーン。不明な場合は表示されません。 |
| `device_type` / `device_os` / `device_browser` | ブラウザから判別されたデバイス：`mobile`、`tablet`、または`desktop`、オペレーティングシステムとそのバージョン（`iOS 18.3`など）、ブラウザ（`Safari`や`Instagram in-app`など）。不明な場合は表示されません。 |
| `site_key` | 訪問を記録したスクリプトのサイトキー。 |
| `visit_id` | 訪問記録のID。 |
| `latest` | 最初のクリック後に一致した最新のクリック（同じフィールドを含む）。Metaに送信されるイベントに使用されます。存在しない場合は表示されません。 |

---

## Metaへの結果送信（オプション）

<span data-t="appName">Your AI Connector</span> を使用して、成果をMeta広告アカウントにレポートできます。これにより、Metaはどの広告が実際のリードや売上につながっているかを学習し、最適化を図ることができます。これには、お客様自身のMetaコンバージョンAPIの詳細情報を使用します。

1. Metaイベントマネージャで、データソースの下にあるピクセル（データセット）IDを確認し、設定、コンバージョンAPI、**アクセス・トークンを生成**からアクセス・トークンを作成します。
2. **設定 → 広告クリック追跡**の**Metaに結果を送信（オプション）**で、**ピクセル / データセットID**と**アクセス・トークン**を入力します。**Metaの詳細を保存**をクリックします。
3. オプション：接続を確認します。Metaイベントマネージャでピクセルを開き、**テストイベント**タブに移動します。そこに表示されているテストコードをコピーし、**テストイベントを送信**の下に貼り付けて、**テストイベントを送信**をクリックします。ボタンの下の行に「Metaは1件のテストイベントを受信しました」（Metaのテストイベントで確認してください）と表示されるか、トークンが間違っているなどの拒否理由が表示されます。このコードはそのテストのみに使用され、保存されることはありません。
4. エージェントエディタを開き、**タグ**タブに移動してタグを開きます。**Metaに送信**の下で、**リード**、**連絡先**、**スケジュール**、**購入**、またはカスタム名からイベントを選択します。オプションで値と通貨を追加します。

それ以降、そのタグが連絡先に適用されるたびに（AI、手動、API、または自動化によって）、<span data-t="appName">Your AI Connector</span> は連絡先の最新のクリックデータ（`fbc`、`fbp`、IPアドレス、ブラウザ、ランディングページ。最新のクリックがある場合はそれを使用し、ない場合は初回を使用）と、ハッシュ化された電話番号、メールアドレス、名前をMetaに送信し、Metaが広告と紐付けられるようにします。マッチングのない連絡先でも、ハッシュ化された電話番号、メールアドレス、名前のみでイベントが送信されます。

- **ライブイベントは常にカウントされます：** テストイベントコードはMetaの詳細情報と一緒に保存されることはないため、タグや自動化によって送信されたイベントは常にMetaの実際のデータに送信され、テストイベントタブには送信されません。
- **重複カウントなし：** 各イベントには、連絡先IDとタグ名から作成された固定IDがあります。CRMが同じIDを持つ同じイベントをMetaに送信した場合、Metaは1つだけを保持します。
- **Metaのコンバージョン期間：** Metaは、デフォルトでクリック後7日間のコンバージョン期間内にある広告にのみイベントを帰属させます。数週間後に成立した取引はそれ自体ではカウントされないため、予約や支払い済みの相談のタグなど、より早い段階のイベントも送信してください。

---

## 自動化からコンバージョンを送信する

タグは、適用されたタイミングでイベントを送信します。CRMでの取引成立やコンサルティングの予約など、結果が別の場所で発生する場合は、自動化の **Metaにコンバージョンを送信** アクションを使用してください。これにより、Conversions APIを通じてMetaデータセットに1つのイベントが報告されるため、Metaはメッセージだけでなく実際の成果に基づいて広告を最適化できるようになります。

これは、タグと同じMetaの詳細情報（**設定 → 広告クリック追跡** にある **ピクセル / データセットID** および **アクセストークン**）を使用します。これらの設定がない場合、ステップは「Metaが接続されていません」というエラーで失敗します。

**フィールド**

| フィールド | 説明 |
|---|---|
| **イベント名** | 必須。**購入**、**スケジュール**、**リード**、または独自の名称。独自の名称は、英数字、スペース、アンダースコアを使用し、英字で始まり、最大40文字までです。 |
| **値** と **通貨** | 取引額などのコンバージョン金額。通貨は3文字のコードで、デフォルトはEURです。値は入力した場合のみ送信されます。 |
| **連絡先** | オプション。コンバージョンが属する連絡先。 |
| **メールアドレス**、**電話番号**、**名**、**姓** | 本人の詳細情報。本人が連絡先ではない場合、または連絡先情報に追加する場合に入力します。 |
| **本人の独自ID** | CRM IDなど、独自のシステムにおける本人のID。 |
| **イベントID** | Metaがイベントを1回としてカウントするために使用するID。下記を参照してください。 |
| **イベント時刻** | コンバージョンが発生した日時（Unix秒または日付）。最大7日前まで。空欄にすると、ステップが実行された時刻が使用されます。 |
| **ページURL** | コンバージョンに関連付けられたページ（ある場合）。 |
| **テストイベントコード** | テスト実行専用：Metaのテストイベントタブのコード。これを使用して送信されたイベントはテストイベントの下に表示され、広告のカウントには含まれません。ライブイベントの場合は空欄にしてください。 |

**連絡先**、**メールアドレス**、**電話番号** のいずれかを必ず入力してください。その人は必ずしも連絡先である必要はありません。例えば、HubSpotの取引が「成約（Closed Won）」に達した際に、取引額と購入者のメールアドレスを添えて「購入（Purchase）」イベントを送信できます。

**連絡先** を選択すると、その連絡先の電話番号、メールアドレス、名前が使用されます。スクリプトが一致した広告クリックから発生した場合、クリックの詳細も送信されるため、Metaがイベントと広告を照合しやすくなります。メールアドレス、電話番号、名前は送信前にハッシュ化されます。クリックID、IPアドレス、ブラウザ情報はMetaの要件に従って送信されます。

**イベントIDと重複カウント**

Metaは、同じイベント名と同じイベントIDを持つイベントを1回としてカウントします。別のツールでも同じコンバージョンが報告される場合や、自動化が同じコンバージョンに対して2回実行される可能性がある場合は、取引IDなどの固定IDを使用してください。空欄にすると実行のたびに新しいIDが生成されるため、実行されるたびにカウントされます。

**タグイベントとの違い**

タグの **Metaに送信** イベントは、連絡先ごとに（30日間に最大1回）送信されます。このアクションは、実行されるたびに送信されます。コンバージョンが2回カウントされるのを防ぐのはイベントIDの役割です。

**例：取引成立とコンサルティング予約**

1. 取引が成立したときに実行される自動化を開始します。CRMの取引イベントに対する**アプリイベント**トリガーを使用し、成立した取引のみが対象となるように**条件**を設定します。HubSpotは取引ステージのイベントを開発者向けアプリにのみ送信するため、HubSpotを使用する場合は、**スケジュール**トリガーを使用して、前回の実行以降に「成約（Closed Won）」に達した取引をHubSpotで検索し、それらに対して**ループ**処理を行います。
2. **Metaにコンバージョンを送信**を追加します。**イベント名**を**Purchase**に設定し、**値**には取引金額を（**+**ボタンを使用して挿入）、**通貨**には使用する通貨を設定します。購入者のメールアドレスを**メール**に、取引IDを**イベントID**に入力することで、同じ取引が二重にカウントされるのを防ぎます。
3. 予約されたコンサルティングについては、**予約済み**トリガーを使用して2つ目の自動化を開始し、**Metaにコンバージョンを送信**を追加して、**イベント名**を**Schedule**に設定し、トリガーから取得した連絡先を**連絡先**に入力します。必要に応じて、2つ目の**Metaにコンバージョンを送信**ステップを追加し、コンサルティング料金などの固定値を設定した**Purchase**イベントを送信することも可能です。

API経由でコンバージョンを送信することも可能です（`POST https://api.youraiconnector.com/v1/ad-attribution/meta-event`を使用）。スネークケースで同じフィールドを指定します：`event_name`、`value`、`currency`、`contact_id`、`email`、`phone`、`first_name`、`last_name`、`external_id`、`event_id`、`event_time`、`event_source_url`、`test_event_code`。

---

## よくある質問

**広告から直接WhatsAppを開く場合でも機能しますか？**
そのような広告はウェブサイトを経由しないため、スクリプトは実行されません。代わりに、Metaが最初のメッセージとともに広告の詳細を送信します。[Click-to-WhatsApp広告の属性](click-to-whatsapp-attribution.md) を参照してください。

**スクリプトによってウェブサイトの速度が低下したり、クッキーが設定されたりしますか？**
スクリプトはバックグラウンドで読み込まれ（`async`）、クッキーの設定や他の読み込みは行いません。訪問者がWhatsAppボタンをタップしたときのみ情報を送信します。

**Meta広告だけでなくGoogle広告も追跡できますか？**
はい。GoogleクリックID（`gclid`、`gbraid`、`wbraid`）およびキャンペーンタグは記録され、コンタクト情報に表示されます。結果の送信機能はMetaのみ利用可能です。

**コンタクトが一致しなかったのはなぜですか？**
主な理由は、タップからメッセージ送信まで15分以上経過した、メッセージから問い合わせ番号が削除された、問い合わせ番号機能がオフの状態で別の訪問者が同じテキストを送信した、またはページにスクリプトが設置されていないなどが考えられます。

**ウェブサイトに2つのWhatsApp番号へのリンクがあります。片方だけ追跡できますか？**
はい。設定の **WhatsApp番号** にその番号を入力してください。空欄にすると、すべてのWhatsAppリンクが追跡されます。

**後から文言を変更できますか？**
はい。変更内容はすぐにウェブサイトに反映されます。スクリプトを再度貼り付ける必要はありません。
