ฟีด XML สำหรับโครงการและแบบห้องพัก

1. วัตถุประสงค์ของ Feed

XML feed ใช้ส่งต่อข้อมูลแบบมีโครงสร้างเกี่ยวกับโครงการอสังหาริมทรัพย์และแบบห้องมาตรฐาน จุดประสงค์คือให้ระบบปลายทางสามารถสร้างและอัปเดตการ์ดโครงการ แสดงราคา สถานะ แกลเลอรี สิ่งอำนวยความสะดวก เงื่อนไขการชำระเงิน EOI และสื่อโปรโมชันจากผู้พัฒนาได้โดยอัตโนมัติ

feed จะส่งข้อมูล layout ในรูปแบบรวม กล่าวคือ 1 รายการ layout แทนแบบห้องมาตรฐานหนึ่งประเภท พร้อมจำนวนยูนิตที่เปิดขายของประเภทนั้น ไม่ใช่รายการอพาร์ตเมนต์ ออฟฟิศ หรือที่ดินแปลงใดแปลงหนึ่งโดยเฉพาะ

  • realty-feed: คอนเทนเนอร์หลักของ XML feed ทั้งหมด Main ID: —
  • offers: โครงการหรือคอมเพล็กซ์หนึ่งโครงการ Main ID: complex-id
  • layouts: แบบห้องมาตรฐานภายในโครงการ Main ID: id
  • payment_plans: ตัวเลือกการชำระเงินของหนึ่งโครงการ Main ID: id
  • eoi_item: เงื่อนไข EOI หนึ่งรายการ Main ID: —
  • stock: แคมเปญการตลาด ข่าวสาร หรือข้อความโปรโมชันจากผู้พัฒนา Main ID: —

1.1 XML Feed คืออะไร

XML feed คือไฟล์ข้อมูลแบบมีโครงสร้างที่บรรจุข้อมูลเกี่ยวกับโครงการอสังหาริมทรัพย์และแบบห้องมาตรฐาน ภายในมีรายละเอียด รูปภาพ ราคา ที่อยู่ สถานะ สเปก สิ่งอำนวยความสะดวก และข้อมูลอื่น ๆ ที่จำเป็นต่อการแสดงทรัพย์สินบนเว็บไซต์เอเจนซี่หรือในแคตตาล็อก

พูดง่าย ๆ คือ XML feed เป็นสตรีมข้อมูลอสังหาริมทรัพย์ที่ระบบปลายทางดาวน์โหลด อ่าน และใช้เพื่ออัปเดตการ์ดทรัพย์สินโดยอัตโนมัติเป็นระยะ

Alnair เป็นผู้จัดเตรียมข้อมูล ส่วนการพัฒนาเว็บไซต์ การทำแคตตาล็อก การเชื่อมต่อ CRM และตรรกะการนำเข้าข้อมูลเป็นหน้าที่ของลูกค้าหรือทีมเทคนิคของลูกค้า

1.2 สิ่งที่เอเจนซี่ต้องมี

ในการใช้งาน XML feed เอเจนซี่ต้องมีโครงสร้างพื้นฐานทางเทคนิคของตนเองที่สามารถดาวน์โหลด XML เป็นประจำ แยกโครงสร้างข้อมูล และอัปเดตข้อมูลในระบบได้

  • เว็บไซต์หรือแคตตาล็อกอสังหาริมทรัพย์: พื้นที่ที่จะแสดงโครงการและ layout จาก feed
  • ทีมเทคนิคหรือผู้พัฒนา: ตั้งค่าการดาวน์โหลด XML การแยกข้อมูล และการนำเข้า
  • XML parser: อ่านโครงสร้าง XML และแปลงเป็นโมเดลข้อมูลภายใน
  • โมดูลนำเข้า: สร้าง อัปเดต และปิดการแสดงผลโครงการและ layout
  • ตัวตั้งเวลางาน: เรียกใช้งานนำเข้าแบบกำหนดเวลา เช่น ผ่าน cron หรือ scheduler
  • บันทึกข้อผิดพลาด: ตรวจสอบค่า enum ที่ไม่รู้จัก ฟิลด์ว่าง และข้อผิดพลาดในการโหลด

1.3 เอเจนซี่ใช้งาน XML Feed อย่างไร

