Meta Conversions API Gateway の連携構成事例

## この記事について

この記事は、「[Relic Advent Calendar 2022](https://qiita.com/advent-calendar/2022/relic)」の23日目の記事です。

Meta(Facebook) 広告の Conversions API Gateway サーバ を、稼働中のWebサービスと連携させた構成事例を紹介します。
できるだけ稼働中のWebサービスに対して変更を少なく、追加コスト控え目でカジュアルに連携開始できることを目指しました。
"Conversions APIをセットアップはできたが具体的なシステム構成や連携方式に迷っている" といった方の参考になれば幸いです。

<details>
<summary>細かい前置き</summary>

### Coversions API (CAPI) 連携について

ConversionsAPI Gatewayは、Meta CAPI連携を実現する手段のひとつで、Meta社が公式に提供している内容です。
Conversions API連携を行うことで、サードパーティCookie利用が制限ているWeb視聴環境でも、効果測定・広告コンバージョン計測を従来と同等の精度で行うことが可能となります。
(Conversions API 連携の詳細・導入メリットなどは、[公式ドキュメント](https://www.facebook.com/business/help/2041148702652965?id=818859032317965)などをご参照ください。)

### 前提と紹介範囲

本記事で紹介する連携用のシステム構成は、
- Conversions API Gatewayがセットアップ済みであること
    - セットアップ方法は、[公式の設定手順](https://developers.facebook.com/docs/marketing-api/conversions-api/guides/gateway/setup) などをご参照ください
- 以前に公開した「[Meta Conversions API Gatewayへの複数ホスト名割り当て](https://qiita.com/zagvym/items/1b84ff59f088fbcaef98) 」のような操作を行い、1台の Conversions API Gateway サーバに、複数ホスト名を割り当てられる状態であること

を前提としています。

#### 連携手順概要

本記事で紹介する Conversions API  (CAPI) Gateway サーバと稼働中のWebサービスとの連携手順は下記の通りです。

1. CAPI Gateway セットアップ
2. システム連携(Webサービス側のDNSにレコード追加)
  - CAPI Gatwaway へのホスト名登録
3. Metaビジネスアカウント上でのピクセルタグとCAPI Gatewayを接続

これらの手順のうち、**2.システム連携** について以降で詳しく説明していきます。
それ以外の部分の詳細手順については、記事中にリンクを貼った公式ドキュメントの記載を参考にしてください。

</details>

## 連携対象のサービス構成

下図のような一般的なWebサービスシステムに対して、Conversions API  (CAPI) Gateway サーバを連携させます。
既にMeta (Facebook) のピクセルタグが導入済みで、MetaサーバにサイトでのユーザイベントデータをMetaサーバに送信できている状態を想定しています。

![before-capi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434222/6e22bbeb-c231-17c7-934d-faaed31f61cc.png)

本連携方式では、対象Webサービスシステムの側DNSサーバに、レコードを追加することで連携を実現できます。
追加するレコードは、対象サービスのドメイン（↑図では www.example.com）のサブドメインもしくは兄弟ドメインのレコードとなります。

## CAPI Gateway基本連携構成

先に示したWebサービスシステムに、 CAPI Gatewayを連携させた場合の概要が下図になります。図中の赤色で示した要素が、CAPI Gateway関連の追加要素です。

![with-capi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434222/4b30a32f-38b5-aae3-c4d7-6969e1bf5888.png)


連携先Webサービス ( www.example.com ) のサブドメインに `capig.www.example.com` のようなDNSレコードを追加し、CAPI Gatewayサーバを指すように設定しています。Webサービスシステム側の変更対応は以上です。

DNS設定およびCAPI Gateway側のホスト名追加設定[※](https://qiita.com/zagvym/items/1b84ff59f088fbcaef98)が完了していると
Meta(Facebook) Businessアカウントの管理画面上から、MetaピクセルタグとCAPI Gatewayサーバの接続設定を行うことができます。
（セットアップ済みCAPI Gatewayに対して新規にピクセルタグを接続する手順は、[公式ドキュメント](https://developers.facebook.com/docs/marketing-api/conversions-api/guides/gateway/setup#partner-integrations)などをご参照ください。）

ピクセルタグとCAPI Gatewayの接続が完了すると、ユーザイベント発生時に、ピクセルタグ側からMeta データ受信サーバ（従来通りの送信先）とCAPI Gatewayサーバ両方にデータが送信されるようになります。
CAPI Gatewayへの送信内容には、通常のイベントデータに加えてMetaの管理するCookieを元にした情報などが含まれます。（3rd party cookie制限のない状態でピクセルタグがMetaデータサーバと通信する場合と同様の情報が送信される、という認識です）
CAPI Gatewayサーバは、受け取ったイベントデータをMetaデータ受信サーバに転送します。
Metaサーバ側でこれらのデータを突き合わせることで、3rd party cookie制約のない場合と同等の精度の効果測定や広告コンバージョン計測が可能となる、はずです。

### 補足: データ重複計測除外の設定について

CAPI Gateway連携をおこなった場合、イベントデータが多重に計測されないように、Metaビジネスアカウント管理画面上で重複除外設定を実施する必要があります。
本記事の主題とは外れるため説明は割愛します。[公式ドキュメント](https://www.facebook.com/business/help/823677331451951?id=1205376682832142)などをご参照ください。

### CAPI Gateway サーバの詳細とDNS設定について

[こちらの記事](https://qiita.com/zagvym/items/1b84ff59f088fbcaef98) でご紹介した通り、CAPI Gatewayの実体はEC2インスタンスです。
このままでもピクセルからのデータ受信は可能ですが、管理・運用上の利便性を鑑みて、今回は AWS Application Loadbalancer (ALB) を設置し、CAPI GatewayサーバはALB経由でHTTPリクエストを受け取る構成を取りました。
また、AWS Certificate Manager (ACM)を利用して、CAPI Gatewayホスト向けのSSL/TLS証明書を発行し、ALBに設定しています。

構成の概要は下図の通りです。
![capi-internals.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434222/ad517913-a17c-5844-2e65-a0b648c30aaa.png)

連携先のWebサービス側のDNSには、
- ALBにアクセスするための、 A/AAAA もしくは CNAMEレコード
- ACMでドメイン認証証明書を発行するのに必要な所有権確認用のCNAMEレコード

の2つのレコードをそれぞれ追加する想定です。

## 発展: 複数サービスとの連携

紹介してきたCAPI Gateway連携構成は、DNSレコードさえ設定すれば、1台のCAPI Gatewayサーバで複数のWebサービス（Webサイト）と連携可能です。

![capi-OnetoMany.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434222/cd8f0c5a-6c37-816f-c37d-7fd276663837.png)



## まとめ

Meta Conversions API Gatewayと既存のWebサービスを、DNS設定のみで連携可能にする構成を紹介しました。

Conversions API Gatewayのセットアップやピクセルタグとの接続といった詳細部分など、本記事で紹介しきれなかった部分は、それぞれ記事中にリンクを貼った公式ドキュメントなどをご参照ください。