أسعار مدة الإقامة (خسارة)

Travel Partner Prices API

تمنحك Travel Partner Prices API واجهة RESTful لإرسال أسعار الفنادق إلى Google.

الخدمة: travelpartnerprices.googleapis.com

للاتّصال بهذه الخدمة، ننصحك باستخدام مكتبات العميل التي تقدّمها Google. إذا كان تطبيقك يحتاج إلى استخدام مكتباتك الخاصة للاتصال بهذه الخدمة، يُرجى التواصل مع مدير الحساب الفني (TAM) للحصول على مستند الاكتشاف لهذه الخدمة.

نقطة نهاية الخدمة

نقطة نهاية الخدمة هي عنوان URL أساسي يحدِّد عنوان الشبكة لخدمة واجهة برمجة التطبيقات. قد تحتوي خدمة واحدة على نقاط نهاية متعددة للخدمة. تتضمّن هذه الخدمة الخدمة التالية: نقطة النهاية وجميع معرفات الموارد المنتظمة (URI) المدرجة ذات صلة بنقطة نهاية الخدمة هذه:

https://travelpartnerprices.googleapis.com
الطُرق
ingestLosPropertyPrices POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices

يُرجى تحميل أسعار مدة الإقامة المقدَّمة لفندق محدّد.

يتطلب رسالة أسعار مرمّزة بتنسيق JSON (انظر أدناه) كبروتوكول HTTP نص الرسالة.

account_id: قيمة السلسلة هذه هي "رقم تعريف الحساب" القيمة المذكورة في صفحة "إعدادات الحساب" في "الفندق" الوسط.

property_id: يجب أن تكون قيمة هذا العنصر عبارة عن سلسلة تتطابق مع رقم تعريف البيانات في خلاصة قائمة الفنادق.

مصادقة واجهة برمجة التطبيقات

تستخدم Travel Partner Prices API OAuth 2.0 لصقل مصادقة تطبيقك حتى تتمكّن من الوصول إلى واجهات برمجة التطبيقات.

اتّبِع تعليمات إعداد بروتوكول OAuth 2.0 للحصول على إذن لاستخدام Travel Partner Prices API.

عند إنشاء مشروع جديد لواجهة برمجة التطبيقات Travel Partners Prices API، عليك تفعيل الوصول إلى مشروعك الجديد على Google Cloud Console، وذلك باتّباع الخطوات نفسها الواردة في تعليمات Travel Partner API.

راجِع الخطوات الواردة في Travel Partner API واستبدِل جميع نُسخ Travel Partner API بنُسخ Travel Partner Prices API لتفعيل مشروعك.

نطاق Travel Partner Prices API هو: "https://travelpartnerprices.googleapis.com"

مسار التحميل لواجهة برمجة التطبيقات Travel Partner Prices API هو: "/travel/lodging/uploads/accounts/<account_id>/property_data"

الطلبات

البنية

تستخدم الرسالة LoS Prices البنية التالية:

{
  "requestTime": YYYY-MM-DDTHH:mm:ss.SSSZ,
  "propertyPrices": {
    "arrivalDatePrices": [{
      "startDate": {
        "year": int
        "month": int
        "day": int
      }
      "endDate": {
        "year": int
        "month": int
        "day": int
      }
      "productPrices": [{
        "roomTypeId": "string"
        "ratePlanId": "string"
        "occupancyPrices": [{
          "adults": int
          "prices": [{
            "rateRuleId": "string"
            "currencyCode": "string"
            "rates": [night_1,night_2,...]
            "taxes": [night_1,night_2,...]
            "fees": [night_1,night_2,...]
          }]
        }]
      }]
    }]
  }
}

العناصر والسمات

تتضمّن رسالة أسعار "مدة الإقامة" العناصر والسمات التالية:

العنصر عدد مرات الظهور النوع الوصف
requestTime 1 string

اللحظة التي تم فيها إرسال رسالة السعر في حالة عدم توفّر معلومات، مُعبَّرة عنها بسلسلة بتنسيق RFC 3339

أي رسالة مُرسَلة من خلال "requestTime" خلال آخر 24 يومًا تتم معالجة الساعات وتلك التي لم يتم تجاهلها.

