Skip to content

途牛旅行助手

当用户询问航班、酒店、景点门票、火车票、邮轮、度假产品(跟团/自助/自驾/当地游等)等旅行服务时,使用此 skill 通过 tuniu CLI 调用途牛服务。

运行环境要求

本 skill 通过 shell exec 执行 tuniu CLI 命令调用途牛服务。运行环境必须安装 tuniu-cli,否则无法调用服务。

安装 tuniu-cli

bash
# npm 全局安装(推荐)
npm install -g tuniu-cli@latest

# 或使用 npx 临时调用
npx tuniu-cli --version

配置要求

必需配置

  • TUNIU_API_KEY:途牛开放平台 API key,用于认证

用户需在 途牛开放平台 注册并获取上述密钥。

bash
export TUNIU_API_KEY=your_api_key

速查表

意图识别(用户说什么 → 用什么工具)

用户意图关键词server首选工具必填参数
航班/机票/飞机flightsearchLowestPriceFlightdepartureCityName, arrivalCityName, departureDate
酒店/住宿/民宿hoteltuniu_hotel_searchcityName
门票/景点门票ticketquery_cheapest_ticketsscenic_name
火车票/高铁/动车trainsearchLowestPriceTraindepartureCityName, arrivalCityName, departureDate
邮轮/游轮cruisesearchCruiseListdepartsDateBegin, departsDateEnd
度假/跟团/自助游/自驾游/旅游线路holidaysearchHolidayList无单一必填(建议 keyWord 和/或结构化条件;若传出游日期则 departsDateBegindepartsDateEnd 需成对)

基本命令格式

bash
tuniu call <server> <tool> -a '<JSON参数>'
参数说明
server服务名称:tickethotelflighttraincruiseholiday
tool工具名称,如 query_cheapest_ticketssearchLowestPriceFlight
--args-a工具输入参数,必须是合法的 JSON 字符串

重要--args 的值必须是 JSON 格式,且用引号包裹。中文可直接写入,无需转义。无参数时用空对象:-a '{}'

服务工具链路

服务完整流程(搜索→详情→下单)
flightsearchLowestPriceFlightmultiCabinDetailssaveOrdercancelOrder
hoteltuniu_hotel_searchtuniu_hotel_detailtuniu_hotel_create_order
ticketquery_cheapest_ticketscreate_ticket_order
trainsearchLowestPriceTrainqueryTrainDetailbookTraincancelOrder
cruisesearchCruiseListgetCruiseProductDetailgetCruiseCabinAndRoomsaveCruiseOrder
holidaysearchHolidayListgetHolidayProductDetailgetHolidayBookingRequiredInfo(可选,预订说明)→ saveHolidayOrder

常用辅助命令

命令用途
tuniu list / tuniu list <server>列出服务/工具
tuniu help <server> <tool>查看参数说明
tuniu schema --output json获取完整 Schema
tuniu discovery refresh && tuniu discovery list检查新服务
tuniu call ... -d调试模式
tuniu skill version查看已安装 skill 版本
tuniu skill install [--agent/--dir]安装/更新 skill 到指定 Agent 或目录

服务发现触发条件

当遇到以下情况时,必须先执行 tuniu discovery refresh && tuniu discovery list

  1. 用户需求不在已知服务列表中(如签证、租车、度假套餐等)
  2. tuniu list 返回的服务不包含用户需要的功能
  3. 工具调用返回"工具不存在"错误(退出码 102)
  4. 首次使用 tuniu-cli 时(确保获取最新服务列表)
bash
tuniu discovery refresh && tuniu discovery list

执行后重新检查服务列表,再决定下一步调用。若仍无法满足用户需求,才告知用户当前平台暂不支持该功能。


Skill 版本与更新说明

tuniu-cli 提供 skill 子命令,用于维护本助手在各 AI Agent 目录下的安装与版本查看,与业务调用(tuniu call)相互独立。

使用场景简述

  • tuniu skill version:在已配置多台 Agent(如 Cursor、Claude 等)时,检查各目录下已安装的 skill 版本、来源与安装时间;便于确认是否与文档站最新包一致。
  • tuniu skill install:需要安装或更新本 skill 时使用。默认仅写入 ~/.agents/skills/tuniu-cli/;通过 --agent 可指定单个、多个(逗号分隔)或 all(全部内置支持的 Agent);--dir 可额外指定自定义 skills 根目录。
  • npm install / npm ci:安装 tuniu-cli 时若启用脚本,postinstall 可能已根据本机存在的 Agent 父目录自动复制内置 skill;若需与线上一致或显式更新,仍建议执行 tuniu skill install