เวิร์กโฟลว์ทั่วไปมีดังนี้:

  1. ระบบของเอเจนซี่ดาวน์โหลด XML จากลิงก์เว็บส่วนตัว
  2. บันทึก XML เป็น snapshot ดิบสำหรับการวิเคราะห์และประมวลผลซ้ำ
  3. parser อ่านโครงสร้าง realty-feed, offers, layouts และบล็อกย่อยต่าง ๆ
  4. โมดูลนำเข้าสร้างโครงการและ layout ใหม่ หรืออัปเดตข้อมูลเดิม
  5. รายการที่หายไปจาก feed ใหม่จะถูกทำเครื่องหมายเป็น inactive
  6. เว็บไซต์ของเอเจนซี่แสดงการ์ดโครงการ ราคา แกลเลอรี และสถานะที่อัปเดตล่าสุด

ความสามารถหลักในการเชื่อมต่อ:

  • อัปเดตอัตโนมัติ: โครงการและ layout ถูกอัปเดตโดยไม่ต้องป้อนข้อมูลเอง
  • สร้างหน้าโครงการ: ใช้ข้อมูลจาก feed ในการสร้างการ์ดโครงการและ layout
  • ราคาและสถานะล่าสุด: เว็บไซต์รับการอัปเดต XML ตามรอบเวลา
  • ตัวกรองและการค้นหา: ใช้เขต ราคา ประเภททรัพย์สิน จำนวนห้อง และพื้นที่สำหรับการกรอง
  • แกลเลอรีสื่อ: แสดงรูปโครงการ แกลเลอรีธีม และรูปแบบ layout ในอินเทอร์เฟซได้

2. โครงสร้าง XML ทั่วไป

<realty-feed>
  <generation-date>2026-06-17T12:06:39+04:00</generation-date>
  <offers>...</offers>
  <offers>...</offers>
</realty-feed>

  • realty-feed: object. บล็อกหลักของ feed
  • generation-date: datetime. วันที่และเวลาที่สร้าง XML ใช้ตรวจสอบความใหม่ของข้อมูล
  • offers: object[]. รายการโครงการหรือคอมเพล็กซ์ แต่ละบล็อก offers จะมีข้อมูลโครงการและ layouts ภายใน

2.1 การเข้าถึง Feed และข้อจำกัดในการดาวน์โหลด

feed จะถูกส่งให้ลูกค้าผ่านลิงก์เว็บส่วนตัว ลิงก์นี้เป็นลิงก์เฉพาะของลูกค้า และระบบปลายทางใช้สำหรับดาวน์โหลด XML แบบอัตโนมัติ

ลิงก์ส่วนตัวนี้มีให้ผู้ดูแลระบบในบัญชี Alnair ผู้ดูแลระบบสามารถส่งต่อให้ทีมเทคนิคของลูกค้าเพื่อใช้ตั้งค่าการนำเข้า

  • ประเภทการเข้าถึง: ลิงก์เว็บส่วนตัว URL ของ XML feed เฉพาะลูกค้า
  • แหล่งที่ได้ลิงก์: บัญชี Alnair ลิงก์นี้มีให้ผู้ดูแลของลูกค้า
  • ความถี่ในการอัปเดต feed: ทุก 4 ชั่วโมง ข้อมูล XML จะอัปเดตฝั่ง Alnair ทุก 4 ชั่วโมง
  • ช่วงเวลาขั้นต่ำในการดาวน์โหลด: ไม่เกิน 1 ครั้งต่อชั่วโมง ระบบปลายทางต้องไม่เข้าถึง feed เกิน 1 ครั้งต่อชั่วโมง
  • เกินขีดจำกัด: การบล็อกการเข้าถึง หากมีการร้องขอบ่อยเกินไป อาจถูกบล็อกการเข้าถึง feed ชั่วคราว

แนวทางการเชื่อมต่อที่แนะนำ: ตั้งค่าการดาวน์โหลดแบบกำหนดเวลาผ่าน cron หรือ scheduler บันทึก XML ล่าสุดที่ได้รับไว้ และไม่ควรร้องขอ feed ทุกครั้งที่หน้าเว็บไซต์โหลด แนวทางที่เหมาะสมคือดาวน์โหลด feed ไม่เกิน 1 ครั้งต่อชั่วโมง โดยคำนึงว่าข้อมูลใหม่จะปรากฏประมาณทุก 4 ชั่วโมง

3. โครงการ: <offers>

offers คือเอนทิตีหลักของ feed ภายในมีคำอธิบายโครงการ ผู้พัฒนา ที่ตั้ง สถานะก่อสร้างและการขาย ราคา สื่อ สิ่งอำนวยความสะดวก แผนชำระเงิน EOI โปรโมชันทางการตลาด และแบบห้องมาตรฐาน

