การอัปเดต API แบบเรียลไทม์

พื้นที่โฆษณาในระบบผันผวนตลอดทั้งวันเนื่องจากการจองใหม่ การยกเลิก และกําหนดเวลาการเปลี่ยนแปลงจากผู้ขาย API การอัปเดตแบบเรียลไทม์เป็นกลไกในการแจ้ง Google เกี่ยวกับการเปลี่ยนแปลงเหล่านี้ที่มีต่อความพร้อมใช้งานของพื้นที่โฆษณา นอกจากนี้ คุณยังใช้การอัปเดต API แบบเรียลไทม์เพื่อแจ้ง Google เกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นกับการจองที่มีอยู่ได้ด้วย

การอัปเดตและฟีดแบบเรียลไทม์ของ API

การอัปเดตแบบเรียลไทม์ของ API มีไว้เพื่อแจ้งให้ Google ทราบเกี่ยวกับการเปลี่ยนแปลงที่เพิ่มขึ้นเกี่ยวกับความพร้อมของพื้นที่โฆษณาและการจองแบบเรียลไทม์ นอกจากการอัปเดต API แบบเรียลไทม์แล้ว ให้ส่งฟีดความพร้อมใช้งานที่สมบูรณ์ทุกวันเพื่อให้มั่นใจว่า Google ได้รับความรู้เรื่องความพร้อมใช้งานและแม่นยําที่สุดตามที่มีในระบบของคุณ ฟีดที่สมบูรณ์ทําหน้าที่เป็นภาพรวมของสถานะปัจจุบันของความพร้อมจําหน่ายสินค้าคงคลังในระบบของคุณ

แม้ว่าการอัปเดต API จะใช้เพื่ออัปเดตข้อมูลใดๆ ที่ฟีดระบุไว้ได้ เช่น ข้อมูลเกี่ยวกับผู้ขายและบริการ แต่โดยทั่วไปแล้วจะใช้เพื่ออัปเดตข้อมูลความพร้อมจําหน่ายสินค้าเท่านั้น

API การอัปเดตแบบเรียลไทม์ที่จําเป็น

API การอัปเดตแบบเรียลไทม์ (RTU)
การแจ้งเตือนการจอง บังคับ ส่ง BookingNotification RTU ทุกครั้งที่มีการเปลี่ยนแปลงการจอง (เช่น การแก้ไขหรือการยกเลิก)
แทนที่ RTU ต้องระบุตามเงื่อนไข[1] ส่ง RTU แทนที่เป็นกลุ่มหรือแทนที่ 1 ครั้งเพื่อส่งการอัปเดตความพร้อมจําหน่ายสินค้า การเปลี่ยนแปลงอาจใช้เวลาหลายนาทีในการเผยแพร่และสะท้อนให้เห็น
RTU ของผู้ขาย ไม่บังคับ ส่ง RTU ของผู้ขายหากต้องการเปลี่ยนแปลงข้อมูลของผู้ขายแบบเรียลไทม์ การเปลี่ยนแปลงอาจใช้เวลาหลายชั่วโมงในการเผยแพร่และแสดงข้อมูล
บริการ RTU ไม่บังคับ ส่ง RTU ของบริการหากต้องการเปลี่ยนแปลงข้อมูลบริการแบบเรียลไทม์ กรณีการใช้งานทั่วไปคือหากราคาบริการมีความผันผวนอย่างมากในระหว่างวัน เราขอแนะนําให้ใช้ RTU ของบริการเพื่อหลีกเลี่ยงความล้มเหลวของคําสั่งซื้อเนื่องจากราคาไม่ตรงกัน การเปลี่ยนแปลงอาจใช้เวลาหลายชั่วโมงในการเผยแพร่และเผยแพร่

ความพร้อมใช้งานของ API การแทนที่ RTU

ใช้ availability replace API เพื่ออัปเดตความพร้อมจําหน่ายสินค้าในกรณีการใช้งานต่อไปนี้

  • ผู้ใช้จองการจองในระบบของคุณ สล็อตเวลาว่างจึงใช้งานไม่ได้อีกต่อไป
  • ผู้ขายจะเปลี่ยนความพร้อมจําหน่ายสินค้าในระบบของคุณ
  • ผู้ใช้จองการจองผ่าน Google สล็อตเวลาว่างจึงไม่มีให้บริการ
  • การจองผ่าน Google ถูกยกเลิกทางฝั่งคุณ เช่น ผู้ขายโดยตรง คุณต้องอัปเดตการจองและความพร้อมจําหน่ายสินค้า เนื่องจากตอนนี้ช่องเดิมพร้อมให้บริการอีกครั้งแล้ว
  • การเรียก BatchAvailabilityLookup ของเซิร์ฟเวอร์การจองจะแสดงพื้นที่โฆษณาที่ไม่ตรงกับพื้นที่โฆษณาจริง

โปรดดูข้อมูลเพิ่มเติมในแหล่งข้อมูลต่อไปนี้

API การแจ้งเตือนการจอง RTU

API การแจ้งเตือนการจองจะแจ้งให้ Google ทราบเกี่ยวกับการอัปเดตการจองที่มีอยู่ เมื่อส่งการอัปเดตเกี่ยวกับการยกเลิก ให้ส่งเฉพาะข้อมูลที่จําเป็นในคําขอด้วยพารามิเตอร์การค้นหา updateMask เช่น

Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"CANCELED"}

การเข้าถึง API

สร้างบัญชีบริการ

