RTU มีไว้เพื่อการอัปเดตที่คุณคาดการณ์ไม่ได้เป็นหลัก เช่น การปิดในกรณีฉุกเฉิน หรือข้อมูลเมตาที่เปลี่ยนแปลงเป็นระยะๆ (เช่น เวลาถึงโดยประมาณ) หากการเปลี่ยนแปลงไม่จำเป็นต้องแสดงทันที คุณใช้การนำเข้าฟีดแบบกลุ่มแทนได้ การอัปเดตแบบเรียลไทม์จะใช้เวลาไม่เกิน 5 นาที
การตั้งค่า Google Cloud Platform
- ตั้งค่าโปรเจ็กต์ GCP ต้องใช้โปรเจ็กต์ GCP เพื่อเข้าถึง RTU API
- ให้สิทธิ์ผู้แก้ไขเข้าถึง food-support@google.com
- แจ้งหมายเลขโปรเจ็กต์ GCP ให้ Google POC ทราบ โปรเจ็กต์ GCP ต้องเชื่อมโยงกับบัญชี Actions Center เพื่อให้การอัปเดตแบบเรียลไทม์ใช้งานได้
- เปิดใช้ Maps Booking API:
- ใน GCP ให้ไปที่ API และบริการ > ไลบรารี
- ค้นหา "Google Maps Booking API"
- ค้นหาอินสแตนซ์แซนด์บ็อกซ์ ("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 APIs เช่น API การอัปเดตแบบเรียลไทม์
หากต้องการตั้งค่าบัญชีบริการ ให้ทำดังนี้
- เข้าถึงคอนโซล Google Cloud Platform
- บัญชีของคุณในศูนย์การดำเนินการมีโปรเจ็กต์ 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 ได้ในศูนย์การดำเนินการในหน้าบัญชีและผู้ใช้ ดังที่แสดงในภาพหน้าจอด้านล่าง
นำ 10000001 เป็นค่าของ PARTNER_ID เป็นตัวอย่างจากภาพหน้าจอด้านบน URL ที่สมบูรณ์สำหรับการส่งคำขอ API ในแซนด์บ็อกซ์และเวอร์ชันที่ใช้งานจริงจะมีลักษณะเหมือนในตัวอย่างด้านล่าง
การอัปเดตแซนด์บ็อกซ์
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
การอัปเดตเอนทิตี
หากต้องการอัปเดตเอนทิตีในสินค้าคงคลัง ให้ใช้ปลายทางการอัปเดตในคำขอ 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" }] }
ลบเอนทิตี
หากต้องการลบเอนทิตีออกจากพื้นที่โฆษณา ให้ใช้ปลายทางลบในคำขอ 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 ระบบจะรายงานเหตุการณ์เหล่านี้ในหน้าแดชบอร์ดการรายงาน RU ของศูนย์การดำเนินการเท่านั้น
หมายเหตุ: โค้ดตอบกลับ 200 ไม่ได้หมายความว่านำเข้าเอนทิตีทั้งหมดได้สำเร็จ
โควต้า API
การอัปเดต API แบบเรียลไทม์มีโควต้าคำขอ 1,500 รายการทุก 60 วินาที หรือ 25 คำขอต่อวินาทีโดยเฉลี่ย เมื่อเกินโควต้า Google จะตอบกลับด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "error": { "code": 429, "message": "Insufficient tokens for quota ...", "status": "RESOURCE_EXHAUSTED", "details": [...] } }
หากต้องการดำเนินการนี้ ให้ลองโทรอีกครั้งโดยให้สัญญาณเพิ่มขึ้นเป็นทวีคูณจนกว่าจะประสบความสำเร็จ หากคุณใช้โควต้าเป็นประจำ ให้พิจารณาเพิ่มเอนทิตีลงในคำขอ API 1 รายการ คุณรวมเอนทิตีในการเรียก API ได้สูงสุด 1,000 รายการ
เวลาในการประมวลผลการอัปเดตแบบเรียลไทม์
เอนทิตีที่อัปเดตผ่านการอัปเดตแบบเรียลไทม์จะได้รับการประมวลผลใน 5 นาที