Une fois que vous avez rempli les conditions préalables décrites sur la page Mise en route, consultez cette page pour découvrir comment envoyer des évènements et utiliser l’outil de test d’évènements. Après avoir envoyé un évènement, vérifiez votre configuration.
L’API Conversions est basée sur l’API Marketing de Facebook, laquelle repose sur notre API Graph. Les calendriers de fin de prise en charge des versions diffèrent pour les API Marketing et Graph. Notre cycle de publication est aligné sur l’API Graph, de sorte que chaque version est prise en charge pendant au moins deux ans. Cette exception ne s’applique qu’à l’API Conversions.
API Conversions : présentationParamètresLes évènements Web, d’application et physiques partagés via l’API Conversions requièrent des paramètres spécifiques. En utilisant l’API Conversions, vous reconnaissez que le paramètre action_source
est exact, à votre connaissance. La liste des paramètres obligatoires est disponible ici.
Pour envoyer de nouveaux évènements, adressez une requête POST
à l’arête /events
de cette API à partir du chemin suivant : https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events?access_token={TOKEN}
. Lorsque vous publiez sur cette arête, Facebook crée des évènements de serveur.
curl -X POST \
-F 'data=[
{
"event_name": "Purchase",
"event_time": 1734848826,
"user_data": {
"em": [
"309a0a5c3e211326ae75ca18196d301a9bdbd1a882a4d2569511033da23f0abd"
],
"ph": [
"254aa248acb47dd654ca3ea53f48c2c26d641d23d7e2e93a1ec56258df7674c4",
"6f4fcb9deaeadc8f9746ae76d97ce1239e98b404efe5da3ee0b7149740f89ad6"
],
"client_ip_address": "123.123.123.123",
"client_user_agent": "$CLIENT_USER_AGENT",
"fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
"fbp": "fb.1.1558571054389.1098115397"
},
"custom_data": {
"currency": "usd",
"value": 123.45,
"contents": [
{
"id": "product123",
"quantity": 1,
"delivery_category": "home_delivery"
}
]
},
"event_source_url": "http://jaspers-market.com/product/123",
"action_source": "website"
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<PIXEL_ID>/events
Joignez à la requête le token d’accès sécurisé que vous avez généré à l’aide du paramètre de requête access_token
. Vous pouvez également utiliser l’Explorateur de l’API Graph pour envoyer une requête POST
au point de terminaison /<pixel_id>/events
.
Voici un exemple de corps d’une requête :
{ "data": [ { "event_name": "Purchase", "event_time": 1633552688, "event_id": "event.id.123", "event_source_url": "http:\/\/jaspers-market.com\/product\/123", "action_source": "website", "user_data": { "client_ip_address": "192.19.9.9", "client_user_agent": "test ua", "em": [ "309a0a5c3e211326ae75ca18196d301a9bdbd1a882a4d2569511033da23f0abd" ], "ph": [ "254aa248acb47dd654ca3ea53f48c2c26d641d23d7e2e93a1ec56258df7674c4", "6f4fcb9deaeadc8f9746ae76d97ce1239e98b404efe5da3ee0b7149740f89ad6" ], "fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890", "fbp": "fb.1.1558571054389.1098115397" }, "custom_data": { "value": 100.2, "currency": "USD", "content_ids": [ "product.id.123" ], "content_type": "product" }, "opt_out": false }, { "event_name": "Purchase", "event_time": 1633552688, "user_data": { "client_ip_address": "192.88.9.9", "client_user_agent": "test ua2" }, "custom_data": { "value": 50.5, "currency": "USD" }, "opt_out": false } ] }
event_time
correspond à l’heure de transaction de l’évènement. Elle doit être envoyée sous forme d’horodatage Unix exprimé en secondes pour indiquer l’heure à laquelle l’évènement s’est réellement produit. L’heure spécifiée peut être antérieure à l’heure à laquelle vous avez envoyé l’évènement à Facebook afin de permettre un traitement par lot et l’optimisation des performances du serveur.
La valeur du paramètre event_time
peut remonter jusqu’à 7 jours avant l’envoi d’un évènement à Meta. Si une valeur event_time
dans data
remonte à plus de 7 jours, une erreur est renvoyée pour l’ensemble de la requête, et aucun évènement n’est traité. Pour les évènements hors ligne et en boutique avec physical_store
comme action_source
, vous devez importer les transactions dans les 62 jours suivant la conversion.
En utilisant l’API Conversions, vous reconnaissez que le paramètre action_source
est exact, à votre connaissance.
Vous pouvez envoyer jusqu’à 1 000 évènements dans data
. Toutefois, pour des performances optimales, il est recommandé d’envoyer les évènements dès qu’ils se produisent et, idéalement, dans l’heure à laquelle ils surviennent. Si l’un des évènements que vous envoyez dans le cadre d’une requête par lot n’est pas valide, l’intégralité de cette requête est rejetée.
Pour savoir quels paramètres doivent faire l’objet d’un hachage avant d’être envoyés à Facebook, veuillez consulter notre page Paramètres d’informations clientèle. Si vous utilisez l’un de nos SDK Business, ce dernier se charge du hachage pour vous.
Découvrez plus d’informations sur trois fonctionnalités spécifiques du SDK Business conçues pour les utilisateurs et utilisatrices de l’API Conversions : Requêtes asynchrones, Traitement par lot simultané et Interface du service HTTP. Version minimale du langage requise pour l’utilisation de ces fonctionnalités :
La prise en charge du SDK Business pour PHP 5 a été abandonnée en janvier 2019. Veuillez passer à PHP 7 pour utiliser le SDK.
Si vous devez malgré tout utiliser PHP 5, ayez recours à notre implémentation Swagger.
Après avoir envoyé vos évènements, vérifiez que nous les avons bien reçus dans le Gestionnaire d’évènements :
PIXEL_ID
dans votre requête POST
. Pour en savoir plus, consultez les pages d’aide Business : Consulter les données des évènements de site Web dans le Gestionnaire d’évènements Meta.Vous pouvez vérifier si Facebook reçoit bien vos évènements de serveur à l’aide de la fonctionnalité de test d’évènements du Gestionnaire d’évènements. Pour trouver cet outil, accédez à Events Manager > Data Sources > Your Pixel > Test Events
.
L’outil de test d’évènements génère un ID de test. Envoyez cet ID en tant que paramètre test_event_code
pour commencer à visualiser l’activité des évènements dans la fenêtre Tester les évènements.
Remarque : le champ test_event_code
ne doit être utilisé qu’à des fins de test. Vous devez le supprimer lorsque vous envoyez votre charge utile de production.
Les évènements envoyés avec test_event_code
ne sont pas abandonnés. Ils sont dirigés vers le Gestionnaire d’évènements, et utilisés à des fins de ciblage et de mesure des publicités.
L’exemple suivant indique comment la requête doit être structurée :
L’exemple ci-dessous montre comment la requête apparaît dans l’Explorateur de l’API Graph :
Vous pouvez générer cette charge utile de test en utilisant l'outil Payload Helper. Veuillez notez que le code d’évènement test est réservé aux tests de charge utile.
Une fois la requête envoyée, vos évènements de serveur s’affichent dans la fenêtre de test des évènements.
Pour ces deux API, implémentez les options de traitement des données en ajoutant data_processing_options
, data_processing_options_country
et data_processing_options_state
dans le paramètre data de vos évènements.
Remarque : nous ne recommandons plus les API App Events et Offline Conversions pour les nouvelles intégrations. Nous vous recommandons au contraire d’utiliser l’API Conversions dans la mesure où elle prend maintenant en charge les évènements Web, d’application et hors ligne. Pour plus d’informations, consultez l’API Conversions pour les évènements d’application et l’API Conversions pour les évènements hors ligne.
Pour ne pas activer l’utilisation limitée des données (LDU) de manière explicite, indiquez un tableau vide pour chaque évènement ou supprimez simplement le champ de la charge utile :
{ "data": [ { "event_name": "Purchase", "event_time": <EVENT_TIME>, "user_data": { "em": "<EMAIL>" }, "custom_data": { "currency": "<CURRENCY>", "value": "<VALUE>" }, "data_processing_options": [] } ] }
Pour activer le mode LDU et demander à Meta d’effectuer une géolocalisation :
{ "data": [ { "event_name": "Purchase", "event_time": <EVENT_TIME>, "user_data": { "em": "<EMAIL>", "client_ip_address": "256.256.256.256" }, "custom_data": { "currency": "<CURRENCY>", "value": "<VALUE>" }, "data_processing_options": ["LDU"], "data_processing_options_country": 0, "data_processing_options_state": 0 } ] }
Pour activer le mode LDU et indiquer le lieu manuellement, par exemple la Californie :
{ "data": [ { "event_name": "Purchase", "event_time": <EVENT_TIME>, "user_data": { "em": "<EMAIL>" }, "custom_data": { "currency": "<CURRENCY>", "value": "<VALUE>" }, "data_processing_options": ["LDU"], "data_processing_options_country": 1, "data_processing_options_state": 1000 } ] }
L'API Offline Conversions vous donne la possibilité d'importer manuellement vos évènements depuis un fichier .csv
. Dans ce cas, ajoutez les colonnes Data Processing Options (Options de traitement des données), Data Processing Country (Pays associé au traitement des données) et Data Processing State (État associé au traitement des données) dans votre fichier. Vous trouverez plus d’informations à ce sujet dans l’interface d’utilisation d’importation.
En savoir plus sur les options de traitement des données
L’API Marketing dispose de sa propre logique de plafond et est exclue de toutes les limites de débit de l’API Graph. Si vous effectuez un appel de l’API Marketing, il ne sera donc pas calculé dans la limitation de bande passante de l’API Graph.
Il n’existe pas de plafond spécifique pour l’API Conversions. Les appels de l’API Conversions sont comptabilisés comme des appels de l’API Marketing. La seule limite réside dans le fait que vous ne pouvez pas nous envoyer plus de 1 000 évènements à la fois. Pour en savoir plus, consultez la section Requêtes d’envoi.
Plafond de l’API MarketingCe guide vous aide à naviguer dans les fonctionnalités avancées du SDK Meta Business, conçues spécialement pour les utilisateur·ices du portail de l’API Conversions. Pour une utilisation de base du portail de l’API Conversions, consultez la documentation relative au portail de l’API Conversions.
Avant d’utiliser l’une des fonctions énumérées ci-dessous, vous devez avoir installé le SDK Meta Business. Consultez la page Premiers pas avec le SDK Meta Business ou suivez les instructions README ci-dessous :
Actuellement, ces fonctionnalités ne sont disponibles que sur les SDK PHP et Java Business. Les autres langages seront implémentés fin 2023.
Versions minimales de langage requises pour l’utilisation de ces fonctionnalités :
PHP >= 7.2
Java >= 8
Note : Pour dédupliquer des évènements au point de terminaison de l’API Conversions, veuillez passer eventId
dans votre requête. Cela permettra d’éviter l’affichage d’évènements en double si la publication de l’API Conversions est activée.
CAPIGatewayIngressRequest
Paramètre | Description |
---|---|
endpointUrl chaîne | Point de terminaison du portail de l’API Conversions vers lequel les évènements sont envoyés. Aucune pré-validation autre que la vérification de la validité de l’URL ne sera effectuée sur le paramètre. Exemple : https://test.exemple.com |
accessKey chaîne | Clé d’accès au portail de l’API Conversions qui est nécessaire pour envoyer des évènements au point de terminaison Events du portail de l’API Conversions. Voici les instructions pour la générer. |
CAPIGatewayIngressRequest
Paramètre | Description |
---|---|
setSendToDestinationOnly Booléen | Indicateur booléen signalant si les évènements sont envoyés uniquement au point de terminaison sélectionné. Valeur par défaut : |
setFilter Fonction CustomEndpointRequest.Filter() | Fonction de filtre qui traite chaque évènement. Si la logique de filtrage renvoie True, l’évènement est transmis. Sinon, l’évènement est abandonné. Vous devez implémenter la fonction shouldSendEvent dans l’interface qui a le paramètre Event. Valeur par défaut : |
Pour les systèmes qui utilisent déjà le SDK Business, il vous suffit de faire référence à CAPIGatewayIngressRequest et de le joindre à l’objet customEndpoint de l’eventRequest.
// this is the standard event request that we attach events to $event_request = new EventRequest($this->pixel_id); $capiIngressRequest = new CAPIGatewayIngressRequest($this->cb_url, $this->access_key); $event_request->setCustomEndpoint($capiIngressRequest); // pass the events to this event Request object $event_request->setEvents($events); $event_request->execute()
Pour les systèmes qui utilisent déjà le SDK Business, il vous suffit de faire référence à CAPIGatewayIngressRequest et de le joindre à l’objet customEndpoint de l’EventRequest.
// this is the standard event request that we attach events to EventRequest eventRequest = new EventRequest(PIXEL_ID, context); CAPIGatewayIngressRequest capiSyncRequest = new CAPIGatewayIngressRequest(CB_URL, CAPIG_ACCESS_KEY); eventRequest.setCustomEndpoint(capiSyncRequest); eventRequest.addDataItem(testEvent); eventRequest.execute();
$api = Api::init(null, null, $this->access_token); $api->setLogger(new CurlLogger()); $event_request = new EventRequest($this->pixel_id); $capiIngressRequest = new CAPIGatewayIngressRequest($this->cb_url, $this->access_key); $event_request->setCustomEndpoint($capiIngressRequest); $user_data = (new UserData()) ->setEmails(array('joe@eg.com')) ->setPhones(array('12345678901', '14251234567')) ->setFbc('fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890') ->setFbp('fb.1.1558571054389.1098115397'); $event1 = (new Event()) ->setEventName('Purchase') ->setEventId('125') ->setEventTime(time()) ->setEventSourceUrl('http://jaspers-market.com/product/123') ->setUserData($user_data); $events = array($event1, $event2); $event_request->setEvents($events); $response = $event_request->execute(); print($response->__toString());
EventRequest eventRequest = new EventRequest(PIXEL_ID, context); UserData userData = new UserData() .email("abc@eg.com"); CAPIGatewayIngressRequest capiSyncRequest = new CAPIGatewayIngressRequest(CB_URL, CAPIG_ACCESS_KEY); eventRequest.setCustomEndpoint(capiSyncRequest); Event testEvent = new Event(); testEvent.eventId("125").eventName("Purchase") .eventTime(System.currentTimeMillis() / 1000L) .userData(userData) .dataProcessingOptions(new String[]{}).setEventId("134423232"); eventRequest.namespaceId("11") .uploadId("22222") .uploadTag("upload-tag-4") .uploadSource("upload-source-4") .testEventCode("test-event-code-5") .partnerAgent("partner-agent-6"); eventRequest.addDataItem(testEvent); eventRequest.execute();
$api = Api::init(null, null, $this->access_token); $api->setLogger(new CurlLogger()); $event_request = new EventRequestAsync($this->pixel_id); $capiIngressRequest = new CAPIGatewayIngressRequest($this->cb_url, $this->access_key); $capiIngressRequest->setSendToDestinationOnly(true); $event_request->setCustomEndpoint($capiIngressRequest); $event1 = (new Event()) ->setEventName('test Async Event') ->setEventId('134423232') ->setEventTime(time()) ->setEventSourceUrl('http://jaspers-market.com/product/123'); $events = array($event1, $event2); $event_request->setEvents($events); $response = $event_request->execute()->wait();
EventRequest eventRequest = new EventRequest(PIXEL_ID, context); UserData userData = new UserData() .email("abc@eg.com"); CAPIGatewayIngressRequest capiSyncRequest = new CAPIGatewayIngressRequest(CB_URL, CAPIG_ACCESS_KEY); capiSyncRequest.setSendToDestinationOnly(true); eventRequest.setCustomEndpoint(capiSyncRequest); Event testEvent = new Event(); testEvent.eventName("test Async Event") .eventTime(System.currentTimeMillis() / 1000L) .userData(userData) .dataProcessingOptions(new String[]{}).setEventId("134423232"); eventRequest.namespaceId("11222") .uploadId("22222") .uploadTag("upload-tag-4") .uploadSource("upload-source-4") .testEventCode("test-event-code-5") .partnerAgent("partner-agent-6"); eventRequest.addDataItem(testEvent); eventRequest.executeAsync();
lass APIFilter implements Filter { public function shouldSendEvent(Event $event): bool { if ($event->getEventId() === '125') { return false; } return true; } } $capiIngressRequest = new CAPIGatewayIngressRequest($this->cb_url, $this->access_key); $event_request->setCustomEndpoint($capiIngressRequest); $capiIngressRequest->setFilter(new APIFilter());
CAPIGatewayIngressRequest capiSyncRequest = new CAPIGatewayIngressRequest(CB_URL, CAPIG_ACCESS_KEY); eventRequest.setCustomEndpoint(capiSyncRequest); capiSyncRequest.setFilter(new CustomEndpointRequest.Filter() { @Override public boolean shouldSendEvent(Event event) { if (event.getEventId().equals("125")) { return true; } return false; } });