郵輪B2C P3 放掉全部佔房(ReleaseAllHolds)
API Content
說明
放掉這筆訂位佔住的房(逐房放),訂位資料保留。只有一條規則:手上有佔房、要全部放掉時打。有佔房=打過進填寫頁 CreateHold、手上有 Hold_Until_Time;沒有就不打。
- 方法:POST
- 路徑:
Cruise/Products/ReleaseAllHolds
- 對應畫面:沒有固定畫面。手上有佔房、要全部放掉時打:客人離開訂位流程(按離開、回首頁、關掉頁面,或從 P3 按上一頁回 P2),改人數、改出發日打新查詢(舊訂位不再用),重整 P3、佔房倒數歸零(這兩種放完沿用同一個訂位,全部房重選)
使用重點:
- 要不要打,看手上有沒有
Hold_Until_Time(CreateHold 回的,或重整後還原整包回的Earliest_Hold_Until_Time、P3 重整時 QueryCategory 重查回的Room_List[].Hold_Until_Time):有才打,超過 15 分鐘也打。P3 只查不寫,沒按過〔下一步〕就沒有佔房、一般在 P3 不會打到這支;人在 P3 卻有佔房的只有兩種:從填寫頁回 P3 改選一間(另一間還佔著)、按〔下一步〕只佔到一間被退回 P3
- 只帶
Page_Id,不帶Session_Version:離開時手上的版本可能是舊的(例:開了兩個分頁),帶了會被擋下,房就放不掉
- 改人數、改出發日打新查詢會建新的訂位,等於放棄舊的,舊訂位有佔房才先打這支:改人數是 P3〔重選艙房與人數〕燈箱按〔確認〕後(送出時回
5005方案或艙房不可售、某間方案或艙型不能賣,也是回 P3 開燈箱),先打這支再打 QueryCategory 新查詢;改出發日是按〔重選日期〕(或送出時回3004行程不可售),先打這支再回 P2。沒佔房就直接新查詢、直接回 P2
- 重整 P3:QueryCategory 重查回的任一間
Hold_Until_Time有值就先打這支,放完不換訂位:用同一個Page_Id、這次查到的卡片全部房重選,選好按〔下一步〕由 CreateHold 重新佔房。這支不改Session_Version,CreateHold 帶重查回的值
- 佔房倒數歸零(手上的
Hold_Until_Time到了,在填寫頁或退回 P3 時都算):跳視窗後打這支一次放掉全部,再導回選房號頁,同一個Page_Id全部房重選、旅客重填。存旅客或送出時回1003佔房已逾時:後端已經放掉了,前端清掉手上的Hold_Until_Time,不用打這支
- 關掉頁面時,用瀏覽器 sendBeacon 送出最穩(它只能送 POST)。🟡 關掉頁面時呼叫得到嗎、P4 重整怎麼不誤放、APP 切到背景算不算離開,待確認
- ⚠ P4 重整、換步驟不算離開,打了房就放掉了(重整 P3 例外,見上一點);從填寫頁回 P3、進填寫頁有房佔不到被退回 P3 重選也不算離開,佔到的那間要留著
- 回應的
Result_Data是空的(sendBeacon 收不到回應,前端不用看結果)
文件版本:v1.0(未交付)
規格調整
| 日期 | 版本 | 調整內容 |
|---|---|---|
| 2026/11/11 | v1.0(未交付) | 初版 |
Request Schema
Body
| 名稱 | 描述 | 屬性 | 範例 |
|---|---|---|---|
| Page_Id | 必填。QueryCategory 回的 Page_Id | String | 6f1e2d3c-4b5a-4c7d-8e9f-0a1b2c3d4e5f |
JSON 範例
{
"Page_Id": "6f1e2d3c-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}Response Schema
回應主體
| 名稱 | 描述 | 屬性 | 範例 |
|---|---|---|---|
| Result_Info | 結果資訊;前端先看 Is_Success | Object | 參考 Result_Info |
| Result_Data | 成功時是本端點的資料;不是成功時只放該代碼要帶的資料(見「錯誤回應」),沒有就是 {} | Object | {} |
Result_Info
| 名稱 | 描述 | 屬性 | 範例 |
|---|---|---|---|
| Is_Success | true=成功;false=看 Result_Code | Bool | true |
| Result_Code | 結果代碼(四碼數字);成功是空字串;其他見「錯誤回應」 | String | |
| Result_Message | 給客人看的訊息;成功是空字串 | String |
JSON 範例
{
"Result_Info": {
"Is_Success": true,
"Result_Code": "",
"Result_Message": ""
},
"Result_Data": {}
}錯誤回應
200 的代碼在 Result_Info.Result_Code、訊息在 Result_Message;400、500 只回一句訊息,代碼在訊息開頭(格式「代碼|訊息」,例「4002|Start_Date 格式錯誤」)。訊息欄除了「重複訂位」與「出發日期已無法訂購,請重新選擇」已定,其他是暫定文字,UIUX 定稿後只改文字、不改代碼;N=第幾間。
| HTTP | Result_Code | 中文名稱 | 訊息(給客人看) | 情境 | 前端動作 |
|---|---|---|---|---|---|
| 400 | 4001 | 缺少必填參數 | 不給客人看(訊息開頭是代碼) | Page_Id 沒帶 | 前端帶錯值,修正後重打 |
| 200 | 2001 | 訂位資料不存在 | 訂位資料已失效,請重新選擇 | Page_Id 找不到 | 不用處理(要打新查詢就照打) |
| 200 | 2002 | 訂單已成立 | 訂單已成立 | 這筆訂位已經成立訂單,不放房 | 不用處理;房已屬於訂單 |
| 500 | 9999 | 系統錯誤 | 9999|系統發生錯誤,請稍後再試 | 系統錯誤(未預期的例外) | 不用處理 |
測試情境/單元測試(開發前規劃)
畫面呼叫
舊版畫面
新版畫面
沒有固定畫面。有佔房的訂位:按離開、回首頁、關掉頁面、從 P3 按上一頁回 P2 時打本 API;在 P3 按〔重選艙房與人數〕(APP 導覽列放大鏡)、燈箱按〔確認〕後,先打本 API 再打 QueryCategory 新查詢;按〔重選日期〕回 P2 改出發日時,先打本 API 再回 P2;重整 P3 時;P4-W01、P4-A01 頁首的保留倒數歸零時。沒佔房的訂位不打。這支沒有對應的畫面元素,不附畫面欄位對照圖。