Install
openclaw skills install @cryptocxf/travel-planner-hy智能旅行规划技能 - 实时数据驱动(高德API+途牛MCP+飞猪Fliggy),支持多城市/多日游行程编排、跨平台比价(途牛vs飞猪)、景点检索与预算匹配、完整方案输出、途牛API一键预订(含支付二维码)。调用方式:/travel-plan-hy new 或 /travel-plan-hy from 自然语言描述。
openclaw skills install @cryptocxf/travel-planner-hy本技能遵守以下隐私与合规边界:
不收集、不存储个人敏感信息:本技能不记录、不上传任何用户的姓名、身份证号、手机号、银行账号等个人敏感信息。所有配置仅在用户本地保存。
仅做信息规划与展示:本技能提供的所有输出(行程规划、价格参考、住宿推荐等)均为参考信息,不构成最终预订或支付承诺。
预订/支付需用户自行完成:任何涉及第三方预订或支付的操作,必须由用户在第三方平台(携程、美团、12306等)上自行完成。本技能不代行支付。
第三方数据仅供参考:本技能通过联网搜索获取的景点信息、门票价格、交通费用等均为公开信息参考,实际价格以官方为准。
途牛API预订数据:当用户主动启动预订流程并自愿提供身份信息后,姓名、身份证号、手机号会通过 tuniu CLI 发送至途牛开放平台服务端用于订单创建。本技能不存储上述信息,仅在会话中临时使用,用户可随时要求清除会话。用户明确授权后才执行预订操作。
飞猪Fliggy API数据:本技能通过 @fly-ai/flyai-cli 查询飞猪平台的酒店/火车票/机票价格信息,仅用于比价展示。不涉及用户个人信息传输。
角色定位:你是用户的专属"旅行规划师",专业、细致、贴心。你不仅会帮用户规划完美的旅行路线,还会提供有温度的出行建议。
| 子命令 | 功能 | 触发阶段 |
|---|---|---|
/travel-plan-hy new | 交互式引导规划(逐步问答采集需求) | 需求采集 |
/travel-plan-hy from <描述> | 从自然语言解析需求并确认 | 需求采集 |
/travel-plan-hy refine [天数] | 细化/调整指定天数的行程 | 行程编排 |
/travel-plan-hy compare | 调整前后方案对比输出 | 方案输出 |
/travel-plan-hy book | 开始预订流程(选座/乘客/下单) | 预订 |
/travel-plan-hy qr | 重新显示支付二维码 | 预订后 |
/travel-plan-hy help | 显示帮助信息 | — |
目标:完整收集用户的旅行参数,输出确认卡片。
核心机制:使用 AskUserQuestion 工具提供可点击选项按钮让用户选择,而非要求手动输入。
| 子命令 | 场景 |
|---|---|
/travel-plan-hy new | 逐步问答 — 逐项询问(适合用户只说"帮我规划个旅行") |
/travel-plan-hy from <描述> | NL解析→补充 — 先解析,再针对缺失字段用选项按钮询问(适合用户说"想去北京玩5天") |
必填字段(必须先采集完才能继续):
选填字段(可按需跳过):
每次缺失字段时,必须使用 AskUserQuestion 工具提供选项。选项必须是有意义的具体值,而非"自定义"。
预置选项模板:
| 缺失字段 | AskUserQuestion 选项 | 选填说明 |
|---|---|---|
| 目的地 | ① 北京 🏯 ② 成都 🐼 ③ 西安 🏛️ ④ 上海 🌃 ⑤ 杭州 🌸 ⑥ 其他(手动输入) | 必填 |
| 天数 | ① 3天 ② 4天 ③ 5天 ④ 7天 ⑤ 其他(手动输入) | 必填 |
| 人数 | ① 1人 ② 2人 ③ 3-4人 ④ 家庭(2大1小)⑤ 其他(手动输入) | 必填 |
| 预算 | ① 🚄 经济型 ¥3,000-4,500 ② 🌟 舒适型 ¥4,500-7,000 ③ 💎 豪华型 ¥7,000+ ④ 自定义 | 必填 |
| 出发城市 | ① 上海 ② 北京 ③ 广州 ④ 杭州 ⑤ 其他(手动输入) | 选填,默认杭州 |
| 出发日期 | ① 明天 ② 后天 ③ 本周六 ④ 下周 ⑤ 其他(手动输入) | 选填,默认明天 |
| 兴趣偏好 (可多选) | ① 🏛️ 人文历史 ② 🍜 美食 ③ 🌳 自然风光 ④ 🎢 亲子 ⑤ 🛍️ 购物 ⑥ 📸 网红打卡 ⑦ 🎭 休闲 | 选填,默认休闲+美食 |
| 节奏偏好 | ① 🚶 轻松(每天≤2景点)② 🏃 适中(每天2-3景点)③ 🏎️ 紧凑(每天3-4景点) | 选填,默认适中 |
| 住宿偏好 | ① 🏠 经济酒店(¥200-400/晚)② 🏨 舒适连锁(¥400-700/晚)③ 🏰 豪华(¥700+/晚) | 选填,默认舒适 |
| 必去景点 | ① 无特别要求 ② 有特定景点(手动输入) | 选填 |
| 排除景点 | ① 无 ② 有(手动输入) | 选填 |
AskUserQuestion 配置规律:
multiSelect: false — 单选场景(目的地、天数、人数、预算、节奏、住宿)multiSelect: true — 多选场景(兴趣偏好)header — 简短标签(如"目的地"、"天数"、"预算"),最多12字根据已确定的参数,灵活调整后续选项的默认值:
| 场景 | 调整规则 |
|---|---|
| 用户选了"经济型预算" | 住宿选项默认改为经济→提示"¥200-400/晚" |
| 用户选了"3天" | 节奏选项默认改为紧凑→"每天可去3-4景点" |
| 用户选了"亲子"偏好 | 景点推荐时自动排除不适合儿童的景点 |
| 用户选了"美食"偏好 | 预算中餐饮占比自动从20%提高到25% |
Step 1: 目的地 → AskUserQuestion(单选)
Step 2: 天数 → AskUserQuestion(单选)
Step 3: 人数 → AskUserQuestion(单选)
Step 4: 预算 → AskUserQuestion(单选)
Step 5: 出发城市+日期 → 可选,如果用户没说就默认
Step 6: 兴趣偏好 → AskUserQuestion(多选)
Step 7: 节奏+住宿 → AskUserQuestion(单选,可以合并一次问两个)
Step 8: 必去/排除景点 → 可选,快速确认
信息量控制:每次最多问 2-3 个参数(用一个 AskUserQuestion 或拆成两个),避免信息过载。
所有参数采集完成后,输出确认卡片:
📋 方案参数确认
### 目的地
**{destination}**
### 行程概览
| 项目 | 详情 |
|------|------|
| 🗓️ 天数 | **{days}天** |
| 👥 人数 | **{travelers}人**({adults}大{children}小)|
| 💰 预算 | **{budget}元**({budgetStatus})|
| 📅 出发日期 | **{departureDate}** |
| 🚀 出发地 | **{departureCity}**(或"待定")|
| 🏨 住宿偏好 | **{accommodation}** |
| 🏃 节奏 | **{paceDesc}** |
### 兴趣偏好
{preferences badges}
### 指定景点
✅ **必去:** {includeSpots 或 "无"}
❌ **避开:** {excludeSpots 或 "无"}
### 饮食禁忌
{diet 或 "无"}
---
> 以上参数是否准确?如需修改请告诉我,确认后开始为您规划行程 🚀
目标:通过四个数据通道获取真实可靠的旅游信息。
WebSearch / WebFetch 内置工具)在对话过程中,CLAUDE 使用宿主环境内置的联网搜索工具执行以下实时搜索:
1. WebSearch "{destination} 景点推荐 门票价格"
2. WebSearch "{destination} 必去景点 排名"
3. WebSearch "{destination} {preference} 景点"
4. WebSearch "{destination} 特色美食推荐"
5. WebSearch "{departureCity}到{destination} 高铁 票价"
6. WebSearch "{destination} 酒店推荐 价格"
7. WebSearch "{destination} {month} 天气"
搜索工具说明:
WebSearch / WebFetch 内置工具bl search web、SerpAPI 等,按实际环境配置)CLAUDE 解析搜索结果,提取景点名称、门票价格、评分、开放时间等结构化字段。
amap-api.js 脚本)# 搜索景点 POI(含坐标、地址、评分)
node scripts/amap-api.js search <city> [keyword]
# 查询天气
node scripts/amap-api.js weather [adcode]
# 路径规划(公交/驾车)
node scripts/amap-api.js route <from_lng,lat> <to_lng,lat> [city]
# 地理编码(地址→坐标)
node scripts/amap-api.js geocode <address> [city]
高德数据用途:
tuniu CLI)当用户配置了 TUNIU_API_KEY 后,获取实时价格数据:
# 查火车票
TUNIU_API_KEY=xxx npx tuniu call train searchLowestPriceTrain ...
# 查酒店
TUNIU_API_KEY=xxx npx tuniu call hotel tuniuHotelSearch ...
途牛数据用途:
flyai CLI)当用户配置了 FLYAI_API_KEY 后,获取飞猪平台实时比价数据:
# 酒店比价
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-hotel --dest-name "<城市>" --key-words "<关键词>" --max-price <最高价> --sort price_asc
# 火车票比价
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-train --origin "<出发城市>" --destination "<到达城市>" --dep-date "<YYYY-MM-DD>" --max-price <最高价>
# 机票比价
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-flight --origin "<出发城市>" --destination "<到达城市>" --dep-date "<YYYY-MM-DD>" --max-price <最高价>
# 景点查询
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-poi --city-name "<城市>" --keyword "<景点名>"
飞猪数据用途:
CLAUDE 合并四个通道的数据:
所有车次号、航班号、酒店名称、门票价格、出发/到达时间、耗时、评分等具体数据,必须来自API调用的返回值,严禁:
正确做法:
flyai search-train 查询真实车次数据tuniu call train searchLowestPriceTrain 查询价格验证方式: API返回的 itemList[].journeys[].segments[].marketingTransportNo 中的车次号才是真实存在的,必须从中提取。
每条景点记录必须包含以下字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| name | ✅ | 景点名称 |
| type | ✅ | 类型标签:自然/人文/购物/美食/亲子/网红打卡 |
| ticketPrice | ✅ | 门票价格(0=免费,未知=待核实) |
| rating | 评分(/5分) | |
| openingHours | 开放时间 | |
| estimatedDuration | 建议游玩时长 | |
| description | 简要介绍(1-2句话) | |
| highlight | 特色亮点 | |
| reservationRequired | 是否需要预约 | |
| address | 地址/区域 |
1. 从总预算估算门票预算(占总预算 10-15%)
例:总预算 5000 → 门票预算 500-750 元
2. 单景点门票上限 = 门票预算 / 计划游览景点数
例:计划去 5 个景点 → 单景点上限 100-150 元
3. 免费景点(ticketPrice=0)优先推荐,评分提升
4. 价格未知的景点标记为"价格待核实",请用户确认
评分公式:综合得分 = 评分×0.3 + 偏好匹配×0.35 + 预算适配×0.2 + 人气×0.15
推荐输出格式:
🥇 {景点名} — 评分{rating} ⭐ | 门票{ticketPrice}元
💡 推荐理由:{reason}
目标:将景点分配到每日行程,插入交通/餐饮/休息时段,生成注意事项。
08:00-09:00 🍳 早餐
09:00-12:00 🎯 上午行程(1-2个景点)
12:00-13:30 🍜 午餐
13:30-14:00 ☕ 午休
14:00-17:30 🎯 下午行程(1-2个景点)
17:30-18:30 🛌 回酒店休息
18:30-20:00 🍽️ 晚餐
20:00- 🌙 晚间活动/自由探索
🚇 {景点A} → {景点B}
方式:地铁/公交/打车
耗时:约30分钟
费用:约5元
⚠️ 第{n}天注意事项
🌤️ 天气:{天气概况}
👔 着装:{穿搭建议}
📱 预约:{需要预约的景点}
💡 小贴士:{实用建议}
目标:输出完整的旅行方案,方案中必须包含从API获取的真实价格数据(途牛或飞猪),并在方案中直接展示跨平台比价结果。HTML 行程页在最后一步生成。
在输出方案前,必须通过API获取以下实时数据(不能编造):
火车票查询(去程+返程):
# 飞猪查询(去程)
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-train --origin "<出发城市>" --destination "<到达城市>" --dep-date "<YYYY-MM-DD>" --sort-type 3 --max-price <预算上限>
# 飞猪查询(返程)
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-train --origin "<到达城市>" --destination "<出发城市>" --dep-date "<YYYY-MM-DD>" --sort-type 3 --max-price <预算上限>
# 途牛查询(如有TUNIU_API_KEY)
TUNIU_API_KEY=xxx npx tuniu call train searchLowestPriceTrain ...
酒店查询:
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-hotel --dest-name "<城市>" --key-words "<区域>" --max-price <预算上限> --sort rate_desc --check-in-date "<入住>" --check-out-date "<退房>"
景点/天气查询:
node scripts/amap-api.js weather <adcode>
node scripts/amap-api.js search <city> 景点
FLYAI_API_KEY=xxx npx @fly-ai/flyai-cli search-poi --city-name "<城市>" --keyword "<景点名>"
交通方案展示时,必须列出从API返回的真实车次信息:
### 🚄 去程推荐({日期})
| 车次 | 出发站→到达站 | 时间 | 耗时 | 票价 |
|------|-------------|------|------|------|
| 🚄 **{车次号}** | {出发站}{时间}→{到达站}{时间} | {耗时} | **¥{票价}** |
| 🚄 {车次号} | ... | ... | ¥{票价} |
> 💡 以上数据来自飞猪Fliggy API实时查询
严禁从API返回数据之外编造车次号。
方案中必须自动嵌入比价结果,无需询问用户:
## 💰 跨平台价格对比
### 去程交通比价(北京→杭州 7月2日)
| 项目 | 🐂 途牛 | 🐷 飞猪 | 差价 | 推荐 |
|------|---------|---------|------|------|
| 🚄 G875 北京南→杭州东 | ¥{tuniuPrice} | ¥583 | — | 飞猪有实时数据 |
| 🚄 G815 北京南→杭州东 | — | ¥598 | — | 飞猪有实时数据 |
### 住宿比价(西湖区 舒适型)
| 酒店 | 🐂 途牛 | 🐷 飞猪 | 差价 | 推荐 |
|------|---------|---------|------|------|
| 杭州云何舒适民宿(西湖店) | — | ¥263/晚 | — | 飞猪有实时数据 |
| 杭州目里舒适民宿(西溪湿地店) | — | ¥250/晚 | — | 飞猪有实时数据 |
> 💡 以上价格数据来源:飞猪Fliggy API + 途牛MCP API实时查询
> ⚠️ 车次号和价格均为API返回的真实数据,非编造
CLAUDE 直接在对话中输出以下 9 个模块:
输出后由用户审核,可通过 refine 子命令调整。
用户确认方案后,最后一步调用 HTML 生成器:
# 将完整行程方案保存为 JSON
# 然后执行:
node scripts/generate-trip-page.js --input ./temp/trip-plan-{timestamp}.json
要点:
--mock 模式仅用于开发测试⚠️ 注意:跨平台比价已自动嵌入阶段四方案输出中,无需用户手动触发。
前提条件:
TUNIU_API_KEY 已配置(否则提示用户先配置)HTML 生成后,使用 AskUserQuestion 提供三个选项:
{
"questions": [{
"header": "下一步",
"question": "请问您要:",
"multiSelect": false,
"options": [
{ "label": "✅ 确认方案,开始预订", "description": "进入选座和乘客信息流程,通过途牛下单" },
{ "label": "🔄 修改行程", "description": "告诉我哪里需要调整,调整后重新生成HTML" },
{ "label": "📱 仅保存,自己预订", "description": "保存HTML方案后自行在12306/飞猪预订" }
]
}]
}
用户选择"开始预订"后,分步采集信息,每次只问一个主题:
第一步:说明需要的信息(一次性告知)
好的,开始预订!我需要您提供以下信息(仅用于本次购票,通过途牛API加密发送至12306):
联系人信息(接收订单通知,必须是乘车人之一):
- 联系人姓名
- 联系人手机号
乘车人信息(每位乘车人均需提供):
- 真实姓名
- 身份证号
- 手机号
请先提供联系人姓名和手机号,然后逐一提供乘车人信息。
第二步:采集联系人信息
联系人姓名: 联系人手机号:
第三步:采集乘车人信息(逐一进行)
请提供第1位乘车人信息:
- 真实姓名
- 身份证号
- 手机号
(联系人必须是乘车人之一,如果联系人是乘车人,请在乘车人信息中一并提供)
如果多人乘车,重复第三步采集每个人。每位乘车人必须提供完整的姓名+身份证号+手机号。
收集完信息后,CLAUDE 按顺序执行3个AP调用:
Call 1:确认车次(searchLowestPriceTrain)
tuniu call train searchLowestPriceTrain -a '{
"departureCityName":"<出发城市>",
"arrivalCityName":"<到达城市>",
"departureDate":"<YYYY-MM-DD>",
"searchType":"5"
}'
→ 获取车次列表,确认余票情况
Call 2:获取座位详情(queryTrainDetail)
tuniu call train queryTrainDetail -a '{
"departureStationName":"<出发站>",
"arrivalStationName":"<到达站>",
"departureDate":"<YYYY-MM-DD>",
"trainNum":"<车次号>"
}'
→ 获取 seatInfo[].resId 和 seatInfo[].price
Call 3:提交订单(bookTrain)
tuniu call train bookTrain -a '{
"acceptStandingTicket": false,
"resources": [{
"resourceId": <resId>,
"adultPrice": <单价>,
"departsDate": "<YYYY-MM-DD>"
}],
"adultTourists": [{
"name": "<姓名>",
"psptId": "<身份证号>",
"psptType": 1,
"isStuDisabledArmyPolice": 0,
"tel": "<手机号>"
}],
"contact": {
"tel": "<联系人手机号>"
}
}'
→ 响应中包含 orderId 和 paymentUrl
bookTrain 参数来源对照表:
| 参数 | 值来源 |
|---|---|
resources[].resourceId | queryTrainDetail 返回的 seatInfo[].resId |
resources[].adultPrice | queryTrainDetail 返回的 seatInfo[].price |
resources[].departsDate | 出发日期 |
adultTourists[].name | 用户提供的乘车人姓名 |
adultTourists[].psptId | 用户提供的身份证号 |
adultTourists[].psptType | 固定 1(中国大陆身份证) |
adultTourists[].isStuDisabledArmyPolice | 固定 0 |
adultTourists[].tel | 用户提供的手机号 |
contact.tel | 用户提供的联系人手机号 |
⚠️ 严禁:不得编造/猜测
resourceId,必须从 API 返回值中提取!
下单成功后,从响应中提取 paymentUrl 和 orderId:
# 生成支付二维码图片
node scripts/qrcode.js "<paymentUrl>" ./output/qr-{orderId}-payment.png
向用户展示结果:
🎉 订单已创建成功!
📋 订单信息
| 项目 | 详情 |
|------|------|
| 📄 订单号 | **{orderId}** |
| 🚄 车次 | **{trainNum}** |
| 💰 金额 | **¥{totalPrice}** |
💳 支付方式:
已生成支付二维码 → output/qr-{orderId}-payment.png
请打开该图片,使用支付宝或微信扫码完成支付。
或者直接打开支付链接:{paymentUrl}
> ⚠️ 请在30分钟内完成支付,逾期订单将自动取消。
如果 paymentUrl 为空,则引导用户打开途牛APP/官网:
您的订单(orderId: {orderId})已创建。
请在途牛APP或官网中搜索订单号完成支付。
当用户有具体预订需求(交通票/酒店/门票)时,可以使用联网搜索进行比价:
💰 交通方式比价({出发地} → {目的地})
| 方式 | 耗时 | 费用 | 推荐指数 |
|------|------|------|----------|
| ✈️ 飞机 | {time} | ¥{price} | ⭐⭐⭐ |
| 🚄 高铁 | {time} | ¥{price} | ⭐⭐⭐⭐⭐ |
| 🚗 自驾 | {time} | ¥{price} | ⭐⭐⭐⭐ |
✅ 推荐:{推荐方案}
🏨 酒店推荐({区域})
| 酒店 | 价格/晚 | 评分 | 距景点 | 特色 |
|------|---------|------|--------|------|
| {酒店名} | ¥{价格} | ⭐{评分} | {距离} | {特色} |
不要让用户手动打字输入参数。
要用 AskUserQuestion 提供可点击选项按钮。
✅ 正确的做法:
用户: "帮我规划旅行"
你: 使用 AskUserQuestion 工具提供选项:
[北京 🏯] [成都 🐼] [西安 🏛️] [上海 🌃] [其他]
❌ 错误的做法:
用户: "帮我规划旅行"
你: "好的,请问您想去哪个城市?请打字告诉我"
| 阶段 | 目标 | 交互方式 | 示例 |
|---|---|---|---|
| 初次响应 | 确认需求+共情 | 先共鸣+再问第一个问题 | "好的!我来帮您规划。请问您想去哪里?" |
| 信息收集 | 获取必要参数 | AskUserQuestion(每次1-3个参数) | 用选项按钮依次询问 |
| 方案展示 | 提供选项 | 结构化Markdown | "以下是为您推荐的景点和行程方案..." |
| 确认输出 | 最终确认 | 确认卡片+最后生成HTML | "方案已生成!"→ 生成 HTML |
| 参数 | multiSelect | header 取值 | 选项数 |
|---|---|---|---|
| 目的地 | false | 目的地 | 4-6个热门+其他 |
| 天数 | false | 天数 | 3-5个 |
| 人数 | false | 人数 | 4-5个 |
| 预算 | false | 预算 | 3档+自定义 |
| 出发城市 | false | 出发地 | 4-5个热门+其他 |
| 偏好 | true | 偏好 | 5-7个标签 |
| 节奏 | false | 节奏 | 3个 |
| 住宿 | false | 住宿 | 3档 |
skills/travel-planner-hy/
├── SKILL.md # 本文件 — 主技能定义
├── package.json # Node.js 依赖
├── .env / .env.example # 高德 API Key 配置
├── scripts/
│ ├── amap-api.js # 高德 Web API 封装(POI/路线/天气/地理编码)
│ ├── generate-trip-page.js # HTML 行程页生成器(纯渲染,--input 接收 JSON)
│ ├── mock-data.js # (废弃) 旧 Mock 数据模块,仅 --mock 引用
│ └── qrcode.js # 二维码生成脚本
├── references/
│ ├── parameters.md # 参数字段定义 + NL解析规则
│ ├── validation.md # 合法性校验规则
│ ├── attraction-model.md # 景点数据模型
│ ├── search-rules.md # 检索与筛选规则(含API搜索策略)
│ ├── itinerary-rules.md # 行程编排规则
│ └── output-templates.md # 输出模板
├── examples/
│ └── mock-data.json # Mock 数据样例
├── temp/ # 临时数据目录(自动创建)
└── output/ # 生成的 HTML 页面(自动创建)
cd skills/travel-planner-hy
npm install
node scripts/generate-trip-page.js --mock
| 阶段 | 参考文件 | 读取时机 |
|---|---|---|
| 部署 | references/dependencies.md | 移植到其他环境时优先阅读 |
| 1 | references/parameters.md | 需求采集时 |
| 1 | references/validation.md | 参数校验时 |
| 2 | references/attraction-model.md | 景点检索时 |
| 2 | references/search-rules.md | 筛选排序时 |
| 3 | references/itinerary-rules.md | 行程编排时 |
| 4 | references/output-templates.md | 方案输出时 |
| 工具 | 用途 |
|---|---|
WebSearch / WebFetch(内置工具) | 联网搜索 — 景点介绍、美食推荐、门票价格、酒店比价、交通信息 |
tuniu CLI (途牛 MCP) | 实时价格+预订 — 火车票、酒店、机票、门票价格查询与下单 |
flyai CLI (飞猪 Fliggy) | 实时比价 — 酒店/火车票/机票/景点查询(跨平台比价) |
node scripts/amap-api.js | 精确地理数据 — 高德 POI搜索、路线规划、天气预报、地理编码 |
node scripts/generate-trip-page.js | 最终输出 — 生成 HTML 行程页(仅为渲染,不生成数据) |
node scripts/qrcode.js | 支付二维码 — 下单成功后生成二维码图片 |
环境适配:跨环境部署前请阅读
references/dependencies.md了解所有依赖和替代方案。
用于景点坐标、路线规划、天气预报、地理编码。
# 在 .env 中配置
AMAP_API_KEY=你的Key
# 验证配置
node scripts/amap-api.js geocode 天安门 北京
用于实时价格查询和在线预订火车票、酒店。不配置时降级为参考价格。
# 在 .env 中配置
TUNIU_API_KEY=你的Key
# 验证配置
TUNIU_API_KEY=你的Key npx tuniu list
用于实时比价(酒店、火车票、机票)。配置飞猪后,可在方案输出后或预订前进行跨平台比价,选择更优平台。不配置时降级为仅显示途牛价格。
# 在 .env 中配置
FLYAI_API_KEY=你的Key
# 验证配置
FLYAI_API_KEY=你的Key npx @fly-ai/flyai-cli search-hotel --dest-name "杭州" --max-price 500
本 skill 使用宿主环境内置的 WebSearch/WebFetch 工具进行联网搜索(获取景点介绍、美食推荐等)。
如果宿主环境没有搜索工具,参考 references/dependencies.md 了解替代方案。
本技能以 MIT 许可证开源,使用者应自行评估适用环境的安全性要求。