Tras completar los requisitos previos de la página Introducción, usa esta página para obtener información sobre cómo enviar eventos y usar la herramienta “Probar eventos”. Cuando hayas enviado un evento, verifica la configuración.
La API de conversiones se basa en la API de marketing de Facebook que, a su vez, se basa en la API Graph. La API Graph y la API de marketing tienen diferentes programaciones de retirada de versiones. Nuestro ciclo de lanzamiento se ajusta a la API Graph, por lo que cada versión se admite durante al menos dos años. Esta excepción solo es válida para la API de conversiones.
API de conversiones: información generalParámetrosLos eventos de la web, la aplicación y la tienda física compartidos mediante la API de conversiones requieren parámetros específicos. Al utilizar la API de conversiones, aceptas que el parámetro action_source
es adecuado hasta donde tú sabes. La lista de parámetros necesarios está disponible aquí.
Para enviar nuevos eventos, realiza una solicitud POST
al perímetro /events
de esta API desde esta ruta: https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events?access_token={TOKEN}
. Al realizar una publicación en este perímetro, Facebook crea nuevos eventos del servidor.
curl -X POST \
-F 'data=[
{
"event_name": "Purchase",
"event_time": 1732199680,
"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
Adjunta el identificador de acceso seguro generado mediante el parámetro de consulta access_token
a la solicitud. También puedes usar el explorador de la API Graph para realizar una solicitud POST
al extremo /<pixel_id>/events
.
Un ejemplo de cuerpo de solicitud tiene el aspecto siguiente:
{ "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
es la hora de transacción del evento. Se debe enviar como una marca de tiempo Unix en segundos que indique cuándo se produjo el evento real. La hora especificada puede ser anterior a la hora en que se envió el evento a Facebook. De esta forma, se puede activar la optimización del rendimiento del servidor y el procesamiento por lotes.
El valor de event_time
puede ser hasta siete días antes del envío de un evento a Meta. Si algún valor de event_time
en data
es de hace más de siete días, se devuelve un error para la toda la solicitud y no se procesa ningún evento. En el caso de los eventos offline y de la tienda física con physical_store
como action_source
, debes subir las transacciones en los 62 días posteriores a la conversión.
Al utilizar la API de conversiones, aceptas que el parámetro action_source
es adecuado hasta donde tú sabes.
Puedes enviar un máximo de 1000 eventos en data
. Sin embargo, para obtener un rendimiento óptimo, se recomienda enviar los eventos en cuanto se producen e idealmente en un plazo de una hora. Si alguno de los eventos enviados en un lote no es válido, se rechaza todo el lote.
Consulta la página de parámetros de información del cliente para saber a qué parámetros se debe aplicar el algoritmo hash antes de enviarlos a Facebook. Si utilizas uno de nuestros SDK para empresas, el SDK aplica el algoritmo hash automáticamente.
Obtén más información acerca de las tres funciones específicas del Business SDK diseñadas especialmente para los usuarios de la API de conversiones: solicitudes asíncronas, lotes simultáneos e interfaz de servicio HTTP. Versión mínima del lenguaje necesaria para utilizar estas funciones:
La compatibilidad del SDK para empresas con PHP 5 se retiró en enero de 2019. Realiza la actualización a PHP 7 a fin de utilizar el SDK para empresas.
Si debes usar PHP 5, considera la posibilidad de utilizar nuestra implementación de Swagger.
Después de enviar los eventos, confirma que los hayamos recibido en el Administrador de eventos:
PIXEL_ID
en la solicitud POST
. Para obtener más información, consulta Servicio de ayuda para empresas: Navegar por el Administrador de eventos.Para verificar si Facebook recibe correctamente los eventos del servidor, puedes usar la función “Probar eventos” del Administrador de eventos. Dirígete a Events Manager > Data Sources > Your Pixel > Test Events
para buscar la herramienta.
La herramienta “Probar eventos” genera un identificador de prueba. Envía el identificador de prueba como un parámetro test_event_code
para empezar a ver cómo se muestra la actividad de los eventos en la ventana “Probar eventos”.
Nota: El campo test_event_code
solo se debe usar para realizar pruebas. Debes eliminarlo al enviar la carga útil de producción.
Los eventos enviados con el parámetro test_event_code
no se omiten. Se envían al Administrador de eventos y se usan con fines de segmentación y medición de anuncios.
A continuación, se incluye un ejemplo de cómo se debe estructurar la solicitud:
A continuación, se incluye un ejemplo de cómo se muestra la solicitud en el explorador de la API Graph:
Puedes generar esta carga útil de prueba mediante el asistente de carga útil. Ten en cuenta que el código del evento de prueba solo es para probar la carga útil.
Los eventos del servidor se muestran en la ventana “Probar eventos” una vez enviada la solicitud.
Para estas dos API, implementa las opciones de tratamiento de datos; para ello, añade data_processing_options
, data_processing_options_country
y data_processing_options_state
en cada evento en el parámetro de datos de los eventos.
Nota: Los eventos de la aplicación y las API de conversiones offline ya no se recomiendan para las nuevas integraciones. En su lugar, se recomienda usar la API de conversiones, ya que ahora admite eventos web, de la aplicación y offline. Para obtener más información, consulta API de conversiones para eventos de la aplicación y API de conversiones para eventos offline.
Para no activar el uso limitado de datos (LDU) de forma explícita, especifica una matriz vacía para cada evento o simplemente elimina el campo en la carga útil:
{ "data": [ { "event_name": "Purchase", "event_time": <EVENT_TIME>, "user_data": { "em": "<EMAIL>" }, "custom_data": { "currency": "<CURRENCY>", "value": "<VALUE>" }, "data_processing_options": [] } ] }
Para activar el LDU y que Meta realice una geolocalización:
{ "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 } ] }
Para activar el LDU y especificar la ubicación manualmente (por ejemplo, para California):
{ "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 } ] }
La API de conversiones offline ofrece la opción de subir manualmente los eventos desde un archivo .csv
. En este caso, añade las opciones de tratamiento de datos, el país de tratamiento de datos y el estado de tratamiento de datos como columnas en el archivo. Encontrarás más información sobre este tema en la interfaz de usuario de subida.
Obtén más información sobre las opciones de tratamiento de datos.
La API de marketing cuenta con su propia lógica de limitación de frecuencia, que es independiente de todas las limitaciones de frecuencia de la API Graph. De este modo, las llamadas que realices a la API de marketing no se tienen en cuenta para la restricción de la API Graph.
No hay ningún límite de frecuencia específico para la API de conversiones. Las llamadas a la API de conversiones se cuentan como llamadas a la API de marketing. La única limitación es que nos puedes enviar un máximo de 1000 eventos a la vez. Consulta Envío de solicitudes para obtener más información.
Limitación de frecuencia de la API de marketingEn esta guía se explica cómo navegar por las funciones avanzadas del Meta Business SDK que se han diseñado específicamente para su uso con la puerta de enlace de la API de conversiones. Si necesitas información sobre el uso básico de la puerta de enlace de la API de conversiones, consulta la documentación de la puerta de enlace de la API de conversiones.
Antes de usar las funciones que se indican a continuación, debes haber instalado el Meta Business SDK. Consulta Introducción al Meta Business SDK o sigue las instrucciones de los archivos README que se señalan aquí:
Por el momento, estas funciones solo están disponibles en el Meta Business SDK para PHP y Java. Los demás lenguajes se implementarán a finales de 2023.
La versión mínima del lenguaje necesaria para utilizar estas funciones es la siguiente:
PHP >= 7.2
Java >= 8
Nota: A fin de eliminar los eventos duplicados para el extremo de la API de conversiones, pasa el valor de eventId
en la solicitud. Esto ayudará a evitar que aparezcan eventos duplicados si la publicación de la API de conversiones está activada.
CAPIGatewayIngressRequest
Parámetro | Descripción |
---|---|
endpointUrl Cadena | Extremo de la puerta de enlace de la API de conversiones al que se envían los eventos. La única validación previa que se realizará en el parámetro consistirá en comprobar si se trata de una URL válida. Ejemplo: https://test.example.com |
accessKey Cadena | Clave de acceso de la puerta de enlace de la API de conversiones que se necesita para enviar eventos al extremo de eventos de la puerta de enlace de la API de conversiones. Puedes consultar las instrucciones sobre cómo generarla aquí. |
CAPIGatewayIngressRequest
Parámetro | Descripción |
---|---|
setSendToDestinationOnly Booleano | Marca booleana que indica si los eventos se envían solo al extremo seleccionado. Valor predeterminado: |
setFilter Función CustomEndpointRequest.Filter() | Función de filtro que procesa cada evento. Si la lógica de filtración devuelve “true”, el evento se pasa. De lo contrario, el evento se omite. Tienes que implementar la función shouldSendEvent en la interfaz que tiene el evento del parámetro. Valor predeterminado: |
En el caso de los sistemas que ya utilizan el Meta Business SDK, solo tienes que hacer referencia al nuevo objeto CAPIGatewayIngressRequest y adjuntarlo al objeto customEndpoint de 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()
En el caso de los sistemas que ya utilizan el Meta Business SDK, solo tienes que hacer referencia al nuevo objeto CAPIGatewayIngressRequest y adjuntarlo al objeto customEndpoint de 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; } });