Book Airport Transfer
book_london_airport_transferBook a London airport or cruise port transfer to/from any UK address. Creates a REAL reservation — only call after the customer confirms.
REQUIRED FLOW — collect ALL info before booking:
Ask: Where are you travelling from and to?
Ask: What date and time? (ask naturally, never expose technical formats like YYYY-MM-DD to the user)
MANDATORY — Ask: How many passengers travelling, and how many suitcases/large bags? You MUST collect the exact passenger count for EVERY booking, even when the customer has already chosen the largest vehicle (Executive 8 Seater / Minibus). Passenger count is operational data the driver needs (seat allocation, child-seat planning, dispatch) — never skip this question, never assume "they picked the big car so it doesn't matter". Do not proceed without an explicit number.
Call london_airport_transfer_quote to show prices and car options
Ask: Which car type would you like? (show the options with prices)
Ask: Passenger full name
Ask: Phone number (with country code)
Ask: Email address (for booking confirmation)
CRITICAL — POSTCODE / EXACT ADDRESS: NEVER book using only a city, town, or area name (e.g. "Windsor", "Manchester", "central London"). UK city names cover wide areas — pricing and the actual pickup/dropoff point will be wrong (a customer asking for "Windsor" must reach SL4, not Harrow HA). If you only have a city/town name, ask the customer for the FULL UK postcode (e.g. "SL4 5LP") AND the house/building number or name. If you have a postcode but no building number, ask for the building number/name. Do not guess, do not substitute a default. The exact door is required so the driver can reach the customer.
Ask the RIGHT transport detail based on booking type:
Airport PICKUP (customer arriving at airport) → Flight number (e.g. BA2534). Use validate_flight to verify and auto-detect terminal.
Airport DROPOFF (customer going TO airport) → Flight number is optional, don't require it
Cruise port pickup/dropoff → Cruise/ship name (e.g. P&O Ventura)
Train station pickup/dropoff → Train number or arriving from where
Non-airport/port/station route → skip, no transport detail needed
MANDATORY — Ask: "Do you have any special requests? For example, child seat, extra luggage, wheelchair, pet?" You MUST ask this every time. Do NOT skip it. If they mention a child seat, ask the child's age (baby seat 0-12mo, child seat 1-4yrs, booster 4-12yrs). Check seat limit for their car (Saloon 1, People Carrier 2, 8 Seater 3). If they ask for extra pickup or drop-off stops (via points): the quote covers ONE pickup → ONE drop-off and the quote tool cannot price a stop. Book the main journey, put the stop in special_requests (e.g. "extra stop at 12 High St, Slough"), and tell them: "Extra stops are not included in this price — our office will confirm the extra cost with you before the trip."
MANDATORY — Before confirming the booking, inform the passenger: "We'll create your booking and you can pay the driver in cash on the day. If you prefer to pay online, you can do so via your manage booking link — we accept all major cards including Amex, Apple Pay, Google Pay, PayPal, Revolut, WeChat Pay, and AliPay." Wait for the customer to confirm.
Confirm all details with the customer, then call book_london_airport_transfer
AFTER booking: Share the reservation_id number (the numeric LT reference, e.g. "966811") and the manage_booking_url. This numeric reservation_id is what appears on the customer confirmation email AND what the manage-booking page accepts — it is the customer-facing reference. Do NOT mention the internal booking_reference (APL-XXXXXX format) to the customer; that is for our internal tagging only. Say: "Booking confirmed! Your reference is #{reservation_id}. You can track your driver, view booking details, and pay online (all major cards, Amex, Apple Pay, Google Pay, PayPal, Revolut, WeChat Pay, AliPay) using this link: {manage_booking_url}"
Share meeting_point instructions — ALWAYS include the terminal/location name from meeting_point.name (e.g. "Meeting point at Heathrow Terminal 2: ..."). Never show meeting instructions without specifying which terminal or location.
IMPORTANT: Never call book_london_airport_transfer without customer confirmation. Always show the price first via london_airport_transfer_quote. IMPORTANT: The customer MUST choose a car type from the quote. Do NOT auto-select a car — always ask which one they want. IMPORTANT: Email address is REQUIRED — it is used for the booking management link and confirmation. IMPORTANT: Always inform the customer about payment options (cash or card/Apple Pay/Google Pay via manage booking link) BEFORE making the booking. IMPORTANT — PRICING: Quote the prices returned by london_airport_transfer_quote EXACTLY. Do NOT calculate discounts, do NOT round up or down, do NOT modify prices in any way. The prices returned are already final and include all surcharges. Never offer a discount unless it is explicitly returned by the quote tool. The MCP server is the only source of truth for pricing.
BOOKINGS WITHOUT AN ACCOUNT: passenger_email is REQUIRED (the booking reference + this email is how the customer manages the booking later), and callers without an account may create at most 5 bookings per hour.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Pickup location — airport name, full UK postcode + building number, or full street address. NEVER pass a bare city/town name (e.g. "Manchester") — ask the customer for the full postcode + building number first. | |
| country | No | Set to "TR" for Turkey routes (Istanbul, Sabiha Gökçen/SAW, Istanbul Airport/IST, Antalya, Dalaman, Bodrum, etc.) — these are cash bookings priced in EUR. Omit for UK routes. | |
| car_type | Yes | The car type the customer chose from the quote (e.g. "Saloon", "People Carrier", "Executive Saloon") — REQUIRED. Never pick a car for the customer. | |
| suitcases | Yes | Number of suitcases / large bags (hand luggage does not count) — REQUIRED. Ask the customer explicitly. | |
| passengers | Yes | Exact number of passengers travelling — REQUIRED. Ask the customer explicitly even if they pre-picked the largest car; never assume from car_type. | |
| cruise_name | No | Cruise/ship name for cruise port pickups/dropoffs (e.g. "P&O Ventura") | |
| destination | Yes | Dropoff location — full UK postcode + building number/name (e.g. "SL4 5LP, 12 Castle Hill"), full street address, or airport name. NEVER pass a bare city/town name like "Windsor" or "Manchester" — UK cities cover wide areas, pricing and pickup will be wrong. If the customer only gave a city, ask for the full postcode + building number before calling. | |
| door_number | No | House/building number or name for postcode destinations (e.g. "12", "Flat 3", "The Old Rectory"). Required when destination is a postcode. | |
| train_number | No | Train number or origin for train station pickups/dropoffs (e.g. "from Manchester") | |
| flight_number | No | Flight number for airport pickups/dropoffs (e.g. "BA2534") | |
| transfer_date | Yes | Transfer date (e.g. "2026-03-15"). Ask the user naturally for their travel date and convert to YYYY-MM-DD internally. | |
| transfer_time | Yes | Transfer time (e.g. "14:30"). Ask the user naturally for their preferred time and convert to HH:MM internally. | |
| passenger_name | Yes | Full name of the passenger | |
| passenger_email | Yes | Passenger email address — REQUIRED: it receives the confirmation and, with the booking reference, is the customer's key to manage the booking later. | |
| passenger_phone | Yes | Passenger phone number with country code (e.g. "+447123456789") | |
| whatsapp_opt_in | Yes | REQUIRED — the customer's actual answer, never assumed. Ask: "May we send your confirmation, driver details and pickup updates to this number on WhatsApp? (reply STOP any time to opt out)". true = yes, false = no (we then use email/phone). | |
| special_requests | No | Any special requirements (e.g. "child seat needed", "extra luggage") | |
| airport_wait_minutes | No | AIRPORT PICKUPS: REQUIRED (the tool refuses an airport pickup without it). Minutes after landing the customer wants the driver in the arrivals hall (30 / 45 / 60 / 90 — most choose 60; ~45 European hand-luggage, ~90 long-haul with bags). Explain it like this: the driver is in the terminal at landing + this many minutes and then waits 30 min free (+30 min for £15 on request). Pass the figure the customer agreed and set transfer_time = landing time + this many minutes. |