| Login is deferred | Pause protected work until a complete, usable uk_ or sk_ Token is configured; public airport lookup and tokenless flight search may continue when no authentication rejection is active. Configuration does not by itself prove authorization. |
| Continuing verification after a token change or verification 20105 | Clear old quotations, search once with the latest token, show the new results and explain the token change, then wait for a new customer selection. Never automatically match and verify the old selection. |
Treating uk_ as unsupported or sending it as user_key | Accept uk_ for the personal channel and send it only in the flight API's X-Skill-Token header, just like sk_. |
Reusing a quotation after configuring a new sk_ token | The verification request authorizes a fresh search without extra permission. Display new quotations and require a new selection. Existing orders remain on their creation channel. |
| Searching with a country as the route endpoint | Ask for the actual city or airport; never use a country directly for airport lookup or flight search. |
| Searching before validating dates or confirming all passenger counts | Validate all leg dates before calling flight search: today through one year after today inclusive in the user’s timezone. Allow today; reject past dates, dates beyond the upper boundary, and decreasing leg dates. Confirm adult, child, and infant counts. |
| Reusing quotations after search criteria or passenger counts change | Immediately discard old quotations and sessions, then obtain approval for a new live search. |
| Automatically retrying an empty result | Treat no quotations as normal; explain it and obtain user approval before any repeat search. |
| Re-sorting offers locally | Preserve the API's ascending total-price order. |
| Showing search offers as bullets or using the wrong columns | Use the seven-column quotation table in the required order; align transfer segments on separate lines inside the flight, time/airport, departure-terminal, and cabin cells. |
| Omitting journey labels | Label round-trip journeys Outbound/Return and multi-city journeys Trip 1/Trip 2/… on every aligned segment line, translated into the response language. |
| Using an airline nickname or abbreviation | Display the full official airline name; if it cannot be resolved reliably, show the carrier code and flight number without inventing a name. |
| Showing arrival terminals in the quotation table | In the departure-terminal column, use only each segment's DepTerminal (departure_terminal). |
| Filling absent search data with placeholders | Leave the corresponding cell or segment portion empty; never convert missing baggage data into “no baggage”. |
| Showing cabin or booking-class codes | In the cabin column, translate CabinClass to the response language and do not display CabinCode or raw class codes. |
| Acting on rule changes during offer verification | Ignore rule_changed; report price_changed and the verified total/currency without rule-based branches or confirmations. |
| Booking using the searched price | Verify the selected offer and use the verified offer, price, currency, and session. |
| Verifying a quotation that is 20 minutes old | Discard it and obtain approval for a new search; expired quotations cannot be verified. |
| Treating selection as confirmation | Obtain explicit confirmation after the verified final summary. |
| Booking with missing passenger/contact data | Stop, list the missing or invalid required fields, and collect corrections before booking. |
| Discovering a child/infant after an adult-only quote | Explain the original quote's passenger basis, obtain actual counts/types, and re-search with approval; never relabel the passenger as an adult. |
| Searching an unsupported adult/infant group or silently repairing it | Stop before search, verification, or booking; at most one infant per actual accompanying adult, with no infant-only purchase. Preserve actual people and age types, ask before pursuing alternatives, and verify airline policy before promising eligibility. |
Omitting documents because support_no_card=true | Collect all document fields; this Skill requires complete travel-document information. |
| Combining first and last names in the final review | Display First name (given name) and Last name (surname) as separate fields and obtain explicit confirmation. |
| Retaining a quotation after a business failure | Remove affected quotations, number mappings, sessions, and confirmations. Verification 20105 uses the one-cycle token-change recovery; other failures use stage-specific recovery. |
| Masking data or using prose lists for second confirmation | Use the booking/payment review tables with complete available passenger, document, and contact values. Never include a Token. |
| Exposing raw errors or assuming no returned number means no order | Explain the failure, confirmed order-number state, and recovery step; retain sanitized diagnostics internally. |
| Reusing confirmation after passenger data changes | Revalidate and show the complete updated passenger, document, and contact review, then obtain a new explicit confirmation. |
| Retrying a booking timeout | Never automatically retry an ambiguous booking; report uncertainty and stop. |
| Creating payment without a current order view | Query the order first, present its returned summary and exact flight order total/currency, then obtain explicit confirmation immediately before creation. |
| Treating any non-cancelled order as payable | Continue only when the latest successful order query returns booking_successful, no paid/ticketed evidence, and a valid future deadline when one is returned. All other states stop payment creation. |
| Creating payment from the pre-confirmation query | After confirmation, query the order again and reapply every eligibility check. A failed query or any change to reviewed facts prevents creation until the normal review requirements are satisfied again. |
| Missing payment method | Do not create payment. Present the methods allowed for the queried order currency and require the user to select one. |
| Omitting payment-review details or the deadline reminder | Confirm flight, itinerary, passengers, payment method, exact flight order total/currency, the numeric Stripe fee and payable total plus the non-refundable-fee disclosure when applicable, and the latest payment time before payment creation; state explicitly when no deadline was returned. |
| Asking the user for a payment return URL | Do not ask for or send one; the service supplies it. |
| Showing internal payment identifiers or offering a CNY-only method for another currency | Show only Stripe, WeChat Pay, Alipay, and Online Banking. Offer the last three only for a queried CNY order, and map the chosen label to the request-only API value internally. |
| Omitting or double-charging the Stripe fee | When Stripe is selected, calculate 3.5% of the queried order total with decimal half-up rounding to two places, then add that fee to the order total. Show both numeric amounts and obtain explicit acknowledgement of the fee, total, and non-refundable nature. Never apply it to another method, send calculated amounts to the API, present local calculations as API-returned values, or add the fee again to a returned payment amount. |
| Retrying a payment timeout | Never retry an ambiguous payment creation. Query payment status to reconcile and report it exactly as returned. |
| Sending a payable customer to support merely because they ask about ticketing | Query the existing order as needed; for a payable booking_successful order, explain payment is next and guide payment-method selection. Do not charge again after payment/ticketing evidence or skip payment confirmation. |
| Treating a payment URL as success | Present the URL when returned, but never infer payment success or ticket issuance from it. |
| Shortening or hiding a payment URL | Show the complete returned payment_url as visible clickable text without ellipses, aliases, or modification. |
Sending AgentCode | Never send AgentCode; it is not part of this Skill's request contract. |
| Requests for extras or other unsupported operations | Politely direct the customer to company flight customer service; do not collect/send ancillary items or execute cancellation, change, refund, manual payment, or ticketing operations. |
| Listing city or airport choices, names, or codes from memory | Run search_airports; use and present only returned data. Before it returns, ask only whether the user accepts any airport or wants a specified airport. |
| Explaining quotation refund/change rules case by case | Use only the standardized post-payment no-refund/no-change reply and provide the TourMind flight customer-service email. |