<offers>
  <complex-id>5646</complex-id>
  <type>project</type>
  <logo>https://...</logo>
  <photo>https://...</photo>
  <title>...</title>
  <description>...</description>
  <price_on_request>1</price_on_request>
  <status>...</status>
  <construction_start_at>2025-01-01T00:00:00+04:00</construction_start_at>
  <construction_progress>15</construction_progress>
  <planned_completion_at>2027-12-31T00:00:00+04:00</planned_completion_at>
  <predicted_completion_at>2027-12-31T00:00:00+04:00</predicted_completion_at>
  <amenities>...</amenities>
  <developer>...</developer>
  <city>Dubai</city>
  <address>...</address>
  <latitude>25.000000</latitude>
  <longitude>55.000000</longitude>
  <districts>...</districts>
  <album>...</album>
  <albums>...</albums>
  <constructions_count>1</constructions_count>
  <for_sale_count>10</for_sale_count>
  <price>...</price>
  <br_prices>...</br_prices>
  <updated_at>2026-06-17T10:53:20+04:00</updated_at>
  <is_sold_out>0</is_sold_out>
  <payment_plans>...</payment_plans>
  <sales_status>...</sales_status>
  <stocks>...</stocks>
  <eoi>...</eoi>
  <service_charge>...</service_charge>
  <assignment>...</assignment>
  <is_limited_publication>0</is_limited_publication>
  <layouts>...</layouts>
</offers>

  • complex-id: integer. รหัสโครงการเฉพาะใน Alnair ใช้เป็นรหัสโครงการภายนอกสำหรับ upsert
  • type: enum. ประเภทเอนทิตีระดับบนสุด: project หรือ compound เก็บค่าดิบและนำเข้าเป็นโครงการระดับบนสุด
  • logo: url. โลโก้โครงการ แสดงในส่วนแบรนด์ ไม่ใช้เป็นภาพปก
  • photo: url. รูปหลักของโครงการ / ภาพปก ใช้เป็นภาพปกและภาพ hero
  • title: localized object. ชื่อโครงการใน en/ru/ar แสดงตามภาษาของอินเทอร์เฟซ
  • description: localized HTML. คำอธิบายโครงการใน en/ru/ar แสดงผลอย่างปลอดภัย โดย HTML อยู่ใน CDATA
  • price_on_request: 0/1. ตัวบอกการซ่อนราคา หากเป็น 1 ให้แสดง “Price on request”
  • status: object. สถานะการก่อสร้าง อย่าสับสนกับ sales_status
  • construction_start_at: datetime. วันที่เริ่มก่อสร้าง แสดงหากมีค่า
  • construction_progress: decimal. เปอร์เซ็นต์ความคืบหน้าการก่อสร้าง แสดงเป็นเปอร์เซ็นต์
  • planned_completion_at: datetime. วันที่คาดว่าจะแล้วเสร็จของโครงการ ใช้เป็นวันส่งมอบ
  • predicted_completion_at: datetime. วันที่คาดว่าจะแล้วเสร็จ สามารถใช้เป็นวันที่อัปเดตได้
  • amenities: object. สิ่งอำนวยความสะดวกและฟีเจอร์ของโครงการ แมปตาม key
  • developer: object. ผู้พัฒนาโครงการ เก็บชื่อและโลโก้
  • city / address: string. เมืองและที่อยู่ของโครงการ ใช้ในข้อมูลทำเล
  • latitude / longitude: decimal. พิกัด ใช้สำหรับแผนที่
  • districts: object. เขตของโครงการ ใช้สำหรับตัวกรองและการ์ดโครงการ
  • album: object. แกลเลอรีหลักของโครงการแบบไม่แยกหมวด แสดงเป็นแกลเลอรีทั่วไป
  • albums: object. แกลเลอรีโครงการแบบมีธีม จัดกลุ่มตาม title
  • for_sale_count: integer. จำนวนยูนิตที่ยังเปิดขายในโครงการ แสดงเป็นความพร้อมขายได้
  • price: object. ช่วงราคาทั่วไปของโครงการ ซ่อนเมื่อ price_on_request=1
  • br_prices: object[]. ราคาตามจำนวนห้องนอนหรือประเภท ใช้สำหรับตัวกรองและรายการประกาศ
  • updated_at: datetime. วันที่อัปเดตโครงการ ใช้สำหรับการซิงก์
  • is_sold_out: 0/1. ตัวบอก sold out ใช้ร่วมกับ sales_status
  • payment_plans: object[]. ตัวเลือกการชำระเงินจากผู้พัฒนา แสดงเป็นตัวเลือกการชำระเงิน
  • sales_status: localized object. สถานะการขายของโครงการ กำหนดระยะการขาย
  • stocks: object. แคมเปญการตลาดและข้อความโปรโมชันจากผู้พัฒนา แสดงเป็นบล็อกโปรโมชัน
  • eoi: object. Expression of Interest แสดงเฉพาะกรณี Presale (EOI)
  • service_charge: object. ค่าบริการ แสดงหากมีการกรอกค่า
  • assignment: decimal. เงื่อนไขการโอนสิทธิ์ หากว่างหมายถึงไม่ได้ระบุ
  • is_limited_publication: 0/1. ข้อจำกัดการเผยแพร่ หากเป็น 1 ห้ามเผยแพร่สาธารณะโดยไม่ได้รับอนุญาต
  • layouts: object[]. แบบห้องมาตรฐานของโครงการ นำเข้าเป็นเอนทิตีย่อยของโครงการ

