pricewin-booking-assistant

作成者: price-win

ホテルルームを提案し、実際の予約をエンドツーエンドで完了 — OpenTravel直営物件を支払いリンク(銀行QR、カード、PayPal)で予約、支払い状況確認、期限切れリンクの再送信、または予約キャンセル。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のリアルタイム価格を比較し、世界中の都市と旅行日程に対応した最安ホテルディールを検出します。1つのコマンドで、最良価格、最安値、高品質の宿泊先をランク付けし、USD表示の直接予約リンクを提供します。ホテル価格、ディール、最安部屋や料金、最高宿泊料金、ホテル価格比較、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、1室あたりの料金、無料キャンセル条件を確認。ホテル料金の比較、指定ホテルの客室料金確認、どちらのサイトが安いかの問い合わせ、指定チェックイン/チェックアウト日付での最安料金検索に使用。
pricewin-flight-search
price-win
Agoda、Trip.com、Travelokaで、ルートと日付を指定してリアルタイムの航空運賃を検索します。片道または往復、全客室クラスに対応し、航空会社、時刻、乗り継ぎ、所要時間、直接予約リンクを表示します。ユーザーが2都市間の航空運賃、飛行機のチケット、格安航空券、旅行日における航空会社の比較、または旅行のフライト区間の計画を求めている場合に使用します。
researchweb-scraping