תמחור & מלאי חדרים (עסקאות) XML עם הפניה

בדף הזה יש הפניה להודעות עסקאות שמבוססות על XML.

<Transaction>

רכיב הבסיס של הודעת עסקה הוא <Transaction>. זהו מאגר שמכיל מידע תיאורי על חדרים וחבילות, כולל מחירים וזמינות של חדרים וחבילות.

הרכיב <Transaction> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

בהודעות שמשתמשות ב-<Transaction> כרכיב ברמה הבסיסית (root) צריך לפחות רכיב צאצא אחד. הודעות על עסקאות יכולות לכלול כל מספר של רכיבי צאצא, כל עוד הגודל הכולל של ההודעה לא עולה על 100MB.

תחביר

הרכיב <Transaction> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">

  <!-- Defines data about a room or package (Room Bundle) -->
  <PropertyDataSet>
    ...
  </PropertyDataSet>

  <!-- Updates/sets prices and availability for rooms and Room Bundles -->
  <!-- (Also removes itineraries from inventory) -->
  <Result>
    ...
  </Result>

</Transaction>

מאפיינים

הרכיב <Transaction> כולל את המאפיינים הבאים:

מאפיין חובה? סוג תיאור
id Required string מזהה ייחודי לכל הודעת עסקה.
partner Optional string חשבון השותף שאליו שייכת ההודעה 'עסקה'. בדרך כלל משתמשים באפשרות הזו אם הקצה העורפי מספק פידים של מחירים למספר חשבונות שותפים. ערך המחרוזת הזה הוא הערך של 'מפתח שותף' שמופיע בדף הגדרות החשבון ב-Hotel Center.
timestamp Required DateTime

הרגע בזמן שבו נשלחה הודעת העסקה.

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

ההודעות מעובדות לפי סדר timestamp ולא לפי הסדר שבו התקבלו. לדוגמה: עדכון מחיר עם חותמת זמן של 2019-05-03 14:09:00 שהתקבלה אחרי הודעה עם חותמת זמן של 2019-05-03 14:10:00 עדיין יעובדו לפי הסדר, וייעשה שימוש במחיר מההודעה עם חותמת הזמן של 2019-05-03 14:10:00.

רכיבי צאצא

הרכיב <Transaction> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<PropertyDataSet> Optional* <PropertyDataSet>

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

<Result> Optional* <Result>

נתוני תמחור של תוכנית נסיעה של חדר או של רכיב <RoomBundle> שמגדיר חבילות חדרים וסוגים נוספים של חדרים בנכס. אפשר להשתמש ברכיב <Result> גם כדי להסיר מסלולי נסיעה מהמלאי.

* חובה למלא לפחות אחד מהערכים <PropertyDataSet> או <Result>.

דוגמאות

נתונים לגבי החדר

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>5440OF</RoomID>
      <Name>
        <Text text="Single King Bed Room" language="en"/>
        <Text text="Simple Lit de Roi" language="fr"/>
      </Name>
      <Description>
        <Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
          and down comforters (bedspreads). City view. 300 square feet. Desk with
          rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
          complimentary HBO and pay movies." language="en"/>
        <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Bathroom View" language="en"/>
          <Text text="La salle de baines" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Capacity>4</Capacity>
    </RoomData>
  </PropertyDataSet>
</Transaction>

נתוני תמחור

בדוגמה הבאה מוגדרים נתוני תמחור בהודעת עסקה:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

מחירים ללילה

בדוגמה הבאה מוגדרים נתוני תמחור של לילה אחד עד 7 לילות החל מ-7 ביוני 2023:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">209.99</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">419.98</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>3</Nights>
    <Baserate currency="USD">614.97</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>4</Nights>
    <Baserate currency="USD">819.96</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>5</Nights>
    <Baserate currency="USD">999.95</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>6</Nights>
    <Baserate currency="USD">1193.94</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>7</Nights>
    <Baserate currency="USD">1259.93</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
</Transaction>


תעריפים בסיסיים ותעריפים בלעדיים

בדוגמה הבאה מוצגת הודעת עסקה שמכילה את התעריף הבסיסי ותעריף מותנה:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

הסרת מלאי

בדוגמה הבאה מסירים מהמלאי כמה מלאים של שטחי פרסום (שהייה של לילה אחד בכמה תאריכים שונים):

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-23</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-24</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <!---Sending <Baserate> is optional with <Unavailable> -->
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-25</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">-1</Baserate>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
</Transaction>

<PropertyDataSet>

מאגר של מידע על חדר וחבילה (או חבילת חדר) בהודעה של <Transaction>. ערכים שמוגדרים ביחס לערכים של מלון מחליפים ערכים שמוגדרים אצל שותף. Google מאחסנת את המידע הזה כדי שלא תצטרכו להגדיר אותו בכל פעם שאתם שולחים עדכוני מחירים.

הרכיב <PropertyDataSet> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>  // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

מידע נוסף זמין במאמר בנושא מטא-נתונים של חבילת חדר.

תחביר

הרכיב <PropertyDataSet> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet>
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>hotel_ID</Property>

    <!-- (Optional) Defines metadata about a room -->
    <RoomData>
      ...
    </RoomData>

    <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) -->
    <PackageData>
      ...
    </PackageData>
  </PropertyDataSet>
  ...
</Transaction>

מאפיינים

לרכיב <PropertyDataSet> אין מאפיינים.

רכיבי צאצא

הרכיב <PropertyDataSet> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<PackageData> Optional* <PackageData> מיועד לתיאור חבילת חדר. הנתונים האלה משויכים לשותף ולמלון, אבל לא למסלול נסיעה. הרכיב הזה דומה ל-<RoomData>, אבל הוא מתאר שירותי מלון ומונחים שהם לא חלק מתיאור החדר הפיזי.

אתם מפנים למזהה החבילה בעדכוני התמחור.

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

<Property> Required string המזהה של מלון שהנתונים המשויכים שלו חלים עליו. הערך של הרכיב הזה חייב להיות מחרוזת שתואמת לכרטיס המוצר <id> בפיד של רשימת המלונות שלך.
<RoomData> Optional* <RoomData> מיועד לתיאור חדר. הנתונים האלה משויכים לשותף ולמלון, אבל לא למסלול נסיעה.

אתם מפנים למזהה החדר בעדכוני המחירים.

* חובה למלא לפחות אחד מהערכים <PackageData> או <RoomData>.

דוגמאות

נתונים לגבי חדרים וחבילות

בדוגמה הבאה מופיעים גם נתוני החדרים וגם נתוני החבילות ב-<PropertyDataSet>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

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

<RoomData>

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

הרכיב <RoomData> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

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

הרכיב <RoomData> דומה לרכיב <PackageData>, אבל הוא מתאר את החדר הפיזי ולא את שירותי המלון והתנאים של החבילה. אפשר להשתמש בשילוב של <RoomData> ו-<PackageData> כדי לספק פרטים על חבילות החדרים. לחדרים בודדים שאינם חלק מחבילה, יש להשתמש רק ב-<RoomData>.

אפשר להגדיר את הרכיבים <RoomData> ו-<PackageData> באותו חדר או באותה חבילת חדר. כש-Google תציג את החדר או החבילה בתוצאות החיפוש, היא תכלול את התיאורים משניהם, מופרדים במקף.

מידע נוסף זמין במאמר בנושא מטא-נתונים של חבילת חדר.

תחביר

הרכיב <RoomData> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet>
    ...
    <RoomData>
      <RoomID>room_ID</RoomID>

      <Name>
        <Text text="room_name" language="language_code"/>
        ...
      </Name>

      <Description>
        <Text text="room_description" language="language_code"/>
        ...
      </Description>

      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults, children, or seniors --></OccupancyDetails>
      <OccupancySettings>
        <MinOccupancy>min_number_of_occupants</MinOccupancy>
        <MinAge>min_age_of_occupants</MinAge>
      </OccupancySettings>

      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      <RoomFeatures>
        ...
      </RoomFeatures>
    </RoomData>
    ...
  </PropertyDataSet>
</Transaction>

מאפיינים

לרכיב <RoomData> אין מאפיינים.

רכיבי צאצא

הרכיב <RoomData> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<Capacity> Optional integer מספר האורחים המקסימלי שחדר יכול להכיל פיזית. בחדר, הקיבולת גדולה יותר ממספר האורחים או שווה לו.

אם מציינים את הערך הזה, הוא צריך להיות שווה לערך של הרכיב <Occupancy>, שהוא מספר האורחים המיועד לחדר מסוים, או גדול ממנו. לדוגמה, <Capacity> של סוויטה גדולה יכול להיות 6, אבל <Occupancy> עבורה הוא 4.

הערך של <Capacity> חייב להיות מספר שלם חיובי בין 1 ל-20, כולל.

<Description> Optional Object תיאור מפורט של החדר. הרכיב הזה צריך להכיל מידע שלא מתואר על ידי אלמנטים אחרים או על ידי הרכיב <Name>. אי אפשר להשתמש באותיות רישיות בלבד כשמציינים את תיאור החדר.

הרכיב <Description> מקבל רכיב צאצא יחיד, <Text>, עם שני המאפיינים הנדרשים הבאים:

  • text: תיאור מפורט של החדר.
  • language: קוד שפה בן שתי אותיות. לדוגמה, fr.

צריך להשתמש ברכיב <Text> נפרד לכל שפה שבה המודעה או הקישור ללא עלות לביצוע הזמנה עשויים להופיע (עם ערכים שונים למאפיינים language).

בדוגמה הבאה אפשר לראות גרסה של תיאור החדר בצרפתית ובאנגלית:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string שם הקטגוריה של החדר. הערך הזה צריך להתאים למה שמופיע בדף הנחיתה של המלון (לשעבר נקודת המכירה). אסור להגדיר את הערך של הרכיב הזה באותיות רישיות בלבד.

הרכיב הזה לוקח את רכיב הצאצא היחיד, <Text>, שכולל את שני המאפיינים הנדרשים הבאים:

  • text: שם החדר.
  • language: קוד שפה בן שתי אותיות. לדוגמה, fr.