4. ฟิลด์แบบหลายภาษา

ฟิลด์แบบหลายภาษามีโครงสร้างเหมือนกัน โดยค่าภาษาอังกฤษ รัสเซีย และอาหรับจะถูกส่งอยู่ภายในแท็ก

<title>
  <en>ชื่อโครงการ</en>
  <ru>Название проекта</ru>
  <ar>اسم المشروع</ar>
</title>

  • en: ค่าภาษาอังกฤษ แนะนำให้ใช้เป็น fallback
  • ru: ค่าภาษารัสเซีย
  • ar: ค่าภาษาอาหรับ

กฎการ fallback:

  1. ใช้ภาษาของอินเทอร์เฟซหากมีค่า
  2. หากภาษาที่ต้องการว่าง ให้ใช้ en
  3. หาก en ว่าง ให้ใช้ ru
  4. หาก ru ว่าง ให้ใช้ ar
  5. หากทั้งหมดว่าง ให้ไม่แสดงฟิลด์นั้น

5. สถานะ

5.1 สถานะการก่อสร้าง: <status>

สถานะการก่อสร้างแสดงสภาพทางกายภาพของโครงการ ไม่ได้บ่งบอกความพร้อมในการขาย

<status>
  <key>development_stage_progress</key>
  <en>กำลังก่อสร้าง</en>
  <ru>Строится</ru>
  <ar>قيد الإنشاء</ar>
</status>

  • Scheduled: โครงการอยู่ในแผน
  • In Progress: อยู่ระหว่างการก่อสร้าง
  • Ready: โครงการแล้วเสร็จ
  • Stopped: งานก่อสร้างหยุดชะงัก

5.2 สถานะการขาย: <sales_status>

สถานะการขายแสดงขั้นตอนเชิงพาณิชย์ของโครงการ: ประกาศ, presale, เปิดตัว, ขายอยู่, หรือ sold out

  • Preliminary Info: ข้อมูลโครงการเบื้องต้น
  • Announcement: โครงการได้รับการประกาศแล้ว
  • Presale (EOI): อยู่ระหว่างรับ EOI
  • Launch: เปิดขายแล้ว
  • On Sale: โครงการพร้อมซื้อ
  • Sold Out: โครงการขายหมดแล้ว
  • Pending: รอการอัปเดตสถานะ

6. ผู้พัฒนาและทำเลที่ตั้ง

บล็อกเหล่านี้จำเป็นสำหรับการแสดงแบรนด์ผู้พัฒนาและตำแหน่งทางภูมิศาสตร์ของโครงการ

<developer>
  <title>
    <en>ชื่อผู้พัฒนา</en>
    <ru>ชื่อผู้พัฒนา</ru>
    <ar>ชื่อผู้พัฒนา</ar>
  </title>
  <logo>https://...</logo>
</developer>
<city>Dubai</city>
<address>ที่อยู่โครงการ, Dubai</address>
<latitude>25.01809076</latitude>
<longitude>55.13354525</longitude>
<districts>
  <district>Jumeirah Village Triangle (JVT)</district>
</districts>

  • developer.title: localized object. ชื่อผู้พัฒนา
  • developer.logo: url. โลโก้ผู้พัฒนา
  • city: string. เมือง
  • address: string. ที่อยู่
  • latitude / longitude: decimal. พิกัดสำหรับแผนที่
  • districts.district: string[]. เขตของโครงการ

7. ราคา

7.1 ราคาโครงการ: <price>

