RTU มีไว้สำหรับการอัปเดตที่คุณคาดการณ์ไม่ได้เป็นหลัก เช่น การปิดฉุกเฉิน หรือข้อมูลเมตาที่เปลี่ยนแปลงเป็นระยะๆ (เช่น ETA) หากไม่จำเป็นต้องแสดงการเปลี่ยนแปลงทันที คุณสามารถใช้การส่งผ่านข้อมูลฟีดแบบเป็นชุดแทนได้ การอัปเดตแบบเรียลไทม์จะได้รับการประมวลผลภายในไม่เกิน 5 นาที
การตั้งค่า Google Cloud Platform
- ตั้งค่าโปรเจ็กต์ GCP คุณต้องมีโปรเจ็กต์ GCP เพื่อเข้าถึง RTU API
- ให้สิทธิ์เข้าถึงระดับเอดิเตอร์แก่ food-support@google.com
- แจ้งหมายเลขโปรเจ็กต์ GCP ให้ POC ของ Google ทราบ โปรเจ็กต์ GCP ต้องเชื่อมโยงกับบัญชี Actions Center เพื่อให้อัปเดตแบบเรียลไทม์ทำงานได้
- เปิดใช้ Maps Booking API:
- ใน GCP ให้ไปที่ API และบริการ > ไลบรารี
- ค้นหา "Google Maps Booking API"
- ค้นหาอินสแตนซ์ Sandbox ("Google Maps Booking API (Dev)") แล้วคลิกเปิดใช้
- ค้นหาอินสแตนซ์เวอร์ชันที่ใช้งานจริง ("Google Maps Booking API") แล้วคลิกเปิดใช้
- สร้างบัญชีบริการที่มีบทบาทผู้แก้ไขในโปรเจ็กต์ GCP ดูรายละเอียดเพิ่มเติมได้ที่การตั้งค่าบัญชีบริการ
- ตรวจสอบว่าคุณอัปโหลดฟีดกลุ่มไปยังสภาพแวดล้อมที่คุณกำลังทำงานเกี่ยวกับการอัปเดตแบบเรียลไทม์
- สำหรับการตรวจสอบสิทธิ์ API เราขอแนะนำให้ติดตั้งไลบรารีของไคลเอ็นต์ Google ในภาษาที่คุณเลือก ใช้ "https://www.googleapis.com/auth/mapsbooking" เป็นขอบเขต OAuth ตัวอย่างโค้ดที่รวมไว้ด้านล่างใช้ไลบรารีเหล่านี้ หรือคุณจะต้องจัดการการแลกเปลี่ยนโทเค็นด้วยตนเองตามที่อธิบายไว้ในการใช้ OAuth 2.0 เพื่อเข้าถึง Google APIs
การตั้งค่าบัญชีบริการ
คุณต้องมีบัญชีบริการเพื่อส่งคำขอ HTTPS ที่ตรวจสอบสิทธิ์แล้วไปยัง Google API เช่น API การอัปเดตแบบเรียลไทม์
หากต้องการตั้งค่าบัญชีบริการ ให้ทำดังนี้
- เข้าถึงคอนโซล Google Cloud Platform
- บัญชีของคุณใน Actions Center ยังมีโปรเจ็กต์ Google Cloud ที่เชื่อมโยงอยู่ด้วย เลือกโปรเจ็กต์นั้น หากยังไม่ได้เลือก
- คลิกบัญชีบริการในเมนูด้านซ้าย
- คลิกสร้างบัญชีบริการ
- ตั้งชื่อบัญชีบริการ แล้วคลิกสร้าง
- สำหรับเลือกบทบาท ให้เลือกโปรเจ็กต์ > ผู้แก้ไข
- คลิกต่อไป
- ไม่บังคับ: เพิ่มผู้ใช้เพื่อให้สิทธิ์เข้าถึงบัญชีบริการ แล้วคลิกเสร็จสิ้น
- คลิกเพิ่มเติม > สร้างคีย์สำหรับบัญชีบริการที่คุณเพิ่งสร้าง
- เลือก JSON เป็นรูปแบบ แล้วคลิกสร้าง
- หลังจากสร้างคู่คีย์สาธารณะ/ส่วนตัวใหม่แล้ว ให้ดาวน์โหลดลงในเครื่อง
การทำงานกับ API
API การอัปเดตแบบเรียลไทม์รองรับการดำเนินการ 2 ประเภท ได้แก่ อัปเดตและลบ ไม่รองรับการเพิ่มเอนทิตีใหม่ผ่าน API การอัปเดตแบบเรียลไทม์ คุณจัดกลุ่มการอัปเดตแบบเรียลไทม์ได้หากรวมการอัปเดตหลายรายการไว้ในคำขอ API เดียว คุณอัปเดตแบบเป็นกลุ่มได้สูงสุด 1,000 รายการในการเรียก API ครั้งเดียว เราขอแนะนำให้ใช้แนวทางที่อิงตามทริกเกอร์เพื่อส่งการอัปเดตผ่าน RTU (เช่น เมื่อข้อมูลในระบบมีการเปลี่ยนแปลง ให้ทริกเกอร์การอัปเดตแบบเรียลไทม์ไปยัง Google) แทนแนวทางที่อิงตามความถี่ (เช่น ทุกๆ X นาที ให้สแกนระบบเพื่อหาการเปลี่ยนแปลง) หากเป็นไปได้
API การอัปเดตแบบเรียลไทม์จะทำงานทั้งในสภาพแวดล้อมแซนด์บ็อกซ์และสภาพแวดล้อมที่ใช้งานจริง ใช้สภาพแวดล้อมแซนด์บ็อกซ์เพื่อทดสอบคำขอ API และใช้สภาพแวดล้อมการใช้งานจริงเพื่ออัปเดตเนื้อหาที่ผู้ใช้การสั่งซื้อแบบครบวงจรมองเห็น
- แซนด์บ็อกซ์ -
partnerdev-mapsbooking.googleapis.com - การผลิต -
mapsbooking.googleapis.com
ปลายทาง
API การอัปเดตแบบเรียลไทม์แสดงปลายทาง 2 รายการเพื่อจัดการคำขอขาเข้าสำหรับการอัปเดตพื้นที่โฆษณา
- อัปเดต -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush - ลบ -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
คุณดูพารามิเตอร์ PARTNER_ID ได้ใน Actions Center ที่หน้าบัญชีและผู้ใช้ ดังที่แสดงในภาพหน้าจอด้านล่าง
เมื่อใช้ 10000001 เป็นค่าของ PARTNER_ID เป็นตัวอย่างจากภาพหน้าจอด้านบน URL ที่สมบูรณ์สำหรับการส่งคำขอ API ใน Sandbox และการใช้งานจริงจะมีลักษณะดังตัวอย่างด้านล่าง
การอัปเดตแซนด์บ็อกซ์
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
ลบในแซนด์บ็อกซ์
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
ข้อมูลอัปเดตเกี่ยวกับเวอร์ชันที่ใช้งานจริง
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
ลบเวอร์ชันที่ใช้งานจริง
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
การอัปเดตเอนทิตี
หากต้องการอัปเดตเอนทิตีในสินค้าคงคลัง ให้ใช้ปลายทาง update ในคำขอ HTTP POST คำขอ POST แต่ละรายการต้องมีพารามิเตอร์ 10000001 พร้อมกับเพย์โหลด JSON ที่มีเอนทิตีที่คุณต้องการอัปเดต
หมายเหตุ: ตรวจสอบว่าฟีดข้อมูลรายวันมีการเปลี่ยนแปลงที่ส่งผ่าน API การอัปเดตแบบเรียลไทม์ด้วย มิฉะนั้นข้อมูลอาจล้าสมัยหรือไม่ถูกต้อง
เพย์โหลดคำขออัปเดต
เนื้อหาของคำขอคือออบเจ็กต์ JSON ที่มีรายการระเบียน แต่ละระเบียนจะสอดคล้องกับเอนทิตีที่กำลังอัปเดต ซึ่งประกอบด้วยฟิลด์ proto_record และ generation_timestamp ที่ระบุเวลาของการอัปเดตเอนทิตี
{
"records": [
{
"proto_record":"ServiceData PROTO",
"generation_timestamp":"UPDATE_TIMESTAMP"
}
]
}ServiceData PROTO: การแปล proto หรือ JSON ของเอนทิตี ServiceData ที่คุณกำลังอัปเดตUPDATE_TIMESTAMP: อย่าลืมใส่การประทับเวลาของตอนที่สร้างเอนทิตีในระบบแบ็กเอนด์ หากไม่ได้ระบุช่องนี้ ระบบจะตั้งค่าเป็นเวลาที่ Google ได้รับคำขอ เมื่ออัปเดตเอนทิตีผ่านคำขอbatchPushระบบจะใช้ฟิลด์generation_timestampสำหรับการควบคุมเวอร์ชันของเอนทิตี ดูรูปแบบที่คาดไว้ของค่าเวลาในสคีมาสินค้าคงคลังเชิงสัมพันธ์
- เนื้อหาของเพย์โหลดต้องมีขนาดไม่เกิน 5 MB
- นำช่องว่างออกเพื่อลดขนาด
batchPushคำขอหนึ่งๆ มีการอัปเดตได้สูงสุด 1,000 รายการ
ตัวอย่าง
อัปเดตเวลาถึงโดยประมาณ
สมมติว่าคุณจำเป็นต้องอัปเดตเวลาที่คาดคะเนของการนำส่งจาก 30-60 นาทีเป็น 60-90 นาทีอย่างเร่งด่วน การอัปเดตต้องมี JSON สำหรับเอนทิตีบริการทั้งหมด
ลองพิจารณาเอนทิตีบริการที่มีลักษณะดังนี้
{ "service": { "service_id": "service/entity002", "service_type": "DELIVERY", "parent_entity_id": "entity002", "lead_time": { "min_lead_time_duration": "600s", "max_lead_time_duration": "1800s" }, "action_link_id": "delivery_link/entity002" } }
การอัปเดตแบบเรียลไทม์โดยใช้ HTTP POST มีดังนี้ (ระบบจะจัดรูปแบบเนื้อหาคำขอเพื่อให้อ่านง่าย)
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "3600" }, "max_lead_time_duration" : { "seconds": "5400" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }] }
อัปเดตเอนทิตีหลายรายการ
หากต้องการอัปเดตเอนทิตีร้านอาหารหลายรายการในการเรียก API ครั้งเดียว ให้รวมระเบียนหลายรายการไว้ในช่อง proto_record ของเนื้อหาคำขอ
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "1800" }, "max_lead_time_duration" : { "seconds": "3600" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee", "fee_type" : "DELIVERY", "fixed_amount" : { "currency_code" : "USD", "units" : "10", "nanos" : "0" }, "service_ids": ["service/entity002"] } }, "generation_timestamp" : "2023-09-13T17:11:10.750Z" }] }
ลบเอนทิตี
หากต้องการลบเอนทิตีออกจากพื้นที่โฆษณา ให้ใช้ปลายทาง DELETE ในคำขอ HTTP POST คำขอ POST แต่ละรายการต้องมีพารามิเตอร์ PARTNER_ID พร้อมกับเพย์โหลด JSON ซึ่งมีตัวระบุของเอนทิตีที่คุณต้องการลบ
หมายเหตุ: ตรวจสอบว่าฟีดข้อมูลรายวันมีการเปลี่ยนแปลงที่ส่งผ่าน API การอัปเดตแบบเรียลไทม์ด้วย มิฉะนั้น การส่งผ่านข้อมูลแบบเป็นชุดรายวันจะเขียนทับการเปลี่ยนแปลงแบบเรียลไทม์
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery" } }, "delete_time": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee" } }, "delete_time" : "2023-09-13T17:11:10.750Z" }] }
การเพิ่มเอนทิตี
อย่าใช้การอัปเดตแบบเรียลไทม์เพื่อเพิ่มเอนทิตีใหม่ เนื่องจากอาจทำให้ข้อมูลไม่สอดคล้องกัน โปรดใช้ฟีดกลุ่มแทน
รหัสการตรวจสอบและความถูกต้องและการตอบกลับของ API
การตรวจสอบการเรียก API การอัปเดตแบบเรียลไทม์มี 2 ประเภท ดังนี้
- ระดับคำขอ - การตรวจสอบเหล่านี้จะตรวจสอบว่าเพย์โหลดเป็นไปตามสคีมา และทุก
proto_recordมีฟิลด์idและtypeการตรวจสอบเหล่านี้เป็นแบบซิงโครนัสและระบบจะแสดงผลลัพธ์ในเนื้อหาการตอบกลับของ API รหัสการตอบกลับ 200 และเนื้อหา JSON ว่าง{}หมายความว่าการตรวจสอบเหล่านี้ผ่าน และระบบได้จัดคิวเอนทิตีในคำขอนั้นเพื่อประมวลผลแล้ว รหัสการตอบกลับที่ไม่ใช่ 200 หมายความว่าการตรวจสอบอย่างน้อย 1 รายการเหล่านี้ล้มเหลว และคำขอทั้งหมดถูกปฏิเสธ (รวมถึงเอนทิตีทั้งหมดในเพย์โหลด) ตัวอย่างเช่น หากproto_recordไม่มี@typeระบบจะแสดงผลการตอบกลับข้อผิดพลาดต่อไปนี้
{ "error": { "code": 400, "message": "Record:{...}", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." } ] }
- ระดับเอนทิตี: ระบบจะตรวจสอบความถูกต้องของแต่ละเอนทิตี (proto_record) ในเพย์โหลดกับสคีมา ระบบจะไม่รายงานปัญหาที่พบในระยะการตรวจสอบนี้ในการตอบกลับของ API โดยจะรายงานในแดชบอร์ดการรายงาน RTU ของศูนย์การดำเนินการเท่านั้น
หมายเหตุ: โค้ดการตอบกลับ 200 ไม่ได้หมายความว่าระบบจะส่งผ่านข้อมูลเอนทิตีทั้งหมดได้สำเร็จ
โควต้า API
การอัปเดต API แบบเรียลไทม์มีโควต้าคำขอ 1,500 รายการทุกๆ 60 วินาที หรือเฉลี่ย 25 คำขอต่อวินาที เมื่อใช้โควต้าเกิน Google จะตอบกลับด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้
{
"error": {
"code": 429,
"message": "Insufficient tokens for quota ...",
"status": "RESOURCE_EXHAUSTED",
"details": [...]
}
}หากต้องการจัดการปัญหานี้ ให้ลองโทรอีกครั้งโดยเว้นระยะห่างที่เพิ่มขึ้นแบบทวีคูณจนกว่าจะสำเร็จ หากคุณใช้โควต้าจนหมดเป็นประจำ ให้พิจารณารวมเอนทิตีเพิ่มเติมไว้ในคำขอ API เดียว คุณใส่เอนทิตีได้สูงสุด 1,000 รายการในการเรียก API ครั้งเดียว
เวลาในการประมวลผลและการอัปเดตแบบเรียลไทม์
ระบบจะประมวลผลเอนทิตีที่อัปเดตผ่านการอัปเดตแบบเรียลไทม์ภายใน 5 นาที