ใช้แท็บข้อมูลเข้าสู่ระบบในคอนโซล Google API เพื่อสร้างบัญชีบริการ โปรดเก็บคีย์ส่วนตัวในรูปแบบ JSON ไว้ในที่ปลอดภัย เมื่อสร้างบัญชี คุณจะมีตัวเลือกในการตั้งค่าบทบาท "เจ้าของ"

ตรวจสอบสิทธิ์ของ Maps Booking API

หลังจากสร้างบัญชีบริการ ให้ตรวจสอบสิทธิ์ API ต่อไปนี้

  • Google Maps Booking API
  • Google Maps Booking API (นักพัฒนาซอฟต์แวร์)

สําหรับคําแนะนําแบบทีละขั้นตอนเกี่ยวกับวิธีดําเนินการ โปรดดูบทแนะนําการตรวจสอบสิทธิ์ด้วย Maps Booking API

ใช้การโทร RESTful หรือดาวน์โหลดไลบรารีของไคลเอ็นต์

เราขอแนะนําให้คุณเรียกใช้ RESTful ไปยัง Maps Booking API โดยตรงด้วยเพย์โหลดแบบ JSON หากต้องการข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบของ REST API

หรือจะใช้ไลบรารีของไคลเอ็นต์เพื่อเชื่อมต่อกับ API ก็ได้เช่นกัน

ภาษา ลิงก์ดาวน์โหลด
Java ไลบรารีของไคลเอ็นต์ Java ดูข้อมูลเพิ่มเติมได้ที่วิธีการของไคลเอ็นต์ Java

ไลบรารีการสนับสนุนเพิ่มเติมพร้อมให้ดาวน์โหลดเพื่อจัดการเรื่องการให้สิทธิ์และการเรียก Google API ในด้านอื่นๆ หากจําเป็น โปรดดูตัวอย่างเหล่านี้

ดึงข้อมูลเอกสาร Discovery

สําหรับไลบรารีของไคลเอ็นต์บางอย่าง เช่น Ruby คุณจําเป็นต้องดึงข้อมูลเอกสาร Discovery สําหรับ API ซึ่งอธิบายถึงเมธอดและพารามิเตอร์ของไลบรารีนั้น

ใช้คําสั่งต่อไปนี้เพื่อดึงข้อมูลเอกสาร Discovery

curl -s -o 'mapsbooking_rest' 'https://mapsbooking.googleapis.com/$discovery/rest?version=v1alpha'

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึง API จาก Ruby ได้ที่ลิงก์เหล่านี้: ไคลเอ็นต์ Ruby API และไลบรารีการตรวจสอบสิทธิ์ Ruby

เรียก API ที่ได้รับอนุญาต

เมื่อเรียก API โปรดดู การเตรียมการเรียก API ที่ได้รับอนุญาต เพื่อให้สิทธิ์บัญชีบริการกับคีย์ส่วนตัวของคุณและขอบเขต OAuth ต่อไปนี้ https://www.googleapis.com/auth/mapsbooking

โควต้า API

การอัปเดต API มีโควต้าคําขอ 1,500 รายการทุก 60 วินาที หรือคําขอ 25 รายการต่อวินาทีโดยเฉลี่ย เมื่อเกินโควต้า (ซึ่งอาจเกิดขึ้นได้เมื่อคุณไม่ได้เพิ่มหมายเลขโปรเจ็กต์ Google Cloud ที่ถูกต้องในพอร์ทัลของพาร์ทเนอร์) Google จะตอบกลับพร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้

{
  "error": {
    "code": 429,
    "message": "Insufficient tokens for quota ...",
    "status": "RESOURCE_EXHAUSTED",
    "details": [...]
  }
}

หากต้องการแก้ไขปัญหานี้ ให้ลองโทรอีกครั้งโดยเป็นระยะๆ จนกว่าจะประสบความสําเร็จ หากคุณใช้โควต้าร่วมกับ ReplaceServiceAvailability เป็นประจํา โปรดเปลี่ยนเป็น BatchReplaceServiceAvailabily เพื่อลดจํานวนการเรียก API วิธีนี้ทําให้คุณอัปเดตบริการหลายรายการในการเรียก API เดียวได้

แซนด์บ็อกซ์และจุดสิ้นสุดของเวอร์ชันที่ใช้งานจริง

คุณสามารถเรียกใช้ทั้งแซนด์บ็อกซ์และสภาพแวดล้อมที่ใช้งานจริงผ่าน API ได้ ตรวจสอบว่าคุณได้เปิดใช้ API ทั้ง 2 รายการในโปรเจ็กต์ Google Cloud แล้ว API ทั้ง 2 รายการนี้ใช้ขอบเขตเดียวกัน แต่มีปลายทางต่างกัน

ปลายทางการผลิต: https://mapsbooking.googleapis.com/

ปลายทางแซนด์บ็อกซ์: https://partnerdev-mapsbooking.googleapis.com/

ตัวอย่างเกี่ยวกับวิธีเปลี่ยนปลายทางใน Java มีดังนี้

    // This block of code is for OAuth and is the same for prod and sandbox.
    GoogleCredential
      .fromStream(new FileInputStream(...))
      .createScoped(Collections.singleton("https://www.googleapis.com/auth/mapsbooking"))

    // This block of code sets the endpoint. This is what you'd change to connect to the sandbox.
    new GoogleMapsBookingAPI.Builder(...)
      .setApplicationName(...)
      .setRootUrl("https://partnerdev-mapsbooking.googleapis.com/") // you add this to change the endpoint to use partnerdev.
      .build()