ราคาระดับโครงการจะแสดงช่วงราคาทั่วไปของยูนิตที่เปิดขายในโครงการ

<price>
  <min>815462</min>
  <max>2089780</max>
  <min_usd>222009</min_usd>
  <max_usd>568942</max_usd>
  <currency>AED</currency>
</price>

  • min: decimal. ราคาต่ำสุด
  • max: decimal. ราคาสูงสุด
  • min_usd: decimal. ราคาต่ำสุดเป็น USD
  • max_usd: decimal. ราคาสูงสุดเป็น USD
  • currency: enum. สกุลเงินหลัก โดยทั่วไปคือ AED

หาก price_on_request = 1 จะไม่แสดงราคาที่แน่ชัดต่อสาธารณะ แม้ว่าจะมีการกรอกราคาไว้ก็ตาม

7.2 ราคาตามหมวดหมู่: <br_prices>

br_prices ใช้จัดกลุ่มราคาและพื้นที่ตามจำนวนห้องนอนหรือประเภททรัพย์สิน เหมาะสำหรับตัวกรองและการ์ดโครงการแบบย่อ

<br_prices>
  <key>1</key>
  <count>7</count>
  <min_price>1070564</min_price>
  <max_price>1289674</max_price>
  <min_price_m2>17204</min_price_m2>
  <max_price_m2>18483</max_price_m2>
  <currency>AED</currency>
  <min_area><m2>57.92</m2><ft2>623.45</ft2></min_area>
  <max_area><m2>74.17</m2><ft2>798.36</ft2></max_area>
</br_prices>

  • studio: สตูดิโอ
  • 1-6: จำนวนห้องนอน
  • villa: วิลล่า
  • townhouse: ทาวน์เฮาส์
  • n: ไม่เกี่ยวข้อง / ประเภทไม่ใช่ที่พักอาศัย / อื่น ๆ

8. สื่อ

สื่อใน feed แบ่งออกเป็นหลายประเภท และไม่ควรรวมเป็นแกลเลอรีเดียวโดยไม่คำนึงถึงวัตถุประสงค์: รูปหนึ่งอาจเป็นภาพปกโครงการ อีกภาพเป็นโลโก้ อีกภาพเป็นภาพโปรโมชัน และอีกภาพเป็นแปลนชั้น

  • logo: offers.logo. โลโก้โครงการ แสดงในแบรนด์ของโครงการ ไม่ใช้เป็นภาพปก
  • photo: offers.photo. รูปหลักของโครงการ / ภาพปก ใช้เป็นภาพปกในการ์ดและภาพ hero บนหน้าโครงการ
  • album.image: offers.album.image. แกลเลอรีหลักของโครงการแบบไม่แยกหมวด แสดงในแกลเลอรีรวมของโครงการ
  • albums.album.images.image: offers.albums.album.images.image. แกลเลอรีโครงการแบบมีธีม จัดกลุ่มตาม albums.album.title
  • developer.logo: offers.developer.logo. โลโก้ผู้พัฒนา แสดงในบล็อกผู้พัฒนา
  • stocks.stock.logo: offers.stocks.stock.logo. ภาพแคมเปญการตลาด แสดงภายในบล็อกโปรโมชัน
  • layouts.album.image: offers.layouts.album.image. แกลเลอรีของ layout มาตรฐานแต่ละแบบ แสดงในระดับ layout
  • levels_photos.level_photo.image: offers.layouts.levels_photos.level_photo.image. ภาพของ layout แยกตามระดับ ใช้เป็นแปลนชั้น

<photo>https://...</photo>
<album>
  <image>https://...</image>
</album>
<albums>
  <album>
    <title><en>โครงสร้างพื้นฐาน</en><ru>Инфраструктура</ru><ar>...</ar></title>
    <images>
      <image>https://...</image>
    </images>
  </album>
</albums>

  • Project presentation: ภาพนำเสนอโครงการ
  • Construction progress: ภาพความคืบหน้าการก่อสร้าง
  • Finishing examples: ตัวอย่างงานตกแต่งภายใน
  • Infrastructure: โครงสร้างพื้นฐานของโครงการ
  • View: วิวทิวทัศน์และสภาพแวดล้อม

ไม่จำเป็นต้องมีทุกหมวดในทุกโครงการ หากชื่อหมวดว่าง สามารถนำเข้ารูปภาพเป็นหมวดที่ไม่แยกประเภท หรือใส่ไว้ในแกลเลอรีทั่วไปได้

