סקירה כללית
ממשק ה-API הזה מאפשר לכם לציין הנחות אפשריות. מבין המבצעים שצוינו, Google מחילה את המבצע או את קבוצת המבצעים שעומדים בדרישות ומביאים למחיר הנמוך ביותר. אם אתם מחפשים API שתומך בהתאמות שרירותיות של תעריפים שיכולות להעלות או להוריד את המחיר כשמתקיימים תנאים מסוימים, כדאי לכם להשתמש ב-Rate Modifications API. שימו לב: אם שני ממשקי ה-API קיימים, שינויים במחירים יחולו לפני מבצעים.
בקשות
תחביר
ההודעה Promotions משתמשת בתחביר הבא:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
id="message_ID"
timestamp="timestamp">
<HotelPromotions hotel_id="HotelID" action="[overlay]">
<Promotion id="PromotionID" action="[delete]">
<BookingDates>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
</BookingDates>
<BookingWindow min="integer_or_duration" max="integer_or_duration"/>
<Ceiling amount_per_night="float"/>
<Floor amount_per_night="float"/>
<CheckinDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckoutDates>
<!-- Specify only one of percentage, percentage_of_base, fixed_amount,
fixed_amount_per_night, fixed_price, or fixed_price_per_night;
applied_nights is only used with percentage, fixed_amount_per_night,
and fixed_price_per_night. -->
<Discount percentage="float" percentage_of_base="float"
fixed_amount="float" fixed_amount_per_night="float"
fixed_price="float" fixed_price_per_night="float"
applied_nights="integer_1_to_99" rank="integer_1_to_99">
<!-- FreeNights may not be used in conjunction with attributes on Discount -->
<FreeNights stay_nights="integer" discount_nights="integer"
discount_percentage="float" night_selection="[cheapest|last]"
repeats="boolean"/>
</Discount>
<!-- Exactly one of Discount or BestDailyDiscount must be specified.
Specify only one of percentage, fixed_amount, or fixed_price. -->
<BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
<Devices>
<Device type="[desktop|tablet|mobile]"/>
</Devices>
<InventoryCount min="integer" max="integer"/>
<LengthOfStay min="integer" max="integer"/>
<MembershipRateRule id="RateRuleID"/>
<MinimumAmount before_discount="integer"/>
<Occupancy min="integer" max="integer"/>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<Stacking type="[any|base|none|second]"/>
<StayDates application="[all|any|overlap]">
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<UserCountries type="[include|exclude]">
<Country code="country_code"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
רכיבים ומאפיינים
ההודעה על מבצעים כוללת את הרכיבים והמאפיינים הבאים:
| רכיב / @מאפיין | מופעים | סוג | תיאור |
|---|---|---|---|
| Promotions | 1 | Complex element | רכיב הבסיס של הודעת מבצע. |
| Promotions / @partner | 1 | string | חשבון השותף שאליו משויכת ההודעה. ערך המחרוזת הזה הוא הערך של ״מפתח השותף״ שמופיע
בדף הגדרות החשבון ב-Hotel Center.
אם יש לכם מערכת עורפית שמספקת פידים לכמה חשבונות, הערך הזה צריך להיות זהה לערך המאפיין |
| Promotions / @id | 1 | string | מזהה ייחודי של הודעת הבקשה. הערך הזה מוחזר בהודעת התגובה. התווים המותרים הם a-z, A-Z, 0-9, _ (קו תחתון) ו- (מקף). |
| Promotions / @timestamp | 1 | DateTime | התאריך והשעה שבהם ההודעה נוצרה. |
| Promotions / HotelPromotions | 0..n | HotelPromotions | מבצעים במלון. כל מבצע חל על נכס אחד. אלא אם משתמשים ב- |
| Promotions / HotelPromotions / @hotel_id | 1 | string | המזהה הייחודי של הנכס. הערך הזה צריך להיות זהה למזהה המלון שצוין באמצעות
<id> ב-<listing> בפיד רשימת המלונות. מזהה המלון מופיע גם ב-Hotel Center. |
| Promotions / HotelPromotions / @action | 0..1 | enum | אם מציינים את המאפיין, הערך שלו חייב להיות אם לא מציינים את הפרמטר הזה, כל מבצע שמצוין בהודעה הנוכחית הוא אחד מהבאים:
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | מבצע יחיד לנכס. הערה: אם לא מציינים את אם אתם צריכים להשתמש ביותר מ-99 מבצעים, פנו למנהל החשבון הטכני (TAM). |
| Promotions / HotelPromotions / Promotion / @id | 1 | string | מזהה ייחודי של המבצע. אפשר להזין עד 40 תווים. התווים המותרים הם a-z, A-Z, 0-9, _ (קו תחתון), - (מקף) ו-. (נקודה). (נקודה). |
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | אם מציינים את המאפיין, הערך שלו חייב להיות אם מציינים את |
| 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 | תאריך או תאריך ושעה (בהתאם לאזור הזמן של הנכס) שמהווים את ההתחלה של הטווח, כולל.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date או DateTime | תאריך הסיום או התאריך והשעה (בהתאם לאזור הזמן של הנכס), כולל, של הטווח.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים. התווים התקפים הם:
כל שילוב של תווים הוא תקין. |
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | המדיניות מציינת את פרק הזמן שבו ההזמנה צריכה להתבצע ביחס לתאריך הצ'ק-אין (על סמך אזור הזמן של מקום האירוח). לדוגמה, אפשר להגדיר את חלון ההזמנות ל-7 ימים לפחות, אבל לא יותר מ-180 ימים, לפני הצ'ק-אין. |
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | משך הזמן המינימלי לפני הצ'ק-אין שבו צריך לבצע את ההזמנה כדי שהמבצע יחול. אם לא מציינים את הערך הזה, או אם הערך שלו הוא 0, אין ערך מינימלי.
סוגי הערכים התקינים הם:
|
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | המספר המקסימלי של הימים לפני הצ'ק-אין שבהם צריך לבצע את ההזמנה כדי שהמבצע יחול. אם לא מציינים את הערך הזה, או אם הערך שלו הוא 0, אין הגבלה מקסימלית.
סוגי הערכים התקינים הם:
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
הגדרת מגבלות על הערך המקסימלי שאפשר להגדיר לשיעור אחרי החלת מבצעים. כשמגדירים מבצעים, צריך תמיד לציין אם מוגדרת אפשרות לצירוף מבצעים, יכול להיות שכמה מבצעים עם הערך דוגמה: תמחור של שהייה של לילה אחד, כאשר
סדר החישוב הוא:
העובדה ש-60 הוא ערך מקסימלי כולל מחמיר יותר לא רלוונטית, כי הוא תקף רק למבצע הספציפי הזה, ולא יכול להיות ערך מקסימלי יחיד שרלוונטי לכל המבצעים. |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
הסכום המקסימלי שאפשר להגדיר למחיר ללילה אחרי החלת ההנחה. אם מציינים גם רכיב |
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
המאפיין מגדיר הגבלות על הערך המינימלי שאפשר להגדיר לשיעור אחרי החלת מבצעים. כשמגדירים מבצעים, צריך תמיד לציין הלוגיקה של אם מוגדרת אפשרות לצירוף מבצעים, יכול להיות שכמה מבצעים עם הערך דוגמה: תמחור של שהייה של לילה אחד, כאשר
סדר החישוב הוא:
העובדה ש-90 הוא ערך מינימום כללי מחמיר יותר לא רלוונטית, כי הוא תקף רק למבצע שלו, ולא יכול להיות ערך מינימום יחיד שחל על כל סדרת המבצעים. |
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
הסכום המינימלי שאפשר להגדיר למחיר ללילה אחרי החלת ההנחה. אם מציינים גם רכיב |
| Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | קונטיינר של טווחי תאריכים אחד או יותר שמגדירים מתי צריך לבצע צ'ק-אין כדי שהמבצע יחול. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | טווח תאריכים שבו צריך להתבצע הצ'ק-אין כדי שהמבצע יחול. אין צורך להשתמש ברכיב הזה אם מוחקים מבצע אחד או יותר. יש תמיכה גם בפורמט YearlessDate.
|
| 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' מציינת שאפשר להשתמש בימי חול בטווח התאריכים. התווים התקפים הם:
כל שילוב של תווים הוא תקין. |
| Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | מאגר של טווחי תאריכים אחד או יותר שמגדירים מתי צריך להשלים את תהליך התשלום כדי שהמבצע יחול. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | טווח תאריכים שבו צריך להתבצע הצ'ק-אאוט כדי שהמבצע יחול. אין צורך להשתמש ברכיב הזה אם אתם מוחקים מבצע אחד או יותר. יש תמיכה גם בפורמט YearlessDate.
|
| 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' מציינת שאפשר להשתמש בימי חול בטווח התאריכים. התווים התקפים הם:
כל שילוב של תווים הוא תקין. |
| 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 | צריך לציין בדיוק אחד מהמאפיינים מציינים את ההנחה שרוצים להחיל על המבצע. |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה.
היא חלה על דוגמאות:
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה הבסיסית. בדומה ל- בניגוד ל דוגמה:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: סכום קבוע שיש להפחית מסכום דוגמאות:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: הנחה קבועה שחלה על כל אחד מהמחירים ללילה דוגמאות:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: אם מציינים מחירים ל- אם המאפיין דוגמאות:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | חובה לציין בדיוק אחד מהערכים הבאים: אם מציינים מחירים ללילה אם המאפיין אם מציינים את דוגמאות:
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | אפשר להשתמש בה רק עם מספר הלילות שבהם ההנחה חלה, החל מהלילה הכי זול. חייב להיות מספר שלם בין 1 ל-99. אם לא מציינים את מספר הלילות, ההנחה חלה על כל הלילות. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | התג הזה מציין הנחה על לילות מסוימים במהלך שהייה, אם משך השהייה
עומד בדרישות המינימליות. אם משתמשים באלמנט הזה, אסור להשתמש במאפיינים באלמנט האב Discount. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | מספר הלילות הנדרש כדי שההנחה תחול. כל הנחה חלה על פלח נפרד של לילות שהייה. לדוגמה, אם השהייה היא ל-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 | האם אפשר להחיל את ההנחה על כמה קטעים של לילות שהייה. אם לדוגמה, אם הערך של |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | מערכת Google תקצה למבצע הזה דירוג ותכלול אותו בתהליך הבחירה לפי דירוג, שבו רק המבצע עם הדירוג הכי נמוך ייבחר להחלה. הערכים צריכים להיות בין 1 ל-99, כולל. אם לכמה מבצעים יש אותו דירוג, המערכת בוחרת אחד מהם באופן שרירותי ומחילה אותו. |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | צריך לציין בדיוק אחד מהמאפיינים התג הזה מציין הנחה יומית שאפשר להחיל על לילה של שהייה. זאת בניגוד ל- לכל נכס יכולה להיות קבוצה אחת של מבצעים שנחשבים ל'מבצעים הכי טובים של היום'. כלומר, לכל לילה של שהייה, המערכת בוחרת את המבצע היחיד 'הטוב ביותר ליום' שעומד בדרישות ומעניק את ההנחה הכי גדולה לאותו לילה, ויכול להיות שהיא תחיל אותו. אפשר לציין את אפשר לציין את |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | חובה לציין בדיוק אחד מהמאפיינים הבאים: ערך עשרוני מ-0 עד 100 שמציין את אחוז ההנחה.
היא חלה על דוגמאות:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | חובה לציין בדיוק אחד מהמאפיינים הבאים: סכום קבוע שיש להפחית ממחיר אחד ללילה דוגמאות:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | חובה לציין בדיוק אחד מהמאפיינים הבאים: אם מציינים דוגמאות:
|
| 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 |
קונטיינר של כלל מחיר למועדון שגורם להצגת ממשק משתמש מסוים להנחה המשויכת. אין לציין את האלמנט הזה אלא אם מציינים גם את |
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
המזהה של כלל התמחור שמשויך למועדון. |
| Promotions / HotelPromotions / Promotion / MinimumAmount | 0..1 | MinimumAmount | מציינים את הסכום המינימלי של מחירי החדרים היומיים (באמצעות הערך הגדול יותר מבין AmountBeforeTax או AmountAfterTax) שצריך לעבור כדי שהמבצע יחול. |
| Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount | 1 | integer | הערך שצריך לעבור כדי שהמבצע יחול. |
| Promotions / HotelPromotions / Promotion / Occupancy | 0..1 | Occupancy | הגדרת הגבלות על מספר האורחים שבהזמנות שעליהן חל המבצע הזה. המבצע לא חל כשהתפוסה היא מחוץ למגבלות המינימום והמקסימום.
המבצעים חלים על המחיר של כרטיס הטיסה. אי אפשר להגדיר הנחה מקסימלית לכל נוסע. |
| Promotions / HotelPromotions / Promotion / Occupancy / @min | 0..1 | integer | כדי שההנחה תחול, מספר האורחים שצוין על ידי המשתמש חייב להיות לפחות הערך הזה. |
| Promotions / HotelPromotions / Promotion / Occupancy / @max | 0..1 | integer | כדי שההנחה תחול, מספר האורחים שצוין על ידי המשתמש צריך להיות לכל היותר הערך הזה. |
| Promotions / HotelPromotions / Promotion / RatePlans | 0..1 | RatePlans | מאגר של רשימת תוכניות מחירים שהמבצע חל עליהן.
אם לא מציינים את <RatePlans>, המבצע חל על כל תוכניות התמחור. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | מאפיין שמציין תוכנית תעריפים. תוכנית תמחור מוגדרת על ידי שילוב של חבילה, מחירים וזמינות, כפי שמוגדר בהודעות Transaction (Property Data), OTA_HotelRateAmountNotifRQ ו-OTA_HotelAvailNotifRQ, וכפי שמזוהה על ידי PackageID. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | המזהה הייחודי של תוכנית התמחור. הערך הזה ממופה לערך PackageID ב-<PackageData> בהודעה Transaction (Property Data), ולמאפיין RatePlanCode ב-<StatusApplicationControl> בהודעות <OTA_HotelRateAmountNotifRQ> ו-<OTA_HotelAvailNotifRQ>.
אפשר להזין עד 50 תווים. |
| Promotions / HotelPromotions / Promotion / RoomTypes | 0..1 | RoomTypes | מאגר לרשימה של סוגי חדרים שהמבצע חל עליהם.
המבצע חל על כל <RoomType>
שמצוין. אם לא מציינים את <RoomTypes>, המבצע חל על כל החדרים. |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType | 1..n | RoomType | מציין את סוג החדר. סוג החדר מוגדר ברכיב <RoomData> בהודעה Transaction (Property Data) ומתייחסים אליו באמצעות הערך <RoomID> שלו. (הערך של <RoomID> מופיע גם במאפיין InvTypeCode בהודעות OTA_HotelRateAmountNotifRQ). |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | המזהה הייחודי של מלאי שטחי הפרסום (סוג החדר). הערך הזה ממופה
ל-<RoomID> בהודעת Transaction (נתוני נכס).
אפשר להזין עד 50 תווים. |
| Promotions / HotelPromotions / Promotion / Stacking | 0..1 | Stacking | המאפיין הזה מציין איך אפשר לשלב מבצעים. אם לא מציינים את הערך, המערכת מניחה שהערך של 'סוג'
הוא base. |
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | אפשר להחיל כמה מבצעים על מחיר אחד, בהתאם להגדרה הזו:
מבין השילובים האפשריים, המערכת בוחרת את קבוצת המבצעים שמניבה את ההנחה הגדולה ביותר ומחילים אותה על המחיר. |
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | מאגר של טווחי תאריכים שקובעים איך המבצע יחול, למשל כדי להתאים הנחות עונתיות. |
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | תיאור של אופן ההחלה של המבצע. הערכים החוקיים כוללים:
חובה לציין את המאפיין הזה.
|
| Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | טווח תאריכים שבו המבצע תקף. יש תמיכה גם בפורמט YearlessDate.
אם רוצים להגדיר את טווח התאריכים |
| 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, טווח התאריכים הוא למעשה בלתי מוגבל החל מהתאריך start.
אם לא מציינים את הערך |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | הימים בשבוע שמותרים בטווח התאריכים. אם לא מציינים ימים, כל הימים בטווח התאריכים מותרים. כל תו במחרוזת מציין יום. לדוגמה, המחרוזת 'MTWHF' מציינת שאפשר להשתמש בימי חול בטווח התאריכים. התווים התקפים הם:
כל שילוב של תווים הוא תקין. |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | קונטיינר לרשימת המיקומים (מדינות) של המשתמשים שעומדים בדרישות למימוש המבצע. אם מציינים מדינות, רק משתמשים שעומדים בדרישות במדינות שמופיעות ברשימה יקבלו את המחיר המוזל. אם לא תציינו מדינה, המערכת תציע את המחיר המוזל למשתמשים שעומדים בדרישות בכל מדינה. |
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | סוג המפרט של UserCountries.
הערכים החוקיים הם אם הערך של UserCountries אם הערך של UserCountries אם המאפיין UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | מגדירה מדינה אחת שבה המשתמשים זכאים למבצע. |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | קוד מדינה בפורמט CLDR, כמו DE או FR. שימו לב שבמדינות מסוימות, קוד המדינה במאגר CLDR לא זהה לקוד המדינה בן 2 האותיות לפי תקן ISO. בנוסף, אין תמיכה בקודים של אזורים ממאגר ה-CLDR. |
דוגמאות
לכל נכס אפשר ליצור עד 500 מבצעים. כדי להסיר מבצעים מנכס, אפשר לעיין בדוגמה 'מחיקת מבצע אחד'.
הודעה בסיסית
בדוגמה הבאה אפשר לראות הודעת Promotions בסיסית:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
מצב המלאי
בדוגמה הבאה אפשר לראות איך יוצרים הנחה אם יש מלאי עודף שמועד ההגעה שלו קרוב:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
מחיקת מבצע אחד
בדוגמה הבאה אפשר לראות איך מוחקים מבצע אחד בנכס:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
מחיקת כל המבצעים
בדוגמה הבאה אפשר לראות איך מוחקים את כל המבצעים בנכס:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
הצגת כל המבצעים בשכבת-על
בדוגמה הבאה אפשר לראות איך להוסיף <HotelPromotions> לנכס עם מבצע חדש אחד או יותר. כשמגדירים את הערך action="overlay", כל קידומי המכירות שמאוחסנים נמחקים לפני אחסון קידומי המכירות שצוינו בהודעה הנוכחית:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<Discount percentage="10"/>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<Stacking type="base"/>
</Promotion>
</HotelPromotions>
</Promotions>
3 סוגים שונים של ערימה
בדוגמה הבאה מוצג מקרה שבו יחולו שלוש מבצעים שונים (base, second, any). שימו לב שהמבצע none לא יחול כי המבצעים האחרים מספקים הנחה גדולה יותר. אם המחיר המקורי היה 100$, המחיר המוזל יהיה 72.90$.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="second"/>
</Promotion>
<Promotion id="3">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="4">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
אין סוג ראש גלילי
בדוגמה הבאה מוצג מקרה שבו נעשה שימוש במבצע none כי השילוב של מבצעים אחרים מספק הנחה קטנה יותר. אם המחיר המקורי היה 100$, המחיר המוזל יהיה 75$.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="3">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Booking Window Duration Bounds
בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב BookingWindow עם גבולות ההתחלה והסיום שלו שמוגדרים כסוג משך זמן בפורמט ISO 8601. ההגבלה הזו על חלון ההזמנה מחייבת הזמנה עד השעה 18:00 ביום שלפני ההגעה, או החל מהשעה 12:00 ביום השני לפני ההגעה.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow min="P1DT6H" max="P2DT12H"/>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
תאריכי הזמנה, גבולות של תאריך ושעה
בדוגמה הבאה מוצג מקרה שבו נעשה שימוש ברכיב BookingDates עם המאפיינים start ו-end כסוגים DateTime. הגבלת תאריך ההזמנה הזו מחייבת שההזמנה תתבצע בין השעות 06:30 בתאריך 2020-07-01 לבין השעה 18:45 בתאריך 2020-07-02.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
</BookingDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
טווח תאריכים ללא שנה
בדוגמה הבאה אפשר לראות מקרה שבו רכיב CheckInDates מכיל DateRanges עם שדות start ו-end בלי שנים. בדוגמה הזו, המבצע תקף לתאריכי צ'ק אין בין 29 בדצמבר ל-2 בינואר, ללא קשר לשנה. טווח תאריכים ללא שנה שחוצה את הגבול של השנה החדשה הוא לא תקין, ולכן DateRange מוגדר כשני טווחי תאריכים סמוכים.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<CheckInDates>
<DateRange start="12-29" end="12-31"/>
<DateRange start="01-01" end="01-02"/>
</CheckInDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
הנחה על לילות חינם
בדוגמה הבאה, יש הנחה של 50% על שני לילות על כל ארבעה לילות שהייה בטווח התאריכים שצוין להזמנה. במסלול נסיעה של עשרה לילות, ארבעה לילות יקבלו הנחה של 50%.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2022-01-01" end="2022-05-31"/>
</BookingDates>
<Discount>
<FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
בדוגמה הבאה, יש הנחה של 50% על לילה אחד בכל שהייה של שלושה לילות בטווח התאריכים שצוין. רק לילות השהייה החופפים נספרים לצורך קבלת ההנחה. במסלול הנסיעה הבא עם צ'ק-אין בתאריך 2022-01-01 וצ'ק-אאוט בתאריך 2022-01-07, הלילות שעומדים בדרישות וההנחות חלים באופן הבא.
- 2022-01-01 (שהייה)
- 2022-01-02 (שהייה)
- 2022-01-03
- 2022-01-04 (בהנחה)
- 2022-01-05 (שהייה)
- 2022-01-06 (שהייה)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<StayDates application="overlap">
<DateRange start="2022-01-01" end="2022-01-02"/>
<DateRange start="2022-01-04" end="2022-01-06"/>
</StayDates>
<Discount>
<FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
בחירה לפי דירוג
בדוגמה הבאה מוצעות שתי הנחות, אחת של 20% ואחת של 15%. במהלך ההערכה, רק ההנחה של 15% מוחלת כי הדירוג שלה נמוך יותר.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="15" rank="25"/>
</Promotion>
<Promotion id="2">
<Discount percentage="20" rank="50"/>
</Promotion>
</HotelPromotions>
</Promotions>
BestDailyDiscount
בדוגמה הבאה מוצג הנחה על שהייה של שני לילות, שמתקבלת משילוב של BestDailyDiscount עם Discount.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="HotelID" action="overlay">
<Promotion id="general">
<BestDailyDiscount fixed_amount="20"/>
</Promotion>
<Promotion id="may">
<BestDailyDiscount fixed_amount="50"/>
<StayDates application="overlap">
<DateRange start="2023-05-01" end="2023-05-31"/>
</StayDates>
</Promotion>
<Promotion id="fiesta">
<Discount fixed_amount_per_night="5"/>
<Stacking type="any"/>
</Promotion>
</HotelPromotions>
</Promotions>
נניח שהתאריכים הם 30 באפריל 2023 עד 2 במאי 2023 (שהייה של שני לילות). כדי לחשב את ההנחה, המערכת קודם מוצאת את השילוב של ההנחות היומיות הכי טובות שנותן את ההנחה הכי גדולה.
בלילה הראשון, רק מבצע 'כללי' זמין עם הנחה קבועה של 20.
בלילה השני, ההנחה במבצע 'מאי' גבוהה יותר מההנחה במבצע 'כללי'. לכן, אם בוחרים באפשרות 'יכול להיות', סכום ההנחה הקבוע הוא 50.
אז במהלך השהייה, ההנחה של מבצע ה'פיאסטה' היא 5 ללילה, או 10 בסך הכול. אפשר לשלב אותו עם השילוב של ההנחות היומיות הכי טובות, כי סוג השילוב של המבצע fiesta מוגדר ל-any. אם הערך היה base, רק השילוב של ההנחות היומיות הכי טובות או ההנחה של ה-Fiesta היו חלים. מידע נוסף זמין בתיאור של Stacking.
`בסך הכול, מחיר השהייה כולל הנחה קבועה של 20 + 50 + 10 = 80.
תשובות
תחביר
ההודעה PromotionsResponse משתמשת בתחביר הבא:
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues are populated. -->
<Success/>
<Issues>
<Issue code="issue_code"
status="issue_type">
issue_description
</Issue>
</Issues>
</PromotionsResponse>
רכיבים ומאפיינים
ההודעה PromotionsResponse כוללת את הרכיבים והמאפיינים הבאים:
| רכיב / @מאפיין | מופעים | סוג | תיאור |
|---|---|---|---|
| PromotionsResponse | 1 | Complex element | רכיב הבסיס שמציין את ההצלחה או הבעיות בהודעת בקשת מבצעים שהתקבלה. |
| PromotionsResponse / @timestamp | 1 | DateTime | התאריך והשעה שבהם ההודעה נוצרה. |
| PromotionsResponse / @id | 1 | string | המזהה הייחודי מההודעה המשויכת של המבצע. |
| PromotionsResponse / @partner | 1 | string | חשבון השותף שאליו משויכת ההודעה. |
| PromotionsResponse / Success | 0..1 | Success | מציין שההודעה על המבצע עובדה בהצלחה
ללא אזהרות, שגיאות או כשלים.
הערך |
| PromotionsResponse / Issues | 0..1 | Issues | קונטיינר לבעיה אחת או יותר שזוהו במהלך עיבוד ההודעה של המבצעים.
הערך |
| PromotionsResponse / Issues / Issue | 1..n | Issue | תיאור של אזהרה, שגיאה או כשל שנתקלו בהם במהלך עיבוד הודעת המבצעים. פרטים על הבעיות האלה זמינים במאמר הודעות שגיאה לגבי סטטוס הפיד. |
| PromotionsResponse / Issues / Issue / @code | 1 | integer | המזהה של הבעיה. |
| PromotionsResponse / Issues / Issue / @status | 1 | enum | סוג הבעיה שנתקלתם בה. הערכים התקפים הם |
דוגמאות
הפעולה הצליחה
זוהי תגובה להודעת מבצעים שעברה עיבוד בהצלחה.
<?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>