pricewin-booking-assistant

作者: price-win

推荐酒店客房并端到端完成真实预订——通过支付链接(银行二维码、银行卡或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更便宜时使用——例如'is Booking or Agoda cheaper for Tokyo'、'find me a hotel in...
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