โครงสร้างปัจจุบันไม่มีแท็ก XML สำหรับ history/story แยกต่างหาก ข่าวสาร ข้อความโปรโมชัน และสื่อการตลาดของโครงการจะถูกส่งผ่าน stocks สำหรับประวัติการก่อสร้าง สามารถใช้หมวด Construction progress ได้หากมีอยู่ใน albums

9. สิ่งอำนวยความสะดวก

amenities อธิบายสิ่งอำนวยความสะดวกและฟีเจอร์ของโครงการ สำหรับการเชื่อมต่อ ควรใช้ key เป็นหลัก ส่วนค่าที่แปลเป็นภาษาต่าง ๆ ใช้สำหรับการแสดงผล

<amenities>
  <amenity>
    <key>project_facilities_gym</key>
    <en>ห้องยิม</en>
    <ru>Тренажёрный зал</ru>
    <ar>صالة رياضية</ar>
  </amenity>
</amenities>

  • amenities: object. คอนเทนเนอร์ของสิ่งอำนวยความสะดวก
  • amenity: object. สิ่งอำนวยความสะดวกหนึ่งรายการ
  • key: enum. คีย์ทางเทคนิค
  • en / ru / ar: string. ชื่อสิ่งอำนวยความสะดวกใน 3 ภาษา

คีย์ projecet_hotel_license มีการพิมพ์ผิด แต่ต้องแมปเป็น Hotel License แนะนำให้รองรับ alias นี้และไม่ทำให้การนำเข้าข้อมูลล้มเหลว

10. โปรโมชันการตลาด: <stocks>

stocks คือแคมเปญการตลาด ข่าวสาร และข้อความโปรโมชันจากผู้พัฒนา ซึ่งอาจรวมถึงราคาพิเศษ ส่วนลด เงื่อนไขเปิดตัว ประกาศ EOI ข้อเสนอการชำระเงินชั่วคราว และสื่อโฆษณา บล็อกนี้ไม่ใช่สต็อกสินค้าคงคลัง และไม่ได้ใช้กำหนดความพร้อมของยูนิต

<stocks>
  <stock>
    <title>...</title>
    <description>...</description>
    <start_at>2025-06-26T00:00:00+04:00</start_at>
    <end_at/>
    <logo>https://...</logo>
  </stock>
</stocks>

  • stocks: object. คอนเทนเนอร์ข้อความการตลาด
  • stock: object. แคมเปญ ข่าวสาร หรือประกาศโปรโมชันหนึ่งรายการ
  • title: localized object. ชื่อโปรโมชัน
  • description: localized HTML. คำอธิบายโปรโมชัน
  • start_at: datetime. วันที่เริ่มต้น
  • end_at: datetime. วันที่สิ้นสุด อาจว่างได้
  • logo: url. ภาพโปรโมชัน

ให้ใช้ for_sale_count, layouts.sale_units_count และ sales_status สำหรับความพร้อมขายของทรัพย์สิน ไม่ใช่ stocks

11. EOI

EOI หมายถึง Expression of Interest บล็อกนี้อธิบายเงื่อนไขความสนใจเบื้องต้นหรือเงินจองสำหรับโครงการที่อยู่ในสถานะ Presale (EOI)

<eoi>
  <is_eoi_return>0</is_eoi_return>
  <eoi_items>
    <eoi_item>
      <price>100000</price>
      <percent/>
      <description>
        <en>จำนวน EOI สำหรับ 2 Bedrooms</en>
        <ru>Сумма EOI для 2-комнатных</ru>
        <ar>...</ar>
      </description>
    </eoi_item>
  </eoi_items>
</eoi>

  • is_eoi_return: 0/1/empty. 0 = ไม่คืนเงิน, 1 = คืนเงินได้, ว่าง = ไม่ได้ระบุ
  • eoi_items: object. คอนเทนเนอร์เงื่อนไข EOI
  • eoi_item: object. เงื่อนไข EOI หนึ่งรายการ
  • price: decimal. จำนวน EOI แบบคงที่
  • percent: decimal. เปอร์เซ็นต์ EOI หากมีการใช้
  • description: localized object. คำอธิบายเงื่อนไข
  • sales_status.en = Presale (EOI) และ eoi_items มีข้อมูล: แสดง EOI
  • sales_status อื่นทั้งหมด: ซ่อน EOI

12. ค่าบริการและการโอนสิทธิ์

<service_charge>
  <value>172.22</value>
  <unit>sq. m</unit>
  <currency>AED</currency>