更完整的参数与示例见:tuniu skill install --help


隐私与个人信息(PII)说明

预订功能会将用户提供的个人信息(联系人姓名、手机号、乘客姓名、证件号等)通过 tuniu CLI 发送至途牛远端服务,以完成订单创建。使用本 skill 即表示用户知晓并同意上述 PII 被发送到外部服务。请勿在日志或回复中暴露用户个人信息。

适用场景

  • 机票搜索、舱位查询、机票预订
  • 酒店搜索、详情查询、酒店预订
  • 景点门票查询、门票预订
  • 火车票车次查询、车次详情、火车票预订
  • 邮轮产品搜索、团期查询、邮轮预订(兼容"游轮"说法)
  • 度假产品搜索、团期价格日历、度假预订(兼容跟团、自助游、自驾游、当地游等表述)
  • 动态服务发现:当用户旅行需求超出上述服务范围时,通过 discovery 功能检查是否有新服务上线

动态服务发现

途牛 CLI 支持动态发现新服务。触发条件见上方 服务发现触发条件 章节,满足条件时执行:

bash
tuniu discovery refresh && tuniu discovery list

服务发现默认开启。如不确定,可先执行 tuniu discovery status 确认;若返回 启用: 否,手动开启:

bash
export TUNIU_DISCOVERY_ENABLED=true
命令用途
tuniu discovery status查看启用状态、缓存状态、服务数量
tuniu discovery list获取当前可用服务列表(失败时回退静态配置/缓存)
tuniu discovery refresh强制刷新缓存,获取最新服务列表

工具调用返回退出码 102 时,先执行 tuniu discovery refresh && tuniu schema --output json,再重试调用。

最佳实践

  1. 初始化时:执行 tuniu discovery status 确认服务发现状态(默认开启)
  2. 遇到新需求时:先执行 tuniu discovery refresh 刷新缓存,再 tuniu discovery list 查看最新服务
  3. 获取新服务能力:执行 tuniu schema --output json 获取最新工具定义
  4. 降级处理:如果 discovery 服务不可用,会自动回退到静态配置

各服务详细说明

1. 机票服务 (flight)

触发词:航班、机票、飞机、某地到某地航班、查机票、机票价格

1.1 航班搜索 (searchLowestPriceFlight)

支持 6 种查询模式

  • 默认低价查询:不传 searchType
  • TIME 时间范围查询:searchType="TIME",按出发/到达时间筛选
  • PRICE 价格区间查询:searchType="PRICE",按价格区间筛选
  • NEAR_GO 周边出发:searchType="NEAR_GO",查询出发地周边机场
  • NEAR_BACK 周边到达:searchType="NEAR_BACK",查询目的地周边机场
  • TRANSFER 中转查询:searchType="TRANSFER",查询中转航班

必填参数departureCityNamearrivalCityNamedepartureDate(YYYY-MM-DD)

翻页:传相同城市日期参数 + pageNum(2=第二页,3=第三页…)

bash
# 默认低价查询
tuniu call flight searchLowestPriceFlight -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15"}'

# TIME 模式:早班机
tuniu call flight searchLowestPriceFlight -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15","searchType":"TIME","departureTime":"06:00-10:00"}'

# 翻页查询
tuniu call flight searchLowestPriceFlight -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15","pageNum":2}'

1.2 舱位详情查询 (multiCabinDetails)

必填参数departureCityNamearrivalCityNamedepartureDate(YYYY-MM-DD)、flightNo

返回cabinPriceId(下单必需)

bash
tuniu call flight multiCabinDetails -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15","flightNo":"MU5101"}'

1.3 创建订单 (saveOrder)

前置条件:必须先调用 searchLowestPriceFlightmultiCabinDetails 获取 cabinPriceId

必填参数departureCityNamearrivalCityNamedepartureDateflightNocabinPriceIdtouristscontactTourist

