Skill detail

pricewin-booking-assistant

Recommends hotel rooms and completes real bookings end to end for OpenTravel direct properties, including payment links, status checks, and cancellations, with OTA fallback links.

Why we recommend it: Recommends rooms and completes real hotel bookings with payment, serving the Stay and Budget & docs facets.

Needs (stated): MCP server

MatchDirectRecommended for Travel Planning
Sourceprice-win/​pricewin-skills-hubExternal source
Reported installs10,474Popularity signal only

Inspect before use

Read the source instructions and check the requirements before you install this skill.

Saved source preview

SKILL.md

The saved excerpt is a snapshot from when this skill was listed. The external source remains the complete and most current version.

---
name: pricewin-booking-assistant
description: Recommend hotel rooms and complete a real booking end to end — reserve an OpenTravel direct property with a payment link (bank QR, card, or PayPal), check payment status, resend an expired link, or cancel a booking. Falls back to direct Booking.com/Agoda/Traveloka links for OTA-only hotels. Use when booking or reserving a hotel, getting room recommendations, paying for a stay, checking a confirmation code, or cancelling a reservation.
version: 1.0.3
author: PriceWin
platforms: [linux, macos, windows]
tags: [hotel-booking, book-hotel, reserve-hotel, room-recommendation, booking-links, payment-link, booking-management, check-booking, cancel-booking, cancellation, opentravel, agoda, booking-com, mcp, hotel, travel, accommodation]
metadata:
  openclaw:
    emoji: "🛎️"
    homepage: https://github.com/Price-Win/pricewin-skills-hub
---

> 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

| Source | Can 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. **Discover** — `search_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. **Score** — `rating × log(reviewCount + 1)` — balances quality against credibility.
   Strong candidates: `rating ≥ 8.0` and `reviewCount ≥ 100`
3. **Rank** — top 3–5 by score
4. **Detail** — `get_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`](../pricewin-hotel-search/SKILL.md)

## 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 said | Method |
|---|---|
| "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 b
Read the full source on GitHub (opens external page)
Context

Related work