pricewin-booking-assistant

작성자: price-win

호텔 객실을 추천하고 실제 예약을 처음부터 끝까지 완료합니다 — 결제 링크(은행 QR, 카드 또는 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
주어진 여행 날짜와 투숙객 수에 대해 부킹, 아고다, 구글 호텔, 오픈트래블의 호텔 가격 비교 및 특가 정보를 제공합니다. 호텔 가격, 특가, 또는 OTA 요금 비교에 사용하세요.
pricewin-hotel-deal-finder
price-win
전 세계 모든 도시와 모든 여행 날짜에 대해 Booking.com, Agoda, Google Hotels, OpenTravel의 실시간 가격을 비교하여 가장 저렴한 호텔 딜을 찾아줍니다 — 한 번의 명령으로 최고 가성비, 최저가, 품질 선택지를 순위로 반환하며 직접 예약 링크와 함께 모든 가격을 USD로 환산합니다. 호텔 가격, 호텔 딜, 가장 저렴한 객실이나 요금, 최적의 호텔 요금, 호텔 가격 비교, 또는 어떤 OTA가 더 저렴한지 묻는 경우에 사용하세요 — 예: '도쿄에서 부킹닷컴과 아고다 중 어디가 더 저렴한지', '호텔을 찾아줘...
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