bash
tuniu call flight saveOrder -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15","flightNo":"MU5101","cabinPriceId":"xxx","tourists":[{"name":"张三","idType":"身份证","idNumber":"310101199001011234","mobile":"13800138000"}],"contactTourist":{"name":"张三","mobile":"13800138000"}}'

1.4 取消订单 (cancelOrder)

bash
tuniu call flight cancelOrder -a '{"orderId":"订单号"}'

2. 酒店服务 (hotel)

触发词:酒店、住宿、民宿、某地酒店、入住、查酒店

必填参数cityName可选参数checkIncheckOut(YYYY-MM-DD)、keywordprices

翻页:传 queryId(首次搜索返回)和 pageNum

bash
# 第一页
tuniu call hotel tuniu_hotel_search -a '{"cityName":"北京","checkIn":"2026-03-01","checkOut":"2026-03-03"}'

# 翻页(使用 queryId)
tuniu call hotel tuniu_hotel_search -a '{"queryId":"xxx","pageNum":2}'

2.2 酒店详情 (tuniu_hotel_detail)

必填参数hotelIdhotelName 二选一

bash
tuniu call hotel tuniu_hotel_detail -a '{"hotelId":12345,"checkIn":"2026-03-01","checkOut":"2026-03-03"}'

2.3 创建订单 (tuniu_hotel_create_order)

前置条件:必须先调用 tuniu_hotel_detail 获取 preBookParam

必填参数hotelIdroomIdpreBookParamcheckInDatecheckOutDateroomCountroomGuestscontactNamecontactPhone

bash
tuniu call hotel tuniu_hotel_create_order -a '{"hotelId":"xxx","roomId":"xxx","preBookParam":"xxx","checkInDate":"2026-03-01","checkOutDate":"2026-03-03","roomCount":1,"roomGuests":[{"guests":[{"firstName":"三","lastName":"张"}]}],"contactName":"张三","contactPhone":"13800138000"}'

3. 门票服务 (ticket)

触发词:门票、景点门票、某景点门票、门票价格、门票多少钱

3.1 门票查询 (query_cheapest_tickets)

必填参数scenic_name(景点名称)

返回productIdresId(下单必需)

bash
tuniu call ticket query_cheapest_tickets -a '{"scenic_name":"中山陵"}'

3.2 创建订单 (create_ticket_order)

前置条件:必须先调用 query_cheapest_tickets 获取 productIdresId

必填参数product_idresource_iddepart_dateadult_numcontact_namecontact_mobiletourist_1_nametourist_1_mobiletourist_1_cert_typetourist_1_cert_no

bash
tuniu call ticket create_ticket_order -a '{"product_id":12345,"resource_id":"res001","depart_date":"2026-04-01","adult_num":1,"contact_name":"张三","contact_mobile":"13800138000","tourist_1_name":"张三","tourist_1_mobile":"13800138000","tourist_1_cert_type":"身份证","tourist_1_cert_no":"310101199001011234"}'

4. 火车票服务 (train)

触发词:火车票、火车、车次、某站到某站火车、高铁、动车

4.1 查询车次列表 (searchLowestPriceTrain)

必填参数departureCityNamearrivalCityNamedepartureDate(yyyy-MM-dd) 可选参数departureTimearrivalTime(时间范围,如"08:00-12:00")

翻页:传首次查询返回的 queryIdpageNum

bash
# 首次查询
tuniu call train searchLowestPriceTrain -a '{"departureCityName":"南京","arrivalCityName":"上海","departureDate":"2026-03-20"}'

# 翻页
tuniu call train searchLowestPriceTrain -a '{"queryId":"xxx","pageNum":2}'

4.2 查询车次详情 (queryTrainDetail)

必填参数departureStationNamearrivalStationNamedepartureDatetrainNum

返回resIdpricedepartsDate(下单必需)

bash
tuniu call train queryTrainDetail -a '{"departureStationName":"南京南","arrivalStationName":"上海虹桥","departureDate":"2026-03-20","trainNum":"G203"}'

4.3 预订下单 (bookTrain)

前置条件:必须先调用 searchLowestPriceTrainqueryTrainDetail

必填参数resourcesadultTouristscontactacceptStandingTicket

