תמחור לפי משך השהייה (LoS)

Travel Partner Prices API

‫Travel Partner Prices API מספק לכם ממשק RESTful לשליחת מחירים של נכסים ל-Google.

שירות: travelpartnerprices.googleapis.com

כדי לקרוא לשירות הזה, מומלץ להשתמש בספריות הלקוח ש-Google מספקת. אם האפליקציה שלכם צריכה להשתמש בספריות משלכם כדי לקרוא לשירות הזה, אתם יכולים לפנות למנהל החשבון הטכני (TAM) כדי לקבל את מסמך הגילוי של השירות הזה.

נקודת קצה של שירות

נקודת קצה של שירות היא כתובת URL בסיסית שמציינת את כתובת הרשת של שירות API. יכול להיות שלשירות אחד יהיו כמה נקודות קצה של שירות. לשירות הזה יש את נקודת הקצה הבאה, וכל כתובות ה-URI שמופיעות הן יחסיות לנקודת הקצה הזו:

https://travelpartnerprices.googleapis.com
Methods
ingestLosPropertyPrices POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices

העלאת מחירי השהייה לפרק זמן מסוים בנכס ספציפי.

מחייב הודעת מחירים מקודדת באמצעות JSON (ראו בהמשך) כגוף הודעת ה-HTTP.

account_id: ערך המחרוזת הזה הוא הערך של 'מספר החשבון' שמופיע בדף 'הגדרות חשבון' ב-Hotel Center.

property_id: הערך של הרכיב הזה צריך להיות מחרוזת שזהה למזהה של כרטיס המלון בפיד של רשימת המלונות.

אימות של API

‫Travel Partner Prices API משתמש ב-OAuth 2.0 כדי לאמת את האפליקציה שלכם, וכך לאפשר לכם לגשת לממשקי ה-API.

פועלים לפי ההוראות להגדרת 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

הנקודה בזמן שבה נשלח הודעת המחיר של LoS, בפורמט מחרוזת RFC 3339.

כל הודעה שנשלחת עם requestTime ב-24 השעות האחרונות מעובדת, והודעות שלא נשלחו עם התג נמחקות.

ההודעות מעובדות לפי הסדר requestTime, בלי קשר לסדר שבו הן מתקבלות. לדוגמה, אם מתקבל עדכון מחיר עם requestTime של 2019-05-03T14:09:00Z אחרי הודעה עם אותם מסלולי טיסה ועם requestTime של 2019-05-03T14:10:00Z, המערכת תתעלם מההודעה הראשונה ותעדיף את ההודעה השנייה עם חותמת הזמן המאוחרת יותר.

ב-RFC 3339 נדרשים ערכי תאריך ושעה עם פרטים מלאים בפורמט YYYY-MM-DDThh:mm:ss.SSZ. חובה לציין אזור זמן, כסטייה חיובית או שלילית hh:mm משעון UTC, או Z כקיצור של UTC.

השניות החלקיות הן אופציונליות, ואפשר להשתמש בהן ברמת דיוק של עד ננו-שנייה. לדוגמה: ‫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 במקרה של מחירים מותנים, המזהה הזה משייך מחיר להגדרה בקובץ Rate Rule Definition. מגבלת התווים בשדה הזה היא 40 תווים.
currencyCode 1 string קוד המטבע בן שלוש האותיות שבו מסופקים הערכים rates ו-taxes. לדוגמה, "USD" לדולר ארה"ב.
rates[] 30 float רכיב המחיר הבסיסי של המחירים לשהייה.

אם מספקים ערך תואם של taxes, התעריף הזה לא כולל את המס. המחיר הכולל הוא סכום התעריף הרלוונטי והמס.

הערך באינדקס n מתאים לשהייה באורך n+1.

אתם צריכים לשלוח את כל 30 המחירים של תקופת השהייה בכל פעם. אם שולחים פחות מ-30, כל המחירים שצוינו עבור משך השהייה מעובדים כרגיל, והמחירים הנותרים לא זמינים עד משך שהייה של 30 ימים. אם תשלחו יותר מ-30 מחירים,המערכת תתעלם מכל המחירים שמעבר ל-30 .

משך שהייה שלא זמין צריך להיות מיוצג באמצעות הערך 0.

taxes[] 30 float רכיב המס במחירים של משך השהייה.

הערך באינדקס n מתאים לשהייה באורך n+1.

fees[] 30 float רכיב העמלה במחירים של משך השהייה.

הערך באינדקס n מתאים לשהייה באורך n+1.

דוגמה

תעריפים ומיסים על סמך משך השהייה

בדוגמה הבאה מוצגת הגדרה של משך שהייה מינימלי של 2 לילות לתאריך צ'ק אין אחד, והגדרה של אי-זמינות לתאריך צ'ק אין אחר. אם תגדירו את startDate מ-1 בספטמבר 2023 בלי endDate, המשמעות היא שאתם מציינים את המחירים רק לתאריך אחד, ואפשר להשמיט את endDate.

המערך occupancyPrices שמוגדר ל-2 מאפשר להגדיר תעריפים שונים לתפוסות שונות. לכן, אין חדרים פנויים בתאריך 09/04/23, ואין אפשרות להזמין את rates.

מערך taxes שמוצג מחושב כ-10% מהשיעור.

מערך fees שמוצג מחיל תשלום על שירותי ניקיון בסך 50 $לכל שהייה.

אם התאריך המלא של הצ'ק אין לא זמין – 9/3/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}.