Dieser Leitfaden unterstützt dich bei der Navigation durch die erweiterten Funktionen des Meta Business-SDK, die sich speziell an die Nutzer*innen der Conversions API richten. Asynchrone Anfragen, gleichzeitiges Batching und die HTTP-Dienstschnittstelle sind in den PHP-, NodeJS-, Java-, Python- und Ruby-SDKs verfügbar. Informationen zur grundlegenden Verwendung der Conversions API findest du in der Hauptdokumentation zur Conversions API.
Das Meta Business-SDK bietet dir Zugriff auf unsere Suite von Business-APIs, mit denen du maßgeschneiderte Lösungen für deine Unternehmen und Kund*innen erstellen kannst. Eine der APIs, die für SDK-Nutzer*innen verfügbar sind, ist die Conversions API.
Damit du die unten aufgeführten Funktionen verwenden kannst, musst du das Meta Business SDK installiert haben. Siehe Erste Schritte mit dem Meta Business SDK oder befolge die hier aufgelisteten README
-Anweisungen:
facebook-nodejs-business-sdk
facebook-python-business-sdk
Für die Verwendung dieser Funktionen erforderliche Mindestversion der Programmiersprache:
Verwende diese Funktion, wenn du die Ausführung deines Programms nicht blockieren möchtest, um auf den Abschluss einer Anfrage zu warten. Wenn du dann eine Anfrage sendest, erhältst du nach Abschluss ein Signal vom Server zurück. Während du auf die Antwort wartest, kann das Programm weiterhin ausgeführt werden.
Durch asynchrone Anfragen kannst du deine Ressourcen effizienter nutzen, was zu einer Verkürzung der Serverantwortzeit führt. Dadurch hast du auch mehr Kontrolle darüber, wie dein Programm mit Serverfehlern umgeht, und kannst das SDK problemlos in Code integrieren, der bereits asynchron ausgeführt wird.
Informationen zum Implementieren asynchroner Anfragen findest du in den Codebeispielen der folgenden Sprachen:
use FacebookAds\Api;
use FacebookAds\Object\ServerSide\CustomData;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\EventRequest;
use FacebookAds\Object\ServerSide\EventRequestAsync;
use FacebookAds\Object\ServerSide\UserData;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise;
$pixel_id = getenv('PIXEL_ID');
$access_token = getenv('ACCESS_TOKEN');
if (empty($pixel_id) || empty($access_token)) {
throw new Exception('Missing required test config. Got pixel_id: "' . $pixel_id . '", access_token: "' . $access_token . '"');
}
Api::init(null, null, $access_token, false);
function create_events($num) {
$user_data = (new UserData())
->setEmail('joe' . $num . '@eg.com')
->setClientIpAddress($_SERVER['REMOTE_ADDR'])
->setClientUserAgent($_SERVER['HTTP_USER_AGENT']);
$custom_data = (new CustomData())
->setCurrency('usd')
->setValue(123.45);
$event = (new Event())
->setEventName('Purchase')
->setEventTime(time())
->setEventSourceUrl('http://jaspers-market.com/product/123')
->setUserData($user_data)
->setCustomData($custom_data)
->setActionSource(ActionSource::WEBSITE);
return array($event);
}
function create_async_request($pixel_id, $num) {
$async_request = (new EventRequestAsync($pixel_id))
->setEvents(create_events($num));
return $async_request->execute()
->then(
null,
function (RequestException $e) {
print(
"Error!!!\n" .
$e->getMessage() . "\n" .
$e->getRequest()->getMethod() . "\n"
);
}
);
}
// Async request:
$promise = create_async_request($pixel_id, 2);
print("Request 1 state: " . $promise->getState() . "\n");
print("Async request - OK.\n");
// Async request with wait:
$promise = create_async_request($pixel_id, 3);
$response2 = $promise->wait();
print("Request 2: " . $response2->getBody() . "\n");
print("Async request with wait - OK.\n");
// Multiple async requests:
$promises = [
"Request 3" => create_async_request($pixel_id, 4),
"Request 4" => create_async_request($pixel_id, 5),
];
$response3 = Promise\unwrap($promises);
foreach ($response3 as $request_name => $response) {
print($request_name . ": " . $response->getBody()."\n");
}
print("Async - Multiple async requests OK.\n");
Gleichzeitiges Batching nutzt asynchrone Anfragen, um den Durchsatz mittels effizienterer Ressourcennutzung zu erhöhen. Erstelle Batch-Anfragen für Anwendungsfälle wie Event-Request-Worker, Cron-Jobs und mehr.
Du hast die folgenden BatchProcessor
-Methoden zur Auswahl:
Methode | Geeignete Anwendungsfälle |
---|---|
| Verwende diese Methode, um Events zu verarbeiten, die dieselben |
| Dies ist der zugrunde liegende Generator für Die Methode kann auch zum Verarbeiten von Events verwendet werden, die dieselben |
| Verwende diese Methode, um |
| Dies ist der zugrunde liegende Generator für Die Methode kann auch verwendet werden, um |
Bei der gleichzeitigen Batching sollten Events möglichst in Echtzeit gesendet werden. Weitere Informationen findest du unter Häufigkeit des Teilvorgangs.
Wenn du die PHP-, Python- oder Ruby-SDKs verwendest, erfordern die oben genannten Methoden ein oder mehrere EventRequestAsync-Objekte anstelle eines EventRequest.
Informationen zum Implementieren des gleichzeitigen Batchings findest du in den Codebeispielen der folgenden Sprachen:
use FacebookAds\Api;
use FacebookAds\Object\ServerSide\BatchProcessor;
use FacebookAds\Object\ServerSide\CustomData;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\EventRequestAsync;
use FacebookAds\Object\ServerSide\UserData;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise;
$pixel_id = getenv('PIXEL_ID');
$access_token = getenv('ACCESS_TOKEN');
if (empty($pixel_id) || empty($access_token)) {
throw new Exception('Missing required test config. Got pixel_id: "' . $pixel_id . '", access_token: "' . $access_token . '"');
}
$api = Api::init(null, null, $access_token, false);
function create_event($i) {
$user_data = (new UserData())
->setEmail('joe' . $i . '@eg.com')
->setClientIpAddress($_SERVER['REMOTE_ADDR'])
->setClientUserAgent($_SERVER['HTTP_USER_AGENT']);
$custom_data = (new CustomData())
->setCurrency('usd')
->setValue(123.45);
return (new Event())
->setEventName('Purchase')
->setEventTime(time())
->setEventSourceUrl('http://jaspers-market.com/product/' . $i)
->setUserData($user_data)
->setCustomData($custom_data)
->setActionSource(ActionSource::WEBSITE);
}
function create_events($num) {
$events = [];
for ($i = 0; $i < $num; $i++) {
$events[] = create_event($i);
}
return $events;
}
function create_async_requests($pixel_id, $num) {
$requests = [];
for ($i = 0; $i < $num; $i++) {
$requests[] = (new EventRequestAsync($pixel_id))
->setUploadTag('test-tag-2')
->setEvents([create_event($i)]);
}
return $requests;
}
function run($pixel_id) {
print("Started CONVERSIONS_API_EVENT_CREATE_BATCH...\n");
$batch_processor = new BatchProcessor($pixel_id, 2, 2);
// processEvents
$events = create_events(11);
$batch_processor->processEvents(array('upload_tag' => 'test-tag-1'), $events);
// processEventRequests
$requests = create_async_requests($pixel_id, 5);
$batch_processor->processEventRequests($requests);
// processEventsGenerator
$process_events_generator = $batch_processor->processEventsGenerator(array('upload_tag' => 'test-tag-1'), $events);
foreach ($process_events_generator as $promises) {
try {
Promise\unwrap($promises);
} catch (RequestException $e) {
print('RequestException: ' . $e->getResponse()->getBody()->getContents() . "\n");
throw $e;
} catch (\Exception $e) {
print("Exception:\n");
print_r($e);
throw $e;
}
}
// processEventRequestsGenerator
$requests = create_async_requests($pixel_id, 5);
$process_event_requests_generator = $batch_processor->processEventRequestsGenerator($requests);
foreach ($process_event_requests_generator as $promises) {
try {
Promise\unwrap($promises);
} catch (RequestException $e) {
print('RequestException: ' . $e->getResponse()->getBody()->getContents() . "\n");
throw $e;
} catch (\Exception $e) {
print("Exception:\n");
print_r($e);
throw $e;
}
}
print("Finished CONVERSIONS_API_EVENT_CREATE_BATCH with no errors.\n");
}
run($pixel_id);
Verwende die HTTP-Dienstschnittstelle, wenn du bestimmte Anforderungen an das HTTP-Dienst-Layer hast. Mit dieser Funktion kannst du den Standard-HTTP-Dienst des Business-SDK überschreiben und deinen eigenen selbstdefinierten Dienst mit deiner bevorzugten Methode oder Bibliothek implementieren.
Informationen zum Implementieren deiner eigenen HTTP-Dienstschnittstelle findest du in den Codebeispielen der folgenden Sprachen:
require __DIR__ . '/../vendor/autoload.php';
use FacebookAds\Api;
use FacebookAds\Object\ServerSide\CustomData;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\EventRequest;
use FacebookAds\Object\ServerSide\EventRequestAsync;
use FacebookAds\Object\ServerSide\HttpServiceClientConfig;
use FacebookAds\Object\ServerSide\UserData;
// Imports used by the TestHttpClient class
use FacebookAds\Object\ServerSide\HttpServiceInterface;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Psr7\MultipartStream;
use GuzzleHttp\Psr7\Request;
$pixel_id = getenv('PIXEL_ID');
$access_token = getenv('ACCESS_TOKEN');
if (empty($pixel_id) || empty($access_token)) {
throw new Exception('Missing required test config. Got pixel_id: "' . $pixel_id . '", access_token: "' . $access_token . '"');
}
function run($access_token, $pixel_id) {
Api::init(null, null, $access_token, false);
$request1 = getEventRequest($pixel_id, 1);
$request1->setHttpClient(new TestHttpClient());
$response1 = $request1->execute();
print("Response: " . $response1->getBody() . "\n");
print("Custom HTTP Service Request 1 - OK.\n");
// Alternatively, you can set the access_token and the HTTP Client on the HttpServiceClientConfig
Api::init(null, null, null, false);
HttpServiceClientConfig::getInstance()->setClient(new TestHttpClient());
HttpServiceClientConfig::getInstance()->setAccessToken($access_token);
$request2 = getEventRequest($pixel_id, 2);
$response2 = $request2->execute();
print("Response: " . $response2->getBody() . "\n");
print("Custom HTTP Service Request 2 - OK.\n");
}
function getEventRequest($pixel_id, $num) {
$user_data = (new UserData())
->setEmail('joe' . $num . '@eg.com')
->setClientIpAddress($_SERVER['REMOTE_ADDR'])
->setClientUserAgent($_SERVER['HTTP_USER_AGENT']);
$custom_data = (new CustomData())
->setCurrency('usd')
->setValue(123.45);
$event = (new Event())
->setEventName('Purchase')
->setEventTime(time())
->setEventSourceUrl('http://jaspers-market.com/product/123')
->setUserData($user_data)
->setCustomData($custom_data)
->setActionSource(ActionSource::WEBSITE);
return (new EventRequest($pixel_id))
->setEvents(array($event));
}
class TestHttpClient implements HttpServiceInterface {
public function executeRequest($url, $method, array $curl_options, array $headers, array $params) {
$multipart_contents = [];
foreach ($params as $key => $value) {
if ($key === 'data') {
$multipart_contents[] = [
'name' => $key,
'contents' => \GuzzleHttp\json_encode($value),
'headers' => array('Content-Type' => 'multipart/form-data'),
];
} else {
$multipart_contents[] = [
'name' => $key,
'contents' => $value,
'headers' => array('Content-Type' => 'multipart/form-data'),
];
}
}
$body = new MultipartStream($multipart_contents);
$request = new Request($method, $url, $headers, $body);
$handler_stack = HandlerStack::create(
new CurlHandler(['options' => $curl_options])
);
$client = new Client(['handler' => $handler_stack]);
return $client->send($request);
}
}
run($access_token, $pixel_id);
Mithilfe des Parameters test_event_code
kannst du deine Event-Anfragen testen. Suche den Testcode, indem das Tool „Events testen“ aufrufst, das du im Events Manager unter Datenquellen > Dein Pixel > auf dem Tab Events testen findest.
Hinweis: Du musst den Beispielwert im folgenden Code (z. B. TEST12345
) durch den Testcode ersetzen, den du auf der Registerkarte Events testen erhältst.
...
$request = (new EventRequest($pixel_id))
->setTestEventCode('TEST12345')
->setEvents($events);
$response = $request->execute();
Derzeit unterstützen wir das Festlegen einer eigenen HTTP-Dienstschnittstelle nicht, wenn gleichzeitige Batch-Anfragen oder asynchrone Anfragen getätigt werden.