צריך להשתמש ברכיב <Text> נפרד לכל שפה שבה המודעה או הקישור ללא עלות לביצוע הזמנה עשויים להופיע (עם ערכים שונים במאפייני language).

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

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer המספר המקסימלי של אורחים שהחדר מיועד להם. לדוגמה, סוויטה גדולה יכולה להכיל פיזית עד 6 אורחים (קיבולת = 6), אבל היא מיועדת ל-4 אורחים בלבד.

הערך הזה חייב להיות קטן מהערך <Capacity>, שהוא מספר האנשים שהחדר יכול להכיל אותו פיזית, או שווה לו.

הערך של <Occupancy> חייב להיות מספר שלם חיובי בין 1 ל-99, כולל.

יחד עם <Occupancy> עשוי להיות מלווה גם <OccupancyDetails>, שמציין את סוג האורחים (מבוגרים או ילדים). ב-<OccupancyDetails> תוכלו לראות תחביר ותיאור של רכיבי צאצא.

<OccupancySettings> Optional Object הגדרות שיכולות להגביל או לשנות את דרישות התפוסה בחדר.

הרכיב <OccupancySettings> לוקח את רכיבי הצאצא הבאים:

  • <MinOccupancy>: המספר המינימלי של אורחים שיכולים לשהות בחדר. לדוגמה, אם היא מוגדרת לערך 2, לא ניתן להזמין את החדר הזה לאורח אחד.

    הערך של <MinOccupancy> חייב להיות מספר שלם חיובי בין 1 ל-99, כולל.

  • <MinAge>: הגיל המינימלי לכל האורחים ששוהים בחדר. לדוגמה, אם הוא מוגדר ל-18, אפשר להזמין את החדר הזה רק לקבוצות שבהן כל המשתתפים הם מגיל 18 ומעלה.

    הערך של <MinAge> חייב להיות מספר שלם חיובי בין 0 ל-99, כולל.

<OccupancySettings>
  <MinOccupancy>2</MinOccupancy>
  <MinAge>16</MinAge>
</OccupancySettings>

לא צריך לכלול את כל רכיבי הצאצא.

<PhotoURL> Optional Object כתובת URL וכיתוב אופציונלי לתמונה של החדר או של חבילת החדר. אפשר לציין יותר משדה <PhotoURL> אחד לחדר או לחבילת חדר. כל כתובת URL של תמונה צריכה להיות ב-<PhotoURL> משלה.