bash
tuniu call train bookTrain -a '{"acceptStandingTicket":false,"adultTourists":[{"name":"张三","psptId":"310101199001011234","psptType":1,"isStuDisabledArmyPolice":0,"tel":"13800138000"}],"contact":{"tel":"13800138000"},"resources":[{"resourceId":2121337089,"adultPrice":141.0,"departsDate":"2026-03-20"}]}'

4.4 取消订单 (cancelOrder)

bash
tuniu call train cancelOrder -a '{"orderId":"订单号"}'

5. 邮轮服务 (cruise)

触发词:邮轮、游轮、邮轮产品、游轮搜索、邮轮预订(兼容"游轮"说法)

5.1 邮轮列表搜索 (searchCruiseList)

必填参数departsDateBegindepartsDateEnd(YYYY-MM-DD) 可选参数cruiseLineName(航线)、cruiseBrand(品牌)、tourDay(天数)、pageNum

日期约束:起始日期不得早于当天,结束日期不得早于起始日期

筛选说明:接口支持仅按日期查询;用户只给日期范围时直接查,不要为了补齐可选筛选而额外追问航线/品牌/天数。

翻页说明:用户说“还有吗/翻页/下一页”时,保持相同筛选条件,仅更新 pageNum(2/3/4...)。

列表展示要求:当前页 data.rows 需逐条展示,不应无说明地只列少量样例。

bash
tuniu call cruise searchCruiseList -a '{"departsDateBegin":"2026-03-17","departsDateEnd":"2026-03-30"}'

# 按航线筛选
tuniu call cruise searchCruiseList -a '{"departsDateBegin":"2026-03-17","departsDateEnd":"2026-03-30","cruiseLineName":"长江三峡","cruiseBrand":"世纪邮轮"}'

5.2 产品详情 (getCruiseProductDetail)

所有参数必须从 searchCruiseList 返回结果中获取,且来自同一条 rows 记录

必填参数productIddepartsDateBegindepartsDateEnddepartCityCode(数组格式,必须原样传递)、classBrandParentIdproMode

团期规则:必须展示 productPriceCalendar 中全部可售团期;若 count=0rows 为空,明确告知无可售团期并停止后续下单链路。

bash
tuniu call cruise getCruiseProductDetail -a '{"productId":"321648365","departsDateBegin":"2026-02-10","departsDateEnd":"2026-02-14","departCityCode":[1602],"classBrandParentId":12,"proMode":1}'

5.3 邮轮基础信息(可选) (getCruiseBaseInfo)

用途:查询船只参数、餐饮娱乐、涵盖舱等说明;不替代可售房型查询。

bash
tuniu call cruise getCruiseBaseInfo -a '{"productId":"321648365","traceId":"<可选traceId>"}'

5.4 行程详情(可选) (getJourneyDetail)

用途:按天展开行程详情;与预订主链路解耦。

bash
tuniu call cruise getJourneyDetail -a '{"productId":"321648365","traceId":"<可选traceId>"}'

5.5 查询舱位房型 (getCruiseCabinAndRoom)

必填参数productIddepartDate(用户从团期列表选择的日期)

参数来源约束departDate 必须来自 getCruiseProductDetail.data.productPriceCalendar.rows[].departDate

下单映射约束(关键)

  • journeyId 必须来自本次返回的 cabinList[].journeyId
  • resourceId 必须取用户所选房型 priceResroomTypeResType=0 条目的 resId
  • subResourceId(可选)取同一 priceResroomTypeResType=1 条目的 resId
  • 严禁把 priceRes 数组下标(0/1/2...)当作 resourceId/subResourceId
  • 严禁复用历史对话中的 ID,必须以“最近一次”舱位查询结果为准
bash
tuniu call cruise getCruiseCabinAndRoom -a '{"productId":"321648365","departDate":"2026-05-01"}'

5.6 获取预订信息 (getCruiseBookingRequiredInfo)

说明:无参数,返回预订必填字段与合规提示文本。

bash
tuniu call cruise getCruiseBookingRequiredInfo -a '{}'

5.7 创建订单 (saveCruiseOrder)

前置条件:必须先调用 getCruiseProductDetailgetCruiseCabinAndRoomgetCruiseBookingRequiredInfo

必填参数productIddepartureDatedepartureCityNamedurationnightvendorIdselectRestourists

