קידום מכירות

סקירה כללית

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

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

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

רכיב / @Attribute מופעים סוג תיאור
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,‏ 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% מהנחה בסיסית. במקרה כזה, המחיר המוזל יהיה 80 כי בשני המבצעים מקבלים הנחה של 10%. הערה: אם המבצע השני היה גם הוא הנחה רגילה באחוזים, המחיר המוזל יהיה 81 כי המבצע השני מאפשר הנחה של 10% מ-90.
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, אז

    promotion rate = sum(AmountAfterTax) - (fixed discount)

    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, אז

    שיעור קידום המכירות = sum(AmountBeforeTax - fixed amount discount)

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

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

    שיעור קידום המכירות = sum(AmountAfterTax - fixed amount discount)

    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.
  • אם אנחנו מחשבים את המחיר של שהייה של 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), יש שני קטעים של לילות שהייה: הלילות מ-1 עד 4 והלילות מ-5 עד 8. הלילות 9 ו-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 הוא 1, הלילות בסוף מקטע הלילות של השהייה יקבלו הנחה. אם 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. הערך חייב להיות base או none. ההנחות 'הטובות ביותר ליום' שמניבות את ההנחה הגבוהה ביותר לכל לילה משולבות ומטופלות כהנחה אחת על השהייה (כלומר Discount), תוך שמירה על סוג הערימה שהוגדר. ההנחה המשולבת הזו תוצג לצד מבצעים אחרים של <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‏ (נתוני המלון), 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 קובע איך אפשר לשלב מבצעים. אם לא צוין, המערכת תתייחס ל-'type' בתור base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

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

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

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

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, טווח התאריכים לא מוגבל מבחינת תאריך ההתחלה.

צריך לציין את הערך של start אם לא צוין הערך של end.

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

צריך לציין את הערך של end אם לא צוין הערך של start.

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 מוגדר בתור 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 שונה מקוד המדינה בן שתי האותיות ב-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" הוא 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" 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 לא יחול כי שוברי הפרסום האחרים מספקים הנחה טובה יותר. אם המחיר המקורי היה 400 ש"ח, המחיר המוזל יהיה 307.20 ש"ח.

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


Booking Dates DateTime Bounds

בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב BookingDates עם המאפיינים start ו-end כסוגי DateTime. בהתאם למגבלה הזו, ההזמנה צריכה להתבצע בין השעות 06:30 ב-01 ביולי 2020 לבין השעה 18:45 ב-02 ביולי 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 בינואר, ללא קשר לשנת הצ'ק אין. טווחי תאריכים ללא שנה שעוברים את גבול השנה החדשה הם לא חוקיים, ולכן ה-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>



הנחה של FreeNights

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

  • 2022-01-01 (שהייה)
  • 2022-01-02 (שהייה)
  • 2022-01-03
  • 4 בינואר 2022 (בהנחה)
  • 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>


Ranked Selection

בדוגמה הבאה מוצעות שתי הנחות, אחת של 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.

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

לאחר מכן, במהלך השהייה, ההנחה של המבצע 'fiesta' תהיה 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 יש את הרכיבים והמאפיינים הבאים:

רכיב / @Attribute מופעים סוג תיאור
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>