</service_charge>
<assignment>40.00</assignment>

  • service_charge.value: จำนวนค่าบริการ หากว่างไม่ต้องแสดงบล็อกนี้
  • service_charge.unit: หน่วยคำนวณ โดยปกติคือ sq. m อาจว่างได้
  • service_charge.currency: สกุลเงิน โดยทั่วไปคือ AED อาจว่างได้
  • assignment: เปอร์เซ็นต์ที่สามารถโอนสิทธิ์ได้ หากว่าง = ไม่ได้ระบุ ไม่ใช่ข้อจำกัด

13. แผนการชำระเงิน: <payment_plans>

payment_plans อธิบายตัวเลือกการชำระเงินของทรัพย์สินจากผู้พัฒนา หนึ่งโครงการอาจมีหลายแผนการชำระเงิน แต่ละแผนแบ่งการชำระออกเป็นช่วงต่าง ๆ ได้แก่ จอง ก่อสร้าง ส่งมอบ และหลังส่งมอบ ค่าธรรมเนียมและค่าใช้จ่ายเพิ่มเติมจะถูกส่งแยกกัน ดังนั้นเปอร์เซ็นต์รวมอาจเกิน 100% ได้ เช่น 104% อาจหมายถึง 100% ของราคาทรัพย์สิน + ค่าธรรมเนียม DLD 4%

  • Basic: id, title, currency. รหัสแผน ชื่อแผน และสกุลเงิน title เป็นข้อความอิสระ ไม่ใช่ enum
  • Booking: on_booking_percent, on_booking_fix, on_booking_payments_count, on_booking_fees. การชำระและค่าธรรมเนียมในขั้นตอนจอง
  • Construction: on_construction_percent, on_construction_fix, on_construction_payments_count, on_construction_fees. การชำระระหว่างก่อสร้าง
  • Handover: on_handover_percent, on_handover_fix, on_handover_payments_count, on_handover_fees. การชำระในวันส่งมอบ
  • Post-handover: post_handover_percent, post_handover_fix, on_post_handover_payments_count, on_post_handover_fees. การชำระหลังส่งมอบ
  • ROI: roi_percent, roi_fix, roi_payments_count, roi_fees. ฟิลด์สำหรับแผน ROI หรือรายได้แบบรับประกัน
  • Additional fees: additional, additional_percent, additional_fix, additional_fix_m2. การชำระเพิ่มเติม เช่น DLD Fee
  • Periods: period_after_handover, period_after_roi. ความถี่ของการชำระซ้ำ
  • Totals: price_total, fees_included_total. ยอดรวมของแผนและค่าธรรมเนียมที่รวมไว้

14. Layouts: <layouts>

layouts อธิบายแบบห้องมาตรฐานภายในโครงการ เป็นประเภทยูนิตแบบรวม ไม่ใช่อพาร์ตเมนต์หรือออฟฟิศเฉพาะเจาะจง

  • id: integer. รหัส layout เฉพาะ ใช้เป็นรหัสภายนอกของ layout
  • title: localized object. ชื่อ layout แสดงตามภาษาของอินเทอร์เฟซ
  • project_id: integer. รหัสโครงการแม่ เชื่อมกับ offers.complex-id
  • building_name: localized object. ชื่ออาคาร หากว่างไม่ต้องแสดง
  • price_on_request: 0/1. ตัวบอกการซ่อนราคา หากเป็น 1 ไม่ต้องแสดงราคา
  • area_min / area_max: object. ช่วงพื้นที่ m2 และ ft2
  • area_balcony_min / area_balcony_max: object. ช่วงพื้นที่ระเบียง อาจว่างได้
  • type: localized object. ประเภททรัพย์สิน ดู Unit type reference
  • sale_units_count: integer. จำนวนยูนิตที่เปิดขายของประเภทนี้ ไม่ใช่รายการล็อต
  • album: object. แกลเลอรีของ layout แสดงในระดับ layout
  • levels_photos: object. รูปภาพแยกตามระดับ ใช้เป็นแปลนชั้น
  • floors_count: integer. จำนวนชั้น 1, 2, 3 เป็นต้น
  • rooms_count: localized object. จำนวนห้อง ดู Rooms count reference
  • price: object. ช่วงราคาของ layout ซ่อนเมื่อ price_on_request=1
  • is_limited_publication: 0/1. ข้อจำกัดการเผยแพร่ หากเป็น 1 ให้ซ่อนจากสาธารณะ