来源与校验要点

  • departureDate 必须取 getCruiseCabinAndRoom.data.base.beginDate
  • selectRes[].journeyId/resourceId/subResourceId 必须逐项回溯到最近一次 getCruiseCabinAndRoom 原始返回
  • resourceId/subResourceId 必须是 priceRes[].resId 的真实值,不能是索引或推断值
  • 建议透传 getCruiseProductDetailtraceId 到后续调用,便于排障
bash
tuniu call cruise saveCruiseOrder -a '{"productId":"321648365","departureDate":"2026-05-01","departureCityName":"上海","duration":5,"night":4,"vendorId":73197,"selectRes":[{"journeyId":91808486,"resourceId":2121750804}],"tourists":[{"name":"张三","idType":"身份证","idNumber":"310101199001011234","mobile":"13800138000"}]}'

6. 度假产品服务 (holiday)

触发词:度假、跟团、自助游、自驾游、旅游产品、当地游、线路、目的地度假(与门票/酒店等区分时优先用列表搜索)

6.1 度假列表搜索 (searchHolidayList)

参数规则:无单一必填参数。建议至少提供 keyWord 和/或结构化条件(日期、出发城市、产品类型等)。 可选参数keyWorddepartsDateBegindepartsDateEnd(成对出现,yyyy-MM-dd)、departCityNametourDayqueryTypeName自驾游 / 自助游 / 跟团)、brandTypeNameconditionslowPricehighPricepageNum

keyWord 实操要点

  • keyWord 用于承接目的地/主题等检索语义,不要混入“第2页/下一页”等翻页词
  • 避免将“推荐/热门/受欢迎”等排序词写入 keyWord
  • 翻页时保持筛选条件不变,仅更新 pageNum

列表价格展示searchHolidayList 返回的 pricestarPrice 等价为起步价。向用户展示时必须标注「起」(如 ¥38起),不得写成确定价,避免误导。

bash
tuniu call holiday searchHolidayList -a '{"keyWord":"三亚","departsDateBegin":"2026-04-10","departsDateEnd":"2026-04-15"}'

# 指定上海出发、跟团
tuniu call holiday searchHolidayList -a '{"keyWord":"云南","departsDateBegin":"2026-04-10","departsDateEnd":"2026-04-20","departCityName":"上海","queryTypeName":"跟团"}'

6.2 产品详情 (getHolidayProductDetail)

前置条件:必须先调用 searchHolidayList所有入参须从列表 data.rows[] 对应行原样取得(含 departCityCode 数组、classBrandIdclassBrandParentIdproMode 等)。

必填参数productIddepartCityCode(数组)、classBrandParentIdproMode;若列表行含 departsDateBegin/departsDateEnd 则需成对传入且与列表一致。

展示约束

  • 团期需展示 productPriceCalendar.rows 中全部可选日期与价格
  • count=0rows 为空,明确告知暂无可售团期并停止下单链路
  • 若返回 journeySummary,按天(第N天+标题+模块)组织展示
bash
tuniu call holiday getHolidayProductDetail -a '{"productId":"321619424","departCityCode":[1602],"classBrandParentId":12,"proMode":1}'

6.3 预订说明 (getHolidayBookingRequiredInfo)

无参数,返回预订需填信息的中文说明(纯文本,直接展示,不做 JSON.parse)。

bash
tuniu call holiday getHolidayBookingRequiredInfo -a '{}'

6.4 创建订单 (saveHolidayOrder)

前置条件:必须先调用 getHolidayProductDetaildepartDate 须来自详情中 productPriceCalendar.rows[].departDate;建议传入详情返回的 traceId

必填参数productIddepartDatedepartCityNamedurationtouristsnight 可选(半日游可能为 0 或空)。

参数来源约束departCityName 必须取 getHolidayProductDetail.data.departureCityName

bash
tuniu call holiday saveHolidayOrder -a '{"productId":"321619424","departDate":"2026-05-01","departCityName":"南京","duration":5,"night":4,"traceId":"<详情返回的traceId>","tourists":[{"name":"张三","idType":"身份证","idNumber":"310101199001011234","mobile":"13800138000"}]}'

响应处理

成功响应

stdout 输出 JSON 格式:

json
{
  "success": true,
  "result": {...},
  "metadata": {...}
}