تتم معالجة الرسائل بترتيب requestTime، بغض النظر عن ترتيب استلامها. على سبيل المثال، يتم تجاهل تعديل السعر الذي يحمل requestTime2019-05-03T14:09:00Z والذي تم استلامه بعد رسالة عن برامج الرحلة نفسها تحمل requestTime2019-05-03T14:10:00Z، وذلك لصالح الرسالة التي تحمل الطابع الزمني اللاحق.

يتطلب معيار RFC 3339 استخدام تواريخ وأوقات محدّدة بالكامل على النحو التالي: YYYY-MM-DDThh:mm:ss.SSZ. يجب تحديد المنطقة الزمنية، إما على أنّها hh:mm موجبة أو سالبة من التوقيت العالمي المنسق، أو Z كاختصار للتوقيت العالمي المنسق.

تكون الكسور من الثواني اختيارية، ويمكن التعبير عنها بدقة تصل إلى نانو ثانية. على سبيل المثال، يشفر الرمز 2017-01-15T01:30:15.01-08:00 15.01 ثانية بعد 01:30 صباحًا بتوقيت المحيط الهادئ في 15 كانون الثاني (يناير) 2017.

propertyPrices 1 Object أسعار فندق تنطبق جميع الأسعار ضمن هذا propertyPrices على الموقع نفسه.

لا يتم تكرار هذا العنصر. لإرسال أسعار مواقع متعددة، تحتاج إلى إجراء طلبات HTTP متعددة (طلب واحد على الأقل لكل موقع).

arrivalDayPrices[] 1..n Object الأسعار لتاريخ وصول معيّن. كل الأسعار في نطاق arrivalDayPrices تنطبق على موقع معيّن، ولكن تواريخ وصول مختلفة.
startDate 1 Object يتم تطبيق productPrices على جميع تواريخ الوصول بين startDate وendDate، بما في ذلك.

في حال محاولة تحديد تاريخ وصول واحد فقط (وليس نطاقًا)، إدخال تاريخ الوصول في كل من startDate وendDate.

startDate.year 1 integer سنة startDate يجب أن تتراوح القيمة بين 1 و9999.
startDate.month 1 integer شهر من السنة. يجب أن تتراوح القيمة بين 1 و12.
startDate.day 1 integer يوم من الشهر. يجب أن تتراوح القيمة من 1 إلى 31، وأن تكون صالحة للسنة والشهر.
endDate 0..1 Object يتم تطبيق productPrices على جميع تواريخ الوصول بين startDate وendDate، بما في ذلك.

في حال محاولة تحديد تاريخ وصول واحد فقط (وليس نطاقًا)، قد يتم حذف endDate.

endDate.year 1 integer سنة endDate يجب أن تتراوح القيمة بين 1 و9999.
endDate.month 1 integer شهر من السنة. يجب أن تتراوح القيمة بين 1 و12.
endDate.day 1 integer يوم من الشهر. يجب أن تتراوح القيمة من 1 إلى 31، وأن تكون صالحة للسنة والشهر.
productPrices[] 1..n Object أسعار منتج معيّن كل الأسعار في نطاق productPrices تنطبق على موقع محدد، أو مجموعة تاريخ الوصول، ولكن مختلفة المنتجات.
roomTypeId 0..1 string المعرّف الفريد للغرفة التي يشير إليها هذا السعر. استخدِم هذا المعرّف لمطابقة بيانات حزمة الغرف مع ما أرسلته في roomdata. لمزيد من المعلومات، يُرجى الرجوع إلى البيانات الوصفية لحِزم الغرف.
ratePlanId 0..1 string المعرّف الفريد لبيانات الحزمة التي يشير إليها هذا السعر. استخدِم هذا المعرّف لمطابقة بيانات حزمة الغرف مع ما أرسلته في packagedata. لمزيد من المعلومات، راجع البيانات الوصفية لحِزمة الغرف
occupancyPrices[] 1..n Object تمثّل هذه السمة أسعار الإقامة. تنطبق جميع الأسعار ضمن هذا occupancyPrices على موقع وتاريخ وصول ومجموعة منتجات معيّنة، ولكن مع عدد نزلاء مختلف.
adults 1 integer الحد الأقصى لعدد الضيوف الذين يمكن حجزهم في كل غرفة، بما في ذلك البالغين والأطفال. يتم ضبط هذه القيمة لجميع الأسعار ضمن حقل occupancyPrices المقابل، ويجب أن تكون عددًا صحيحًا موجبًا بين 1 و99.

