קידום מכירות

סקירה כללית

ממשק ה-API הזה מאפשר לכם לציין הנחות אפשריות. מבין המבצעים שצוינו, Google מחילה את המבצע או את קבוצת המבצעים שעומדים בדרישות ומביאים למחיר הנמוך ביותר. אם אתם מחפשים API שתומך בהתאמות שרירותיות של תעריפים שיכולות להעלות או להוריד את המחיר כשמתקיימים תנאים מסוימים, כדאי לכם להשתמש ב-Rate Modifications API. שימו לב: אם שני ממשקי ה-API קיימים, שינויים במחירים יחולו לפני מבצעים.

בקשות

תחביר

ההודעה Promotions משתמשת בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
            id="message_ID"
            timestamp="timestamp">
  <HotelPromotions hotel_id="HotelID" action="[overlay]">
    <Promotion id="PromotionID" action="[delete]">
      <BookingDates>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
      </BookingDates>
      <BookingWindow min="integer_or_duration" max="integer_or_duration"/>
      <Ceiling amount_per_night="float"/>
      <Floor amount_per_night="float"/>
      <CheckinDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckinDates>
      <CheckoutDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckoutDates>
      <!-- Specify only one of percentage, percentage_of_base, fixed_amount,
           fixed_amount_per_night, fixed_price, or fixed_price_per_night;
           applied_nights is only used with percentage, fixed_amount_per_night,
           and fixed_price_per_night. -->
      <Discount percentage="float" percentage_of_base="float"
                fixed_amount="float" fixed_amount_per_night="float"
                fixed_price="float" fixed_price_per_night="float"
                applied_nights="integer_1_to_99" rank="integer_1_to_99">
        <!-- FreeNights may not be used in conjunction with attributes on Discount -->
        <FreeNights stay_nights="integer" discount_nights="integer"
                    discount_percentage="float" night_selection="[cheapest|last]"
                    repeats="boolean"/>
      </Discount>
      <!-- Exactly one of Discount or BestDailyDiscount must be specified.
           Specify only one of percentage, fixed_amount, or fixed_price. -->
      <BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
      <Devices>
        <Device type="[desktop|tablet|mobile]"/>
      </Devices>
      <InventoryCount min="integer" max="integer"/>
      <LengthOfStay min="integer" max="integer"/>
      <MembershipRateRule id="RateRuleID"/>
      <MinimumAmount before_discount="integer"/>
      <Occupancy min="integer" max="integer"/>
      <RatePlans>
        <RatePlan id="PackageID_1"/>
        <RatePlan id="PackageID_2"/>
      </RatePlans>
      <RoomTypes>
        <RoomType id="RoomID_1"/>
        <RoomType id="RoomID_2"/>
      </RoomTypes>
      <Stacking type="[any|base|none|second]"/>
      <StayDates application="[all|any|overlap]">
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </StayDates>
      <UserCountries type="[include|exclude]">
        <Country code="country_code"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>

רכיבים ומאפיינים

ההודעה על מבצעים כוללת את הרכיבים והמאפיינים הבאים:

רכיב / @מאפיין מופעים סוג תיאור
Promotions 1 Complex element רכיב הבסיס של הודעת מבצע.
Promotions / @partner 1 string חשבון השותף שאליו משויכת ההודעה. ערך המחרוזת הזה הוא הערך של ״מפתח השותף״ שמופיע בדף הגדרות החשבון ב-Hotel Center.

אם יש לכם מערכת עורפית שמספקת פידים לכמה חשבונות, הערך הזה צריך להיות זהה לערך המאפיין ID שצוין ברכיב <RequestorID> של הודעות <OTA_HotelRateAmountNotifRQ> ו-<OTA_HotelAvailNotifRQ> עבור אותו חשבון.

Promotions / @id 1 string מזהה ייחודי של הודעת הבקשה. הערך הזה מוחזר בהודעת התגובה. התווים המותרים הם a-z,‏ A-Z,‏ 0-9,‏ _ (קו תחתון) ו- (מקף).
Promotions / @timestamp 1 DateTime התאריך והשעה שבהם ההודעה נוצרה.
Promotions / HotelPromotions 0..n HotelPromotions

מבצעים במלון. כל מבצע חל על נכס אחד.

אלא אם משתמשים ב-<Stacking>, המבצע עם ההנחה הכי גדולה יחול על ההזמנה אם יש כמה מבצעים שעומדים בדרישות.

Promotions / HotelPromotions / @hotel_id 1 string המזהה הייחודי של הנכס. הערך הזה צריך להיות זהה למזהה המלון שצוין באמצעות <id> ב-<listing> בפיד רשימת המלונות. מזהה המלון מופיע גם ב-Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

אם מציינים את המאפיין, הערך שלו חייב להיות "overlay". אם הערך הוא "overlay", כל המבצעים המאוחסנים נמחקים לפני אחסון המבצעים שצוינו בהודעה הנוכחית.

