pricewin-booking-assistant

作者: price-win

推薦飯店房間並完成真實的端到端預訂——透過付款連結(銀行 QR code、信用卡或 PayPal)預訂 OpenTravel 直營住宿,查看付款狀態、重新發送已過期的連結,或取消預訂。對於僅限 OTA 的飯店,則會退回至 Booking.com/Agoda/Traveloka 的直連連結。適用於預訂或預約飯店、取得房間推薦、支付住宿費用、查詢確認碼,或取消預訂時使用。

npx skills add https://github.com/price-win/pricewin-skills-hub --skill pricewin-booking-assistant

Requires the pricewin MCP server. Handles real money: it creates bookings and payment links. Read the confirmation rules below before use.

Booking Assistant

MCP server: pricewin. Orchestrates discover → detail → recommend → book → pay → manage.

What is actually bookable

SourceCan you book it here?
source: "OPENTRAVEL_DIRECT" (has propertyId)Yes — full booking + payment via create_booking
Booking.com / Agoda / Traveloka❌ No — comparison only. Hand the user the OTA url

Only OpenTravel direct properties yield the propertyId + roomTypeId that create_booking requires. Never imply an OTA hotel can be reserved through this skill.

Recommendation flow

  1. Discoversearch_hotels_live(city, checkIn, checkOut, adults, …)sessionId, then poll poll_search_results(sessionId, nights) every 5s while status is pending/partial (up to 18 polls / 90s)
  2. Scorerating × log(reviewCount + 1) — balances quality against credibility. Strong candidates: rating ≥ 8.0 and reviewCount ≥ 100
  3. Rank — top 3–5 by score
  4. Detailget_hotel_detail(propertyId, checkIn, checkOut, adults) for OpenTravel picks; get_ota_hotel_detail(hotelName, city, checkIn, checkOut, queryText) for a named OTA hotel (~20–60s)
  5. Recommend — filter rooms by guest capacity, then pick best value

Booking link rules (OTA hotels)

  • NEVER invent URLs — only use a url the tool returned
  • Always name the OTA next to the link; if several have the same room, show all with prices
  • Append the user's dates to the raw URL — see pricewin-hotel-search

Booking flow (OpenTravel direct)

1. Get the room first — mandatory

Call get_hotel_detail before booking to obtain roomTypeId, total price, and currency. Do not guess any of the three.

Optionally call get_cancellation_policy(propertyId, ratePlanId, checkInDate) and show the refund terms before taking payment.

2. Ask for all four things in ONE message

In your first request for guest info, ask for all of these together — never split across turns, and always in the user's language:

  1. Full name
  2. Phone number
  3. Email — the confirmation email goes here
  4. Payment method

⚠️ Never auto-fill the email from the account/profile. The guest is often not the account owner. It must come from what the user typed in this chat. If it is missing, ask.

Present the three payment methods as equal choices, no default, no recommended order:

  • Bank transfer via QR (SePay) → SEPAY
  • International card via Polar → POLAR
  • PayPal → PAYPAL

If the user already signalled a preference, infer it and skip re-asking:

They saidMethod
"scan QR", "quét mã", "chuyển khoản", "bank transfer", "VietQR"SEPAY
"card", "thẻ", "credit/debit card", "visa", "mastercard"POLAR
"PayPal"PAYPAL

If anything is still missing after their reply, ask again for just the missing item(s).

3. Confirm before charging

Summarise back everything — hotel, room type, check-in/check-out, guests, TOTAL price (full amount, not a deposit), guest name, email address (emphasise it — a typo means the confirmation never arrives), phone, payment method — then explicitly ask the user to confirm it is all correct.

4. Only then call create_booking

Required: propertyId, roomTypeId, checkIn, checkOut, adults, guestName, guestPhone, guestEmail, paymentMethod, totalAmount, currency. Also pass queryText (user's original text, verbatim).

Returns a payment link and a confirmationCode (e.g. K7X9M2P4) — surface both.

After booking

User saysTool
"I paid" / "check my booking"check_booking_status(confirmationCode)
"the payment link expired"recreate_payment_link(confirmationCode)
"cancel my booking"request_cancel_token → then cancel_booking

🚨 Never call create_booking twice for the same stay. An expired payment link is fixed with recreate_payment_link — it reuses the same confirmation code. Calling create_booking again creates a duplicate booking and a duplicate confirmation email.

Cancelling — two steps, by design

  1. request_cancel_token(confirmationCode, guestEmail) — email must match the booking's primary guest. This emails the guest a magic link
  2. The guest pastes the token back → cancel_booking(confirmationCode, cancelToken, reason) (reason ≥ 3 chars)

You cannot cancel without the guest fetching that token from their inbox. Tell them to check their email rather than retrying step 1.

Output format

### Hotel Name ★★★★☆
- Rating: 8.5/10 (1,234 reviews)
- Best room: Deluxe Double — $85/night
- Free cancellation: until 2026-08-10
- Book: [Reserve now](payment-link)          ← OpenTravel direct
- Or compare: [Agoda](url) | [Booking.com](url)

Tool inputs and response fields: reference.md.

Security & data handling

This skill has real transaction authority and transmits guest PII (name, phone, email) to PriceWin's hosted MCP server https://mcp.price.win/mcp — that is inherent to making a reservation, and it is why booking is a separate skill from search. It ships no code and makes no network calls of its own.

Card numbers, CVV and bank credentials never pass through the skill or the agentcreate_booking returns a payment link and the user pays on the provider's own page. Never ask for card details; refuse if offered.

Confirm the full summary and total price with the user before every create_booking. Full disclosure — operator, exact PII fields per tool, payment boundary, cancellation model — in SECURITY.md.

來自 price-win 的更多技能

pricewin-deal-finder
price-win
根據指定的旅行日期和旅客人數,比較Booking、Agoda、Google Hotels和OpenTravel上的飯店價格與優惠。適用於查詢飯店價格、優惠或比較OTA費率。
pricewin-hotel-deal-finder
price-win
透過比較Booking.com、Agoda、Google Hotels和OpenTravel的即時價格,為全球任何城市和任何旅行日期尋找最便宜的酒店優惠——一條指令即可返回排名最佳性價比、最便宜和品質之選,並附直接預訂連結,全部以美元標準化。每當有人詢問酒店價格、酒店優惠、最便宜的房間或房價、最佳酒店房價、酒店價格比較,或哪個OTA更便宜時使用——例如「東京的Booking或Agoda哪個更便宜」、「幫我找一間...的酒店」
pricewin-hotel-search
price-win
即時搜尋Agoda、Booking.com、Traveloka與OpenTravel上的飯店,並提供特定日期的即時價格。當使用者需要旅遊日期的飯店價格、比較OTA或尋找房間時使用。
researchweb-scrapingapi
pricewin-price-comparison
price-win
比較 Booking.com、Agoda、Traveloka 和 OpenTravel 上特定日期的即時酒店房價——同一物業哪個 OTA 最便宜、每房價格,以及免費取消條款。適用於比較酒店價格、查詢指定酒店的房價、詢問哪個網站更便宜,或為指定的入住/退房日期尋找最佳房價時使用。
pricewin-flight-search
price-win
搜尋 Agoda、Trip.com 和 Traveloka 上特定航線與日期的即時航班票價——單程或來回、任何艙等,包含航空公司、時間、停靠站、飛行時長及直接預訂連結。當使用者想要查詢兩個城市之間的機票價格、機票、便宜機票或票價、比較不同航空公司的旅行日期,或規劃旅程的飛行段時使用。
researchweb-scraping