קובץ XML עם נתוני תמחור וחדרים פנויים לעיון (עסקאות)

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

<Transaction>

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

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

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

בהודעות שמשתמשות ב-<Transaction> כרכיב הבסיס, צריך להשתמש לפחות ברכיב צאצא אחד. הודעות עסקיות יכולות להכיל כל מספר של רכיבים משניים, כל עוד הגודל הכולל של ההודעה לא חורג מ-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 מחרוזת מזהה ייחודי לכל שליחת נתוני תמחור וזמינות.
partner Optional string חשבון השותף שאליו מתייחסת שליחת נתוני תמחור וזמינות. בדרך כלל משתמשים באפשרות הזו אם ה-Backend מספק פידים של מחירים לכמה חשבונות שותפים. ערך המחרוזת הזה הוא הערך של 'מפתח השותף' שמופיע בדף הגדרות החשבון ב-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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </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>
      </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>

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

הדוגמה הבאה היא של חדר בסגנון יפני עם שתי מיטות double.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>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>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <!-- Add Loyalty point information -->
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
      </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, ערך ברירת המחדל הוא חצות.

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

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

  • אם לא מוגדרים הערכים available או refundable_until_days, המחיר לא מוצג כמחיר שניתן להחזר.
  • אם הערך של available הוא 0 או false, המערכת מתעלמת מהמאפיינים האחרים. המחיר לא יוצג כמחיר שניתן לקבל עליו החזר כספי, גם אם אחד מהמאפיינים האחרים או שניהם מוגדרים.
<MembershipBenefits Included> Optional boolean המחיר כולל הטבות של סטטוס מועדון עילית למשך השהייה. הפרמטרים הבאים כלולים:
  • ProgramName: שם תוכנית הסטטוס Elite
  • ProgramLevel: הרמה בתוכנית. לדוגמה: "Gold."
  • NightlyValue (optional): הערך הלילי של ההטבות.
<CarRentalIncluded> Optional boolean המחיר כולל השכרת רכב חינם למשך השהייה.
<MilesIncluded> Optional boolean המחיר כולל מיילים של נוסע מתמיד. הפרמטרים כוללים:
  • NumberOfMiles: מספר המיילים לכל מסלול.
  • Provider: ספק של מיילים של נוסע מתמיד.
  • LoyaltyCampaignID: מזהה ייחודי שמציין את קמפיין הנאמנות הספציפי שהוגדר ועודכן ב-Google. המערכת מוסיפה את נקודות המועדון למחיר המלון.

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

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

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • הערה: <NumberOfMiles> ו-<Provider> הם אופציונליים.