אם לא מציינים את הפרמטר הזה, כל מבצע שמצוין בהודעה הנוכחית הוא אחד מהבאים:

  • Added (אם לאף אחד מהמבצעים המאוחסנים אין את אותו id)
  • Updated (אם למבצע מאוחסן יש את אותו id)
  • Deleted (אם למבצע מאוחסן יש את אותו id והערך של מאפיין action של המבצע שצוין בהודעה הנוכחית הוא "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

מבצע יחיד לנכס. הערה: אם לא מציינים את action="overlay" ואת <Promotion>, כל המבצעים בנכס נמחקים.

אם אתם צריכים להשתמש ביותר מ-99 מבצעים, פנו למנהל החשבון הטכני (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string מזהה ייחודי של המבצע. אפשר להזין עד 40 תווים. התווים המותרים הם a-z,‏ A-Z,‏ 0-9, _ (קו תחתון), - (מקף) ו-‎.‎ (נקודה). (נקודה).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

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

אם מציינים את delete, קידום המכירות המאוחסן עם אותו id נמחק. כשמשתמשים ב-delete, לא כוללים רכיבי צאצא ב-<Promotion>. בנוסף, אסור להשתמש ב-delete יחד עם <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates מאגר של טווח אחד או יותר שמגדיר מתי צריך לבצע את ההזמנה כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange טווח שמציין מתי צריך לבצע את ההזמנה כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date או DateTime

תאריך או תאריך ושעה (בהתאם לאזור הזמן של הנכס) שמהווים את ההתחלה של הטווח, כולל.

  • התאריך או התאריך והשעה שצוינו על ידי start צריכים להיות מוקדמים יותר מהתאריך או התאריך והשעה שצוינו על ידי end (או זהים להם).
  • אם לא מציינים את start, הטווח הוא למעשה בלתי מוגבל מבחינת שעת התחלה.
  • אם מאכלסים את start בתאריך בפורמט YYYY-MM-DD, המערכת מפרשת אותו כתאריך ושעה בפורמט YYYY-MM-DDT00:00:00.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date או DateTime

תאריך הסיום או התאריך והשעה (בהתאם לאזור הזמן של הנכס), כולל, של הטווח.

  • התאריך או התאריך והשעה שצוינו באמצעות end צריכים להיות מאוחרים יותר (או זהים) מהתאריך או התאריך והשעה שצוינו באמצעות start.
  • אם לא מציינים את end, הטווח הוא למעשה בלתי מוגבל מבחינת שעת סיום.
  • אם התאריך end הוא "YYYY-MM-DD", הוא יפורש כתאריך ושעה "YYYY-MM-DDT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים.

התווים התקפים הם:

  • M ליום שני
  • T ליום שלישי
  • W ליום רביעי
  • H ליום חמישי
  • F ליום שישי
  • S ליום שבת
  • U ליום ראשון

כל שילוב של תווים הוא תקין.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow המדיניות מציינת את פרק הזמן שבו ההזמנה צריכה להתבצע ביחס לתאריך הצ'ק-אין (על סמך אזור הזמן של מקום האירוח). לדוגמה, אפשר להגדיר את חלון ההזמנות ל-7 ימים לפחות, אבל לא יותר מ-180 ימים, לפני הצ'ק-אין.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration משך הזמן המינימלי לפני הצ'ק-אין שבו צריך לבצע את ההזמנה כדי שהמבצע יחול. אם לא מציינים את הערך הזה, או אם הערך שלו הוא 0, אין ערך מינימלי.

סוגי הערכים התקינים הם:

  • מספר שלם: מספר הימים לפני תאריך הצ'ק אין. לדוגמה, ערך של 30 מציין שהמבצע חל רק על הזמנות שמתבצעות לפחות 30 ימים לפני תאריך הצ'ק-אין.
  • משך זמן בפורמט ISO 8601 (ימים, שעות ודקות): מספר הימים (ואפשרות לשעות או לדקות) לפני תאריך הצ'ק-אין. לדוגמה, ערך של P30D מציין שהמבצע חל רק על הזמנות שמתבצעות לפחות 30 ימים לפני תאריך הצ'ק-אין. ערך של P30DT6H מחייב הזמנה ב-18:00 ביום ה-30 לפני ההגעה או לפני כן.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration המספר המקסימלי של הימים לפני הצ'ק-אין שבהם צריך לבצע את ההזמנה כדי שהמבצע יחול. אם לא מציינים את הערך הזה, או אם הערך שלו הוא 0, אין הגבלה מקסימלית.

סוגי הערכים התקינים הם:

  • מספר שלם: מספר הימים לפני תאריך הצ'ק אין. לדוגמה, ערך של 30 מציין שהמבצע חל רק על הזמנות שמתבצעות עד 30 ימים לפני תאריך הצ'ק-אין.
  • משך זמן בפורמט ISO 8601 (ימים, שעות ודקות): מספר הימים (ואפשרות לשעות או לדקות) לפני תאריך הצ'ק-אין. לדוגמה, ערך של P30D מציין שהמבצע תקף רק להזמנות שמתבצעות עד 30 ימים לפני תאריך הצ'ק-אין. ערך של P30DT6H מחייב הזמנה ב-18:00 או אחרי כן ביום ה-30 לפני ההגעה.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

הגדרת מגבלות על הערך המקסימלי שאפשר להגדיר לשיעור אחרי החלת מבצעים.

כשמגדירים מבצעים, צריך תמיד לציין <Discount> או <BestDailyDiscount>. לכן, כדי ליצור מבצע שכולל רק <Ceiling>, אפשר להגדיר <Discount> עם percentage של 0.

אם מוגדרת אפשרות לצירוף מבצעים, יכול להיות שכמה מבצעים עם הערך <Ceiling> יחולו על שהייה אחת. כל מבצע יחיל את ההנחה שלו, ואחריה מיד את תקרת ההנחה. בדוגמה הבאה אפשר לראות איך כל תקרה תורמת לחישוב הבא של המבצע בערימה.

דוגמה:

תמחור של שהייה של לילה אחד, כאשר AmountBeforeTax הוא 100 ויש שתי מבצעים:

  1. מבצע עם סוג הצטברות base, ערך fixed_amount של 25 וערך מקסימלי amount_per_night של 60
  2. מבצע עם סוג הנחה מצטברת second,‏ fixed_amount של 25, ומקסימום הנחה amount_per_night של 90

סדר החישוב הוא:

  1. המבצע base מוחל קודם ומוריד את המחיר של AmountBeforeTax ל-75, אבל אז המחיר המקסימלי מוריד אותו ל-60.
  2. ההנחה של מבצע second היא על AmountBeforeTax, והמחיר יורד מ-60 ל-35. הערך הזה נמוך מהערך המקסימלי של 90, ולכן לא חל הערך המקסימלי השני. התעריף הסופי הוא 35.

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

Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night 1 float

הסכום המקסימלי שאפשר להגדיר למחיר ללילה אחרי החלת ההנחה.

אם מציינים גם רכיב <Floor>, הערך של המאפיין הזה צריך להיות גדול מהערך של המאפיין amount_per_night ב-<Floor> או שווה לו.

amount_per_night חל על מיסים ועמלות כשהם נכללים במחיר ללילה באמצעות AmountAfterTax, אבל לא על מיסים ועמלות שצוינו באמצעות TaxFeeInfo.

Promotions / HotelPromotions / Promotion / Floor 0..1 Floor

המאפיין מגדיר הגבלות על הערך המינימלי שאפשר להגדיר לשיעור אחרי החלת מבצעים.

כשמגדירים מבצעים, צריך תמיד לציין <Discount> או <BestDailyDiscount>. לכן, כדי ליצור מבצע שכולל רק <Floor>, אפשר להגדיר <Discount> עם percentage של 0.

הלוגיקה של <Floor> עדיין חלה על הנחות של <FreeNights>, גם אם חלה על הלילה החינמי הנחה של 100%.

אם מוגדרת אפשרות לצירוף מבצעים, יכול להיות שכמה מבצעים עם הערך <Floor> יחולו על שהייה אחת. כל מבצע יחיל את ההנחה שלו, ואחריה מיד את ערך הסף התחתון שלו. בדוגמה הבאה אפשר לראות איך כל קומה תורמת לחישוב הבא של הקידום בערימה.

דוגמה:

תמחור של שהייה של לילה אחד, כאשר AmountBeforeTax הוא 100 ויש שתי מבצעים:

  1. מבצע עם סוג הצטברות base, ערך fixed_amount של 25 וערך מינימלי amount_per_night של 90
  2. מבצע עם סוג הנחה מצטברת second,‏ fixed_amount של 25 ורצפה amount_per_night של 60

סדר החישוב הוא:

  1. המבצע base מוחל קודם ומוריד את המחיר AmountBeforeTax ל-75, אבל אז מחיר המינימום מעלה אותו ל-90.
  2. ההנחה של מבצע second היא על AmountBeforeTax, והמחיר יורד מ-90 ל-65. הסכום הזה גבוה מסכום המינימום של 60, ולכן לא חל על המשתמש הזה הנחה של 20%. התעריף הסופי הוא 65.

העובדה ש-90 הוא ערך מינימום כללי מחמיר יותר לא רלוונטית, כי הוא תקף רק למבצע שלו, ולא יכול להיות ערך מינימום יחיד שחל על כל סדרת המבצעים.

Promotions / HotelPromotions / Promotion / Floor / @amount_per_night 1 float

הסכום המינימלי שאפשר להגדיר למחיר ללילה אחרי החלת ההנחה.

אם מציינים גם רכיב <Ceiling>, הערך של המאפיין הזה צריך להיות קטן מהערך של המאפיין amount_per_night ברכיב <Ceiling> או שווה לו.

amount_per_night מוחל על מיסים ועמלות כשהם נכללים במחיר ללילה באמצעות AmountAfterTax, אבל לא על מיסים ועמלות שצוינו באמצעות TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates קונטיינר של טווחי תאריכים אחד או יותר שמגדירים מתי צריך לבצע צ'ק-אין כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

טווח תאריכים שבו צריך להתבצע הצ'ק-אין כדי שהמבצע יחול. אין צורך להשתמש ברכיב הזה אם מוחקים מבצע אחד או יותר.

יש תמיכה גם בפורמט YearlessDate.

  • אם אחד מהערכים start או end הוא תאריך ללא שנה, צריך לאכלס את שניהם כתאריכים ללא שנה.
  • טווחים של תאריכים ללא שנה לא יכולים לחצות את השנה החדשה. במקום זאת, מייצגים את הטווח כשני טווחי תאריכים סמוכים. לדוגמה, אפשר לייצג את {"12-29", "01-05"} באמצעות {"12-29", "12-31"} ו-{"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate תאריך ההתחלה (על סמך אזור הזמן של הנכס), כולל, של טווח התאריכים. התאריך הזה צריך להיות לפני התאריך end או זהה לו. אם לא מציינים את start, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך התחלה.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate תאריך הסיום (על סמך אזור הזמן של הנכס) של טווח התאריכים, כולל היום האחרון. התאריך הזה צריך להיות זהה לתאריך start או מאוחר ממנו. אם לא מציינים את end, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך סיום.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים.

התווים התקפים הם:

  • M ליום שני
  • T ליום שלישי
  • W ליום רביעי
  • H ליום חמישי
  • F ליום שישי
  • S ליום שבת
  • U ליום ראשון

כל שילוב של תווים הוא תקין.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates מאגר של טווחי תאריכים אחד או יותר שמגדירים מתי צריך להשלים את תהליך התשלום כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

טווח תאריכים שבו צריך להתבצע הצ'ק-אאוט כדי שהמבצע יחול. אין צורך להשתמש ברכיב הזה אם אתם מוחקים מבצע אחד או יותר.

יש תמיכה גם בפורמט YearlessDate.

  • אם אחד מהתאריכים start או end הוא תאריך ללא שנה, שניהם צריכים להיות תאריכים ללא שנה.
  • טווחים של תאריכים ללא שנה לא יכולים לחצות את השנה החדשה. במקום זאת, מייצגים את הטווח כשני טווחי תאריכים סמוכים. לדוגמה, את {"12-29", "01-05"} אפשר לייצג באמצעות {"12-29", "12-31"} ו-{"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate תאריך ההתחלה (על סמך אזור הזמן של הנכס), כולל, של טווח התאריכים. התאריך הזה צריך להיות לפני התאריך end או זהה לו. אם לא מציינים את start, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך התחלה.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate תאריך הסיום (על סמך אזור הזמן של הנכס) של טווח התאריכים, כולל היום האחרון. התאריך הזה צריך להיות זהה לתאריך start או מאוחר ממנו. אם לא מציינים את end, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך סיום.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים.

התווים התקפים הם:

  • M ליום שני
  • T ליום שלישי
  • W ליום רביעי
  • H ליום חמישי
  • F ליום שישי
  • S ליום שבת
  • U ליום ראשון

כל שילוב של תווים הוא תקין.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices קונטיינר שבו מפורטים מכשירי המשתמשים שעומדים בדרישות המבצע. אם מציינים מכשירים, רק משתמשים שעומדים בדרישות במכשירים שמופיעים ברשימה יקבלו את התעריף המוזל. אם לא מציינים, המשתמשים שעומדים בדרישות בכל מכשיר יקבלו את התעריף המוזל.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device הגדרת סוג אחד של מכשיר משתמש שעומד בדרישות למימוש המבצע.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum סוג המכשיר. הערך חייב להיות desktop,‏ tablet או mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

צריך לציין בדיוק אחד מהמאפיינים Discount או BestDailyDiscount.

מציינים את ההנחה שרוצים להחיל על המבצע.

Promotions / HotelPromotions / Promotion / Discount / @percentage 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה. היא חלה על AmountAfterTax (או על AmountBeforeTax אם לא צוין AmountAfterTax).

דוגמאות:

  • אם AmountAfterTax הוא 100 ו-percentage הוא 20, אז

    מחיר מבצע = AmountAfterTax * (1 - אחוז הנחה)

    ‫80.00 = 100 * (1 - 0.2)

  • אם הערך של AmountBeforeTax הוא 100, הערך של percentage הוא 20 והערך של TaxFeeInfo הוא 10, אז

    מחיר מבצע = AmountBeforeTax * (1 – אחוז ההנחה) + מס

    ‫90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה הבסיסית. בדומה ל-percentage, הוא חל על AmountAfterTax (או על AmountBeforeTax אם AmountAfterTax לא צוין).

בניגוד לpercentage, ההנחה הזו תמיד מחושבת כאחוז מהמחירים הבסיסיים, ללא קשר למבצעים קודמים שהוחלו ברצף.

דוגמה:

  • נניח שיש לנו שני מבצעים שמוחלים ברצף על שהייה של לילה אחד במחיר 100. הראשונה היא הנחה רגילה של 10% והשנייה היא הנחה של 10% ממחיר הבסיס. אם שתי ההנחות הן של 10%, המחיר המוזל יהיה 80. אם ההנחה השנייה היא של 10% מהמחיר המקורי, המחיר המוזל יהיה 81.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

סכום קבוע שיש להפחית מסכום AmountAfterTax המחירים ללילה (או מסכום AmountBeforeTax המחירים ללילה אם לא מצוין AmountAfterTax). המטבע שבו מופיע המחיר הזה הוא אותו מטבע שבו מופיעים המחירים ללילה. אם הערך הזה גדול יותר מסכום המחירים ללילה, הערך שיתקבל הוא אפס.

דוגמאות:

  • אם אנחנו מתמחרים שהייה של לילה אחד, כאשר AmountBeforeTax הוא 90, AmountAfterTax הוא 100 ו-fixed_amount הוא 20, אז

    מחיר מבצע = AmountAfterTax – הנחה קבועה

    ‫80.00 = 100 – 20

  • אם אנחנו מתמחרים שהייה של לילה אחד, כאשר AmountBeforeTax הוא 100, fixed_amount הוא 20, וב-TaxFeeInfo מצוין מס של 8%, אז

    שיעור המבצע = (AmountBeforeTax – הנחה קבועה) * (1 + מס באחוזים)

    ‫86.40 = (100 – 20) * 1.08

  • אם אנחנו מתמחרים שהייה של לילה אחד, ומחיר הלילה AmountBeforeTax הוא 50, מחיר הלילה עם המיסים fixed_amount הוא 60, ובמאפיין TaxFeeInfo מצוין מס של 10, אז

    שיעור המבצע = (AmountBeforeTax - הנחה קבועה ) * מס

    ‫10.00 = 0 + 10

  • אם אנחנו מתמחרים שהייה של 3 לילות והערכים של AmountAfterTax הם 100,‏ 110 ו-120; והערך של fixed_amount הוא 150, אז

    מחיר המבצע = סכום(AmountAfterTax) – (הנחה קבועה)

    ‫180.00 = (100 + 110 + 120) – 150

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

הנחה קבועה שחלה על כל אחד מהמחירים ללילה AmountAfterTax (או על N המחירים הזולים ביותר אם מציינים את applied_nights). אם לא מציינים את AmountAfterTax, הוא יחול על AmountBeforeTax. המטבע שבו מופיע המחיר הזה הוא אותו מטבע שבו מופיעים המחירים ללילה. אם fixed_amount_per_night גדול ממחיר הלילה, מחיר הלילה יופחת לאפס – ההנחה לא יכולה לגרום למחיר הלילה להיות שלילי.

דוגמאות:

  • אם אנחנו מתמחרים שהייה של 3 לילות והערכים של AmountAfterTax הם 100, 110 ו-120, והערך של fixed_amount_per_night הוא 10, אז

    תעריף המבצע = סכום(AmountBeforeTax - הנחה בסכום קבוע )

    ‫300.00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • אם אנחנו מתמחרים שהייה של 3 לילות, כאשר ערכי AmountAfterTax הם 10, 50 ו-100, וערך fixed_amount_per_night הוא 20, אז

    תעריף המבצע = סכום(AmountAfterTax - הנחה בסכום קבוע )

    ‫110.00 = (0 + (50 - 20) + (100 - 20))

Promotions / HotelPromotions / Promotion / Discount / @fixed_price 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

אם מציינים מחירים ל-AmountAfterTax לילות, המחיר לשהייה, כולל מיסים ועמלות, יהיה הערך שצוין. אם מציינים את AmountBeforeTax, המחיר לפני מס של השהייה מוגדר לערך שצוין, בין אם מציינים את AmountAfterTax ובין אם לא. המטבע שבו מוגדרים המחירים ללילה.

אם המאפיין AmountAfterTax אמור לשקף מס באחוזים, הגדרת מחיר קבוע במאפיין AmountBeforeTax עלולה לגרום לחישוב לא מדויק של המיסים והעמלות. באופן כללי, מומלץ מאוד להשתמש במאפיין TaxFeeInfo כדי לציין את המיסים והעמלות של מוצר.

דוגמאות:

  • אם אנחנו מתמחרים שהייה של לילה אחד, כאשר AmountBeforeTax הוא 90, AmountAfterTax הוא 100 ו-fixed_price הוא 80, אז מחיר המבצע הוא 80.
  • אם אנחנו מתמחרים שהייה של לילה אחד, כאשר AmountBeforeTax הוא 100, fixed_amount הוא 80, וב-TaxFeeInfo מצוין מס של 8%, אז

    שיעור המבצע = מחיר קבוע * (1 + אחוז המס)

    ‫86.40 = 80 * 1.08

  • אם אנחנו מתמחרים שהייה של 3 לילות והערכים של AmountAfterTax הם 100,‏ 110 ו-120; ו-fixed_amount הוא 300, אז

    שיעור המבצע = 300

Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night 0..1 float

חובה לציין בדיוק אחד מהערכים הבאים: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price או fixed_price_per_night.

אם מציינים מחירים ללילה AmountAfterTax, המערכת מגדירה את המחיר לכל לילה של השהייה, כולל מיסים ועמלות, לערך שצוין. אם מציינים את AmountBeforeTax, המחיר לפני מס לכל לילה של שהייה מוגדר לערך שצוין, בין אם מציינים את AmountAfterTax ובין אם לא. ההנחה היא שהמטבע זהה למטבע של המחירים ללילה.

אם המאפיין AmountAfterTax אמור לשקף מס באחוזים, הגדרת מחיר קבוע במאפיין AmountBeforeTax עלולה לגרום לחישוב לא מדויק של המיסים והעמלות. באופן כללי, מומלץ מאוד להשתמש במאפיין TaxFeeInfo כדי לציין את המיסים והעמלות של מוצר.

אם מציינים את applied_nights, המחיר החדש חל על N הלילות הזולים ביותר.

דוגמאות:

  • אם אנחנו מתמחרים שהייה של 2 לילות, כאשר: הערכים של AmountBeforeTax הם 90, 90; הערכים של AmountAfterTax הם 100, 100; ו- הערך של fixed_price הוא 80, אז מחיר המבצע הוא 80 + 80 = 160.
  • אם אנחנו מתמחרים שהייה של שני לילות, כאשר הערך של AmountBeforeTax הוא 100, 100, הערך של fixed_amount הוא 80, וב-TaxFeeInfo מצוין מס של 8%, אז מחיר המבצע הוא (80 + 80) * 1.08 = 172.8.
  • אם אנחנו מתמחרים שהייה של 3 לילות, שבה ערכי AmountAfterTax הם 100, 110 ו-120, וערך fixed_amount הוא 110, אז מחיר המבצע הוא 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

אפשר להשתמש בה רק עם percentage או fixed_amount_per_night.

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

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights התג הזה מציין הנחה על לילות מסוימים במהלך שהייה, אם משך השהייה עומד בדרישות המינימליות. אם משתמשים באלמנט הזה, אסור להשתמש במאפיינים באלמנט האב Discount.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

מספר הלילות הנדרש כדי שההנחה תחול. כל הנחה חלה על פלח נפרד של לילות שהייה.

לדוגמה, אם השהייה היא ל-10 לילות, stay_nights הוא 4 (ו-repeats הוא true), אז יש שני קטעים של לילות שהייה: הלילה הראשון עד הלילה הרביעי, והלילה החמישי עד הלילה השמיני. הלילה התשיעי והלילה העשירי לא נכללים בקטע של לילות שהייה.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer מספר הלילות המוזלים בכל פלח של לילות שהייה.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float ההנחה שחלה על הלילות המוזלים. אם הערך הזה הוא 50, כל לילה שנבחר מקבל הנחה של 50%.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string הערך חייב להיות cheapest או last. אם last, אז הלילות בסוף פלח השהייה מוזלים. אם cheapest, אז הלילות הזולים ביותר בקטע של לילות השהייה מקבלים הנחה.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

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

לדוגמה, אם הערך של stay_nights הוא 4 והמסלול הוא 10 לילות, אז אם הערך של repeats הוא true, המערכת תחיל הנחה על 2 מקטעים (לילות 1-4 ולילות 5-8). אבל אם הערך של repeats הוא false, המערכת תחיל הנחה רק על מקטע אחד (לילות 1-4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer מערכת Google תקצה למבצע הזה דירוג ותכלול אותו בתהליך הבחירה לפי דירוג, שבו רק המבצע עם הדירוג הכי נמוך ייבחר להחלה. הערכים צריכים להיות בין 1 ל-99, כולל. אם לכמה מבצעים יש אותו דירוג, המערכת בוחרת אחד מהם באופן שרירותי ומחילה אותו.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

צריך לציין בדיוק אחד מהמאפיינים Discount או BestDailyDiscount.

התג הזה מציין הנחה יומית שאפשר להחיל על לילה של שהייה. זאת בניגוד ל-Discount, שבו ההנחות חלות על שהיות מלאות.

לכל נכס יכולה להיות קבוצה אחת של מבצעים שנחשבים ל'מבצעים הכי טובים של היום'. כלומר, לכל לילה של שהייה, המערכת בוחרת את המבצע היחיד 'הטוב ביותר ליום' שעומד בדרישות ומעניק את ההנחה הכי גדולה לאותו לילה, ויכול להיות שהיא תחיל אותו.

אפשר לציין את Stacking עם BestDailyDiscount. הערך שלו חייב להיות base או none. ההנחות 'הכי טובות ליום' שמניבות את ההנחה הכי גדולה לכל לילה משולבות ומוצגות כהנחה אחת על השהייה (כלומר Discount), בהתאם לסוג ההנחה המצטברת שהוגדר. ההנחה המשולבת הזו מושווית למבצעים אחרים שעומדים בדרישות, ואפשר לשלב אותה עם מבצעים אחרים שעומדים בדרישות כדי למצוא את המבצע או השילוב שמספק את ההנחה הכי גדולה. השילוב של BestDailyDiscount או Discount אחד, לפי המחיר הנמוך מביניהם, ייבחר ויחול על סוג הערימה base.

אפשר לציין את StayDates עם סוג ההנחה הזה, אבל הערך של application חייב להיות overlap

.
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage 0..1 float

חובה לציין בדיוק אחד מהמאפיינים הבאים: percentage,‏ fixed_amount או fixed_price.

ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה. היא חלה על AmountAfterTax (או על AmountBeforeTax אם לא צוין AmountAfterTax).

דוגמאות:

  • אם AmountAfterTax ללילה הוא 100 ו-percentage הוא 20, אז

    מחיר מבצע = AmountAfterTax * (1 - אחוז הנחה)

    ‫80.00 = 100 * (1 - 0.2)

  • אם הערך של AmountBeforeTax לשהייה של לילה הוא 100, הערך של percentage הוא 20 והערך של TaxFeeInfo הוא 10, אז

    מחיר מבצע = AmountBeforeTax * (1 – אחוז ההנחה) + מס

    ‫90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount 0..1 float

חובה לציין בדיוק אחד מהמאפיינים הבאים: percentage,‏ fixed_amount או fixed_price.

סכום קבוע שיש להפחית ממחיר אחד ללילה AmountAfterTax (או ממחיר ללילה AmountBeforeTax אם לא מציינים את AmountAfterTax). המטבע שבו מופיע המחיר הזה הוא אותו מטבע שבו מופיעים המחירים ללילה. אם הערך הזה גדול יותר מסכום המחירים ללילה, הערך שיתקבל הוא אפס.

דוגמאות:

  • אם AmountBeforeTax ללילה אחד הוא 90, AmountAfterTax הוא 100 ו-fixed_amount הוא 20, אז

    מחיר מבצע = AmountAfterTax – הנחה קבועה

    ‫80.00 = 100 – 20

  • אם AmountBeforeTax ללילה אחד הוא 100,‏ fixed_amount הוא 20, וב-TaxFeeInfo מצוין מס של 8%, אז

    שיעור המבצע = (AmountBeforeTax – הנחה קבועה) * (1 + מס באחוזים)

    ‫86.40 = (100 – 20) * 1.08

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price 0..1 float

חובה לציין בדיוק אחד מהמאפיינים הבאים: percentage,‏ fixed_amount או fixed_price.

אם מציינים AmountAfterTax תעריפים ללילה, המחיר ללילה של השהייה, כולל מיסים ועמלות, יהיה הערך שצוין. אם מציינים את AmountBeforeTax, המחיר לפני מס של השהייה מוגדר לערך שצוין, בין אם מציינים את AmountAfterTax ובין אם לא. המטבע שבו מוגדרים המחירים ללילה.

דוגמאות:

  • אם AmountBeforeTax ללילה אחד הוא 90,‏ AmountAfterTax הוא 100 ו-fixed_price הוא 80, מחיר המבצע הוא 80.
  • אם המחיר ללילה אחד (AmountBeforeTax) הוא 100, המחיר ללילה השני (fixed_amount) הוא 80, ובמאפיין TaxFeeInfo מצוין מס של 8%, אז

    שיעור המבצע = מחיר קבוע * (1 + אחוז המס)

    ‫86.40 = 80 * 1.08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount מגדיר מגבלות על מספר החדרים שצריכים להיות זמינים כדי שהמבצע יחול. ההנחה חלה רק על הלילות שעומדים בדרישה. ההנחה fixed_amount לא חלה על המבצע הזה. שימו לב: מספר החדרים הפנויים מצוין באמצעות OTA_HotelInvCountNotifRQ (InvCount) או OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer מספר החדרים המינימלי שצריך להיות זמין כדי שהמבצע יחול על המחיר ללילה. אם לא מציינים ערך, אין ערך מינימלי.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer המספר המקסימלי של חדרים שצריכים להיות זמינים כדי שהמבצע יחול על המחיר ללילה. אם לא מציינים ערך, אין הגבלה.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay התנאי הזה מגדיר את מגבלות משך השהייה שבהן אפשר להחיל את המבצע. המבצע לא חל אם משך השהייה חורג מהמגבלות המינימליות והמקסימליות.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer מספר הלילות המינימלי שנדרש לשהייה כדי שהמבצע יחול. אם לא מציינים ערך, אין ערך מינימלי.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer מספר הלילות המקסימלי לשהייה שאפשר להחיל עליה את המבצע. אם לא מציינים ערך, אין מגבלה.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

קונטיינר של כלל מחיר למועדון שגורם להצגת ממשק משתמש מסוים להנחה המשויכת.

אין לציין את האלמנט הזה אלא אם מציינים גם את <Discount>.

Promotions / HotelPromotions / Promotion / MembershipRateRule / @id 1 string

המזהה של כלל התמחור שמשויך למועדון.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount מציינים את הסכום המינימלי של מחירי החדרים היומיים (באמצעות הערך הגדול יותר מבין AmountBeforeTax או AmountAfterTax) שצריך לעבור כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer הערך שצריך לעבור כדי שהמבצע יחול.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy הגדרת הגבלות על מספר האורחים שבהזמנות שעליהן חל המבצע הזה. המבצע לא חל כשהתפוסה היא מחוץ למגבלות המינימום והמקסימום.

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

Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer כדי שההנחה תחול, מספר האורחים שצוין על ידי המשתמש חייב להיות לפחות הערך הזה.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer כדי שההנחה תחול, מספר האורחים שצוין על ידי המשתמש צריך להיות לכל היותר הערך הזה.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans מאגר של רשימת תוכניות מחירים שהמבצע חל עליהן. אם לא מציינים את <RatePlans>, המבצע חל על כל תוכניות התמחור.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan מאפיין שמציין תוכנית תעריפים. תוכנית תמחור מוגדרת על ידי שילוב של חבילה, מחירים וזמינות, כפי שמוגדר בהודעות Transaction (Property Data),‏ OTA_HotelRateAmountNotifRQ ו-OTA_HotelAvailNotifRQ, וכפי שמזוהה על ידי PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string המזהה הייחודי של תוכנית התמחור. הערך הזה ממופה לערך PackageID ב-<PackageData> בהודעה Transaction (Property Data), ולמאפיין RatePlanCode ב-<StatusApplicationControl> בהודעות <OTA_HotelRateAmountNotifRQ> ו-<OTA_HotelAvailNotifRQ>. אפשר להזין עד 50 תווים.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes מאגר לרשימה של סוגי חדרים שהמבצע חל עליהם. המבצע חל על כל <RoomType> שמצוין. אם לא מציינים את <RoomTypes>, המבצע חל על כל החדרים.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType מציין את סוג החדר. סוג החדר מוגדר ברכיב <RoomData> בהודעה Transaction (Property Data) ומתייחסים אליו באמצעות הערך <RoomID> שלו. (הערך של <RoomID> מופיע גם במאפיין InvTypeCode בהודעות OTA_HotelRateAmountNotifRQ).
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string המזהה הייחודי של מלאי שטחי הפרסום (סוג החדר). הערך הזה ממופה ל-<RoomID> בהודעת Transaction (נתוני נכס). אפשר להזין עד 50 תווים.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking המאפיין הזה מציין איך אפשר לשלב מבצעים. אם לא מציינים את הערך, המערכת מניחה שהערך של 'סוג' הוא base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

אפשר להחיל כמה מבצעים על מחיר אחד, בהתאם להגדרה הזו:

  • any: אפשר לשלב עם כל מבצע אחר (חוץ מnone), אבל אין ערובה לסדר שבו המבצעים יחולו.
  • base: המבצע הכי טוב מבין המבצעים הרלוונטיים נבחר ומוחל ראשון, לפני מבצעים אחרים.base השם הקודם של האפשרות הזו היה base_only.
  • second: המערכת בוחרת את המבצע הכי מתאים second ומחיל אותו אחרי מבצע base (אם יש כזה) ולפני any מבצעים.
  • none: לא ניתן לשלב אותו עם מבצעים אחרים.

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

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates מאגר של טווחי תאריכים שקובעים איך המבצע יחול, למשל כדי להתאים הנחות עונתיות.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

תיאור של אופן ההחלה של המבצע.

הערכים החוקיים כוללים:

  • all: המבצע חל על כל לילה במסלול הנסיעה אם כל התאריכים במסלול הנסיעה חופפים לתאריכי השהייה.
  • any: המבצע חל על כל הלילות במסלול הנסיעה אם יש חפיפה בין תאריך כלשהו במסלול הנסיעה לבין תאריך כלשהו בטווח תאריכי השהייה.
  • overlap: המבצע חל רק על הלילות במסלול הנסיעה שחופפים לתאריך בטווח תאריכי השהייה.

חובה לציין את המאפיין הזה.

  • אם במאפיין <Discount> מצוין הערך percentage ובמאפיין application מוגדר הערך all או any, ההנחה חלה כאחוז מהשהייה המלאה.
  • אם הערך של <Discount> הוא percentage והערך של application הוא overlap, ההנחה חלה כאחוז ממחיר הלילה על לילות חופפים.
  • השילוב של <Discount> עם fixed_amount ו-application שמוגדר כ-overlap הוא שילוב לא תקין.
  • המאפיין <FreeNights> תומך בכל הערכים של application. הערה: במקרה של overlap, רק הלילות החופפים של השהייה נכללים בדרישות לקבלת ההנחה.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

טווח תאריכים שבו המבצע תקף.

יש תמיכה גם בפורמט YearlessDate.

  • אם אחד מהערכים start או end הוא תאריך ללא שנה, צריך לאכלס את שניהם כתאריכים ללא שנה.
  • טווחים של תאריכים ללא שנה לא יכולים לחצות את השנה החדשה. במקום זאת, מייצגים את הטווח כשני טווחי תאריכים סמוכים. לדוגמה, את {"12-29", "01-05"} אפשר לייצג באמצעות {"12-29", "12-31"} ו-{"01-01", "01-05"}.

אם רוצים להגדיר את טווח התאריכים StayDates כך שהמבצע יהיה זמין בימים מסוימים בשבוע, צריך להגדיר את התאריך start כתאריך הנוכחי בלי end, כדי שתוקף המבצע לא יפוג.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate תאריך ההתחלה (על סמך אזור הזמן של הנכס), כולל, של טווח התאריכים. התאריך הזה צריך להיות לפני התאריך end או זהה לו. אם לא מציינים את start, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך התחלה.

אם לא מציינים את הערך end, צריך לציין את הערך start.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate תאריך הסיום (על סמך אזור הזמן של הנכס) של טווח התאריכים, כולל היום האחרון. התאריך הזה צריך להיות זהה לתאריך start או מאוחר ממנו. אם לא מציינים את end, טווח התאריכים הוא למעשה בלתי מוגבל החל מהתאריך start.

אם לא מציינים את הערך start, צריך לציין את הערך end.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים.

התווים התקפים הם:

  • M ליום שני
  • T ליום שלישי
  • W ליום רביעי
  • H ליום חמישי
  • F ליום שישי
  • S ליום שבת
  • U ליום ראשון

כל שילוב של תווים הוא תקין.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries קונטיינר לרשימת המיקומים (מדינות) של המשתמשים שעומדים בדרישות למימוש המבצע. אם מציינים מדינות, רק משתמשים שעומדים בדרישות במדינות שמופיעות ברשימה יקבלו את המחיר המוזל. אם לא תציינו מדינה, המערכת תציע את המחיר המוזל למשתמשים שעומדים בדרישות בכל מדינה.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum סוג המפרט של UserCountries.

הערכים החוקיים הם include ו-exclude.

אם הערך של UserCountries type מוגדר כ-type, המבצע חל על משתמשים מהמדינות שרשומות ברשימה.include

אם הערך של UserCountries ‏type הוא exclude, המבצע חל על משתמשים מחוץ למדינות שמופיעות ברשימה.

אם המאפיין UserCountries‏ type לא מוגדר, המערכת מתייחסת אליו כאל include והמבצע חל על משתמשים מהמדינות שמופיעות ברשימה.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country מגדירה מדינה אחת שבה המשתמשים זכאים למבצע.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string קוד מדינה בפורמט CLDR, כמו DE או FR. שימו לב שבמדינות מסוימות, קוד המדינה במאגר CLDR לא זהה לקוד המדינה בן 2 האותיות לפי תקן ISO. בנוסף, אין תמיכה בקודים של אזורים ממאגר ה-CLDR.

דוגמאות

לכל נכס אפשר ליצור עד 500 מבצעים. כדי להסיר מבצעים מנכס, אפשר לעיין בדוגמה 'מחיקת מבצע אחד'.

הודעה בסיסית

בדוגמה הבאה אפשר לראות הודעת Promotions בסיסית:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <BookingWindow min="7" max="330"/>
      <CheckinDates>
         <DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
      </CheckinDates>
      <CheckoutDates>
         <DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
      </CheckoutDates>
      <Devices>
        <Device type="mobile"/>
        <Device type="tablet"/>
      </Devices>
      <Discount percentage="20" applied_nights="2"/>
      <LengthOfStay min="2" max="14"/>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <Stacking type="base"/>
      <UserCountries>
        <Country code="US"/>
        <Country code="GB"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>


מצב המלאי

בדוגמה הבאה אפשר לראות איך יוצרים הנחה אם יש מלאי עודף שמועד ההגעה שלו קרוב:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow max="7"/>
      <Discount percentage="10"/>
      <InventoryCount min="3"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


מחיקת מבצע אחד

בדוגמה הבאה אפשר לראות איך מוחקים מבצע אחד בנכס:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1" action="delete"/>
  </HotelPromotions>
</Promotions>

מחיקת כל המבצעים

בדוגמה הבאה אפשר לראות איך מוחקים את כל המבצעים בנכס:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>



הצגת כל המבצעים בשכבת-על

בדוגמה הבאה אפשר לראות איך להוסיף <HotelPromotions> לנכס עם מבצע חדש אחד או יותר. כשמגדירים את הערך action="overlay", כל קידומי המכירות שמאוחסנים נמחקים לפני אחסון קידומי המכירות שצוינו בהודעה הנוכחית:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <Discount percentage="10"/>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <Stacking type="base"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

3 סוגים שונים של ערימה

בדוגמה הבאה מוצג מקרה שבו יחולו שלוש מבצעים שונים (base, ‏ second, ‏ any). שימו לב שהמבצע none לא יחול כי המבצעים האחרים מספקים הנחה גדולה יותר. אם המחיר המקורי היה 100$, המחיר המוזל יהיה 72.90$.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="second"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="4">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


אין סוג ראש גלילי

בדוגמה הבאה מוצג מקרה שבו נעשה שימוש במבצע none כי השילוב של מבצעים אחרים מספק הנחה קטנה יותר. אם המחיר המקורי היה 100$, המחיר המוזל יהיה 75$.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



Booking Window Duration Bounds

בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב BookingWindow עם גבולות ההתחלה והסיום שלו שמוגדרים כסוג משך זמן בפורמט ISO 8601. ההגבלה הזו על חלון ההזמנה מחייבת הזמנה עד השעה 18:00 ביום שלפני ההגעה, או החל מהשעה 12:00 ביום השני לפני ההגעה.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


תאריכי הזמנה, גבולות של תאריך ושעה

בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב BookingDates עם המאפיינים start ו-end כסוגים DateTime. הגבלת תאריך ההזמנה הזו מחייבת שההזמנה תתבצע בין השעות 06:30 בתאריך 2020-07-01 לבין השעה 18:45 בתאריך 2020-07-02.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
      </BookingDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


טווח תאריכים ללא שנה

בדוגמה הבאה אפשר לראות מקרה שבו רכיב CheckInDates מכיל DateRanges עם שדות start ו-end בלי שנים. בדוגמה הזו, המבצע תקף לתאריכי צ'ק אין בין 29 בדצמבר ל-2 בינואר, ללא קשר לשנה. טווח תאריכים ללא שנה שחוצה את הגבול של השנה החדשה הוא לא תקין, ולכן DateRange מוגדר כשני טווחי תאריכים סמוכים.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <CheckInDates>
         <DateRange start="12-29" end="12-31"/>
         <DateRange start="01-01" end="01-02"/>
      </CheckInDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



הנחה על לילות חינם

בדוגמה הבאה, יש הנחה של 50% על שני לילות על כל ארבעה לילות שהייה בטווח התאריכים שצוין להזמנה. במסלול נסיעה של עשרה לילות, ארבעה לילות יקבלו הנחה של 50%.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
        <DateRange start="2022-01-01" end="2022-05-31"/>
      </BookingDates>
      <Discount>
        <FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>

בדוגמה הבאה, יש הנחה של 50% על לילה אחד בכל שהייה של שלושה לילות בטווח התאריכים שצוין. רק לילות השהייה החופפים נספרים לצורך קבלת ההנחה. במסלול הנסיעה הבא עם צ'ק-אין בתאריך 2022-01-01 וצ'ק-אאוט בתאריך 2022-01-07, הלילות שעומדים בדרישות וההנחות חלים באופן הבא.

  • ‫2022-01-01 (שהייה)
  • ‫2022-01-02 (שהייה)
  • 2022-01-03
  • ‫2022-01-04 (בהנחה)
  • ‫2022-01-05 (שהייה)
  • ‫2022-01-06 (שהייה)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <StayDates application="overlap">
        <DateRange start="2022-01-01" end="2022-01-02"/>
        <DateRange start="2022-01-04" end="2022-01-06"/>
      </StayDates>
      <Discount>
        <FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>


בחירה לפי דירוג

בדוגמה הבאה מוצעות שתי הנחות, אחת של 20% ואחת של 15%. במהלך ההערכה, רק ההנחה של 15% מוחלת כי הדירוג שלה נמוך יותר.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="15" rank="25"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="20" rank="50"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

BestDailyDiscount

בדוגמה הבאה מוצג הנחה על שהייה של שני לילות, שמתקבלת משילוב של BestDailyDiscount עם Discount.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
 <HotelPromotions hotel_id="HotelID" action="overlay">
   <Promotion id="general">
     <BestDailyDiscount fixed_amount="20"/>
   </Promotion>
   <Promotion id="may">
     <BestDailyDiscount fixed_amount="50"/>
     <StayDates application="overlap">
        <DateRange start="2023-05-01" end="2023-05-31"/>
     </StayDates>
   </Promotion>
   <Promotion id="fiesta">
     <Discount fixed_amount_per_night="5"/>
     <Stacking type="any"/>
   </Promotion>
 </HotelPromotions>
</Promotions>

נניח שהתאריכים הם 30 באפריל 2023 עד 2 במאי 2023 (שהייה של שני לילות). כדי לחשב את ההנחה, המערכת קודם מוצאת את השילוב של ההנחות היומיות הכי טובות שנותן את ההנחה הכי גדולה.

בלילה הראשון, רק מבצע 'כללי' זמין עם הנחה קבועה של 20.

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

אז במהלך השהייה, ההנחה של מבצע ה'פיאסטה' היא 5 ללילה, או 10 בסך הכול. אפשר לשלב אותו עם השילוב של ההנחות היומיות הכי טובות, כי סוג השילוב של המבצע fiesta מוגדר ל-any. אם הערך היה base, רק השילוב של ההנחות היומיות הכי טובות או ההנחה של ה-Fiesta היו חלים. מידע נוסף זמין בתיאור של Stacking.

`בסך הכול, מחיר השהייה כולל הנחה קבועה של 20 + 50 + 10 = 80.

תשובות

תחביר

ההודעה PromotionsResponse משתמשת בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
                    id="message_ID"
                    partner="partner_key">
  <!-- Either Success or Issues are populated. -->
  <Success/>
  <Issues>
    <Issue code="issue_code"
           status="issue_type">
      issue_description
    </Issue>
  </Issues>
</PromotionsResponse>

רכיבים ומאפיינים

ההודעה PromotionsResponse כוללת את הרכיבים והמאפיינים הבאים:

רכיב / @מאפיין מופעים סוג תיאור
PromotionsResponse 1 Complex element רכיב הבסיס שמציין את ההצלחה או הבעיות בהודעת בקשת מבצעים שהתקבלה.
PromotionsResponse / @timestamp 1 DateTime התאריך והשעה שבהם ההודעה נוצרה.
PromotionsResponse / @id 1 string המזהה הייחודי מההודעה המשויכת של המבצע.
PromotionsResponse / @partner 1 string חשבון השותף שאליו משויכת ההודעה.
PromotionsResponse / Success 0..1 Success מציין שההודעה על המבצע עובדה בהצלחה ללא אזהרות, שגיאות או כשלים.

הערך <Success> או <Issues> מופיע בכל הודעה.

PromotionsResponse / Issues 0..1 Issues קונטיינר לבעיה אחת או יותר שזוהו במהלך עיבוד ההודעה של המבצעים.

הערך <Success> או <Issues> מופיע בכל הודעה.

PromotionsResponse / Issues / Issue 1..n Issue תיאור של אזהרה, שגיאה או כשל שנתקלו בהם במהלך עיבוד הודעת המבצעים. פרטים על הבעיות האלה זמינים במאמר הודעות שגיאה לגבי סטטוס הפיד.
PromotionsResponse / Issues / Issue / @code 1 integer המזהה של הבעיה.
PromotionsResponse / Issues / Issue / @status 1 enum

סוג הבעיה שנתקלתם בה.

הערכים התקפים הם warning,‏ error ו-failure.

דוגמאות

הפעולה הצליחה

זוהי תגובה להודעת מבצעים שעברה עיבוד בהצלחה.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

בעיות

זו תגובה להודעה מסוג 'מבצעים' שלא עברה עיבוד בגלל שגיאות.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Issues>
    <Issue code="1001" status="error">Example</Issue>
  </Issues>
</PromotionsResponse>