ملاحظة: يُرجى التواصل مع فريق الدعم لإرسال معلومات عن عدد الأشخاص المقيمين في الفندق إذا كان عددهم أكثر من أربعة بالغين.

prices[] 1..n Object أسعار مدة الإقامة تنطبق كل الأسعار ضمن prices على موقع معيّن وتاريخ وصول ومجموعة منتج وسعة استيعاب معيّنة.
rateRuleId 0..1 string بالنسبة إلى الأسعار المشروطة، يتطابق هذا المعرّف مع سعر معيّن مع تعريف في ملف تعريف قاعدة السعر. عدد الأحرف المسموح به لهذا الحقل هو 40 حرفًا.
currencyCode 1 string رمز العملة المكوَّن من ثلاثة أحرف والذي يمثّل rates وtaxes الواردة فيها. على سبيل المثال، "USD" للدولار الأمريكي.
rates[] 30 float مكوّن السعر الأساسي لأسعار مدة الإقامة

إذا تم تقديم قيمة taxes مقابلة، سيكون هذا السعر هو غير شامل للضرائب. السعر الإجمالي هو مجموع السعر الأساسي والضريبة.

تتجاوب القيمة في الفهرس n مع n+1 ومدة الإقامة.

يجب إرسال مجموعة LoS الكاملة البالغ عددها 30 سعرًا في آن واحد. إذا أرسلت أقل من 30 سعرًا، تتم معالجة كل أسعار فترات العرض المقدَّمة كالمعتاد، ولا تتوفّر الأسعار المتبقية حتى فترات العرض التي تبلغ 30. إذا كنت إذا كنت ترسل أكثر من 30، فسيتم تطبيق أي أسعار ترسلها بخلاف السعر الثلاثين انخفاض .

يجب تمثيل أطوال الإقامة غير المتاحة 0

taxes[] 30 float تمثّل هذه السمة العنصر الضريبي لأسعار مدة الإقامة.

تتوافق القيمة في الفهرس n مع n+1 مدّة الإقامة.

fees[] 30 float مكوّن الرسوم في أسعار الإقامة حسب المدة

تتوافق القيمة في الفهرس n مع مدة إقامة n+1 .

مثال

الأسعار والضرائب استنادًا إلى LOS

يوضّح المثال التالي ضبط الحد الأدنى لمدة الإقامة على 2 لتاريخ تسجيل وصول واحد وعدم ضبط مدى التوفّر لتاريخ تسجيل وصول آخر. إذا ضبطت startDate من 1/9/2023 بدون endDate، يعني ذلك أنّه يتم تحديد الأسعار لتاريخ واحد فقط ويمكنك حذف endDate.

يتيح لك المصفوفة occupancyPrices التي تم ضبطها على 2 إمكانية تحديد أسعار مختلفة. لإشغالات مختلفة. لذلك، ما مِن أماكن شاغرة في الحدود المسموح بها في 04/09/2023 المتاحة في rates.

يتم احتساب المصفوفة taxes المعروضة بنسبة% 10 من المعدّل.

تفرض صفيف fees المعروض رسوم تنظيف بقيمة 50 دولار أمريكي لكل إقامة.

إذا لم يكن تاريخ تسجيل الوصول بأكمله متاحًا، مثلاً ‎3/9/2023، عليك إرسال التاريخ صراحةً، وحذف rates وtaxes وproductPrices للإشارة إلى عدم توفّر التاريخ المطلوب.

{
  "requestTime": "2023-08-10T12:15:222",
  "propertyPrices": {
    "arrivalDatePrices": [
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 1
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 3
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

نص الاستجابة

إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

تمثيل JSON
        {
          "name": "string"
        }
        
الحقول
name اسم مورد PropertyPrices الذي تم تعديله. أن يكون بالشكل التالي:
accounts/{account}/properties/{property}