הרכיב הזה לוקח את רכיבי הצאצא הבאים:

  • <URL>: מציין את המיקום של התמונה. המיקום צריך להיות ציבורי (לא מאחורי חומת אש) ועליו לכלול את הפרוטוקול (לדוגמה, https://). צריך להשתמש רק ב-<URL> אחד לכל <PhotoURL>.
  • <Caption>: הגדרת הכיתוב עבור התמונה. הרכיב הזה לוקח רכיב צאצא אחד, <Text>, שכולל שני מאפיינים נדרשים: text ו-language. המאפיין text הוא הכיתוב, והמאפיין language מציין קוד שפה בן שתי אותיות, כמו en.

דוגמה:

<PhotoURL>
  <URL>https://www.example.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures> Optional <RoomFeatures> מכיל מידע על תכונות החדר.
<RoomID> Required string המזהה הייחודי של החדר. אפשר להשתמש במזהה הזה כדי להתאים בין נתוני החדרים לבלוקים של <Result> בעדכוני המחירים שלך. לפרטים נוספים, ראו מטא-נתונים של חבילת חדר. (אפשר להשתמש במזהה הזה גם כדי להתייחס להגדרה של חדר משותף בהודעה אחת לגבי עסקה כשמגדירים בתוך השורה נתוני חדר).

דוגמאות

נתונים לגבי החדר

בדוגמה הבאה מוגדרים נתוני חדרים:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>5440OF</RoomID>
      <Name>
        <Text text="Single King Bed Room" language="en"/>
        <Text text="Simple Lit de Roi" language="fr"/>
      </Name>
      <Description>
        <Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
          and down comforters (bedspreads). City view. 300 square feet. Desk with
          rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
          complimentary HBO and pay movies." language="en"/>
        <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Bathroom View" language="en"/>
          <Text text="La salle de baines" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Capacity>4</Capacity>
    </RoomData>
  </PropertyDataSet>
</Transaction>

מטא-נתונים של חדרים וחבילות

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

חבילות של חדרים מרובים

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות בשביל כמה חבילות חדרים:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<RoomFeatures>

ההגדרה הזו מגדירה את התכונות שנמצאות בחדר.

הרכיב <RoomFeatures> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
            + <RoomFeatures>

תחביר

הרכיב <RoomFeatures> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    ...
    <RoomData>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="width"/>
             <Length unit="cm" number="length"/>
           </Bed>
           <!-- Include with any additional beds. -->
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>[shared|private]</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>[smoking|non_smoking]</Smoking>
        <BathAndToilet relation="[together|separate]">
          <Bath bathtub="[false|true]" shower="[false|true]"/>
          <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <!-- (Optional) Defines the type of views from the room. -->
          <!-- Example: <OceanView/> -->
        </Views>

      </RoomFeatures>
      ...
    </RoomData>
    ...
  </PropertyDataSet>
</Transactions>

מאפיינים

לרכיב <RoomFeatures> אין מאפיינים.

רכיבי צאצא

הרכיב <RoomFeatures> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<JapaneseHotelRoomStyle> Optional enum

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

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

  • western: חדר בסגנון מערבי עם מיטות.
  • japanese: חדר בסגנון יפני עם מיטות פוטון.
  • japanese_western: חדר בסגנון יפני בסגנון מערבי עם מיטות בסגנון מערבי ופוטונים בסגנון יפני.
<Beds> Optional Object מכיל את כמות הערכים של <Bed> שיש בחדר. לתשומת ליבך, הפוטונים היפני לא צריכים להיספר כאן.

לכל <Bed> יש את המאפיינים הבאים:

  • size (אופציונלי): הערכים החוקיים הם single, semi_double, double, queen ו-king.
כל <Bed> כולל את רכיבי הצאצא הבאים:
  • <Width> (אופציונלי): מציין את רוחב המיטה. חייב לכלול את המאפיין unit עם הערך cm ואת המאפיין number עם רוחב המיטה במספר שלם של סנטימטרים.
  • <Length> (אופציונלי): הערך הזה מציין את אורך המיטה. המאפיין unit חייב לכלול את הערך cm ואת המאפיין number עם אורך המיטה במספר סנטימטרים שלמים.
לדוגמה:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite> Optional empty צריך לספק את הרכיב הזה כשהחדר הזה הוא סוויטה.
<Capsule> Optional empty צריך לספק את הרכיב הזה כשהחדר הזה הוא חדר קפסולות.
<Roomsharing> Optional enum אם החדר הזה משותף עם אנשים אחרים, כמו בעלים או אורחים אחרים. הערכים החוקיים הם shared ו-private.
<Outdoor> Optional empty יש לספק את הרכיב הזה כאשר החדר נמצא בחוץ, ללא קירות קבועים, צנרת ובקרת אקלים. לדוגמה, חדרי מלון הם לא מקומות לינה בחוץ, ואילו אתרי קמפינג שבהם אורחים שוהים באוהלים ופארקי קרוואנים שבהם אורחים מביאים קרוואן משלהם הם לינה בחוץ.
<MobilityAccessible> Optional empty יש לספק את הרכיב הזה כשהחדר נגיש לנייד.
<Smoking> Optional enum האם החדר הזה הוא חדר ללא עישון או חדר עישון. הערכים המותרים הם non_smoking ו-smoking.
<BathAndToilet> Optional Object מכיל מידע על האמבטיה והשירותים בחדר.

המאפיין הוא:

  • relation (אופציונלי): מציין איך האמבטיה והשירותים מוצבים זה מול זה. הערכים החוקיים הם together (גם חדר האמבטיה וגם חדר השירותים ממוקמים יחד באותו חדר (למשל, חדר רחצה) זה לצד זה) ו-separate (בכל אחד מהחדרים יש חדרי אמבטיה ושירותים ייעודיים). אסור להגדיר את המאפיין הזה אם אין בחדר גם אמבטיה וגם אמבטיה.

הרכיב באופן אופציונלי לוקח את רכיבי הצאצא הבאים:

  • <Bath> (אופציונלי): עצם קיומו של הרכיב הזה מציין שבחדר יש אמבטיה.

    אלו המאפיינים:

    • bathtub (אופציונלי): מציין שבאמבטיה יש אמבטיה בחדר האמבטיה. הערכים החוקיים הם 0 (או false) ו-1 (או true).
    • shower (אופציונלי): מציין שבאמבטיה יש מקלחת. הערכים החוקיים הם 0 (או false) ו-1 (או true).
  • <Toilet> (אופציונלי): אם יש אלמנט כזה, המשמעות היא שבחדר הזה יש אסלה.

    אלו המאפיינים:

    • electronic_bidet (אופציונלי): מציין שבאסלה יש בידה אלקטרונית. הערכים החוקיים הם 0 (או false) ו-1 (או true).
    • mobility_accessible (אופציונלי): מציין שהשירותים נגישים. הערכים החוקיים הם 0 (או false) ו-1 (או true).

דוגמה:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty יש לספק את הרכיב הזה כאשר בחדר הזה יש אמבטיה פרטית בחוץ.
<AirConditioning> Optional empty יש לספק את הרכיב הזה כשיש מיזוג אוויר בחדר.
<Balcony> Optional empty יש לספק את הרכיב הזה כאשר בחדר הזה יש מרפסת או מרפסת.
<Views> Optional Object האפשרויות החוקיות כוללות:

<AirportView/>
<BayView/>
<BeachView>/>
<CastleView/>
<CityView/>
<CountrysideView/>
<CourtyardView/>
<DuneView/>
<ForestView/>
<GardenView/>
<GolfCourseView/>
<HarborView/>
<LagoonView/>
<LakeView/>
<MarinaView/>
<MountainView/>
<NatureView/>
<OceanView/>
<ParkView/>
<PartialOceanView/>
<PisteView/>
<PoolView/>
<PyramidView/>
<RiverView/>
<StreetView/>

דוגמאות

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

שתי מיטות יחיד

הדוגמה הבאה מראה איך להשתמש ב-<RoomFeatures>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two single beds -->
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>private</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>non_smoking</Smoking>
        <BathAndToilet relation="separate">
          <Bath bathtub="1" shower="1"/>
          <Toilet electronic_bidet="1" mobility_accessible="1"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <LakeView/>
          <MarinaView/>
          <BeachView/>
          <ForestView/>
          <MountainView/>
          <NatureView/>
        </Views>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

שתי מיטות זוגיות

זו דוגמה לחדר יפני בסגנון western עם שתי מיטות מסוג double.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two double beds-->
          <Bed size="double"></Bed>
          <Bed size="double"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>


סגנון יפני בלי מיטה

הדוגמה הבאה היא לחדר בסגנון יפני ללא מיטה. אין צורך בפרטי המיטה בחדר בסגנון japanese.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

מערבון יפני עם מיטה

הדוגמה הבאה היא לחדר בסגנון japanese_western עם מיטה בגודל king.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
        <Beds>
          <Bed size="king"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

אם לשותף אין את מספר המיטות בחדרים ב-japanese_western, אפשר לפעול לפי הדוגמה הבאה:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

<PackageData>

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

הרכיב <PackageData> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

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

אפשר להגדיר את שני הרכיבים: <RoomData> ו-<PackageData> באותו חדר או בחבילה של חדר. כש-Google תציג את החדר או החבילה בתוצאות החיפוש, היא תכלול את התיאורים משניהם, מופרדים במקף.

אם אתם מעדכנים רכיב <PackageData> אחד בנכס, צריך לעדכן את כל הרכיבים של <PackageData> ו-<RoomData> של הנכס. כל <PropertyDataSet> נחשב לכל הנתונים של הנכס, ומחליף את כל הנתונים הקיימים.

מידע נוסף זמין במאמר בנושא מטא-נתונים של חבילת חדר.

תחביר

הרכיב <PackageData> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    <PackageData>
      <PackageID>package_ID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
        ...
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
        ...
      </Description>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
      <!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      ...
      <Meals>
        <Breakfast
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
        <Dinner
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
      </Meals>
      <CheckinTime>checkin_time</CheckinTime>
      <CheckoutTime>checkout_time</CheckoutTime>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Special Rewards">
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum">
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <!-- a PackageID with a MilesIncluded rate feature -->
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
       <Text text="Room with Bundled Miles" language="en">
      </Name>
      <ChargeCurrency>hotel </ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000 </NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines">
        </Provider>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

מאפיינים

לרכיב <PackageData> אין מאפיינים.

רכיבי צאצא

הרכיב <PackageData> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<BreakfastIncluded> Optional boolean השדה הזה מציין אם החבילה הזו כוללת ארוחת בוקר עם התעריף. הערכים החוקיים הם 0 (או false) ו-1 (או true).

עדיף להשתמש ב-<Meals> במקום ב-<BreakfastIncluded>.

<ChargeCurrency> Optional enum מתי ואיפה המשתמש משלם על הזמנה. התחביר של הרכיב הזה זהה לזה של <ChargeCurrency> ב-<Result>.

ערך ברירת המחדל הוא web.

<CheckinTime> Optional Time שעת הצ'ק-אין המוקדמת ביותר. השעה חייבת להיות פחות מ-24:00 לפי השעון המקומי של המלון.
<CheckoutTime> Optional Time שעת הצ'ק אאוט האפשרית בזמן המקומי של המלון.
<Description> Optional Object תיאור מפורט של החבילה. הרכיב הזה צריך להכיל מידע שלא מתואר על ידי אלמנטים אחרים או על ידי הרכיב <Name>. אי אפשר להשתמש באותיות רישיות בלבד כשמציינים את תיאור החדר.

הרכיב <Description> מקבל רכיב צאצא יחיד, <Text>, שיש לו שני מאפיינים נדרשים: text ו-language. המאפיין text הוא התיאור, והמאפיין language מציין קוד שפה בן שתי אותיות, כפי שמוצג בדוגמה הבאה:

<Description>
  <Text text="Two breakfast buffet certificates for
    each night of stay." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet
    pour chaque nuit de séjour." language="fr"/>
</Description>
<InternetIncluded> Optional boolean אם חבילה כוללת גישה לאינטרנט ללא תשלום, וחבילות אחרות לא יכללו את השירותים האלה. אין להגדיר את האלמנט הזה לחבילות חדרים במלון שמספק אינטרנט בחינם לכל החדרים. הרכיב הזה לא רלוונטי לאינטרנט קווי בתוך החדר או לאינטרנט אלחוטי שלא זמין בחדרי האורחים. הערכים החוקיים הם 0 (או false) ו-1 (או true).
<Meals> Optional Object מכיל מידע על הארוחות בחבילה הזו.

הרכיב <Meals> כולל שני רכיבי צאצא אופציונליים, <Breakfast> ו-<Dinner>, שכוללים את המאפיינים הבאים:

  • included (חובה): מגדירים ל-1 (או true) אם התעריף כולל ארוחת בוקר/ארוחת ערב. אחרת, מוגדר ל-0 או ל-false.
  • in_room (אופציונלי): מגדירים את הערך 1 (או true) אם יש לאורחים אפשרות לאכול ארוחת בוקר או ארוחת ערב בחדר שבו הם שוהים . אחרת, מגדירים את הערך 0 (או false).
  • in_private_space (אופציונלי): מגדירים את הערך 1 (או true) אם יש לאורחים אפשרות לאכול ארוחת בוקר או ארוחת ערב במרחב משותף (חוץ מאשר בחדר שבו הם שוהים) שבו הם יכולים להימנע מיצירת קשר עם אורחים אחרים. אחרת, הערך מוגדר ל-0 (או false).
  • buffet (אופציונלי): מגדירים לערך 1 (או true) אם ארוחת בוקר/ארוחת ערב מוגשות בסגנון מזנון. אחרת, מוגדר לערך 0 (או false).

המאפיינים האופציונליים משמשים רק אם הערך של included הוא True.

כדי שמסנני ארוחות (no meals, breakfast only, dinner only ו-breakfast and dinner) יפעלו, צריך לספק גם <Breakfast> וגם <Dinner> באמצעות המאפיין included.

<Name> Required string שם החבילה. הערך הזה צריך להתאים למה שמופיע בדף הנחיתה של המלון. חשוב לא להגדיר את ערך הרכיב הזה באותיות גדולות בלבד.

הרכיב הזה לוקח רכיב צאצא אחד, <Text>, שיש לו שני מאפיינים: text ו-language. המאפיין text הוא התיאור, והמאפיין language מציין קוד שפה בן שתי אותיות, כפי שמוצג בדוגמה הבאה:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<Occupancy> Optional integer המספר המקסימלי של אורחים שחבילת חדרים מסוימת מיועדת להם. לדוגמה, סוויטה גדולה יכולה להכיל פיזית 6 אורחים, אבל היא מיועדת ל-4 אורחים בלבד.

הערך הזה חייב להיות קטן מהערך <Capacity>, שהוא מספר האנשים שהחדר יכול להכיל אותו פיזית, או שווה לו.

הערך של <Occupancy> חייב להיות מספר שלם חיובי בין 1 ל-99, כולל.

אם מציינים את הרכיב הזה גם ב-<RoomBundle> וגם ב-<PackageData>, הערך ב-<RoomBundle> מקבל קדימות.

הערה:

יחד עם <Occupancy>, עשוי להופיע גם <OccupancyDetails>, שמציין את סוג האורחים (מבוגרים או ילדים). ב-<OccupancyDetails> תוכלו לראות את התחביר והתיאור של רכיבי הצאצא.
<PackageID> Required string

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

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

<ParkingIncluded> Optional boolean האם חבילת חדרים כוללת חניה ללא תשלום, כאשר החניה לא תהיה בתשלום, למשל. אין לציין ערך לרכיב הזה עבור מלון שמוצע בו חניה בחינם.

הערכים החוקיים הם 0 (או false) ו-1 (או true). ערך ברירת המחדל הוא false.

<PhotoURL> Optional Object (כמו <PhotoURL> בתמונות <RoomData>, אבל לגבי החבילה (למשל, תמונות של הארוחה).)
<Refundable> Optional Object מאפשרת לציין מחיר שכולל החזר כספי מלא או ביטול בחינם. אם לא תספקו את המידע הזה, לא יוצג מידע על ההחזר הכספי. מדיניות החזרים כספיים ברמת <PackageData> מבטלת את מדיניות ההחזרים הכספיים ברמת <Result>. מדיניות החזרים כספיים ברמת <Rates> מבטלת את מדיניות ההחזרים הכספיים ברמת <PackageData>. אפשר גם להדגיש למשתמשים מחירים עם אפשרויות להחזר כספי באמצעות אפשרויות חלופיות, בלי לשנות ישירות את סכימת ההודעות על עסקאות. מידע נוסף על האפשרויות האלה זמין במדיניות בנושא מחירים עם אפשרויות להחזר כספי.

בדוגמה הבאה מוצג הרכיב <Refundable> עם כל המאפיינים שהגדרתם:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

אם לא יוגדרו מאפיינים, לא יוצג מחיר עם החזר כספי. אלו המאפיינים:

  • available: (חובה) מגדירים את הערך 1 או true כדי לציין אם התעריף מאפשר החזר כספי מלא. אחרת, מוגדר לערך 0 או false.
  • refundable_until_days: (חובה אם הערך של available הוא true) מציין את מספר הימים לפני הצ'ק-אין שבהם אפשר לבקש החזר כספי מלא. הערך של refundable_until_days חייב להיות מספר שלם בין 0 ל-330, כולל.
  • refundable_until_time: (מומלץ מאוד אם הערך של available הוא true) מציין את השעה המאוחרת ביותר ביום, בזמן המקומי של המלון, אם הבקשה להחזר כספי מלא תכובד. אפשר לשלב את הסכום הזה עם refundable_until_days כדי לציין, לדוגמה, ש'החזרים כספיים זמינים עד 16:00 יומיים לפני הצ'ק-אין'. אם לא מגדירים את refundable_until_time, ברירת המחדל של הערך תהיה חצות.

    הערך של המאפיין הזה מופיע בפורמט Time.

כשמגדירים את המאפיינים, חשוב לשים לב לנקודות הבאות:

  • אם לא מגדירים את הערך available או את refundable_until_days, לא מופיע החזר כספי על המחיר.
  • אם הערך של available הוא 0 או false, המערכת מתעלמת משאר המאפיינים. גם אם אחד מהמאפיינים האחרים או שניהם מוגדרים, לא יוצג מחיר כזה עם החזר כספי.
<MembershipBenefits Included> Optional boolean המחיר כולל הטבות של סטטוס עילית למשך השהייה. כוללת את הפרמטרים הבאים:
  • ProgramName: השם של תוכנית הסטטוס היוקרתי
  • ProgramLevel: הרמה בתוכנית. לדוגמה: "זהב".
  • NightlyValue (optional): ערך ללילה של ההטבות.
<CarRentalIncluded> Optional boolean המחיר כולל השכרת רכב בחינם למשך השהייה.
<MilesIncluded>> Optional boolean המחיר כולל מיילים של נוסע מתמיד. הפרמטרים כוללים:
  • NumberofMiles: מספר המיילים בכל מסלול.
  • Provider: מיילים של נוסע מתמיד יכולים לספק נתונים.
<OnPropertyCredit> Optional boolean המחיר כולל זיכוי לפרסום עתידי (F&B, אתר נופש, ספא וכו'). פרמטר:
  • Amount: ערך הזיכוי לכל מסלול נסיעה, במטבע מקומי.
<AirportTransportationIncluded> Optional Object המחיר כולל הסעות בחינם אל נמל תעופה בקרבת מקום או ממנו. המאפיין האופציונלי direction מציין את הכיוון של התחבורה. הערכים החוקיים כוללים:
    from: התחבורה הציבורית מספקת את התחבורה הציבורית מנמל התעופה אל הנכס. זהו ערך ברירת המחדל אם לא צוין כיוון. to: אפשר לקבל תחבורה אל נמל התעופה מהנכס. round_trip: יש תחבורה אל נמל התעופה וממנו.

דוגמאות

חבילת חדר ליחיד

בדוגמה הבאה מוגדרת חבילת חדר אחת, ויכולים ללון בה 2 אורחים (מבוגר אחד וילד אחד) וכוללת ארוחת בוקר:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>1</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <PackageID>P54321</PackageID>
      <Name>
         <Text text="Breakfast Included" language="en"/>
         <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Two certificates for continental
          breakfast will be provided." language="en"/>
        <Text text="Deux certificats pour le petit déjeuner
          continental seront fournis." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

מטא-נתונים של חדרים וחבילות

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

חבילות של חדרים מרובים

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות בשביל כמה חבילות חדרים:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>


חבילת חדרים עם מחירים

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות בחבילת חדרים עם תכונות של תעריפים:

<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
     ...
    </RoomData>
<!-- definitions of PackageData types including rate features -->
    <PackageData>
      <PackageID>room_with_addl_benefits</PackageID>
      <Name>
        <Text text="Acme Hotels 2017 Promotion Package" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <BreakfastIncluded>1</BreakfastIncluded>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Marriott Rewards"/>
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum"/>
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
        <Text text="Room with Bundled Miles" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000</NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines"/>
        </Provider>
      </MilesIncluded>
      <AirportTransportationIncluded direction="from"/>
    </PackageData>
  </PropertyDataSet>

<!-- The actual list of prices -->
  <Result>
…
  </Result>
</Transaction>

ארוחות ותמונות

בדוגמה הבאה מוגדרים מטא-נתונים של חדרים וחבילות לארוחות, לתמונות ולשעות הצ'ק-אין והצ'ק-אאוט:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Meals Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <!-- Guests can choose to have breakfast in their room or in another
        space to avoid contact with other guests. -->
        <Breakfast included="1" in_room="1" in_private_space="1"/>
        <Dinner included="1" buffet="1"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

ארוחת בוקר

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <Breakfast included="true"/>
        <!-- Dinner not included needs to be explicitly specified -->
        <Dinner included="false"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<Result>

מאגר לעדכוני תמחור וזמינות בהודעת <Transaction>.

הרכיב <Result> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

משתמשים ב-<Result> כדי להגדיר או לעדכן מחירי חדרים ולהגדיר מלאי זמין. הפריטים שמוגדרים באלמנט הזה בדרך כלל מפנים למטא-נתונים של חדר או חבילה (כמו תיאור או קבוצת שירותי) שמוגדרים ב-<PackageData> וב-<RoomData>, שלא תלויים בתוכנית.

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

אפשר להשתמש ב-<Result> בהודעה על העסקה כדי להסיר מסלולי נסיעה, כפי שמתואר במאמר הסרה של מלאי שטחי פרסום. למידע נוסף על השימוש בהודעות על עסקאות לעדכון מחירים וזמינות, הוספה ועדכון של מלאי.

הודעת עסקה אחת יכולה לכלול כל מספר של רכיבי <Result>, כל עוד גודל ההודעה לא עולה על 100MB.

תחביר

הרכיב <Result> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <!-- Required -->
    <Property>hotel_ID</Property>
    <!-- Required -->
    <Checkin>YYYY-MM-DD</Checkin>
    <!-- Required -->
    <Nights>number_of_nights</Nights>

    <Baserate currency="currency_code">price</Baserate>
    <!-- Only required when <Baserate> contains a real price -->
    <Tax currency="currency_code">tax_amount</Tax>
    <!-- Only required when <Baserate> contains a real price  -->
    <OtherFees currency="currency_code">fee_amount</OtherFees>
    <Refundable available="[false|true]" refundable_until_days="number_of_days"
      refundable_until_time="time"/>

    <RoomID>room_ID</RoomID>
    <PackageID>package_ID</PackageID>
    <ExpirationTime>expiration_time</ExpirationTime>
    <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>

    <Occupancy>max_number_of_intended_occupants</Occupancy>
    <!-- For Baserate, occupancy value must be greater than or equal to 2.
         If a value is not provided for occupancy, it defaults to 2. -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

    <AllowablePointsOfSale>
      <PointOfSale id="landing_page_identifier"/>
      ...
    </AllowablePointsOfSale>

    <Custom[1-5]>custom_value</Custom[1-5]>
  </Result>
  ...
  </Transaction>

מאפיינים

הרכיב <Result> כולל את המאפיינים הבאים:

מאפיין חובה? סוג תיאור
mergeable Optional boolean כברירת מחדל, מחירים חדשים לצמד ספציפי של מלון ומסלולי נסיעה יחליפו את כל המחירים הקודמים (שאין בהם תוקף) ששמורים במטמון של Google. המאפיין שניתן למזג מאפשר לשמור מחירים נוספים במטמון של Google בלי למחוק את פרטי התמחור הקודמים. שאילתת תמחור בזמן אמת עם תשובות לפי הקשר תמיד תקבל את המאפיין הזה מוגדר כ-true (ללא קשר לתשובה שלך להודעה על העסקה).

רכיבי צאצא

הרכיב <Result> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<AllowablePointsOfSale> Optional Object דף נחיתה אחד או יותר שעומדים בדרישות של המלון. דף נחיתה הוא אתר שיכול לטפל בתהליך ההזמנה עבור משתמש הקצה. כדי לכלול דף נחיתה מסוים באופן מפורש (ולהחריג אחרים), צריך להוסיף בקובץ דפי הנחיתה רכיב <AllowablePointsOfSale> אחד או יותר שתואמים למאפיין id של הרכיב <PointOfSale>.

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

<Baserate> Optional float

מחיר החדר לשהייה. הערך של הרכיב הזה צריך לשקף את הערך הבא:

  • בחדר פרטי, צריך להגדיר את התעריף לחדר זוגי הזול ביותר שהעסק מציע. אפשר לבחור כאן תעריפים לחדרים גבוהים יותר אם אין לך תעריף לחדר זוגי, ובחשבון הופעלו תעריפים לחדרים לא זוגיים. כדי להפעיל תעריפים לחדרים לא זוגיים, צריך ליצור איתנו קשר. אסור לציין כאן תעריפים לחדרים ליחידים – הם חייבים להיות מוגדרים כ-<Rates>.
  • אם משתמשים בחדר משותף, צריך להשאיר את השדה ריק ולהשתמש ב-<RoomBundle>.
  • הערך הזה צריך להיות מחיר הבסיס הכולל לכל הלילות, ולא המחיר הממוצע ללילה.

כשהחדר לא זמין במסלול הנסיעה, צריך להשמיט את <Baserate> או להגדיר אותו בתור -1, ולציין את <Unavailable> ואת כל הסיבות הידועות לאי-זמינות.

כדי להסיר חבילת חדר, תוכלו להיעזר בהוראות שבמאמר הסרה של חבילת חדר.

השדה <Baserate> לא יכול להכיל סמלי קיבוץ של ספרות, כמו פסיק (,) או נקודה (.). צריך תמיד להפריד בין שברים באמצעות נקודה (.) כסימן העשרוני. לדוגמה, מייצגים את הסכום 1,200.40 $באופן הבא:

<Baserate currency="USD">1200.40</Baserate>

הרכיב <Baserate> כולל את המאפיינים האופציונליים הבאים:

  • all_inclusive: ערך בוליאני שמציין אם המחיר הזה כולל מיסים ועמלות. באופן כללי, צריך להגדיר את הערך הזה כ-false למשתמשי קצה בארה"ב ובקנדה, ולספק ערכים לרכיבים <Tax> ו-<OtherFees>. אם בחרת להשתמש במחירי הכול כלול, יכול להיות שלא תהיה לך אפשרות להופיע בכרטיסי המוצר אם המחירים לא כוללים מיסים ועמלות למשתמשים בקנדה.

    מחירים מסוג 'הכול כלול' מוצגים עכשיו למשתמשים בארה"ב.

    לגבי כל שאר משתמשי הקצה, בדרך כלל כוללים את המיסים והעמלות בתעריף הבסיסי ומגדירים את ערך המאפיין all_inclusive ל-true. מידע נוסף זמין במדיניות בנושא מיסים ועמלות.

    ערך ברירת המחדל הוא false.

  • currency: קוד המטבע בן שלוש האותיות. לדוגמה, USD לדולר ארה"ב.
<ChargeCurrency> Optional enum מתי ואיפה המשתמש משלם על הזמנה. אפשר להשתמש ברכיב הזה בהודעה על העסקה ברכיב <Result> במחיר המלון, או בבלוק <PackageData> עבור חבילת חדרים.

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

  • web: המשתמש מחויב אונליין בזמן ההזמנה. זהו ערך ברירת המחדל. דף הנחיתה בפועל מוגדר באמצעות קובץ דף הנחיתה, ויכול להיות מושפע מהמטבע, המיקום, השפה או גורמים אחרים של המשתמש.
  • hotel: המשתמש מחויב לעשות צ'ק-אין במלון. אם צריך לבצע תמיד את התשלום במטבע של המלון, צריך להגדיר את הערך של <ChargeCurrency> כ-hotel. דף הנחיתה בפועל לא מושפע מהמטבע של המשתמש.
  • deposit: המשתמש מחויב בחלק מסוים באופן מיידי והשארת מחויב במועד מאוחר יותר, בדרך כלל כשהמשתמש יוצא מהמלון.
  • installments: המשתמש מחויב בחלק ראשוני מהסכום הכולל לתשלום, והוא צפוי לשלם באופן קבוע יתרה קבועה לאורך תקופת זמן קבועה.

ערך ברירת המחדל הוא web.

<Checkin> Required Date תאריך הצ'ק אין של מסלול נסיעה בפורמט תאריך. השילוב של הרכיב <Nights> והרכיב <Checkin> יוצרים מסלול נסיעה.
<Custom[1‑5]> Optional string מגדיר שדה בהתאמה אישית שאפשר להשתמש בו כדי להעביר נתונים נוספים שמשויכים למלון. אפשר להעביר עד חמישה ערכים מותאמים אישית עם שמות הרכיבים הבאים:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

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

רכיבי <Custom> שצוינו ברכיב <Rate> לא עוברים בירושה לרכיב <RoomBundle>. צריך להגדיר את המאפיין <Custom> בנפרד בכל <RoomBundle>.

<ExpirationTime> Optional DateTime התאריך והשעה שבהם המחיר נחשב בתוקף (3 שעות לפחות).

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

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

<Nights> Required integer מספר הלילות במסלול נסיעה. הערך של הרכיב <Nights> חייב להיות מספר שלם חיובי. השילוב של <Nights> ו-<Checkin> הוא מסלול נסיעה.
<OtherFees> Optional float עמלות אחרות מלבד התעריף הבסיסי והמיסים שמשפיעים על המחיר הסופי של החדר. הרכיב <OtherFees> מקבל מאפיין חובה אחד, currency, שמגדיר את קוד המטבע בן שלוש האותיות של העמלות. לדוגמה, USD.

הרכיב <OtherFees> נדרש אם הערך של <Baserate> גדול מאפס.

<Occupancy> Optional integer מציינת את מספר האורחים המקסימלי המותר לתעריף הזה. כשהערך של <Occupancy> מופיע ישירות מתחת לערך <Result>, צריך לציין בו 2 או יותר. ייתכן שלא יחד עם <Occupancy> יופיע גם <OccupancyDetails>, שמציין את סוג האורחים (מבוגרים או ילדים). אם לא מציינים סוגי אורחים, הם נחשבים לאנשים מבוגרים. למידע על התחביר והתיאור של רכיבי צאצא, אפשר להיעזר ב-<OccupancyDetails>. אם לא תספקו את הרכיב <Occupancy>, התפוסה תוגדר כברירת מחדל בתור 2.

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

<PackageID> Optional string המזהה הייחודי של החבילה שצריך למפות אותה לנתוני חבילה מוגדרים מראש. משמש גם לאכלוס המשתנה של דף הנחיתה PACKAGE-ID. למידע נוסף, קראו את המאמר המטא-נתונים של חבילת החדרים.
<Property> Required string המזהה של מלון שהושפע מהנתונים המשויכים (מחיר, מסלול נסיעה, חבילת חדר או מטא-נתונים). הערך של הרכיב הזה חייב להיות מחרוזת. הערך של הרכיב הזה חייב להתאים לכרטיס <id> שהגדרתם בפיד של רשימת המלונות.
<Rates> Optional <Rates> מאגר לבלוק <Rate> אחד או יותר. לכל <Rate> ב-<Rates> מוגדר מחיר שונה לשילוב של החדר/התוכנית.

אפשר להשתמש ברכיב <Rates> כשיש כמה תעריפים לאותו חדר או תוכנית נסיעה, או אם אי אפשר לציין מחיר ברמת <Result>. לדוגמה, מגדירים כמה תעריפים ל תעריפים בלעדיים, ל תעריפים פרטיים, לתעריפים בלעדיים בחבילות חדרים או לאירוח שונה.

הערה: בטווח של <Result>, אפשר לציין תעריפים לחדרים ליחידים רק ב<Rates>. אפשר ליצור איתנו קשר כדי לאשר מחירים לחדרים לא זוגיים.

<Refundable> Optional Object מאפשרת לציין מחיר שכולל החזר כספי מלא או ביטול בחינם. אם לא תספקו את המידע הזה, לא יוצג מידע על ההחזר הכספי. מדיניות החזרים כספיים ברמת <PackageData> מבטלת את מדיניות ההחזרים הכספיים ברמת <Result>. מדיניות החזרים כספיים ברמת <Rates> מבטלת את מדיניות ההחזרים הכספיים ברמת <PackageData>. אפשר גם להדגיש למשתמשים מחירים עם אפשרויות להחזר כספי באמצעות אפשרויות חלופיות, בלי לשנות ישירות את סכימת ההודעות על עסקאות. מידע נוסף על המדיניות בנושא מחירים עם אפשרויות להחזר כספי

בדוגמה הבאה מוצג הרכיב <Refundable> עם כל המאפיינים שהגדרתם:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

אם לא יוגדרו מאפיינים, לא יוצג מחיר עם החזר כספי. אלו המאפיינים:

  • available: (חובה) מגדירים ל-1 (או true) כדי לציין אם התעריף מאפשר החזר כספי מלא. אחרת, מוגדר ל-0 (או false).
  • refundable_until_days: (חובה אם הערך של available הוא true) מציין את מספר הימים לפני הצ'ק-אין שבהם אפשר לבקש החזר כספי מלא. הערך של refundable_until_days חייב להיות מספר שלם בין 0 ל-330, כולל.
  • refundable_until_time: (מומלץ מאוד אם הערך של available הוא true) מציין את השעה המאוחרת ביותר ביום, בזמן המקומי של המלון, אם הבקשה להחזר כספי מלא תכובד. אפשר לשלב את הסכום הזה עם refundable_until_days כדי לציין, לדוגמה, ש'החזרים כספיים זמינים עד 16:00 יומיים לפני הצ'ק-אין'. אם לא מגדירים את refundable_until_time, ברירת המחדל של הערך תהיה חצות.

    הערך של המאפיין הזה מופיע בפורמט Time.

כשמגדירים את המאפיינים, חשוב לשים לב לנקודות הבאות:

  • אם לא מגדירים את הערך available או את refundable_until_days, לא מופיע החזר כספי על המחיר.
  • אם הערך של available הוא 0 (או false), המערכת מתעלמת משאר המאפיינים. גם אם אחד מהמאפיינים האחרים או שניהם מוגדרים, לא יוצג מחיר כזה עם החזר כספי.
<RoomBundle> Optional <RoomBundle> מאגר למידע על תיאורים פיזיים של מחירים של חדר, אריזות של שירותי המלון וחלק מהפרטים של מדיניות הרכישה של המלון ושל מסלול הנסיעה הנתונים.

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

<RoomID> Optional string המזהה הייחודי של החדר, כדי למפות אותו לנתוני החדר שהוגדרו מראש. משמש גם לאכלוס המשתנה של דף הנחיתה PARTNER-ROOM-ID. למידע נוסף, קראו את המאמר המטא-נתונים של חבילת החדרים.
<Tax> Optional float המיסים שמחושבים לפי המחיר הסופי של החדר. הרכיב <Tax> מקבל מאפיין חובה אחד, currency, שמגדיר את קוד המטבע בן שלוש האותיות עבור המיסים. לדוגמה, USD. הרכיב <Tax> נדרש אם הערך של <Baserate> גדול מאפס.
<Unavailable> Optional Object מציין שמסלול הנסיעה לא זמין להזמנה. משמשת כמאגר סיבות מפורטות יותר לכך שמסלול הנסיעה לא היה זמין. יכול להיות שאחת או יותר מהסיבות הבאות לאי-זמינות יופיעו מתחת לתג <Unavailable>:
  • <NoVacancy/>: אין עוד חדרים זמינים למכירה ללילה אחד או יותר של שהייה.
  • <MinNightStay value=N/>: מסלול הנסיעה היה נמוך מהשהייה המינימלית של N בלילה בתאריכי השהייה.
  • <MaxNightStay value=N/>: מסלול הנסיעה היה גבוה ממספר הלילה המקסימלי של N בתאריכי השהייה.
  • <MinAdvancePurchase value=N/>: מסלול הנסיעה היה נמוך מחלון השהייה המינימלי להזמנה מראש, של N, בתאריכי השהייה.
  • <MaxAdvancePurchase value=N/>: מסלול הנסיעה היה גבוה מחלון ההזמנה מראש המקסימלי של N לתאריכי השהייה.
  • <ClosedToArrival/>: בנכס אי אפשר לעשות צ'ק-אין בתאריך ההגעה של מסלול הנסיעה.
  • <ClosedToDeparture/>: בנכס לא ניתן לבצע צ'ק-אאוט בתאריך היציאה של מסלול הנסיעה.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: הנכס סגור במהלך השהייה או בחלק ממנה. המאפיינים המומלצים first_open ו-first_closed מציינים את התאריכים הראשונים שבהם הנכס פתוח או סגור, או גדול ממנו, בהתאמה. בנכס שנסגר אחרי תאריך ההגעה, הערך first_open צריך להיות שווה לתאריך ההגעה, ו-first_closed צריך להיות התאריך שבו הנכס נסגר. עבור נכס שסגור בתאריך ההגעה, הערך first_closed צריך להיות זהה לתאריך ההגעה, ו-first_opened צריך להיות התאריך הבא שבו הנכס פתוח.
  • <NotFetched/>: לא צוין מחיר של מסלול הנסיעה על ידי מקורות נתונים במורד הזרם (downstream).
  • <InvalidProperty/>: מזהה הנכס המבוקש לא זוהה.
  • <InvalidOccupancy/>: מספר האורחים המבוקש לא נתמך בנכס.
  • <PriceIssue/>: יש בעיה במחיר שגרמה לכך שהמחיר לא נשלח.
  • <InternalError reason=""/>: אירעה שגיאה שלא צוינה. מאפיין הסיבה האופציונלי יכול לדווח על השגיאה כטקסט.
  • <OtherRestriction restriction=""/>: מסלול הנסיעה לא היה זמין בגלל מגבלות הזמנה שלא צוינו. מאפיין הגבלה אופציונלי מאפשר לדווח על ההגבלה כטקסט.

דוגמאות

דוגמה לשימוש בכמה נכסים

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

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

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

דוגמה של תעריפים מרובים

בדוגמה הבאה מוגדרים מסלול נסיעה יחיד ונכס עם כמה תעריפים לנוסעים שונים. אפשר להשתמש ברכיב <Rates> כדי לספק תמחור עם מספר תעריפים לנכס ספציפי. הדוגמה הבאה שימושית גם לנכסים של יחידות אירוח (VR):

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2021-01-13</Checkin>
    <Nights>9</Nights>
    <Baserate currency="USD">3196.1</Baserate>
    <Tax currency="USD">559.49</Tax>
    <OtherFees currency="USD">543.34</OtherFees>
    <Occupancy>2</Occupancy>
    <Rates>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>1</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>3</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>4</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>5</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>6</Occupancy>
      </Rate>
    </Rates>
  </Result>
</Transaction>

דוגמה לא זמינה

בדוגמה הבאה מוגדר מסלול נסיעה אחד שאי אפשר לאחזר את הזמינות שלו מערוצי ה-downstream, מסלול שני שנמצא מתחת למספר השהייה המינימלי של לילה ושכבר הוזמן בתאריכים שצוינו, ושלישי שהנכס שלו סגור בתאריך ההגעה, אבל נפתח במהלך השהייה:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NotFetched/>
    </Unavailable>
  </Result>
  <Result>
    <Property>073313</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NoVacancy/>
      <MinNightStay value=3/>
    </Unavailable>
  </Result>
  <Result>
    <Property>052213</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>10</Nights>
    <Unavailable>
      <PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
    </Unavailable>
  </Result>
</Transaction>

<Rates>

מאגר לבלוק <Rate> אחד או יותר. לכל <Rate> ב-<Rates> מוגדר מחיר שונה לשילוב של החדר או של מסלול הנסיעה.

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

הרכיב <Rates> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>         // Pricing and availability
        + <Rates>
        + <RoomBundle> (Can also contain <Rates>)
        + ...

ערכים שמוגדרים ב-<Rate> מבטלים את הערכים הקשורים לתמחור ברכיב ההורה <Result> או <RoomBundle>. אם הן לא מוגדרות ב-<Rate>, הן יירשו את הערך שלהן מרכיב ההורה. רק הערך <AllowablePointsofSale> עובר בירושה לרכיב <RoomBundle>.

תחביר

הרכיב <Rates> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <Rates>
      <Rate rate_rule_id="rate_rule_id">
        <Baserate currency="currency_code">price</Baserate>
        <Tax currency="currency_code">tax_amount</Tax>
        <OtherFees currency="currency_code">fee_amount</OtherFees>
        <ExpirationTime>expiration_time</ExpirationTime>
        <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
        <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
        <AllowablePointsOfSale>
          <PointOfSale id="landing_page_identifier"/>
        </AllowablePointsOfSale>
        <Occupancy>max_number_of_intended_occupants</Occupancy>
        <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
          ...
        <Custom[1-5]>custom_value</Custom[1-5]>
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

מאפיינים

הרכיב <Rates> כולל את המאפיינים הבאים:

מאפיין חובה? תיאור
rate_rule_id Optional עבור תעריפים בלעדיים, המזהה הזה תואם לתעריף להגדרה בקובץ 'הגדרת כלל התעריפים'. מגבלת התווים בשדה הזה היא 40 תווים.

רכיבי צאצא

הרכיב <Rates> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<AllowablePointsOfSale> Optional Object דף נחיתה אחד או יותר שעומדים בדרישות של המלון. התחביר של הרכיב הזה זהה לתחביר <AllowablePointsOfSale> ב-<Result>.
<Baserate> Required float מחיר החדר לשהייה. התחביר של הרכיב הזה זהה לתחביר של <Baserate> ב-<Result>.

הערה: אי אפשר להגדיר שרכיב הצאצא <Baserate> של <Rate> לא זמין.

<ChargeCurrency> Optional enum מתי ואיפה המשתמש משלם על הזמנה. התחביר של הרכיב הזה זהה לתחביר של <ChargeCurrency> ב-<Result>.
<Custom[1‑5]> Optional string שדות מותאמים אישית שבהם אפשר להשתמש כדי להעביר לדף הנחיתה נתונים נוספים שמשויכים למלון. התחביר של הרכיב הזה זהה לזה של <Custom[1‑5]> ב-<Result>. לכל שדה בהתאמה אישית אפשר להזין עד 200 תווים. מידע נוסף זמין במאמר קבצים של דפי נחיתה.

אם רכיבי <Custom> נכללים ברכיב <Result>, הם לא עוברים בירושה לרכיב <RoomBundle> וצריך להגדיר אותם בנפרד לכל <RoomBundle> או לכלול אותם ברכיב <PackageData> במקרה הצורך.

<ExpirationTime> Optional DateTime התאריך והשעה שבהם פג התוקף של התעריף. התחביר של הרכיב הזה זהה לזה של <ExpirationTime> ב-<Result>.
<Occupancy> Optional integer

מציינת את מספר האורחים המקסימלי המותר לתעריף הזה. אם לא מציינים זאת, ההנחה היא שהוא זהה לתעריף ההורה. יחד עם <Occupancy> עשוי להיות מלווה גם <OccupancyDetails>, שמציין את סוג האורחים (מבוגרים או ילדים). אפשר להיעזר ב-<OccupancyDetails> למידע על התחביר והתיאור של רכיבי הצאצא.

<OtherFees> Required float עמלות אחרות מלבד התעריף הבסיסי והמיסים שמשפיעים על המחיר הסופי של החדר. התחביר של הרכיב הזה זהה לזה של <OtherFees> ב-<Result>.
<Refundable> Optional Object מאפשרת לציין מחיר שכולל החזר כספי מלא או ביטול בחינם. אם לא תספקו את המידע הזה, לא יוצג מידע על ההחזר הכספי. מדיניות החזרים כספיים ברמת <PackageData> מבטלת את מדיניות ההחזרים הכספיים ברמת <Result>. מדיניות החזרים כספיים ברמת <Rates> מבטלת את מדיניות ההחזרים הכספיים ברמת <PackageData>. אפשר גם להדגיש למשתמשים מחירים עם אפשרויות להחזר כספי באמצעות אפשרויות חלופיות, בלי לשנות ישירות את סכימת ההודעות על עסקאות. מידע נוסף על האפשרויות האלה זמין במדיניות בנושא מחירים עם אפשרויות להחזר כספי.

בדוגמה הבאה מוצג הרכיב <Refundable> עם כל המאפיינים שהגדרתם:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

אם לא יוגדרו מאפיינים, לא יוצג מחיר עם החזר כספי. אלו המאפיינים:

  • available: (חובה) מגדירים ל-1 (או true) כדי לציין אם התעריף מאפשר החזר כספי מלא. אחרת, מוגדר ל-0 (או false).
  • refundable_until_days: (חובה אם הערך של available הוא true) מציין את מספר הימים לפני הצ'ק-אין שבהם אפשר לבקש החזר כספי מלא. הערך של refundable_until_days חייב להיות מספר שלם בין 0 ל-330, כולל.
  • refundable_until_time: (מומלץ מאוד אם הערך של available הוא true) מציין את השעה המאוחרת ביותר ביום, בזמן המקומי של המלון, אם הבקשה להחזר כספי מלא תכובד. אפשר לשלב את הסכום הזה עם refundable_until_days כדי לציין, לדוגמה, ש'החזרים כספיים זמינים עד 16:00 יומיים לפני הצ'ק-אין'. אם לא מגדירים את refundable_until_time, ברירת המחדל של הערך תהיה חצות.

    הערך של המאפיין הזה מופיע בפורמט Time.

כשמגדירים את המאפיינים, חשוב לשים לב לנקודות הבאות:

  • אם לא מגדירים את הערך available או את refundable_until_days, לא מופיע החזר כספי על המחיר.
  • אם הערך של available הוא 0 (או false), המערכת מתעלמת משאר המאפיינים. גם אם אחד מהמאפיינים האחרים או שניהם מוגדרים, לא יוצג מחיר כזה עם החזר כספי.
<Tax> Required float המיסים שמחושבים לפי המחיר הסופי של החדר. התחביר של הרכיב הזה זהה לתחביר של <Tax> ב-<Result>.

דוגמאות

תעריף בסיס ותעריף מותנה

בדוגמה הבאה מוצגת הודעת 'עסקה' שמכילה את התעריף הבסיסי ואת התעריף המותנה:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

תעריפים בלעדיים מרובים

בדוגמה הבאה מוגדרים תעריף בסיס ומספר תעריפים בלעדיים בתוך <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<RoomBundle>

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

הרכיב <RoomBundle> מופיע במקום הבא בהיררכיית ה-XML של הודעת העסקאות:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

מידע נוסף זמין במאמר שימוש בחבילות חדרים.

תחביר

הרכיב <RoomBundle> משתמש בתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <RoomBundle>
      <!-- Required unless specified inline under <RoomData> -->
      <RoomID>room_ID</RoomID>
      <!-- Required  <PackageData> -->
      <PackageID>package_ID</PackageID>

      <!-- Required -->
      <Baserate currency="currency_code">price</Baserate>
      <!-- Required -->
      <Tax currency="currency_code">taxes</Tax>
      <!-- Required -->
      <OtherFees currency="currency_code">other_fees</OtherFees>

      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <!-- Required -->
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>

      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>

      <RatePlanID>rate_plan_ID</RatePlanID>

      <Rates>...</Rates>

      <Custom1>custom_value_1</Custom1>
      <Custom2>custom_value_2</Custom2>
      <Custom3>custom_value_3</Custom3>
      <Custom4>custom_value_4</Custom4>
      <Custom5>custom_value_5</Custom5>
    </RoomBundle>
    ...
  </Result>
</Transaction>

מאפיינים

לרכיב <RoomBundle> אין מאפיינים.

רכיבי צאצא

הרכיב <RoomBundle> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<Baserate> Required float המדיניות הזו מגדירה את המחיר של חבילת החדרים לשהייה. התחביר של הרכיב הזה זהה לזה של <Baserate> ב-<Result>, למעט במקרה הבא:
  • אם אין חדר פנוי במסלול הנסיעה, צריך להסיר את הרכיב <RoomBundle> כדי לציין שהחדר כבר לא קיים במלאי. למידע נוסף, תוכלו לקרוא את המאמר הסרת חבילת חדר.
<BreakfastIncluded> Optional boolean השדה הזה מציין אם חבילת החדרים הזו כוללת ארוחת בוקר במחיר.
<ChargeCurrency> Optional enum מתי ואיפה המשתמש משלם על הזמנה. התחביר של הרכיב הזה זהה לזה של <ChargeCurrency> ב-<Result>.

ערך ברירת המחדל הוא web.

<Custom[1‑5]> Optional string שדות מותאמים אישית להעברת נתונים נוספים לדפי הנחיתה של חבילת החדר. התחביר של הרכיבים האלה זהה לזה של <Custom[1-5]> ב-<Result>. לכל שדה בהתאמה אישית אפשר להזין עד 200 תווים. למידע נוסף, אפשר לקרוא את המאמר קבצים של דפי נחיתה.

אם רכיבי <Custom> נכללים ברכיב <Result>, הם לא עוברים בירושה לרכיב <RoomBundle> וצריך להגדיר אותם בנפרד לכל <RoomBundle> או לכלול אותם ברכיב <PackageData> במקרה הצורך.

<InternetIncluded> Optional boolean אם חבילת חדר כוללת גישה לאינטרנט ללא תשלום, וחבילות אחרות לא כוללות את השירותים האלה. אין להגדיר את האלמנט הזה לחבילות חדרים במלון שמספק אינטרנט בחינם לכל החדרים. הרכיב הזה לא רלוונטי לאינטרנט קווי בתוך החדר או לאינטרנט אלחוטי שלא זמין בחדרי האורחים.
<Occupancy> Required integer מציינת את מספר האורחים המקסימלי המותר לתעריף הזה. לדוגמה, יכול להיות שסוויטה גדולה יכולה להכיל פיזית 6 אורחים, אבל 'חבילת ירח דבש' מאפשרת 2 אורחים בלבד.

הערך הזה חייב להיות שווה לערך <Capacity>, או שווה לו, שהוא מספר האנשים שהחדר יכול להכיל פיזית.

כשמגדירים תפוסה בכתובת דף הנחיתה, צריך להשתמש במשתנים NUM-ADULTS ו-NUM-CHILDREN, כפי שמתואר במאמר שימוש במשתנים ותנאים. ערך ברירת המחדל הוא 2 מבוגרים ו-0 ילדים.

הערך של <Occupancy> חייב להיות מספר שלם חיובי בין 1 ל-99, כולל.

הערות:

  • מומלץ מאוד להשתמש ב-<Occupancy> כ-<RoomBundle>, כך שיסומנו כחובה. אם לא תעשו את זה, תתקבל שגיאת 1097.
  • <Occupancy> מגיע מאובייקט הנתונים בסדר הזה: <RoomBundle>, <PackageData> ואז = <RoomData>. אם אין ערך באחד מההתאמות האלה, ערך ברירת המחדל יהיה 2.
  • יחד עם <Occupancy>, עשוי להופיע גם <OccupancyDetails>, שמציין את סוג האורחים (מבוגרים או ילדים). אם לא מציינים סוגי אורחים, הם נחשבים לאנשים מבוגרים. למידע על תחביר ותיאור של רכיבי צאצא, אפשר לעיין ב-<OccupancyDetails>.
  • כשמגדירים את <Occupancy> גם ב-<RoomBundle> וגם ב-<PackageData>, הערך ב-<RoomBundle> מקבל קדימות.
<OtherFees> Required float עמלות אחרות מלבד התעריף הבסיסי והמיסים שמשפיעים על המחיר הסופי של החדר. הרכיב <OtherFees> מקבל מאפיין חובה אחד, currency, שמגדיר את קוד המטבע בן שלוש האותיות של העמלות. לדוגמה, מומלץ להשתמש ב-USD לדולר ארה"ב.
<PackageID> Optional (recommended) string המזהה הייחודי של נתוני החבילה. צריך להשתמש במזהה הזה כדי להתאים בין הנתונים של חבילת החדר לבין הנתונים שנשלחו בקבוצה <PackageData>. למידע נוסף, קראו את המאמר המטא-נתונים של חבילת החדרים. (אפשר להשתמש במזהה הזה גם כדי להתייחס להגדרה נפוצה של חבילת חדרים שמופיעה בהודעה עסקה יחידה כשמגדירים נתונים של חבילת חדרים בתוך השורה).
<ParkingIncluded> Optional boolean האם חבילת חדרים כוללת חניה ללא תשלום, כאשר החניה לא תהיה בתשלום, למשל. אין לציין ערך לרכיב הזה עבור מלון שמוצע בו חניה בחינם.

הערכים החוקיים הם 0 (או false) ו-1 (או true). ערך ברירת המחדל הוא false.

<RatePlanID> Optional string מזהה תוכנית המחירים מייצג את המזהה הייחודי של שילוב של חדר וחבילה. לדוגמה, אם נותנים ערך <RoomID> ל-5 וערך <PackageID> של ABC, אפשר להשתמש בערך 5-ABC עבור <RatePlanID>. מומלץ מאוד להשתמש ב-RatePlanID כמשתנה כדי ליצור את כתובת ה-URL הדינמית של דף הנחיתה (לשעבר נקודת המכירה).

מידע נוסף זמין במאמר שימוש במשתנים ותנאים.

<Rates> Optional <Rates> מחירים שמבטלים את הגדרות ברירת המחדל של חבילת החדרים הזו. התחביר הזה זהה לתחביר של <Rates> ב-<Result>.
<Refundable> Optional Object מאפשרת לציין מחיר שכולל החזר כספי מלא או ביטול בחינם. אם לא תספקו את המידע הזה, לא יוצג מידע על ההחזר הכספי. מדיניות החזרים כספיים ברמת <PackageData> מבטלת את מדיניות ההחזרים הכספיים ברמת <Result>. מדיניות החזרים כספיים ברמת <Rates> מבטלת את מדיניות ההחזרים הכספיים ברמת <PackageData>. אפשר גם להדגיש למשתמשים מחירים עם אפשרויות להחזר כספי באמצעות אפשרויות חלופיות, בלי לשנות ישירות את סכימת ההודעות על עסקאות. מידע נוסף על האפשרויות האלה זמין במדיניות בנושא מחירים עם אפשרויות להחזר כספי.

בדוגמה הבאה מוצג הרכיב <Refundable> עם כל המאפיינים שהגדרתם:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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

אם לא יוגדרו מאפיינים, לא יוצג מחיר עם החזר כספי. אלו המאפיינים:

  • available: (חובה) מגדירים ל-1 (או true) כדי לציין אם התעריף מאפשר החזר כספי מלא. אחרת, מוגדר ל-0 (או false).
  • refundable_until_days: (חובה אם הערך של available הוא true) מציין את מספר הימים לפני הצ'ק-אין שבהם אפשר לבקש החזר כספי מלא. הערך של refundable_until_days חייב להיות מספר שלם בין 0 ל-330, כולל.
  • refundable_until_time: (מומלץ מאוד אם הערך של available הוא true) מציין את השעה המאוחרת ביותר ביום, בזמן המקומי של המלון, אם הבקשה להחזר כספי מלא תכובד. אפשר לשלב את הסכום הזה עם refundable_until_days כדי לציין, לדוגמה, ש'החזרים כספיים זמינים עד 16:00 יומיים לפני הצ'ק-אין'. אם לא מגדירים את refundable_until_time, ברירת המחדל של הערך תהיה חצות.

    הערך של המאפיין הזה מופיע בפורמט Time.

כשמגדירים את המאפיינים, חשוב לשים לב לנקודות הבאות:

  • אם לא מגדירים את הערך available או את refundable_until_days, לא ניתן לקבל החזר כספי על המחיר.
  • אם הערך של available הוא 0 (או false), המערכת מתעלמת משאר המאפיינים. גם אם אחד מהמאפיינים האחרים או שניהם מוגדרים, לא יוצג מחיר כזה עם החזר כספי.
<RoomID> Required string המזהה הייחודי של נתוני החדר. המזהה הזה משמש כדי להתאים בין הנתונים של חבילת החדר לבין הנתונים ששלחתם בקבוצה <RoomData>. למידע נוסף, אפשר לקרוא את המאמר מטא-נתונים של חבילת חדר. (אפשר להשתמש במזהה הזה גם כדי להתייחס להגדרה של חדר משותף בהודעה על עסקה אחת כשמגדירים את נתוני החדר בשורה.)
<Tax> Required float המיסים שמחושבים לפי המחיר הסופי של החדר. הרכיב <Tax> מקבל מאפיין חובה אחד, currency, שמגדיר את קוד המטבע בן שלוש האותיות עבור המיסים. לדוגמה, צריך לציין USD לדולר ארה"ב.

דוגמאות

חבילה לחדרים ליחידים

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

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

הדוגמה הזו מפנה למטא-נתונים מוגדרים מראש של חדרים וחבילות עם הרכיבים <RoomID> ו-<PackageID>. משתמשים ברכיבים <RoomData> ו-<PackageData> כדי להגדיר את המידע הזה.

<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 1 example ----->

<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
  <!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
  <!-- Note:  Once defined it does not have to be repeated for future
              Transaction Messages.
              PropertyDataSets can also be defined and sent in their own
              Transaction Message separately from pricing. Google can be
              configured to pull just PropertyDataSets once per day
              (or on a predefined frequency). -->
  <PropertyDataSet>
    <Property>180054</Property>
    <!-- Can be reused by multiple Room Bundles -->
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Queen Room - Non-Smoking" language="en"/>
        <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <!-- Room can accommodate up to 4, but package data specifies occupancy
           between 1 to 4 -->
      <Capacity>4</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>436233</RoomID>
      <Name>
        <Text text="Premium King Room - Non-Smoking" language="en"/>
        <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <Capacity>4</Capacity>
    </RoomData>
    <!-- Can be reused by multiple Room Bundles -->
    <PackageData>
      <PackageID>P11111</PackageID>
      <Occupancy>1</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P12345</PackageID>
      <Occupancy>4</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="1"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
  </PropertyDataSet>

    <!-- Efficient method of defining Room Bundles -->
    <!-- Part 2: Reference RoomData and PackageData through ID -->
  <Result>
    <!-- Single occupancy pricing will be specified in a room bundle below -->
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- Base Room Bundle -->
    <RoomBundle>
      <RoomID>060773</RoomID>
      <PackageID>P54321</PackageID>
      <Baserate currency="USD">199.99</Baserate>
      <Tax currency="USD">25.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RatePlanID>060773-P54321</RatePlanID>
    </RoomBundle>
    <RoomBundle>
      <RoomID>060773</RoomID>
      <PackageID>P11111</PackageID>
      <!-- Price for 1 ("occupancy") is the lowest price and will be
           displayed -->
      <Baserate currency="USD">174.99</Baserate>
      <Tax currency="USD">22.08</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RatePlanID>060773-P11111</RatePlanID>
    </RoomBundle>
    <!-- Premium Room Bundle -->
    <RoomBundle>
      <RoomID>436233</RoomID>
      <PackageID>P12345</PackageID>
      <!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more
           occupancy will be displayed-->
      <Baserate currency="USD">298.88</Baserate>
      <Tax currency="USD">42.12</Tax>
      <OtherFees currency="USD">10.00</OtherFees>
      <RatePlanID>436233-P12345</RatePlanID>
    </RoomBundle>
    <!-- ..Continue providing all available RoomBundle rates under matched
         property for 1 or more occupancies..-->
  </Result>
</Transaction>


שני נוסעים או יותר

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

הדוגמה הזו מפנה למטא-נתונים מוגדרים מראש של חדרים וחבילות עם הרכיבים <RoomID> ו-<PackageID>. משתמשים ברכיבים <RoomData> ו-<PackageData> כדי להגדיר את המידע הזה.

<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 3 example ----->

<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
  <!-- Efficient method of defining Room Bundles-->
  <!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
  <PropertyDataSet>
    <Property>180054</Property>
    <!-- Can be reused by multiple Room Bundles -->
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Queen Room - Non-Smoking" language="en"/>
        <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <!-- Room can accommodate up to 4, but package data specifies occupancy
           between 1 to 4 -->
      <Capacity>4</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>436233</RoomID>
      <Name>
        <Text text="Premium King Room - Non-Smoking" language="en"/>
        <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <Capacity>4</Capacity>
    </RoomData>
    <!-- Can be reused by multiple Room Bundles -->
    <PackageData>
      <PackageID>P33333</PackageID>
      <Occupancy>3</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P12345</PackageID>
      <Occupancy>4</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="1"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
  </PropertyDataSet>

  <Result>
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- Efficient method of defining Room Bundles -->
    <!-- Part 2: Reference RoomData and PackageData through ID -->
    <!-- Base Room Bundle -->
    <RoomBundle>
      <!-- Baserate above and attributes must match atleast one room bundle
           below -->
      <RoomID>060773</RoomID>
      <PackageID>P33333</PackageID>
      <Baserate currency="USD">499.99</Baserate>
      <Tax currency="USD">55.12</Tax>
      <OtherFees currency="USD">22.00</OtherFees>
    </RoomBundle>
    <!-- Premium Room Bundle -->
    <RoomBundle>
      <RoomID>436233</RoomID>
      <PackageID>P12345</PackageID>
      <!-- Lowest price for 3 ("occupancy"), shown below, will be displayed -->
      <Baserate currency="USD">598.88</Baserate>
      <Tax currency="USD">62.12</Tax>
      <OtherFees currency="USD">30.00</OtherFees>
    </RoomBundle>
    <!-- ..Continue providing all available RoomBundle rates under matched
         property for 2 or more occupancies..-->
  </Result>
</Transaction>


חבילות של חדרים מרובים

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <!-- Suite Room Bundle -->
    <RoomBundle>
      <RoomID>suite1</RoomID>
      <PackageID>standard</PackageID>
      <Occupancy>2</Occupancy>
      <!-- Price for room -->
      <Baserate currency="USD">80.00</Baserate>
      <Tax currency="USD">5.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="Suite for 2" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Small Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>small_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">35.00</Baserate>
      <Tax currency="USD">3.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in small dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Large Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>large_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">20.00</Baserate>
      <Tax currency="USD">2.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in large dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>
    ...
  </Result>
</Transaction>

תעריפים מותנים מרובים

בדוגמה הבאה מוגדרים תעריף בסיס ומספר תעריפים בלעדיים בתוך <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy> בהודעה של העסקה מציין את מספר האורחים המקסימלי לחדר או לחבילה. <OccupancyDetails> יכול להכיל מידע נוסף כמו מספר האורחים וסוג האורחים (מבוגרים או ילדים).

כשמופיעים <Occupancy> ו-<OccupancyDetails> ברכיב <Rates> של <Result> או <RoomBundle>, המשמעות היא שהתעריף מוגבל על ידי פרטי האורחים.

תחביר

כשהערך בשדה <OccupancyDetails> מופיע, תמיד מופיע לפני <Occupancy>. שימו לב לתחביר הבא:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
  ...
    <Occupancy>max_number_of_intended_occupants</Occupancy>
    <OccupancyDetails>
      <NumAdults>number_of_adults</NumAdults>
      <Children>
        <Child age=age_of_one_child_guest/>
        <Child age=age_of_one_child_guest/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

רכיבי צאצא

הרכיב <OccupancyDetails> כולל את רכיבי הצאצא הבאים:

רכיב צאצא חובה? סוג תיאור
<NumAdults> Required integer מספר האורחים המבוגרים. מינימום:1, מקסימום:20.
<Children> Optional Object קונטיינר של רכיב <Child> אחד או יותר.
<Child age> Optional integer הגיל המקסימלי של הילד או הילדה – לדוגמה: <Child age="17">.

דוגמאות

הדוגמאות הבאות מראות איך <OccupancyDetails> עשוי להופיע ב-<Results>, ב-<RoomBundle> או ברכיב הצאצא <Rates>.

תשובה לתוצאה

בדוגמה הבאה מוגדרים מסלול נסיעה אחד ואת המחיר שלו לנכס אחד, בתגובה לשאילתת תמחור בזמן אמת שבה המשתמש ציין את המספר והסוגים של האורחים. כאן מוחזרים <OccupancyDetails> – 2 מבוגרים וילד אחד – ב<Result>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
    <Occupancy>3</Occupancy>
    <OccupancyDetails>
      <NumAdults>2</NumAdults>
      <Children>
        <Child age="17"/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

תגובה לתעריפים

בדוגמה הבאה מוגדרים מסלול נסיעה אחד ואת המחיר שלו למבוגר אחד ולילד אחד. כאן, מוחזרים <OccupancyDetails> ברכיב <Rates> של <Result>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
  <Result>
    <Property>8251</Property>
    <Checkin>2018-06-20</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">62.18</Baserate>
    <Tax currency="USD">2.45</Tax>
    <OtherFees currency="USD">0.00</OtherFees>
    <Rates>
      <Rate rate_rule_id="rule-951">
        <Occupancy>2</Occupancy>
        <OccupancyDetails>
          <NumAdults>1</NumAdults>
          <Children>
            <Child age="17"/>
          </Children>
        </OccupancyDetails>
        <Baserate currency="USD">42.61</Baserate>
        <Tax currency="USD">5.70</Tax>
        <OtherFees currency="USD">0.00</OtherFees>
        <Custom1>abc4</Custom1>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

חבילת חדרים

בדוגמה הבאה מוגדר חדר של 2 מבוגרים וילד אחד לשני לילות, במחיר עם החזר כספי. כאן, <OccupancyDetails> מופיע בתוך <RoomBundle>

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>6781291</Property>
    <Checkin>2017-08-05</Checkin>
    <Nights>2</Nights>
    ...
    <RoomBundle>
      <RoomID>10291</RoomID>
      <RatePlanID>564739</RatePlanID>
      <PackageID>564739</PackageID>
      <Occupancy>3</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
      <Baserate currency="USD">185.34</Baserate>
      <Tax currency="USD">37.06</Tax>
      <OtherFees currency="USD">2.22</OtherFees>
    </RoomBundle>
  </Result>
</Transaction>

חבילות של חדרים מרובים

בדוגמה הבאה מוגדרים כמה תעריפים של <RoomBundle> שמוגבלים לחדרים של 2 מבוגרים ו-2 ילדים. כאן, <OccupancyDetails> מופיע ברכיב <Rates> של <RoomBundle>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">275.00</Baserate>
    <Tax currency="USD">27.50</Tax>
    <OtherFees currency="USD">0</OtherFees>
    <RoomBundle>
      <RoomID>5</RoomID>
      <PackageID>STD</PackageID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">0</OtherFees>
      <InternetIncluded>1</InternetIncluded>
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <Custom2>ratebasic</Custom2>
      <Occupancy>4</Occupancy>
      <OccupancyDetails>
          <NumAdults>2</NumAdults>
          <Children>
              <Child age="17"/>
              <Child age="17"/>
          </Children>
      </OccupancyDetails>
      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>