<OnPropertyCredit> Optional boolean המחיר כולל זיכוי לשימוש באתר (במסעדות, באתר הנופש, בספא וכו'). פרמטר:
  • 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>
        <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      </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. -->
    <!-- Child occupancy rates should only be sent through Live pricing
         with context and not through Pull or Changed pricing -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

    <MilesIncluded>
      <NumberOfMiles>integer</NumberOfMiles>
      <Provider>
        <Text language="en" text="provider-name">
      </Provider>
      <!-- Add Loyalty point information -->
      <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
  ...
  </Transaction>

מאפיינים

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

מאפיין חובה? סוג תיאור
mergeable Optional boolean כברירת מחדל, מחירים חדשים של מלון ספציפי ומועד שהייה ספציפי יחליפו את כל המחירים הקודמים (שלא פג תוקפם) שקיימים במטמון של Google. המאפיין mergeable מאפשר לכם לאחסן במטמון של 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> בבלוק Hotel Price או <PackageData> בבלוק חבילת חדר.

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

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

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

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

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

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

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

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

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

<MilesIncluded> Optional boolean המחיר כולל מיילים של נוסע מתמיד. הפרמטרים כוללים:
  • NumberOfMiles: מספר המיילים לכל מסלול.
  • Provider: ספק של מיילים של נוסע מתמיד.
  • LoyaltyCampaignID: מזהה ייחודי שמציין את קמפיין הנאמנות הספציפי שהוגדר ועודכן ב-Google. המערכת מוסיפה את נקודות המועדון למחיר המלון.

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

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

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • הערה: <NumberOfMiles> ו-<Provider> הם אופציונליים.

<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 של דף הנחיתה. מידע נוסף זמין במאמר מטא-נתונים של חבילות חדרים.

חובה לכלול את <RoomBundle> כדי להגדיר את <PackageID> ואת <RoomID> ברכיב <Result>. עם זאת, מומלץ לציין את מזהי החבילה והחדר רק ברכיב <RoomBundle> ולא ברכיב <Result>.

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

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

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

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

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

<RoomID> Optional string המזהה הייחודי של החדר למיפוי לנתוני חדרים מוגדרים מראש. משמש גם לאכלוס המשתנה PARTNER-ROOM-ID של משתנה דף הנחיתה. מידע נוסף זמין במאמר מטא-נתונים של חבילות חדרים.

חובה לכלול את <RoomBundle> כדי להגדיר את <PackageID> ואת <RoomID> ברכיב <Result>. עם זאת, מומלץ לציין את מזהי החבילה והחדר רק ברכיב <RoomBundle> ולא ברכיב <Result>.

<Tax> Optional float המיסים שמחושבים במחיר הסופי של החדר. רכיב <Tax> מקבל מאפיין חובה יחיד, currency, שמגדיר את קוד המטבע בן שלוש האותיות של המיסים. לדוגמה, USD. האלמנט <Tax> הוא חובה אם הערך של <Baserate> גדול מאפס.

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

<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/>: מקורות נתונים במורד הזרם לא סיפקו מחיר לתוכנית הנסיעה.
  • <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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </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>

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

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

<?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>
          ...
        <MilesIncluded>
          <NumberOfMiles>integer</NumberOfMiles>
          <Provider>
            <Text language="en" text="provider-name">
          </Provider>
          <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
        </MilesIncluded>
          ...
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

מאפיינים

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

מאפיין חובה? תיאור
rate_rule_id Optional במקרה של מחירים מותנים, המזהה הזה תואם להגדרה בקובץ Rate Rule Definition. מגבלת התווים בשדה הזה היא 40. המזהה הזה לא יכול להיות מחרוזת ריקה.

רכיבי צאצא

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

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

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

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

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

<ExpirationTime> Optional DateTime התאריך והשעה שבהם התוקף של השער פג. הרכיב הזה משתמש באותו תחביר כמו <ExpirationTime> ב-<Result>.
<MilesIncluded> Optional boolean המחיר כולל מיילים של נוסע מתמיד. הפרמטרים כוללים:
  • NumberOfMiles: מספר המיילים לכל מסלול.
  • Provider: ספק של מיילים של נוסע מתמיד.
  • LoyaltyCampaignID: מזהה ייחודי שמציין את קמפיין הנאמנות הספציפי שהוגדר ועודכן ב-Google. המערכת מוסיפה את נקודות המועדון למחיר המלון.

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

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

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • הערה: <NumberOfMiles> ו-<Provider> הם אופציונליים.

<Occupancy> Optional integer

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

<OtherFees> Required float עמלות אחרות, מלבד המחיר הבסיסי ומיסים, שמשפיעות על המחיר הסופי של חדר. הרכיב הזה משתמש באותו תחביר כמו <OtherFees> ב-<Result>.

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

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

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

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

  • אם לא מוגדרים הערכים 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>
      </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 and it should be within 50 characters in length for optimal
      performance. 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>

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

      <!-- Add Loyalty point information -->
      <MilesIncluded>
        <NumberOfMiles>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>>
      </MilesIncluded>

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

    </RoomBundle>
    ...
  </Result>
</Transaction>

מאפיינים

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

רכיבי צאצא

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

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

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

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

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

<InternetIncluded> Optional boolean אם חבילת חדרים כוללת גישה לאינטרנט ללא תשלום, בעוד שחבילות אחרות לא כוללות את השירות הזה. אל תגדירו את הרכיב הזה לחבילות חדרים במלון שמספק אינטרנט בחינם בכל החדרים. האלמנט הזה לא רלוונטי לאינטרנט קווי בחדר או לאינטרנט אלחוטי שלא זמין בחדרי האורחים.
<MilesIncluded> Optional boolean המחיר כולל מיילים של נוסע מתמיד. הפרמטרים כוללים:
  • NumberOfMiles: מספר המיילים לכל מסלול.
  • Provider: ספק של מיילים של נוסע מתמיד.
  • LoyaltyCampaignID: מזהה ייחודי שמציין את קמפיין הנאמנות הספציפי שהוגדר ועודכן ב-Google. המערכת מוסיפה את נקודות המועדון למחיר המלון.

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

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

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • הערה: <NumberOfMiles> ו-<Provider> הם אופציונליים.

<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 כמשתנה כדי ליצור את כתובת דף הנחיתה הדינמי (לשעבר נקודת המכירה).

הערה: כדי להשיג ביצועים אופטימליים, האורך של RatePlanID צריך להיות עד 50 תווים.

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

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

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

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

  • אם לא מוגדר הערך 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 and it should be within 50 characters in length for optimal
      performance. 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>

      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

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

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

אם כוללים את התג <OccupancyDetails> בתוך התג <RoomBundle>, יחד עם רכיב <Rate> מוטמע, אי אפשר לשלוח תג <Occupancy> בסיסי בתוך התג <Rate>. במקום זאת, מומלץ להשתמש באחת מהאפשרויות הבאות:

  • השמטת נתוני התפוסה מ<Rate>: במקרה הזה, <Rate> מקבל בירושה את <OccupancyDetails> ישירות מ<RoomBundle>

או

  • כפילות <OccupancyDetails>: במקרה הזה, שולחים עוד <OccupancyDetails> זהים גם ברכיב <RoomBundle> וגם ברכיב <Rate> המקונן

תחביר

כשמופיע <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>
        <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>
      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>