业务字段解析补充

  • 通常 tuniu call 的 stdout 为统一 JSON 包装,业务结果在 result 内。
  • 对于多数查询/下单工具,业务字段可按 JSON 对象读取。
  • 对于 getHolidayBookingRequiredInfogetCruiseBookingRequiredInfo,返回内容为预订说明文本,应按纯文本展示,不要强行按业务 JSON 结构解析。

错误响应

json
{
  "success": false,
  "error": {
    "type": "ToolNotFoundError",
    "message": "工具不存在",
    "code": 102
  }
}

退出码含义

退出码含义处理建议
0成功解析 stdout JSON
101连接失败重试或检查网络
102工具不存在运行 tuniu list <server> 校验
103参数错误运行 tuniu help <server> <tool>
104认证失败检查 TUNIU_API_KEY
105超时使用 -t 60 增加超时
108未配置 API Key告知用户前往 途牛开放平台 注册获取 API Key,并执行 export TUNIU_API_KEY=your_api_key
199未知错误使用 -d 调试模式

使用示例

以下示例中,所有参数均从用户表述或上一轮结果中解析并填入。

机票场景

用户:3月15号北京到上海的航班

AI 执行

bash
tuniu call flight searchLowestPriceFlight -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15"}'

用户:看一下 MU5101 这个航班的舱位

AI 执行

bash
tuniu call flight multiCabinDetails -a '{"departureCityName":"北京","arrivalCityName":"上海","departureDate":"2026-03-15","flightNo":"MU5101"}'

酒店场景

用户:北京3月1号入住一晚,有什么酒店?

AI 执行

bash
tuniu call hotel tuniu_hotel_search -a '{"cityName":"北京","checkIn":"2026-03-01","checkOut":"2026-03-02"}'

门票场景

用户:中山陵门票多少钱?

AI 执行

bash
tuniu call ticket query_cheapest_tickets -a '{"scenic_name":"中山陵"}'

火车票场景

用户:3月20号南京到上海的火车票

AI 执行

bash
tuniu call train searchLowestPriceTrain -a '{"departureCityName":"南京","arrivalCityName":"上海","departureDate":"2026-03-20"}'

邮轮场景

用户:查一下3月17到3月30的邮轮

AI 执行

bash
tuniu call cruise searchCruiseList -a '{"departsDateBegin":"2026-03-17","departsDateEnd":"2026-03-30"}'

度假场景

用户:4月中旬想去三亚有什么度假线路?

AI 执行

bash
tuniu call holiday searchHolidayList -a '{"keyWord":"三亚","departsDateBegin":"2026-04-10","departsDateEnd":"2026-04-20"}'

注意事项

  1. 密钥安全:不要在回复或日志中暴露 TUNIU_API_KEY
  2. PII 安全:联系人姓名、手机号、乘客姓名、证件号仅在预订时发送至 MCP 服务,勿在日志或回复中暴露
  3. 认证:若遇认证错误(退出码 104、108),必须告知用户前往 途牛开放平台 注册获取 API Key,并提示设置 TUNIU_API_KEY
  4. 日期格式:所有日期均为 YYYY-MM-dd 或 yyyy-MM-dd
  5. 参数验证:下单前必须先调用搜索/详情接口获取必需参数(如 cabinPriceId、productId、resId 等)
  6. 翻页:各服务翻页参数不同,注意区分
  7. 支付提醒:下单成功后必须提示用户点击支付链接完成支付
  8. 调试模式:遇到问题时使用 -d 参数查看详细请求/响应
  9. 游轮兼容:用户说"游轮"时等同于"邮轮"
  10. 度假详情参数getHolidayProductDetaildepartCityCode 等字段必须与 searchHolidayList 列表行一致,勿拆数组或自行拼参;saveHolidayOrderdepartDate 必须来自详情团期日历中的可选日期
  11. 邮轮下单 ID 映射saveCruiseOrder.selectResjourneyId/resourceId/subResourceId 只能来自最近一次 getCruiseCabinAndRoom 返回(resourceId/subResourceId 必须取 priceRes[].resId,不能用数组下标或历史 ID)
  12. 团期价格展示口径:成人/儿童价格均需基于可售团期原始字段展示;儿童价为 0 时不展示儿童价,双 0 团期不展示
  13. 订单结果提示:下单成功后应明确展示 orderIdorderDetailUrl,并提醒用户在途牛 App/小程序跟进订单与出行通知

Powered by VitePress