קידומי מכירות

סקירה כללית

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

Requests

תחביר

ההודעה 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, 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" 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, לכן הקומה השנייה לא מוחלת. התעריף הסופי הוא 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, 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 / @fixed_amount 0..1 float

חובה להזין אחד מהערכים הבאים: percentage, 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, 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, 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, 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.
  • אם אנחנו מתמחרים שהייה של 2 לילות, שבה הערך של 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), יש שני פלחים של לילה לשהייה: הלילות הראשון עד 4 הלילות וה-5 עד 8 לילות, הלילות התשיעי וה-10 לא נכללים בפלח של לילה שהייה.

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 המערכת משייכת לקידום המכירות הזה דירוג ובוחרת להחיל אותו רק עם הדירוג הנמוך ביותר. הערכים חייבים להיות בין 1 ל-99, כולל. אם יש כמה מבצעים באותו דירוג, המערכת תבחר אחד מהם באופן אקראי ותחיל אותו.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

יש לציין בדיוק אחד מהערכים Discount או BestDailyDiscount.

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

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

לא ניתן לציין את Stacking עם BestDailyDiscount. ההנחות מסוג 'הכי טוב ליום' שמניבות את ההנחה המשמעותית ביותר לכל לילה משולבות כהנחה לשהייה יחידה (כלומר, Discount) וסוג הערימה שהוגדר הוא base. המערכת משווה את ההנחה המשולבת הזו לעומת מבצעים אחרים של <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 מציינת תוכנית תעריפים. תוכנית תעריפים מוגדרת לפי שילוב של חבילה, תעריפים וזמינות, כפי שמוגדר בהודעות 'עסקה' (נתוני הנכס), OTA_HotelRateAmountNotifRQ ו'הודעות OTA_HotelAvailNotifRQ', כפי שהן מזוהים על ידי ה-PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string המזהה הייחודי של תוכנית התעריפים. הערך הזה ממופה לערך PackageID ב-<PackageData> בהודעה Transaction (Data 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 (נתוני נכס), וההפניה אליו מתבצעת באמצעות הערך <RoomID> שלו. (יש הפניה לערך <RoomID> שלו גם באמצעות המאפיין InvTypeCode בהודעות OTA_HotelRateAmountNotifRQ.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string המזהה הייחודי של המלאי (סוג החדר). הערך הזה ממופה אל <RoomID> בהודעה של 'עסקה (נתוני נכס)'. ניתן להזין עד 50 תווים.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking מציין איך ניתן לשלב את המבצעים. אם לא צוין, הערך "type" נחשב כ-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"}.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate תאריך ההתחלה (על סמך אזור הזמן של הנכס), כולל טווח התאריכים. התאריך הזה חייב להיות לפני התאריך של end או זהה לו. אם לא מציינים start, טווח התאריכים הוא למעשה בלתי מוגבל מבחינת תאריך התחלה.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate תאריך הסיום (על סמך אזור הזמן של הנכס), כולל טווח התאריכים. התאריך הזה חייב להיות זהה לתאריך 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 סוג המפרט של מדינות משתמשים.

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

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

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

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

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

דוגמאות

הודעה בסיסית

בדוגמה הבאה מוצגת הודעת 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>



גבולות משך חלון ההזמנה

בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב 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. בגלל ההגבלה הזו על תאריך ההזמנה, צריך לבצע הזמנה בין 6:30 ב-17 ביולי 2020 ל-18:45 ב-27 ביולי 2020.

<?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/1, ללא קשר לשנה. טווחי תאריכים ללא שנה שחוצים את גבולות השנה החדשה אינם חוקיים, ולכן טווח התאריכים מוצג כשני טווחי תאריכים סמוכים.

<?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>



הנחה על FreeNights

בדוגמה הבאה מקבלים הנחה של 50% על שני לילות לכל ארבעה לילות בטווח תאריכי ההזמנה שצוין. לנסיעה של 10 לילות, הנחה בסך 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% לכל שלושה לילות בטווחי השהייה שצוינו. רק הלילות החופפים של השהייה נספרים לטובת הזכאות להנחה. במסלול הנסיעה הבא עם צ'ק-אין ב-1 בינואר 2022 וצ'ק-אאוט ב-7 בינואר 2022, ההנחות ולילות השהייה הרלוונטיים יחולו באופן הבא.

  • 1 בינואר 2022 (שהייה)
  • 2 בינואר 2022 (שהייה)
  • 2022-01-03
  • 04.01.2022 (בהנחה)
  • 5 בינואר 2022 (שהייה)
  • 6 בינואר 2022 (שהייה)
<?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 יחד עם 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, יחול רק השילוב של ההנחות היומיות הטובות ביותר או ההנחה של 'פיאסטה'. מידע נוסף זמין בתיאור של 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 הרכיב הבסיסי (root) שמציין את ההצלחה או הבעיות של הודעת בקשה לקידומי מכירות שהתקבלה.
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>