15. รายการอ้างอิงค่า Enum

  • Project type: project, compound.
  • Sales status: Preliminary Info, Announcement, Presale (EOI), Launch, On Sale, Sold Out, Pending.
  • Construction status: Scheduled, Ready, Stopped, In Progress.
  • Unit type: Apartment, Villa, Townhouse, Duplex, Triplex, Penthouse, Retail, Office, Suite.
  • Rooms count: Studio, 1 BR, 2 BR, 3 BR, 4 BR, 5 BR, 6 BR, 7 BR, 8 BR, NA.
  • BR price key: studio, 1, 2, 3, 4, 5, 6, villa, townhouse, n.
  • Gallery category: Project presentation, Construction progress, Finishing examples, Infrastructure, View.
  • Currency: AED.
  • Service charge unit: sq. m.
  • Boolean flags: 0, 1; บางฟิลด์อนุญาตให้ว่างได้

หาก feed มีค่าที่ไม่อยู่ในรายการอ้างอิง การนำเข้าต้องไม่ล้มเหลว ค่านั้นต้องถูกเก็บเป็นค่าดิบ ทำเครื่องหมายว่าไม่รู้จัก และบันทึกไว้เพื่อให้ตรวจสอบภายหลัง

16. ค่าว่าง

ค่าว่างหมายถึง “ไม่ได้ระบุ” ไม่ใช่ 0 แท็กว่างอาจอยู่ในรูปแบบ <field/> หรือ <field></field>

  • assignment: ไม่ได้ระบุเงื่อนไขการโอนสิทธิ์
  • service_charge.value: ไม่ได้ระบุค่าบริการ
  • eoi.is_eoi_return: ไม่ได้ระบุว่าสามารถคืน EOI ได้หรือไม่
  • area_balcony_min.m2: ไม่ได้ระบุพื้นที่ระเบียง
  • description.en: ไม่มีคำอธิบาย

17. กฎการแสดงผล

  • ซ่อนราคา: price_on_request = 1 แสดง “Price on request”
  • แสดงราคา: price_on_request = 0 แสดงราคา min/max
  • EOI: sales_status.en = Presale (EOI) และมีข้อมูล EOI ให้แสดง EOI
  • EOI ไม่เกี่ยวข้อง: sales_status.en != Presale (EOI) ให้ซ่อน EOI
  • sold out: is_sold_out = 1 หรือ sales_status.en = Sold Out ให้แสดง “Sold out” หรือซ่อนจากรายการ
  • จำกัดการเผยแพร่: is_limited_publication = 1 ห้ามเผยแพร่สาธารณะ
  • assignment ว่าง: assignment ว่าง ไม่ต้องแสดงบล็อก assignment
  • service charge ว่าง: service_charge.value ว่าง ไม่ต้องแสดงค่าบริการ

18. กฎการนำเข้า

  • Project: ค้นหาด้วย complex-id ถ้าพบให้อัปเดต ถ้าไม่พบให้สร้างใหม่
  • Layout: ค้นหาด้วย layouts.id และเชื่อมกับโครงการด้วย project_id
  • การลบ: หากวัตถุหายไปจาก feed ใหม่ ให้ทำเครื่องหมายเป็น inactive แทนการลบทันที
  • Unknown enum: เก็บค่าดิบ ทำเครื่องหมายว่าไม่รู้จัก และบันทึก
  • ค่าว่าง: อย่าแปลงเป็น 0 หากไม่มี rule เฉพาะของฟิลด์นั้น

Project field → Source

  • external_project_id: complex-id.
  • raw_offer_type: type.
  • title_*: title.
  • description_*: description.
  • developer_name: developer.title.
  • developer_logo_url: developer.logo.
  • city/address/coordinates: city, address, latitude, longitude.
  • districts: districts.district.
  • construction_status: status.en.
  • sales_status: sales_status.en.
  • price_min / price_max: price.
  • price_on_request: price_on_request.
  • galleries: photo, album, albums.
  • payment_plans: payment_plans.
  • eoi: eoi.
  • stocks: stocks.
  • source_updated_at: updated_at.

Layout field → Source

  • external_layout_id: layouts.id.
  • external_project_id: layouts.project_id.
  • title_*: layouts.title.
  • building_name_*: building_name.
  • unit_type: type.en.
  • rooms_count: rooms_count.en.
  • sale_units_count: sale_units_count.
  • area_min / area_max: area_min, area_max.
  • balcony_min / balcony_max: area_balcony_min, area_balcony_max.
  • floors_count: floors_count.
  • price_min / price_max: price.
  • layout_gallery: album.
  • levels_photos: levels_photos.
  • is_limited_publication: is_limited_publication.