เมื่อคุณทำตามข้อกำหนดเบื้องต้นในหน้าเริ่มต้นใช้งานเรียบร้อยแล้ว ให้ดูหน้านี้เพื่อเรียนรู้วิธีส่งเหตุการณ์และวิธีใช้เครื่องมือทดสอบเหตุการณ์ เมื่อคุณส่งเหตุการณ์แล้ว ให้ตรวจสอบยืนยันการตั้งค่าของคุณ
API คอนเวอร์ชั่นจะอิงตาม API การตลาดของ Facebook ซึ่งสร้างขึ้นจาก API กราฟของเรา API การตลาดและ API กราฟมีกำหนดการเลิกใช้เวอร์ชั่นที่แตกต่างกัน รอบการเผยแพร่ของเราจะสอดคล้องกับ API กราฟ ดังนั้นจะมีการรองรับทุกเวอร์ชั่นเป็นเวลาอย่างน้อย 2 ปี ข้อยกเว้นนี้ใช้ได้กับ API คอนเวอร์ชั่นเท่านั้น
API คอนเวอร์ชั่น: ภาพรวมพารามิเตอร์เหตุการณ์บนเว็บ เหตุการณ์ในแอพ และเหตุการณ์ที่หน้าร้านซึ่งแชร์โดยใช้ API คอนเวอร์ชั่นจำเป็นต้องมีพารามิเตอร์ที่เฉพาะเจาะจง การใช้ API คอนเวอร์ชั่นแสดงว่าคุณยอมรับว่าพารามิเตอร์ action_source
นั้นถูกต้องตามขอบเขตความเข้าใจของคุณ คุณสามารถดูรายการพารามิเตอร์ที่จำเป็นได้ที่นี่
หากต้องการส่งเหตุการณ์ใหม่ ให้สร้างคำขอ POST
ไปยังจุดเชื่อมโยง /events
ของ API นี้จากเส้นทางนี้: https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events?access_token={TOKEN}
เมื่อคุณโพสต์ไปยังจุดเชื่อมโยงนี้ Facebook จะสร้างเหตุการณ์บนเซิร์ฟเวอร์ใหม่
curl -X POST \
-F 'data=[
{
"event_name": "Purchase",
"event_time": 1732199011,
"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
แนบโทเค็นการเข้าถึงอย่างปลอดภัยที่สร้างขึ้นโดยใช้พารามิเตอร์การสืบค้น access_token
ไปกับคำขอ นอกจากนี้คุณยังสามารถใช้ Graph API Explorer เพื่อ POST
ไปยังตำแหน่งข้อมูล /<pixel_id>/events
ตัวอย่างเนื้อหาคำขอจะมีลักษณะดังนี้
{ "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
คือเวลาดำเนินเหตุการณ์ ซึ่งควรส่งเป็นประทับเวลา Unix ในหน่วยวินาทีที่ระบุเวลาที่เกิดเหตุการณ์จริง ทั้งนี้ เวลาที่ระบุอาจเร็วกว่าเวลาที่คุณส่งเหตุการณ์ไปยัง Facebook เพื่อให้สามารถปรับการประมวลผลแบบกลุ่มและประสิทธิภาพของเซิร์ฟเวอร์ให้เหมาะสม
event_time
อาจเร็วกว่าถึง 7 วันก่อนที่คุณจะส่งเหตุการณ์ไปยัง Meta หาก event_time
ใน data
ผ่านมาแล้วมากกว่า 7 วัน เราจะส่งคืนข้อผิดพลาดสำหรับคำขอทั้งหมด และจะไม่ประมวลผลเหตุการณ์ สำหรับเหตุการณ์ออฟไลน์และเหตุการณ์หน้าร้านจริงที่มี physical_store
เป็น action_source
คุณควรอัพโหลดการดำเนินการภายใน 62 วันนับจากคอนเวอร์ชั่น
การใช้ API คอนเวอร์ชั่นแสดงว่าคุณยอมรับว่าพารามิเตอร์ action_source
นั้นถูกต้องตามขอบเขตความเข้าใจของคุณ
คุณสามารถส่งได้ถึง 1,000 เหตุการณ์ใน data
อย่างไรก็ตาม เพื่อประสิทธิภาพสูงสุด เราขอแนะนำให้คุณส่งเหตุการณ์ทันทีที่เกิดเหตุการณ์ดังกล่าวขึ้น และควรดำเนินการภายใน 1 ชั่วโมงหลังเกิดเหตุการณ์ขึ้นจึงจะดีที่สุด หากเหตุการณ์ที่คุณส่งมาในแบตช์ไม่ถูกต้อง เราจะปฏิเสธทั้งแบตช์
โปรดดูที่หน้าพารามิเตอร์ข้อมูลลูกค้าเพื่อดูว่าพารามิเตอร์ใดที่ควรแฮชก่อนส่งไปยัง Facebook หากคุณใช้ Business SDK ของเรา SDK จะดำเนินการแฮชให้คุณ
เรียนรู้เพิ่มเติมเกี่ยวกับฟีเจอร์เฉพาะ 3 รายการของ Business SDK ที่ออกแบบมาเพื่อผู้ใช้ API คอนเวอร์ชั่นโดยเฉพาะ ได้แก่ คำขอแบบไม่ซิงโครไนซ์การจัดกลุ่มในเวลาเดียวกัน และอินเทอร์เฟซบริการ HTTP ในการใช้ฟีเจอร์เหล่านี้ คุณต้องมีเวอร์ชั่นภาษาขั้นต่ำดังต่อไปนี้
การสนับสนุน Business SDK สำหรับ PHP 5 ได้เลิกใช้แล้วตั้งแต่เดือนมกราคม 2019 โปรดอัพเกรดเป็น PHP 7 เพื่อใช้ Business SDK
ถ้าคุณจำเป็นต้องใช้ PHP 5 ให้ลองพิจารณาปรับใช้ Swagger ของเรา
หลังจากที่ส่งเหตุการณ์ของคุณแล้ว ให้ยืนยันว่าเราได้รับเหตุการณ์ดังกล่าวในตัวจัดการเหตุการณ์ดังนี้
PIXEL_ID
ในคำขอ POST
ของคุณ คุณสามารถดูข้อมูลเพิ่มเติมได้ที่ศูนย์ช่วยเหลือทางธุรกิจ: ไปยังส่วนต่างๆ ในตัวจัดการเหตุการณ์คุณสามารถตรวจสอบยืนยันว่า Facebook ได้รับเหตุการณ์บนเซิร์ฟเวอร์ของคุณอย่างถูกต้องโดยใช้ฟีเจอร์ "ทดสอบเหตุการณ์" ในตัวจัดการเหตุการณ์ หากต้องการค้นหาเครื่องมือ ให้ไปที่ Events Manager > Data Sources > Your Pixel > Test Events
เครื่องมือทดสอบเหตุการณ์จะสร้าง ID ทดสอบ ส่ง ID ทดสอบเป็นพารามิเตอร์ test_event_code
เพื่อเริ่มดูกิจกรรมของเหตุการณ์ปรากฏขึ้นในหน้าต่าง "ทดสอบเหตุการณ์"
หมายเหตุ: ช่อง test_event_code
ควรใช้สำหรับการทดสอบเท่านั้น โดยคุณต้องลบออกเมื่อส่งเพย์โหลดที่ใช้งานจริง
เหตุการณ์ที่ส่งด้วย test_event_code
จะไม่ถูกยกเลิก โดยจะส่งไปยังตัวจัดการเหตุการณ์ และนำไปใช้เพื่อวัตถุประสงค์ในการกำหนดเป้าหมายและการวัดผลโฆษณา
ต่อไปนี้คือตัวอย่างวิธีจัดโครงสร้างคำขอ:
นี่คือตัวอย่างลักษณะที่คำขอจะปรากฏใน Graph API Explorer:
คุณสามารถสร้างเพย์โหลดการทดสอบนี้โดยใช้เครื่องมือตัวช่วยเพย์โหลด โปรดทราบว่าโค้ดทดสอบเหตุการณ์ใช้สำหรับเพย์โหลดการทดสอบเท่านั้น
เหตุการณ์บนเซิร์ฟเวอร์ของคุณจะปรากฏขึ้นในหน้าต่าง "ทดสอบเหตุการณ์" เมื่อมีการส่งคำขอ
สำหรับ API ทั้งสองนี้ ให้ใช้ตัวเลือกการประมวลผลข้อมูลด้วยการเพิ่ม data_processing_options
, data_processing_options_country
และ data_processing_options_state
ในแต่ละเหตุการณ์ภายในพารามิเตอร์ข้อมูลของเหตุการณ์ของคุณ
หมายเหตุ: เราไม่แนะนำให้ใช้เหตุการณ์ในแอพและ API คอนเวอร์ชั่นแบบออฟไลน์สำหรับการผสานการทำงานใหม่ๆ อีกต่อไป แต่เราขอแนะนำให้คุณใช้ API คอนเวอร์ชั่นเนื่องจากขณะนี้รองรับเว็บ แอพ และเหตุการณ์ออฟไลน์ ดูข้อมูลเพิ่มเติมได้ที่ API คอนเวอร์ชั่นสำหรับเหตุการณ์ในแอพและ API คอนเวอร์ชั่นสำหรับเหตุการณ์แบบออฟไลน์
หากต้องการไม่เปิดใช้งานการใช้ข้อมูลแบบจำกัด (LDU) อย่างชัดแจ้ง ให้ระบุอาร์เรย์ว่างสำหรับแต่ละเหตุการณ์หรือเพียงแค่ลบช่องในเพย์โหลดออก:
{ "data": [ { "event_name": "Purchase", "event_time": <EVENT_TIME>, "user_data": { "em": "<EMAIL>" }, "custom_data": { "currency": "<CURRENCY>", "value": "<VALUE>" }, "data_processing_options": [] } ] }
หากต้องการเปิดใช้งาน LDU และให้ Meta ทำการระบุตำแหน่งทางภูมิศาสตร์ ให้ใช้โค้ดต่อไปนี้
{ "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 } ] }
หากต้องการเปิดใช้งาน LDU และระบุตำแหน่งที่ตั้งด้วยตนเอง เช่น สำหรับรัฐแคลิฟอร์เนีย ให้ใช้โค้ดต่อไปนี้
{ "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 } ] }
API คอนเวอร์ชั่นแบบออฟไลน์มีตัวเลือกให้อัพโหลดเหตุการณ์ของคุณด้วยตนเองจากไฟล์ .csv
ในกรณีนี้ ให้เพิ่มตัวเลือกการประมวลผลข้อมูล ประเทศที่ประมวลผลข้อมูล และรัฐที่ประมวลผลข้อมูลเป็นคอลัมน์ในไฟล์ของคุณ ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในอินเทอร์เฟซผู้ใช้ของการอัพโหลด
โปรดเรียนรู้เพิ่มเติมเกี่ยวกับตัวเลือกการประมวลผลข้อมูล
API การตลาดมีตรรกะการจำกัดอัตราของตัวเอง และไม่รวมอยู่ในการจำกัดอัตรา API กราฟใดๆ ดังนั้น หากคุณทำการเรียก API การตลาด ก็จะไม่ถูกนำไปคำนวณในการจำกัดผลลัพธ์ของ API กราฟ
API คอนเวอร์ชั่นไม่มีการจำกัดอัตราที่เฉพาะเจาะจง การเรียก API คอนเวอร์ชั่นจะนับเป็นการเรียก API การตลาด ข้อจำกัดเพียงอย่างเดียวคือ คุณสามารถส่งเหตุการณ์ถึงเราได้สูงสุดครั้งละ 1,000 เหตุการณ์ ดูข้อมูลเพิ่มเติมได้ที่หัวข้อส่งคำขอ
การจำกัดอัตรา API การตลาดคู่มือนี้จะช่วยคุณในการใช้ฟีเจอร์ขั้นสูงต่างๆ ของ Meta Business SDK ที่ออกแบบมาสำหรับผู้ใช้เกตเวย์ API คอนเวอร์ชั่นโดยเฉพาะ โปรดดูการใช้งานเกตเวย์ API คอนเวอร์ชั่นขั้นพื้นฐานที่เอกสารประกอบเกี่ยวกับเกตเวย์ API คอนเวอร์ชั่น
คุณจำเป็นต้องติดตั้ง Meta Business SDK ไว้ก่อนจึงจะใช้ฟีเจอร์ทั้งหมดในรายการด้านล่างนี้ได้ โปรดดูเริ่มต้นใช้งาน Meta Business SDK หรือปฏิบัติตามคำแนะนำ README ที่ระบุไว้ที่นี่
ในปัจจุบัน ฟีเจอร์เหล่านี้เปิดให้ใช้งานได้บน Business SDK สำหรับ PHP และ Java เท่านั้น เราจะนำภาษาอื่นๆ เข้ามาใช้ภายในช่วงปลายปี 2023
เวอร์ชั่นภาษาขั้นต่ำที่ต้องมีในการใช้ฟีเจอร์เหล่านี้มีดังต่อไปนี้
PHP เวอร์ชั่น 7.2 ขึ้นไป
Java เวอร์ชั่น 8 ขึ้นไป
หมายเหตุ: หากต้องการลบเหตุการณ์ที่ซ้ำกันออกให้กับตำแหน่งข้อมูล API คอนเวอร์ชั่น โปรดส่ง eventId
ในคำขอของคุณ ซึ่งจะช่วยป้องกันไม่ให้เหตุการณ์ที่ซ้ำกันแสดงขึ้นมาในกรณีที่เปิดใช้งานการเผยแพร่ API คอนเวอร์ชั่น
CAPIGatewayIngressRequest
พารามิเตอร์ | คำอธิบาย |
---|---|
endpointUrl สตริง | ตำแหน่งข้อมูลเกตเวย์ API คอนเวอร์ชั่นที่จะส่งเหตุการณ์ไป ทั้งนี้ จะไม่มีการตรวจสอบล่วงหน้ากับพารามิเตอร์นี้แต่อย่างใด นอกจากการตรวจสอบว่าเป็น URL ที่ถูกต้องหรือไม่ ตัวอย่าง: https://test.example.com |
accessKey สตริง | คีย์สิทธิ์การเข้าถึงเกตเวย์ API คอนเวอร์ชั่น ซึ่งจำเป็นในการส่งเหตุการณ์ต่างๆ ไปยังตำแหน่งข้อมูลเหตุการณ์เกตเวย์ API คอนเวอร์ชั่น และนี่คือคำแนะนำในการสร้างคีย์ดังกล่าว |
CAPIGatewayIngressRequest
พารามิเตอร์ | คำอธิบาย |
---|---|
setSendToDestinationOnly บูลีน | แฟล็กบูลีนที่ระบุว่าระบบส่งเหตุการณ์ไปยังตำแหน่งข้อมูลที่เลือกไว้เท่านั้นหรือไม่ ค่าเริ่มต้น: |
setFilter ฟังก์ชั่น CustomEndpointRequest.Filter() | ฟังก์ชั่นตัวกรองที่ประมวลผลแต่ละเหตุการณ์ หากตรรกะการกรองส่งคืนมาเป็น True แสดงว่าเหตุการณ์นั้นผ่านเกณฑ์การกรอง แต่หากไม่เป็นเช่นนั้น แสดงว่าไม่ผ่านเกณฑ์การกรอง คุณจำเป็นต้องใช้ฟังก์ชั่น shouldSendEvent ในอินเทอร์เฟซที่มีพารามิเตอร์ Event ค่าเริ่มต้น: |
สำหรับระบบที่ใช้ Business SDK อยู่แล้ว สิ่งที่คุณต้องทำจะมีเพียงการอ้างอิง CAPIGatewayIngressRequest ใหม่ และแนบไปกับอ็อบเจ็กต์ customEndpoint ของ 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()
สำหรับระบบที่ใช้ Business SDK อยู่แล้ว สิ่งที่คุณต้องทำจะมีเพียงการอ้างอิง CAPIGatewayIngressRequest ใหม่ และแนบไปกับอ็อบเจ็กต์ customEndpoint ของ 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; } });